@jeaks03/overseer
Version:
Just another TypeScript Back-End framework
80 lines • 6.18 kB
JavaScript
;
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==