UNPKG

@jeaks03/overseer

Version:

Just another TypeScript Back-End framework

80 lines 6.18 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; result["default"] = mod; return result; }; Object.defineProperty(exports, "__esModule", { value: true }); const standard_responses_1 = require("../../misc/standard-responses"); const jwt = __importStar(require("jsonwebtoken")); const authentication_1 = require("./authentication"); const pathway_1 = require("../../decorators/pathway"); const abstracts_1 = require("../../routes/abstracts"); const http_error_1 = require("../../errors/http-error"); const basic_authentication_1 = require("./basic-authentication"); class JWTAuthentication extends authentication_1.Authentication { /** * @param expiresIn time in milliseconds or a string like '5h', '15m', etc. until the token expires */ constructor(expiresIn, userProvider, passwordEncoder, secret) { super(userProvider, passwordEncoder); this.expiresIn = expiresIn; this.secret = secret; this.expiresIn = expiresIn; } createAccessToken(info) { return (async () => { const basicAuth = new basic_authentication_1.BasicAuthentication(this.userProvider, this.passwordEncoder); const foundUser = await basicAuth.authenticate(info); if (!foundUser) { throw new http_error_1.HttpError(standard_responses_1.UNAUTHORIZED); } return this.generateToken(foundUser); })(); } generateToken(user) { const purifiedUser = Object.assign({}, user); delete purifiedUser.password; const token = jwt.sign({ user: purifiedUser }, this.secret, { expiresIn: this.expiresIn }); const out = jwt.decode(token); return Object.assign({ token }, out); } async authenticate(info) { const authHeader = info.raw.request.headers.authorization; if (!authHeader || !authHeader.includes('Bearer ') || authHeader.length < 10) { return null; } const token = authHeader.split('Bearer ')[1]; const { user } = jwt.decode(token); const foundUser = await this.userProvider(user.username); if (!foundUser) { return null; } try { jwt.verify(token, this.secret); return foundUser; } catch (_a) { return null; } } } __decorate([ pathway_1.Pathway({ path: '/access-token' }), __metadata("design:type", Function), __metadata("design:paramtypes", [abstracts_1.PathInfo]), __metadata("design:returntype", void 0) ], JWTAuthentication.prototype, "createAccessToken", null); exports.JWTAuthentication = JWTAuthentication; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiand0LWF1dGhlbnRpY2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlY3VyaXR5L2F1dGhlbnRpY2F0aW9ucy9qd3QtYXV0aGVudGljYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0Esc0VBQTBFO0FBQzFFLGtEQUFvQztBQUNwQyxxREFBbUU7QUFDbkUsc0RBQW1EO0FBQ25ELHNEQUFrRDtBQUNsRCx3REFBb0Q7QUFFcEQsaUVBQTZEO0FBRTdELE1BQWEsaUJBQWtCLFNBQVEsK0JBQWM7SUFDakQ7O09BRUc7SUFDSCxZQUFvQixTQUEwQixFQUN0QyxZQUEwQixFQUMxQixlQUFnQyxFQUN4QixNQUFjO1FBRzFCLEtBQUssQ0FBQyxZQUFZLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFOckIsY0FBUyxHQUFULFNBQVMsQ0FBaUI7UUFHOUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUkxQixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztJQUMvQixDQUFDO0lBR00saUJBQWlCLENBQUMsSUFBYztRQUNuQyxPQUFPLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDZixNQUFNLFNBQVMsR0FBRyxJQUFJLDBDQUFtQixDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFBO1lBQ2xGLE1BQU0sU0FBUyxHQUFHLE1BQU0sU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUVyRCxJQUFHLENBQUMsU0FBUyxFQUFFO2dCQUNYLE1BQU0sSUFBSSxzQkFBUyxDQUFDLGlDQUFZLENBQUMsQ0FBQzthQUNyQztZQUVELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ1QsQ0FBQztJQUVNLGFBQWEsQ0FBd0IsSUFBTztRQUMvQyxNQUFNLFlBQVkscUJBQVEsSUFBSSxDQUFFLENBQUM7UUFDakMsT0FBTyxZQUFZLENBQUMsUUFBUSxDQUFDO1FBRTdCLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUMzRixNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBZ0IsQ0FBQztRQUU3Qyx1QkFDSSxLQUFLLElBQ0YsR0FBRyxFQUNSO0lBQ04sQ0FBQztJQUVNLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBYztRQUNwQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO1FBQzFELElBQUcsQ0FBQyxVQUFVLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsRUFBRSxFQUFFO1lBQ3pFLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBMEIsQ0FBQztRQUM1RCxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXpELElBQUcsQ0FBQyxTQUFTLEVBQUU7WUFDWCxPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsSUFBSTtZQUNBLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUM5QixPQUFPLFNBQVMsQ0FBQztTQUNwQjtRQUFDLFdBQU07WUFDSixPQUFPLElBQUksQ0FBQztTQUNmO0lBQ0wsQ0FBQztDQUVKO0FBaERHO0lBREMsaUJBQU8sQ0FBQyxFQUFDLElBQUksRUFBRSxlQUFlLEVBQUMsQ0FBQzs7cUNBQ0Ysb0JBQVE7OzBEQVd0QztBQTFCTCw4Q0ErREMifQ==