UNPKG

@grouparoo/core

Version:
198 lines (197 loc) 8.06 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); 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 __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ApiKey = void 0; const sequelize_typescript_1 = require("sequelize-typescript"); const UUID = __importStar(require("uuid")); const Permission_1 = require("./Permission"); const lockableHelper_1 = require("../modules/lockableHelper"); const apiData_1 = require("../modules/apiData"); const commonModel_1 = require("../classes/commonModel"); let ApiKey = class ApiKey extends commonModel_1.CommonModel { idPrefix() { return "key"; } static async buildApiKey(instance) { if (!instance.apiKey) { instance.apiKey = UUID.v4() .replace(/-/g, "") .replace(/_/g, "") .toLowerCase(); } } async apiData() { const permissions = await this.$get("permissions", { order: [["topic", "asc"]], }); const permissionsApiData = await Promise.all(permissions.map((prm) => prm.apiData())); return { id: this.id, name: this.name, apiKey: this.apiKey, locked: this.locked, permissionAllRead: this.permissionAllRead, permissionAllWrite: this.permissionAllWrite, permissions: permissionsApiData, createdAt: apiData_1.APIData.formatDate(this.createdAt), updatedAt: apiData_1.APIData.formatDate(this.updatedAt), }; } async authorizeAction(topic, mode) { return Permission_1.Permission.authorizeAction(topic, mode, this); } async setPermissions(userPermissions) { const permissions = await this.$get("permissions"); for (const userPermission of userPermissions) { const permission = permissions.find((p) => p.topic === userPermission.topic); if (!permission) { throw new Error(`Cannot find permission for topic ${userPermission.topic}`); } permission.read = this.permissionAllRead !== null ? this.permissionAllRead : userPermission.read; permission.write = this.permissionAllWrite !== null ? this.permissionAllWrite : userPermission.write; await lockableHelper_1.LockableHelper.beforeSave(permission); await permission.save(); } } // --- Class Methods --- // static async noUpdateIfLocked(instance) { await lockableHelper_1.LockableHelper.beforeSave(instance); } static async buildPermissions(instance) { for (const i in Permission_1.PermissionTopics) { const topic = Permission_1.PermissionTopics[i]; let permission = await Permission_1.Permission.findOne({ where: { topic, ownerId: instance.id, ownerType: "apiKey", }, }); if (!permission) { permission = await Permission_1.Permission.create({ topic, ownerId: instance.id, ownerType: "apiKey", }); } if (instance.permissionAllRead !== null) { await permission.update({ read: instance.permissionAllRead }); } if (instance.permissionAllWrite !== null) { await permission.update({ write: instance.permissionAllWrite }); } if (instance.locked && !permission.locked) { await permission.update({ locked: instance.locked }); } } } static async noDestroyIfLocked(instance) { await lockableHelper_1.LockableHelper.beforeDestroy(instance); } static async deletePermissions(instance, {}) { return Permission_1.Permission.destroy({ where: { ownerId: instance.id }, }); } }; __decorate([ (0, sequelize_typescript_1.AllowNull)(false), (0, sequelize_typescript_1.Length)({ min: 3, max: 191 }), sequelize_typescript_1.Column, __metadata("design:type", String) ], ApiKey.prototype, "name", void 0); __decorate([ (0, sequelize_typescript_1.AllowNull)(false), sequelize_typescript_1.Column, __metadata("design:type", String) ], ApiKey.prototype, "apiKey", void 0); __decorate([ sequelize_typescript_1.Column, __metadata("design:type", String) ], ApiKey.prototype, "locked", void 0); __decorate([ sequelize_typescript_1.Column, __metadata("design:type", Boolean) ], ApiKey.prototype, "permissionAllRead", void 0); __decorate([ sequelize_typescript_1.Column, __metadata("design:type", Boolean) ], ApiKey.prototype, "permissionAllWrite", void 0); __decorate([ (0, sequelize_typescript_1.HasMany)(() => Permission_1.Permission, { foreignKey: "ownerId", scope: { ownerType: "apiKey" }, }), __metadata("design:type", Array) ], ApiKey.prototype, "permissions", void 0); __decorate([ sequelize_typescript_1.BeforeValidate, __metadata("design:type", Function), __metadata("design:paramtypes", [ApiKey]), __metadata("design:returntype", Promise) ], ApiKey, "buildApiKey", null); __decorate([ sequelize_typescript_1.BeforeSave, __metadata("design:type", Function), __metadata("design:paramtypes", [ApiKey]), __metadata("design:returntype", Promise) ], ApiKey, "noUpdateIfLocked", null); __decorate([ sequelize_typescript_1.AfterSave, __metadata("design:type", Function), __metadata("design:paramtypes", [ApiKey]), __metadata("design:returntype", Promise) ], ApiKey, "buildPermissions", null); __decorate([ sequelize_typescript_1.BeforeDestroy, __metadata("design:type", Function), __metadata("design:paramtypes", [ApiKey]), __metadata("design:returntype", Promise) ], ApiKey, "noDestroyIfLocked", null); __decorate([ sequelize_typescript_1.AfterDestroy, __metadata("design:type", Function), __metadata("design:paramtypes", [ApiKey, Object]), __metadata("design:returntype", Promise) ], ApiKey, "deletePermissions", null); ApiKey = __decorate([ (0, sequelize_typescript_1.Table)({ tableName: "apiKeys", paranoid: false }) ], ApiKey); exports.ApiKey = ApiKey;