UNPKG

cnpmcore

Version:
93 lines 7.69 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 __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.TokenService = void 0; const dayjs_1 = __importDefault(require("dayjs")); const tegg_1 = require("@eggjs/tegg"); const lodash_1 = require("lodash"); const AbstractService_1 = require("../../common/AbstractService"); const Token_1 = require("../entity/Token"); const ModelConvertor_1 = require("../../../app/repository/util/ModelConvertor"); const Package_1 = require("../entity/Package"); const egg_errors_1 = require("egg-errors"); const PackageUtil_1 = require("../../../app/common/PackageUtil"); const UserUtil_1 = require("../../../app/common/UserUtil"); const UserRepository_1 = require("../../../app/repository/UserRepository"); let TokenService = class TokenService extends AbstractService_1.AbstractService { async listTokenPackages(token) { if ((0, Token_1.isGranularToken)(token)) { const models = await this.TokenPackage.find({ tokenId: token.tokenId }); const packages = await this.Package.find({ packageId: models.map(m => m.packageId) }); return packages.map(pkg => ModelConvertor_1.ModelConvertor.convertModelToEntity(pkg, Package_1.Package)); } return null; } async checkTokenStatus(token) { // check for expires if ((0, Token_1.isGranularToken)(token) && (0, dayjs_1.default)(token.expiredAt).isBefore(new Date())) { throw new egg_errors_1.UnauthorizedError('Token expired'); } token.lastUsedAt = new Date(); this.userRepository.saveToken(token); } async checkGranularTokenAccess(token, fullname) { // check for scope whitelist const [scope, name] = (0, PackageUtil_1.getScopeAndName)(fullname); // check for packages whitelist const allowedPackages = await this.listTokenPackages(token); // check for scope & packages access if ((0, lodash_1.isEmpty)(allowedPackages) && (0, lodash_1.isEmpty)(token.allowedScopes)) { return true; } const existPkgConfig = allowedPackages?.find(pkg => pkg.scope === scope && pkg.name === name); if (existPkgConfig) { return true; } const existScopeConfig = token.allowedScopes?.find(s => s === scope); if (existScopeConfig) { return true; } throw new egg_errors_1.ForbiddenError(`can't access package "${fullname}"`); } async getUserAndToken(authorization) { if (!authorization) return null; const matchs = /^Bearer ([\w\.]+?)$/.exec(authorization); if (!matchs) return null; const tokenValue = matchs[1]; const tokenKey = (0, UserUtil_1.sha512)(tokenValue); const authorizedUserAndToken = await this.userRepository.findUserAndTokenByTokenKey(tokenKey); return authorizedUserAndToken; } }; exports.TokenService = TokenService; __decorate([ (0, tegg_1.Inject)(), __metadata("design:type", Object) ], TokenService.prototype, "TokenPackage", void 0); __decorate([ (0, tegg_1.Inject)(), __metadata("design:type", Object) ], TokenService.prototype, "Package", void 0); __decorate([ (0, tegg_1.Inject)(), __metadata("design:type", UserRepository_1.UserRepository) ], TokenService.prototype, "userRepository", void 0); exports.TokenService = TokenService = __decorate([ (0, tegg_1.SingletonProto)({ accessLevel: tegg_1.AccessLevel.PUBLIC, }) ], TokenService); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVG9rZW5TZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vYXBwL2NvcmUvc2VydmljZS9Ub2tlblNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsa0RBQTBCO0FBQzFCLHNDQUlxQjtBQUNyQixtQ0FBaUM7QUFDakMsa0VBQStEO0FBQy9ELDJDQUF5RDtBQUd6RCxnRkFBNkU7QUFDN0UsK0NBQTZEO0FBQzdELDJDQUErRDtBQUMvRCxpRUFBa0U7QUFDbEUsMkRBQXNEO0FBQ3RELDJFQUF3RTtBQUtqRSxJQUFNLFlBQVksR0FBbEIsTUFBTSxZQUFhLFNBQVEsaUNBQWU7SUFReEMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQVk7UUFDekMsSUFBSSxJQUFBLHVCQUFlLEVBQUMsS0FBSyxDQUFDLEVBQUU7WUFDMUIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUN4RSxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3RGLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLCtCQUFjLENBQUMsb0JBQW9CLENBQUMsR0FBRyxFQUFFLGlCQUFhLENBQUMsQ0FBQyxDQUFDO1NBQ3JGO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU0sS0FBSyxDQUFDLGdCQUFnQixDQUFDLEtBQVk7UUFDeEMsb0JBQW9CO1FBQ3BCLElBQUksSUFBQSx1QkFBZSxFQUFDLEtBQUssQ0FBQyxJQUFJLElBQUEsZUFBSyxFQUFD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