UNPKG

burdy

Version:

Open Source Headless Platform

125 lines (124 loc) 6.23 kB
"use strict"; 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 __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const express_1 = __importDefault(require("express")); const typeorm_1 = require("typeorm"); const site_settings_model_1 = __importDefault(require("../models/site-settings.model")); const user_model_1 = __importDefault(require("../models/user.model")); const async_middleware_1 = __importDefault(require("../middleware/async.middleware")); const bad_request_error_1 = __importDefault(require("../errors/bad-request-error")); const model_1 = require("../../shared/interfaces/model"); const group_model_1 = __importDefault(require("../models/group.model")); const validators_1 = __importDefault(require("../../shared/validators")); const orm_helpers_1 = require("../common/orm-helpers"); const jwt_1 = require("../common/jwt"); const user_session_model_1 = __importDefault(require("../models/user-session.model")); const server_bl_1 = require("../business-logic/server.bl"); const auth_middleware_1 = __importDefault(require("../middleware/auth.middleware")); const path_util_1 = __importDefault(require("../../scripts/util/path.util")); const fs_extra_1 = __importDefault(require("fs-extra")); const access_token_1 = __importDefault(require("../models/access-token")); const nanoid_1 = require("nanoid"); const app = (0, express_1.default)(); app.get('/health', (0, async_middleware_1.default)((req, res) => __awaiter(void 0, void 0, void 0, function* () { res.send({ status: 'ok' }); }))); app.post('/init', (0, async_middleware_1.default)((req, res) => __awaiter(void 0, void 0, void 0, function* () { var _a; const siteSettingsRepository = (0, typeorm_1.getRepository)(site_settings_model_1.default); const userRepository = (0, orm_helpers_1.getEnhancedRepository)(user_model_1.default); const groupRepository = (0, typeorm_1.getRepository)(group_model_1.default); const userSessionRepository = (0, typeorm_1.getRepository)(user_session_model_1.default); const [initiated, userCount] = yield Promise.all([ siteSettingsRepository.findOne({ where: { key: 'initiated' } }), userRepository.count(), ]); if (initiated || userCount > 0) throw new bad_request_error_1.default('site_initiated'); yield req.validate({ email: validators_1.default.email(), password: validators_1.default.password(), firstName: validators_1.default.firstName(), lastName: validators_1.default.lastName(), }); const { email, password, firstName, lastName } = req.body; const adminGroup = yield groupRepository.findOne({ where: { name: 'Admin' }, }); let user = yield userRepository.create({ email, firstName, lastName, status: model_1.UserStatus.ACTIVE, groups: [adminGroup], }); yield user.setPassword(password); let siteSettings = siteSettingsRepository.create([ { key: 'initiated', value: true }, { key: 'adminEmail', value: email }, ]); const accessTokenRepository = (0, orm_helpers_1.getEnhancedRepository)(access_token_1.default); yield accessTokenRepository.save({ name: (_a = req === null || req === void 0 ? void 0 : req.body) === null || _a === void 0 ? void 0 : _a.name, token: (0, nanoid_1.nanoid)() }); let token; yield (0, typeorm_1.getManager)().transaction((entityManager) => __awaiter(void 0, void 0, void 0, function* () { user = yield entityManager.save(user); siteSettings = yield entityManager.save(siteSettings); const userSession = yield entityManager.save(userSessionRepository.create({ user, expiresAt: (0, jwt_1.getExpires)(), })); token = (0, jwt_1.sign)({ sessionId: userSession.id, userId: user.id, }); res.cookie('token', token, { maxAge: (0, jwt_1.getExpires)().getTime() * 1000, httpOnly: true, }); })); res.send({ user, token }); }))); app.get('/export', (0, auth_middleware_1.default)(['all']), (0, async_middleware_1.default)((req, res) => __awaiter(void 0, void 0, void 0, function* () { var _b, _c; const include = (_c = (_b = req.query) === null || _b === void 0 ? void 0 : _b.includes) !== null && _c !== void 0 ? _c : undefined; let includeTokens; if (include) includeTokens = include.split(','); const output = path_util_1.default.burdyRoot('temp-export.zip'); yield (0, server_bl_1.exportContent)({ output, force: true, include: includeTokens }); const readStream = fs_extra_1.default.createReadStream(output); res.attachment(`export-${new Date().toISOString()}.zip`); res.contentType('application/zip'); readStream.on('end', () => { res.end(); fs_extra_1.default.remove(output); }); readStream.pipe(res); }))); app.post('/import', (0, auth_middleware_1.default)(['all']), (0, async_middleware_1.default)((req, res) => __awaiter(void 0, void 0, void 0, function* () { var _d, _e; yield (0, server_bl_1.importContent)({ user: (_d = req === null || req === void 0 ? void 0 : req.data) === null || _d === void 0 ? void 0 : _d.user, options: { force: (_e = req === null || req === void 0 ? void 0 : req.query) === null || _e === void 0 ? void 0 : _e.force, }, }); res.send('ok'); }))); exports.default = app;