UNPKG

@crowdin/app-project-module

Version:

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

75 lines (74 loc) 3.87 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 }); const storage_1 = require("../../../storage"); const util_1 = require("../../../util"); const logger_1 = require("../../../util/logger"); function handle(config, integration) { return (0, util_1.runAsyncWrapper)((req, res) => __awaiter(this, void 0, void 0, function* () { var _a, _b; req.logInfo('Received integration login request'); let credentials = req.body.credentials; if (req.isApiCall) { if (!credentials) { return res.status(400).json({ error: { message: 'Missing required parameter: credentials', }, }); } if ((_a = integration.loginForm) === null || _a === void 0 ? void 0 : _a.fields) { const missingFields = integration.loginForm.fields .filter((field) => 'key' in field) .filter((field) => { const formField = field; return formField.type !== 'checkbox' && !credentials[formField.key]; }) .map((field) => field.key); if (missingFields.length > 0) { return res.status(400).json({ error: { message: `Missing required credential fields: ${missingFields.join(', ')}`, }, }); } } } if ((_b = integration.loginForm) === null || _b === void 0 ? void 0 : _b.performGetTokenRequest) { req.logInfo('Performing custom get bearer token request'); const tokenCredentials = yield integration.loginForm.performGetTokenRequest(credentials); credentials = Object.assign(Object.assign({}, credentials), { expireIn: Number(tokenCredentials.expires_in) + Date.now() / 1000, accessToken: tokenCredentials.access_token, refreshToken: tokenCredentials.refresh_token }); } if (integration.checkConnection) { try { req.logInfo('Checking the integration credentials'); yield integration.checkConnection(credentials); } catch (e) { yield (0, logger_1.handleUserError)({ action: 'External Service login', error: e, crowdinId: req.crowdinContext.crowdinId, clientId: req.crowdinContext.clientId, }); throw e; } } const existing = yield (0, storage_1.getStorage)().getIntegrationCredentials(req.crowdinContext.clientId); if (!!existing) { req.logInfo('Deleting old credentials'); yield (0, storage_1.getStorage)().deleteIntegrationCredentials(req.crowdinContext.clientId); } yield (0, storage_1.getStorage)().saveIntegrationCredentials(req.crowdinContext.clientId, (0, util_1.encryptData)(config, JSON.stringify(credentials)), req.crowdinContext.crowdinId); res.status(204).end(); })); } exports.default = handle;