Android project added

- Android can now send messages over RabbitMQ to the backend.
This commit is contained in:
2020-10-19 22:19:28 +02:00
parent 48140f557b
commit f722ee9595
56 changed files with 1522 additions and 12 deletions

4
backend/.gitignore vendored
View File

@@ -1 +1,3 @@
.env
.env
combined.log
error.log

View File

@@ -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
View 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));
}
}

View File

@@ -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",

View File

@@ -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"
}
}