UNPKG

@crowdin/app-project-module

Version:

Module that generates for you all common endpoints for serving standalone Crowdin App

75 lines (74 loc) 3.25 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()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getIntegrationManagedBy = getIntegrationManagedBy; exports.renderIntegrationAccessDenied = renderIntegrationAccessDenied; const jsx_renderer_1 = require("../util/jsx-renderer"); const logger_1 = require("../util/logger"); const token_1 = require("../util/app-functions/token"); function getIntegrationManagedBy(_a) { return __awaiter(this, arguments, void 0, function* ({ ownerIds, crowdinApiClient, clientId, }) { if (!ownerIds.length) { return []; } const projectId = (0, token_1.getProjectId)(clientId); let owners = []; try { owners = ownerIds.length > 1 ? (yield crowdinApiClient.usersApi.listProjectMembers(projectId)).data.filter((member) => ownerIds.includes(member.data.id)) : [yield crowdinApiClient.usersApi.getProjectMemberPermissions(projectId, ownerIds[0])]; } catch (e) { console.warn('Failed to get project members', e); return []; } return owners.map((owner) => { const ownerFullName = 'fullName' in owner.data ? owner.data.fullName : `${owner.data.firstName || ''} ${owner.data.lastName || ''}`.trim(); return { id: owner.data.id, name: !!ownerFullName && owner.data.username !== ownerFullName ? `${ownerFullName} (${owner.data.username})` : owner.data.username, }; }); }); } function renderIntegrationAccessDenied({ req, res, isApiCall, owners, debugLabel, allowLogout = false, }) { const errorOptions = { code: 403, message: 'Access denied', owners: null, hideActions: false, allowLogout: false, }; if (isApiCall) { return res.status(errorOptions.code).json({ error: { message: errorOptions.message, }, }); } if (owners.length) { errorOptions.message = 'Looks like you don’t have access'; errorOptions.hideActions = true; errorOptions.owners = owners; errorOptions.allowLogout = allowLogout; } else { (0, logger_1.temporaryErrorDebug)(`Access denied: ${debugLabel}`, req); } const html = (0, jsx_renderer_1.renderJSXOnClient)({ name: 'error', props: errorOptions }); res.setHeader('Content-Type', 'text/html; charset=utf-8'); return res.send(html); }