UNPKG

@becomes/cms

Version:

Simple CMS for building APIs.

735 lines 41.4 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 __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __generator = (this && this.__generator) || function (thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (_) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; Object.defineProperty(exports, "__esModule", { value: true }); exports.MediaController = void 0; var purple_cheetah_1 = require("purple-cheetah"); var path = require("path"); var media_model_1 = require("./models/media.model"); var media_service_1 = require("./media.service"); var media_factory_1 = require("./factories/media.factory"); var fs_util_1 = require("./fs-util"); var media_util_1 = require("./media-util"); var git_util_1 = require("./git-util"); var api_1 = require("../api"); var MediaController = (function () { function MediaController() { } MediaController_1 = MediaController; MediaController.aggregate = function (rootMedia, childMedia) { var mediaAggregate = { _id: rootMedia._id.toHexString(), createdAt: rootMedia.createdAt, updatedAt: rootMedia.updatedAt, userId: rootMedia.userId, isInRoot: rootMedia.isInRoot, name: rootMedia.name, path: rootMedia.path, type: rootMedia.type, mimetype: rootMedia.mimetype, size: rootMedia.size, state: false, }; if (rootMedia.childrenIds) { if (rootMedia.childrenIds.length > 0) { rootMedia.childrenIds.forEach(function (cid) { var cm = childMedia.find(function (e) { return e._id.toHexString() === cid; }); if (cm) { if (!mediaAggregate.children) { mediaAggregate.children = []; } if (cm.childrenIds) { var cma = MediaController_1.aggregate(cm, childMedia); mediaAggregate.children.push(cma); } else { mediaAggregate.children.push({ _id: cm._id.toHexString(), createdAt: cm.createdAt, updatedAt: cm.updatedAt, userId: cm.userId, isInRoot: cm.isInRoot, name: cm.name, path: cm.path, type: cm.type, mimetype: cm.mimetype, size: cm.size, state: false, }); } } }); } else { mediaAggregate.children = []; } } return mediaAggregate; }; MediaController.deleteRecursive = function (ids, service, logger) { return __awaiter(this, void 0, void 0, function () { var media, _a, _b, _i, i, m, deleteResult; return __generator(this, function (_c) { switch (_c.label) { case 0: return [4, service.findAllById(ids)]; case 1: media = _c.sent(); _a = []; for (_b in media) _a.push(_b); _i = 0; _c.label = 2; case 2: if (!(_i < _a.length)) return [3, 7]; i = _a[_i]; m = media[i]; if (!(m.childrenIds && m.childrenIds.length > 0)) return [3, 4]; return [4, MediaController_1.deleteRecursive(m.childrenIds, service, logger)]; case 3: _c.sent(); _c.label = 4; case 4: return [4, service.deleteById(m._id.toHexString())]; case 5: deleteResult = _c.sent(); if (deleteResult === false) { logger.error('deleteRecursive', "Failed to delete '" + m._id.toHexString() + "'."); } _c.label = 6; case 6: _i++; return [3, 2]; case 7: return [2]; } }); }); }; MediaController.prototype.getAll = function (request) { return __awaiter(this, void 0, void 0, function () { var error, query, jwt, jwtValid, media, ids; return __generator(this, function (_a) { switch (_a.label) { case 0: error = purple_cheetah_1.HttpErrorFactory.simple('getAll', this.logger); query = request.query; if (query.signature) { try { api_1.APISecurity.verify(query, request.body, request.method.toUpperCase(), request.originalUrl, true); } catch (e) { throw error.occurred(purple_cheetah_1.HttpStatus.UNAUTHORIZED, e.message); } } else { jwt = purple_cheetah_1.JWTEncoding.decode(request.headers.authorization); if (jwt instanceof Error) { throw error.occurred(purple_cheetah_1.HttpStatus.UNAUTHORIZED, jwt.message); } else { jwtValid = purple_cheetah_1.JWTSecurity.validateAndCheckTokenPermissions(jwt, [purple_cheetah_1.RoleName.ADMIN, purple_cheetah_1.RoleName.USER], purple_cheetah_1.PermissionName.READ, purple_cheetah_1.JWTConfigService.get('user-token-config')); if (jwtValid instanceof Error) { throw error.occurred(purple_cheetah_1.HttpStatus.UNAUTHORIZED, jwtValid.message); } } } if (!query.ids) return [3, 2]; ids = query.ids.split('-'); ids.forEach(function (id, i) { if (purple_cheetah_1.StringUtility.isIdValid(id) === false) { throw error.occurred(purple_cheetah_1.HttpStatus.FORBIDDEN, "Invalid ID '" + id + "' was provided at position '" + i + "'."); } }); return [4, this.mediaService.findAllById(ids)]; case 1: media = _a.sent(); return [3, 4]; case 2: return [4, this.mediaService.findAll()]; case 3: media = _a.sent(); _a.label = 4; case 4: return [2, { media: media, }]; } }); }); }; MediaController.prototype.getAllAggregate = function (request) { return __awaiter(this, void 0, void 0, function () { var error, query, jwt, jwtValid, rootMedia, childMedia, mediaAggregate; return __generator(this, function (_a) { switch (_a.label) { case 0: error = purple_cheetah_1.HttpErrorFactory.simple('getAllAggregate', this.logger); query = request.query; if (query.signature) { try { api_1.APISecurity.verify(query, request.body, request.method.toUpperCase(), request.originalUrl, true); } catch (e) { throw error.occurred(purple_cheetah_1.HttpStatus.UNAUTHORIZED, e.message); } } else { jwt = purple_cheetah_1.JWTEncoding.decode(request.headers.authorization); if (jwt instanceof Error) { throw error.occurred(purple_cheetah_1.HttpStatus.UNAUTHORIZED, jwt.message); } else { jwtValid = purple_cheetah_1.JWTSecurity.validateAndCheckTokenPermissions(jwt, [purple_cheetah_1.RoleName.ADMIN, purple_cheetah_1.RoleName.USER], purple_cheetah_1.PermissionName.READ, purple_cheetah_1.JWTConfigService.get('user-token-config')); if (jwtValid instanceof Error) { throw error.occurred(purple_cheetah_1.HttpStatus.UNAUTHORIZED, jwtValid.message); } } } return [4, this.mediaService.findByIsInRoot(true)]; case 1: rootMedia = _a.sent(); return [4, this.mediaService.findByIsInRoot(false)]; case 2: childMedia = _a.sent(); mediaAggregate = []; rootMedia.forEach(function (media) { mediaAggregate.push(MediaController_1.aggregate(media, childMedia)); }); return [2, { media: mediaAggregate, }]; } }); }); }; MediaController.prototype.getFile = function (request, response) { return __awaiter(this, void 0, void 0, function () { var error, query, jwt, jwtValid, p, exist; return __generator(this, function (_a) { switch (_a.label) { case 0: error = purple_cheetah_1.HttpErrorFactory.simple('getFile', this.logger); query = request.query; if (!query.path) { throw error.occurred(purple_cheetah_1.HttpStatus.BAD_REQUEST, "Missing query 'path'."); } if (query.signature) { try { api_1.APISecurity.verify(query, request.body, request.method.toUpperCase(), request.originalUrl, true); } catch (e) { throw error.occurred(purple_cheetah_1.HttpStatus.UNAUTHORIZED, e.message); } } else { if (!query.access_token) { throw error.occurred(purple_cheetah_1.HttpStatus.BAD_REQUEST, "Missing query 'access_token'."); } jwt = purple_cheetah_1.JWTEncoding.decode(query.access_token); if (jwt instanceof Error) { throw error.occurred(purple_cheetah_1.HttpStatus.UNAUTHORIZED, jwt.message); } else { jwtValid = purple_cheetah_1.JWTSecurity.validateAndCheckTokenPermissions(jwt, [purple_cheetah_1.RoleName.ADMIN, purple_cheetah_1.RoleName.USER], purple_cheetah_1.PermissionName.READ, purple_cheetah_1.JWTConfigService.get('user-token-config')); if (jwtValid instanceof Error) { throw error.occurred(purple_cheetah_1.HttpStatus.UNAUTHORIZED, jwtValid.message); } } } p = query.path.replace(/\.\./g, '').replace(/\/\//g, '/'); return [4, fs_util_1.FSUtil.exist(p)]; case 1: exist = _a.sent(); if (exist === false) { throw error.occurred(purple_cheetah_1.HttpStatus.NOT_FOUNT, "File at path '" + p + "' does not exist."); } response.sendFile(path.join(process.env.PROJECT_ROOT, '/uploads', p)); return [2]; } }); }); }; MediaController.prototype.getFileIndex = function (request) { return __awaiter(this, void 0, void 0, function () { var error, query, jwt, jwtValid, pathParts, p, name, media; return __generator(this, function (_a) { switch (_a.label) { case 0: error = purple_cheetah_1.HttpErrorFactory.simple('.getFileIndex', this.logger); query = request.query; if (query.signature) { try { api_1.APISecurity.verify(query, request.body, request.method.toUpperCase(), request.originalUrl, true); } catch (e) { throw error.occurred(purple_cheetah_1.HttpStatus.UNAUTHORIZED, e.message); } } else { jwt = purple_cheetah_1.JWTEncoding.decode(request.headers.authorization); if (jwt instanceof Error) { throw error.occurred(purple_cheetah_1.HttpStatus.UNAUTHORIZED, jwt.message); } else { jwtValid = purple_cheetah_1.JWTSecurity.validateAndCheckTokenPermissions(jwt, [purple_cheetah_1.RoleName.ADMIN, purple_cheetah_1.RoleName.USER], purple_cheetah_1.PermissionName.READ, purple_cheetah_1.JWTConfigService.get('user-token-config')); if (jwtValid instanceof Error) { throw error.occurred(purple_cheetah_1.HttpStatus.UNAUTHORIZED, jwtValid.message); } } } pathParts = query.path.split('/'); p = pathParts.slice(0, pathParts.length - 1).join('/'); name = pathParts.slice(pathParts.length - 1, pathParts.length)[0]; return [4, this.mediaService.findByNameAndPath(name, p)]; case 1: media = _a.sent(); if (media === null) { throw error.occurred(purple_cheetah_1.HttpStatus.NOT_FOUNT, "Media file \"" + query.path + "\" does not exist."); } return [2, { media: media, }]; } }); }); }; MediaController.prototype.exist = function (request) { return __awaiter(this, void 0, void 0, function () { var error, query, jwt, jwtValid, p, exist; return __generator(this, function (_a) { switch (_a.label) { case 0: error = purple_cheetah_1.HttpErrorFactory.simple('exist', this.logger); query = request.query; if (!query.path) { throw error.occurred(purple_cheetah_1.HttpStatus.BAD_REQUEST, "Missing query 'path'."); } jwt = purple_cheetah_1.JWTEncoding.decode(request.headers.authorization); if (jwt instanceof Error) { throw error.occurred(purple_cheetah_1.HttpStatus.UNAUTHORIZED, jwt.message); } else { jwtValid = purple_cheetah_1.JWTSecurity.validateAndCheckTokenPermissions(jwt, [purple_cheetah_1.RoleName.ADMIN, purple_cheetah_1.RoleName.USER], purple_cheetah_1.PermissionName.READ, purple_cheetah_1.JWTConfigService.get('user-token-config')); if (jwtValid instanceof Error) { throw error.occurred(purple_cheetah_1.HttpStatus.UNAUTHORIZED, jwtValid.message); } } p = query.path.replace(/\.\./g, '').replace(/\/\//g, '/'); return [4, fs_util_1.FSUtil.exist(p)]; case 1: exist = _a.sent(); return [2, { exist: exist, }]; } }); }); }; MediaController.prototype.addFile = function (request) { return __awaiter(this, void 0, void 0, function () { var error, query, jwt, jwtValid, media, pathParts, parentDirExist, parentMedia, fileWithSameName, e_1, addFileResult; return __generator(this, function (_a) { switch (_a.label) { case 0: error = purple_cheetah_1.HttpErrorFactory.simple('addFile', this.logger); query = request.query; if (request.headers.upload_file_error_message) { throw error.occurred(purple_cheetah_1.HttpStatus.FORBIDDEN, request.headers.upload_file_error_message); } if (!request.file) { throw error.occurred(purple_cheetah_1.HttpStatus.FORBIDDEN, 'Missing file in request.'); } if (!query.path) { throw error.occurred(purple_cheetah_1.HttpStatus.BAD_REQUEST, "Missing query 'path'."); } jwt = purple_cheetah_1.JWTEncoding.decode(request.headers.authorization); if (jwt instanceof Error) { throw error.occurred(purple_cheetah_1.HttpStatus.UNAUTHORIZED, jwt.message); } else { jwtValid = purple_cheetah_1.JWTSecurity.validateAndCheckTokenPermissions(jwt, [purple_cheetah_1.RoleName.ADMIN, purple_cheetah_1.RoleName.USER], purple_cheetah_1.PermissionName.WRITE, purple_cheetah_1.JWTConfigService.get('user-token-config')); if (jwtValid instanceof Error) { throw error.occurred(purple_cheetah_1.HttpStatus.UNAUTHORIZED, jwtValid.message); } } media = media_factory_1.MediaFactory.instance; media.userId = jwt.payload.userId; media.type = media_util_1.MediaUtil.mimetypeToMediaType(request.file.mimetype); media.mimetype = request.file.mimetype; media.size = request.file.size; media.name = request.file.originalname; media.path = query.path.replace(/\.\./g, '').replace(/\/\//g, '/'); pathParts = media.path.split('/'); media.isInRoot = pathParts[1] !== '' ? false : true; media.childrenIds = undefined; if (pathParts.length > 2 && media.path.endsWith('/')) { media.path = media.path.substring(0, media.path.length - 1); } return [4, fs_util_1.FSUtil.exist(pathParts.slice(0, pathParts.length - 1).join('/'))]; case 1: parentDirExist = _a.sent(); if (parentDirExist === false) { throw error.occurred(purple_cheetah_1.HttpStatus.FORBIDDEN, "Parent directory '" + pathParts .slice(0, pathParts.length - 1) .join('/') + "' does not exist."); } if (!(media.isInRoot === false)) return [3, 3]; return [4, this.mediaService.findByPathAndType(media.path, media_model_1.MediaType.DIR)]; case 2: parentMedia = _a.sent(); if (parentMedia === null) { throw error.occurred(purple_cheetah_1.HttpStatus.INTERNAL_SERVER_ERROR, "Cannot find parent directory '" + pathParts .slice(0, pathParts.length - 1) .join('/') + "'."); } _a.label = 3; case 3: return [4, this.mediaService.findByNameAndPath(media.name, media.path)]; case 4: fileWithSameName = _a.sent(); if (fileWithSameName !== null) { throw error.occurred(purple_cheetah_1.HttpStatus.FORBIDDEN, "File with name '" + media.name + "' already exist at path '" + media.path + "'"); } _a.label = 5; case 5: _a.trys.push([5, 7, , 8]); return [4, fs_util_1.FSUtil.save(request.file.buffer, media.path + "/" + media.name)]; case 6: _a.sent(); return [3, 8]; case 7: e_1 = _a.sent(); this.logger.error('addFile', e_1); throw error.occurred(purple_cheetah_1.HttpStatus.INTERNAL_SERVER_ERROR, 'Failed to save the file.'); case 8: return [4, this.mediaService.add(media)]; case 9: addFileResult = _a.sent(); if (!(addFileResult === false)) return [3, 11]; return [4, fs_util_1.FSUtil.deleteFile(media.path)]; case 10: _a.sent(); throw error.occurred(purple_cheetah_1.HttpStatus.INTERNAL_SERVER_ERROR, 'Failed to add file to database.'); case 11: if (!parentMedia) return [3, 13]; parentMedia.childrenIds.push(media._id.toHexString()); return [4, this.mediaService.update(parentMedia)]; case 12: _a.sent(); return [3, 14]; case 13: this.logger.warn('addFile', 'No Parent'); _a.label = 14; case 14: git_util_1.GitUtil.push(media); return [2, { media: media, }]; } }); }); }; MediaController.prototype.addFolder = function (request) { return __awaiter(this, void 0, void 0, function () { var error, query, jwt, jwtValid, media, pathParts, parentMedia, parentDirExist, e_2, addMediaResult; return __generator(this, function (_a) { switch (_a.label) { case 0: error = purple_cheetah_1.HttpErrorFactory.simple('addFolder', this.logger); query = request.query; if (!query.path) { throw error.occurred(purple_cheetah_1.HttpStatus.BAD_REQUEST, "Missing query 'path'."); } jwt = purple_cheetah_1.JWTEncoding.decode(request.headers.authorization); if (jwt instanceof Error) { throw error.occurred(purple_cheetah_1.HttpStatus.UNAUTHORIZED, jwt.message); } else { jwtValid = purple_cheetah_1.JWTSecurity.validateAndCheckTokenPermissions(jwt, [purple_cheetah_1.RoleName.ADMIN, purple_cheetah_1.RoleName.USER], purple_cheetah_1.PermissionName.WRITE, purple_cheetah_1.JWTConfigService.get('user-token-config')); if (jwtValid instanceof Error) { throw error.occurred(purple_cheetah_1.HttpStatus.UNAUTHORIZED, jwtValid.message); } } media = media_factory_1.MediaFactory.instance; media.userId = jwt.payload.userId; media.type = media_model_1.MediaType.DIR; media.mimetype = 'dir'; media.size = 0; media.path = query.path.replace(/\.\./g, '').replace(/\/\//g, '/'); pathParts = media.path.split('/'); media.name = pathParts[pathParts.length - 1]; media.isInRoot = pathParts.length > 2 ? false : true; media.childrenIds = []; if (media.path.endsWith('/')) { media.path = media.path.substring(0, media.path.length - 1); } if (!(media.isInRoot === false)) return [3, 3]; return [4, fs_util_1.FSUtil.exist(pathParts.slice(0, pathParts.length - 1).join('/'))]; case 1: parentDirExist = _a.sent(); if (parentDirExist === false) { throw error.occurred(purple_cheetah_1.HttpStatus.FORBIDDEN, "Parent directory '" + pathParts .slice(0, pathParts.length - 1) .join('/') + "' does not exist."); } return [4, this.mediaService.findByPathAndType(pathParts.slice(0, pathParts.length - 1).join('/'), media_model_1.MediaType.DIR)]; case 2: parentMedia = _a.sent(); if (parentMedia === null) { throw error.occurred(purple_cheetah_1.HttpStatus.INTERNAL_SERVER_ERROR, "Cannot find parent directory '" + pathParts .slice(0, pathParts.length - 1) .join('/') + "'."); } _a.label = 3; case 3: _a.trys.push([3, 5, , 6]); return [4, fs_util_1.FSUtil.save('', path.join(media.path, '/temp.txt'))]; case 4: _a.sent(); return [3, 6]; case 5: e_2 = _a.sent(); this.logger.error('addFolder', e_2); throw error.occurred(purple_cheetah_1.HttpStatus.INTERNAL_SERVER_ERROR, "Failed to create directory."); case 6: return [4, fs_util_1.FSUtil.deleteFile(path.join(media.path, '/temp.txt'))]; case 7: _a.sent(); return [4, this.mediaService.add(media)]; case 8: addMediaResult = _a.sent(); if (addMediaResult === false) { throw error.occurred(purple_cheetah_1.HttpStatus.INTERNAL_SERVER_ERROR, 'Failed to add directory pointer to database.'); } if (!parentMedia) return [3, 10]; parentMedia.childrenIds.push(media._id.toHexString()); return [4, this.mediaService.update(parentMedia)]; case 9: _a.sent(); _a.label = 10; case 10: return [2, { media: media, }]; } }); }); }; MediaController.prototype.deleteFolder = function (request) { return __awaiter(this, void 0, void 0, function () { var error, jwt, jwtValid, rootMedia, deleteRootMediaResult, e_3; return __generator(this, function (_a) { switch (_a.label) { case 0: error = purple_cheetah_1.HttpErrorFactory.simple('deleteFolder', this.logger); if (purple_cheetah_1.StringUtility.isIdValid(request.params.id) === false) { throw error.occurred(purple_cheetah_1.HttpStatus.FORBIDDEN, "Invalid ID '" + request.params.id + "' was provided."); } jwt = purple_cheetah_1.JWTEncoding.decode(request.headers.authorization); if (jwt instanceof Error) { throw error.occurred(purple_cheetah_1.HttpStatus.UNAUTHORIZED, jwt.message); } else { jwtValid = purple_cheetah_1.JWTSecurity.validateAndCheckTokenPermissions(jwt, [purple_cheetah_1.RoleName.ADMIN, purple_cheetah_1.RoleName.USER], purple_cheetah_1.PermissionName.DELETE, purple_cheetah_1.JWTConfigService.get('user-token-config')); if (jwtValid instanceof Error) { throw error.occurred(purple_cheetah_1.HttpStatus.UNAUTHORIZED, jwtValid.message); } } return [4, this.mediaService.findById(request.params.id)]; case 1: rootMedia = _a.sent(); if (rootMedia === null) { throw error.occurred(purple_cheetah_1.HttpStatus.NOT_FOUNT, "Directory with ID '" + request.params.id + "' does not exist."); } if (!(rootMedia.childrenIds && rootMedia.childrenIds.length > 0)) return [3, 3]; return [4, MediaController_1.deleteRecursive(rootMedia.childrenIds, this.mediaService, this.logger)]; case 2: _a.sent(); _a.label = 3; case 3: return [4, this.mediaService.deleteById(rootMedia._id.toHexString())]; case 4: deleteRootMediaResult = _a.sent(); if (deleteRootMediaResult === false) { throw error.occurred(purple_cheetah_1.HttpStatus.INTERNAL_SERVER_ERROR, 'Failed to remove directory pointer from database.'); } this.logger.info('deleteFolder', "" + rootMedia.path); _a.label = 5; case 5: _a.trys.push([5, 7, , 8]); return [4, fs_util_1.FSUtil.deleteDir(path.join(rootMedia.path))]; case 6: _a.sent(); return [3, 8]; case 7: e_3 = _a.sent(); this.logger.error('deleteFolder', "Failed to delete '" + rootMedia.path + "' directory from FS."); return [3, 8]; case 8: git_util_1.GitUtil.push(rootMedia); return [2, { message: 'Success.', }]; } }); }); }; MediaController.prototype.deleteFile = function (request) { return __awaiter(this, void 0, void 0, function () { var error, jwt, jwtValid, rootMedia, deleteRootMediaResult, e_4; return __generator(this, function (_a) { switch (_a.label) { case 0: error = purple_cheetah_1.HttpErrorFactory.simple('deleteFile', this.logger); if (purple_cheetah_1.StringUtility.isIdValid(request.params.id) === false) { throw error.occurred(purple_cheetah_1.HttpStatus.FORBIDDEN, "Invalid ID '" + request.params.id + "' was provided."); } jwt = purple_cheetah_1.JWTEncoding.decode(request.headers.authorization); if (jwt instanceof Error) { throw error.occurred(purple_cheetah_1.HttpStatus.UNAUTHORIZED, jwt.message); } else { jwtValid = purple_cheetah_1.JWTSecurity.validateAndCheckTokenPermissions(jwt, [purple_cheetah_1.RoleName.ADMIN, purple_cheetah_1.RoleName.USER], purple_cheetah_1.PermissionName.DELETE, purple_cheetah_1.JWTConfigService.get('user-token-config')); if (jwtValid instanceof Error) { throw error.occurred(purple_cheetah_1.HttpStatus.UNAUTHORIZED, jwtValid.message); } } return [4, this.mediaService.findById(request.params.id)]; case 1: rootMedia = _a.sent(); if (rootMedia === null) { throw error.occurred(purple_cheetah_1.HttpStatus.NOT_FOUNT, "File with ID '" + request.params.id + "' does not exist."); } if (rootMedia.type === media_model_1.MediaType.DIR) { throw error.occurred(purple_cheetah_1.HttpStatus.FORBIDDEN, "Media with ID '" + rootMedia._id.toHexString() + "' is a directory."); } return [4, this.mediaService.deleteById(rootMedia._id.toHexString())]; case 2: deleteRootMediaResult = _a.sent(); if (deleteRootMediaResult === false) { throw error.occurred(purple_cheetah_1.HttpStatus.INTERNAL_SERVER_ERROR, 'Failed to remove file pointer from database.'); } _a.label = 3; case 3: _a.trys.push([3, 5, , 6]); return [4, fs_util_1.FSUtil.deleteFile(path.join(rootMedia.path, rootMedia.name))]; case 4: _a.sent(); return [3, 6]; case 5: e_4 = _a.sent(); this.logger.error('deleteFile', "Failed to delete '" + rootMedia.path + "/" + rootMedia.name + "' file from FS."); return [3, 6]; case 6: git_util_1.GitUtil.push(rootMedia); return [2, { message: 'Success.', }]; } }); }); }; var MediaController_1; __decorate([ purple_cheetah_1.AppLogger(MediaController_1), __metadata("design:type", purple_cheetah_1.Logger) ], MediaController.prototype, "logger", void 0); __decorate([ purple_cheetah_1.Service(media_service_1.MediaService), __metadata("design:type", media_service_1.MediaService) ], MediaController.prototype, "mediaService", void 0); __decorate([ purple_cheetah_1.Get('/all'), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise) ], MediaController.prototype, "getAll", null); __decorate([ purple_cheetah_1.Get('/all/aggregate'), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise) ], MediaController.prototype, "getAllAggregate", null); __decorate([ purple_cheetah_1.Get('/file'), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, Object]), __metadata("design:returntype", Promise) ], MediaController.prototype, "getFile", null); __decorate([ purple_cheetah_1.Get('/file/index'), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise) ], MediaController.prototype, "getFileIndex", null); __decorate([ purple_cheetah_1.Get('/exist'), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise) ], MediaController.prototype, "exist", null); __decorate([ purple_cheetah_1.Post('/file'), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise) ], MediaController.prototype, "addFile", null); __decorate([ purple_cheetah_1.Post('/folder'), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise) ], MediaController.prototype, "addFolder", null); __decorate([ purple_cheetah_1.Delete('/folder/:id'), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise) ], MediaController.prototype, "deleteFolder", null); __decorate([ purple_cheetah_1.Delete('/file/:id'), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise) ], MediaController.prototype, "deleteFile", null); MediaController = MediaController_1 = __decorate([ purple_cheetah_1.Controller('/media') ], MediaController); return MediaController; }()); exports.MediaController = MediaController; //# sourceMappingURL=media.controller.js.map