Android project added
- Android can now send messages over RabbitMQ to the backend.
This commit is contained in:
4
backend/.gitignore
vendored
4
backend/.gitignore
vendored
@@ -1 +1,3 @@
|
||||
.env
|
||||
.env
|
||||
combined.log
|
||||
error.log
|
||||
@@ -1,27 +1,29 @@
|
||||
import bodyParser = require('body-parser');
|
||||
import { bold } from 'chalk';
|
||||
import { config as dconfig } from 'dotenv';
|
||||
import * as express from 'express';
|
||||
import * as figlet from 'figlet';
|
||||
import * as mongoose from 'mongoose';
|
||||
import { exit } from 'process';
|
||||
import { hash } from 'argon2';
|
||||
import { config as dconfig } from 'dotenv';
|
||||
import * as winston from 'winston';
|
||||
import * as express from 'express';
|
||||
import { RabbitMQ } from './lib/rabbit';
|
||||
|
||||
import { User } from './models/user/user.model';
|
||||
import { UserType } from './models/user/user.interface';
|
||||
import bodyParser = require('body-parser');
|
||||
import { config } from './config';
|
||||
import { DeleteUser, GetUser, LoginUser, MW_User, PatchUser } from './endpoints/user';
|
||||
import { hashPassword, randomPepper, randomString } from './lib/crypto';
|
||||
import { config } from './config';
|
||||
import { UserType } from './models/user/user.interface';
|
||||
import { User } from './models/user/user.model';
|
||||
|
||||
// Load .env
|
||||
dconfig({ debug: true, encoding: 'UTF-8' });
|
||||
|
||||
export const MONGO_URI = process.env.MONGO_URI || "";
|
||||
export const JWT_SECRET = process.env.JWT_SECRET;
|
||||
export const IS_DEBUG = process.env.DEBUG == 'true'
|
||||
export const RABBITMQ_URI = process.env.RABBITMQ_URI || "";
|
||||
export const JWT_SECRET = process.env.JWT_SECRET || "";
|
||||
export const IS_DEBUG = process.env.DEBUG == 'true';
|
||||
|
||||
export let logger: winston.Logger;
|
||||
export let rabbitmq: RabbitMQ;
|
||||
|
||||
async function run() {
|
||||
const { combine, timestamp, label, printf, prettyPrint } = winston.format;
|
||||
@@ -74,11 +76,16 @@ async function run() {
|
||||
logger.info("Debug mode is enabled. Do not use this in production!")
|
||||
}
|
||||
|
||||
if (JWT_SECRET == undefined) {
|
||||
if (JWT_SECRET == "") {
|
||||
logger.crit("No JWT secret was provided. Make sure you add JWT_SECRET=YOUR_SECRET to your .env file.");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (RABBITMQ_URI == "") {
|
||||
logger.crit("No RabbitMQ URI was provided. Make sure you add RABBITMQ_URI=YOUR_URL to your .env file.");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Database connection
|
||||
*/
|
||||
@@ -108,6 +115,13 @@ async function run() {
|
||||
logger.debug("At least one admin user already exists, skip.");
|
||||
}
|
||||
|
||||
/**
|
||||
* Message broker
|
||||
*/
|
||||
rabbitmq = new RabbitMQ();
|
||||
await rabbitmq.init();
|
||||
logger.info("Connected with message broker.");
|
||||
|
||||
/**
|
||||
* HTTP server
|
||||
*/
|
||||
|
||||
21
backend/lib/rabbit.ts
Normal file
21
backend/lib/rabbit.ts
Normal file
@@ -0,0 +1,21 @@
|
||||
import * as amqp from 'amqplib';
|
||||
import { logger, RABBITMQ_URI } from '../app';
|
||||
|
||||
export class RabbitMQ {
|
||||
connection: amqp.Connection | null = null;
|
||||
channel: amqp.Channel | null = null;
|
||||
|
||||
async init() {
|
||||
this.connection = await amqp.connect(RABBITMQ_URI);
|
||||
this.channel = await this.connection.createChannel();
|
||||
|
||||
this.channel.consume('Tracker', (msg) => {
|
||||
logger.debug("Received from broker: " + msg?.content.toString());
|
||||
}, { noAck: false });
|
||||
}
|
||||
|
||||
async publish(queueName = 'Tracker', data: any) {
|
||||
if (this.connection == undefined) await this.init()
|
||||
this.channel?.sendToQueue(queueName, Buffer.from(data));
|
||||
}
|
||||
}
|
||||
91
backend/package-lock.json
generated
91
backend/package-lock.json
generated
@@ -34,6 +34,16 @@
|
||||
"defer-to-connect": "^1.0.1"
|
||||
}
|
||||
},
|
||||
"@types/amqplib": {
|
||||
"version": "0.5.14",
|
||||
"resolved": "https://registry.npmjs.org/@types/amqplib/-/amqplib-0.5.14.tgz",
|
||||
"integrity": "sha512-KYJjEZhUlDHIgYhm0f+ymt3FLXG22Bjl1DIjO1WkSAYJGLBbK5t2C3TQnEGD1T+hfapR93LTDfAmQMXO5qQM3g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/bluebird": "*",
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"@types/argon2": {
|
||||
"version": "0.15.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/argon2/-/argon2-0.15.0.tgz",
|
||||
@@ -43,6 +53,12 @@
|
||||
"argon2": "*"
|
||||
}
|
||||
},
|
||||
"@types/bluebird": {
|
||||
"version": "3.5.32",
|
||||
"resolved": "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.32.tgz",
|
||||
"integrity": "sha512-dIOxFfI0C+jz89g6lQ+TqhGgPQ0MxSnh/E4xuC0blhFtyW269+mPG5QeLgbdwst/LvdP8o1y0o/Gz5EHXLec/g==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/body-parser": {
|
||||
"version": "1.19.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz",
|
||||
@@ -213,6 +229,47 @@
|
||||
"negotiator": "0.6.2"
|
||||
}
|
||||
},
|
||||
"amqplib": {
|
||||
"version": "0.6.0",
|
||||
"resolved": "https://registry.npmjs.org/amqplib/-/amqplib-0.6.0.tgz",
|
||||
"integrity": "sha512-zXCh4jQ77TBZe1YtvZ1n7sUxnTjnNagpy8MVi2yc1ive239pS3iLwm4e4d5o4XZGx1BdTKQ/U0ZmaDU3c8MxYQ==",
|
||||
"requires": {
|
||||
"bitsyntax": "~0.1.0",
|
||||
"bluebird": "^3.5.2",
|
||||
"buffer-more-ints": "~1.0.0",
|
||||
"readable-stream": "1.x >=1.1.9",
|
||||
"safe-buffer": "~5.1.2",
|
||||
"url-parse": "~1.4.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"bluebird": {
|
||||
"version": "3.7.2",
|
||||
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
|
||||
"integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="
|
||||
},
|
||||
"isarray": {
|
||||
"version": "0.0.1",
|
||||
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
|
||||
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
|
||||
},
|
||||
"readable-stream": {
|
||||
"version": "1.1.14",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
|
||||
"integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
|
||||
"requires": {
|
||||
"core-util-is": "~1.0.0",
|
||||
"inherits": "~2.0.1",
|
||||
"isarray": "0.0.1",
|
||||
"string_decoder": "~0.10.x"
|
||||
}
|
||||
},
|
||||
"string_decoder": {
|
||||
"version": "0.10.31",
|
||||
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
|
||||
"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
|
||||
}
|
||||
}
|
||||
},
|
||||
"ansi-align": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz",
|
||||
@@ -330,6 +387,16 @@
|
||||
"integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==",
|
||||
"dev": true
|
||||
},
|
||||
"bitsyntax": {
|
||||
"version": "0.1.0",
|
||||
"resolved": "https://registry.npmjs.org/bitsyntax/-/bitsyntax-0.1.0.tgz",
|
||||
"integrity": "sha512-ikAdCnrloKmFOugAfxWws89/fPc+nw0OOG1IzIE72uSOg/A3cYptKCjSUhDTuj7fhsJtzkzlv7l3b8PzRHLN0Q==",
|
||||
"requires": {
|
||||
"buffer-more-ints": "~1.0.0",
|
||||
"debug": "~2.6.9",
|
||||
"safe-buffer": "~5.1.2"
|
||||
}
|
||||
},
|
||||
"bl": {
|
||||
"version": "2.2.1",
|
||||
"resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz",
|
||||
@@ -460,6 +527,11 @@
|
||||
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
|
||||
"integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
|
||||
},
|
||||
"buffer-more-ints": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/buffer-more-ints/-/buffer-more-ints-1.0.0.tgz",
|
||||
"integrity": "sha512-EMetuGFz5SLsT0QTnXzINh4Ksr+oo4i+UGTXEshiGCQWnsgSs7ZhJ8fzlwQ+OzEMs0MpDAMr1hxnblp5a4vcHg=="
|
||||
},
|
||||
"bytes": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
|
||||
@@ -2094,6 +2166,11 @@
|
||||
"resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
|
||||
"integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
|
||||
},
|
||||
"querystringify": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
|
||||
"integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ=="
|
||||
},
|
||||
"range-parser": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
|
||||
@@ -2199,6 +2276,11 @@
|
||||
"semver": "^5.1.0"
|
||||
}
|
||||
},
|
||||
"requires-port": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
|
||||
"integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8="
|
||||
},
|
||||
"resolve": {
|
||||
"version": "1.17.0",
|
||||
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
|
||||
@@ -2645,6 +2727,15 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"url-parse": {
|
||||
"version": "1.4.7",
|
||||
"resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz",
|
||||
"integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==",
|
||||
"requires": {
|
||||
"querystringify": "^2.1.1",
|
||||
"requires-port": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"url-parse-lax": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
"author": "Mondei1",
|
||||
"license": "GPL-3.0-or-later",
|
||||
"dependencies": {
|
||||
"amqplib": "^0.6.0",
|
||||
"argon2": "^0.27.0",
|
||||
"body-parser": "^1.19.0",
|
||||
"chalk": "^4.1.0",
|
||||
@@ -41,6 +42,7 @@
|
||||
"@types/winston": "2.4.4",
|
||||
"concurrently": "^5.3.0",
|
||||
"nodemon": "^2.0.5",
|
||||
"@types/jsonwebtoken": "8.5.0"
|
||||
"@types/jsonwebtoken": "8.5.0",
|
||||
"@types/amqplib": "0.5.14"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user