@ords/modules
Version:
Modules for ords-core microservices based upon proposals
278 lines (277 loc) • 9.47 kB
JavaScript
"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;