UNPKG

@ords/modules

Version:

Modules for ords-core microservices based upon proposals

278 lines (277 loc) 9.47 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const core_1 = require("@ords/core"); const jwt = require("jsonwebtoken"); const rxjs_1 = require("rxjs"); class AuthToken { /** * Uses the microservice instance to get a hold of a database connection * Uses encode to for encryption of jwt */ constructor(msr, encode) { /** * Reference to the resource used in the system */ this.resource = '_auth_token_accounts'; /** * The root of for microservices */ this.root = 'auth'; // bind reference this.msr = msr; // bind encoded this.encode = encode; // add services this.msr.addMicroService(this.root, 'signup', this.signUp.bind(this)); this.msr.addMicroService(this.root, 'signin', this.signIn.bind(this)); this.msr.addMicroService(this.root, 'signout', this.signOut.bind(this)); this.msr.addMicroService(this.root, 'patch', this.patch.bind(this)); this.msr.addMicroService(this.root, 'remove', this.remove.bind(this)); this.msr.addMicroService(this.root, 'validate', this.validate.bind(this)); } /** * Sign up a user */ signUp(request, mH, pH) { // set meta complete mH.next([core_1.proposals.main.flag.FLAGSEND, core_1.proposals.main.flag.dataType.RAW]); mH.complete(); /** * The package to be used in operation */ let opPackage = { resource: this.resource, data: {}, query: {} }; /** * Package recived in request */ let recived = { existing: {}, meta: {} }; // get objects from request request.package.subscribe((args) => { // save the arguments if (recived[args[0]] !== undefined) { recived[args[0]] = args[1]; } // send back errors and perform action }, pH.error, () => { // check that any meta is recived if (Object.keys(recived.meta).length === 0) { // No content provided about the user pH.error(new Error('NO information about the user was provided')); } else { // map the recived to package opPackage.data = recived.meta; opPackage.query = recived.existing; // requret request let innerRequest = { auth: request.auth, package: rxjs_1.Observable.pairs(opPackage) }; // perform signup with information core_1.ShortenAct.tryCatch(this.msr, 'db', 'create', innerRequest, (err, user) => { // check if any error if (err) { return pH.error(err); } else if (user == 0) { return pH.error(core_1.proposals.auth.flag.error.USER_EXISTS); } else { pH.next([0, user]); pH.complete(); } }); } }); } /** * Patch the user with new information */ patch(request, mH, pH) { // set meta complete mH.next([core_1.proposals.main.flag.FLAGSEND, core_1.proposals.main.flag.dataType.RAW]); mH.complete(); /** * The packete to be used in operation */ let opPackage = { resource: this.resource, data: {}, query: {} }; /** * Package recived in request */ let recived = { user: null, meta: {} }; // get objects from request request.package.subscribe((args) => { // save the arguments if (recived[args[0]] !== undefined) { recived[args[0]] = recived[1]; } // send back errors and perform action }, pH.error, () => { // check that user has been set if (recived.user === null) { // No content provided about the user pH.error(new Error('NO information about the user was provided')); } else { // map the recived to package opPackage.data = recived.meta; opPackage.query = { id: recived.user }; // requret request let innerRequest = { auth: request.auth, package: rxjs_1.Observable.pairs(opPackage) }; core_1.ShortenAct.tryCatch(this.msr, 'db', 'patch', innerRequest, (err, user) => { // check if any error if (err) { return pH.error(err); } else if (user == 0) { return pH.error(core_1.proposals.auth.flag.error.USER_EXISTS); } else { pH.next([0, user]); pH.complete(); } }); } }); } /** * Validate a user session */ validate(request, mH, pH) { // set meta complete mH.next([core_1.proposals.main.flag.FLAGSEND, core_1.proposals.main.flag.dataType.RAW]); mH.complete(); /** * The packete to be used in operation */ let token; // get objects from request request.package.subscribe((args) => { // save the arguments token = args[1]; // send back errors and perform action }, pH.error, () => { // verify token jwt.verify(token, this.encode, (err, decoded) => { // if error then send it back that auth information was invalid if (err) { pH.error(new Error(core_1.proposals.auth.flag.error.NO_VALID_AUTH)); } else { pH.next([0, decoded]); pH.complete(); } }); }); } /** * Sign up a user */ signIn(request, mH, pH) { // set meta complete mH.next([core_1.proposals.main.flag.FLAGSEND, core_1.proposals.main.flag.dataType.RAW]); mH.complete(); /** * The packete to be used in operation */ let opPackage = { resource: this.resource, query: {} }; // get objects from request request.package.subscribe((args) => { // save the arguments opPackage.query[args[0]] = args[1]; // send back errors and perform action }, pH.error, () => { // set limit to only one opPackage.limit = 1; // requret request let innerRequest = { auth: request.auth, package: rxjs_1.Observable.pairs(opPackage) }; core_1.ShortenAct.tryCatch(this.msr, 'db', 'read', innerRequest, (err, user) => { // check if any error if (err) { return pH.error(err); } else if (user[0] === undefined) { return pH.error(core_1.proposals.auth.flag.error.NO_USER_FOUND); } else { pH.next([0, jwt.sign(user[0].id, this.encode)]); pH.complete(); } }); }); } /** * Sign out a user account */ signOut(request, mH, pH) { // send operation flag back mH.next([core_1.proposals.main.flag.FLAGSEND, core_1.proposals.main.flag.dataType.RAW]); mH.complete(); // using JWT so signout not really needed pH.next([0, true]); pH.complete(); } /** * Sign up a user */ remove(request, mH, pH) { // set meta complete mH.next([core_1.proposals.main.flag.FLAGSEND, core_1.proposals.main.flag.dataType.RAW]); mH.complete(); /** * The packete to be used in operation */ let opPackage = { resource: this.resource, query: { id: null } }; // get objects from request request.package.subscribe((args) => { // save the argument opPackage.query.id = args[1]; // send back errors and perform action }, pH.error, () => { // requret request let innerRequest = { auth: request.auth, package: rxjs_1.Observable.pairs(opPackage) }; core_1.ShortenAct.tryCatch(this.msr, 'db', 'delete', innerRequest, (err, user) => { // check if any error if (err) { return pH.error(err); } else if (user == false) { return pH.error(core_1.proposals.auth.flag.error.NO_USER_FOUND); } else { pH.next([0, user]); pH.complete(); } }); }); } } exports.AuthToken = AuthToken;