// (C) 2007-2022 GoodData Corporation import { Application } from "express"; import * as HttpStatusCodes from "http-status-codes"; import { IMockProject } from "../../model/MockProject"; import { createAccountSettings } from "../bear/profile"; import { projectUri } from "../../route/routes"; import { IBootstrap } from "../../model/Bootstrap"; export function getBootstrap(project: IMockProject): IBootstrap { const user = project.users[0]; const accountSetting = createAccountSettings(user); const { featureFlags } = project; const profileUri = accountSetting.accountSetting.links.self; const separators = user.separators; const projectId = project.project.meta.identifier; return { bootstrapResource: { ...accountSetting, hostnameBase: "secure.gooddata.com", settings: { applicationTitle: "GoodData", faviconUrl: "/images/favicon.ico", organizationName: "GoodData", displayFlashNews: true, logoUrl: "/images/header/logo.png", displayProjects: true, displayAccountPage: true, isBranded: false, supportEmail: "support@gooddata.com", supportForumUrl: "https://support.gooddata.com", privacyPolicyUrl: "https://www.gooddata.com/privacy.html", documentationUrl: "https://help.gooddata.com/doc/", securityStatementUrl: "https://www.gooddata.com/security.html", termsOfUseUrl: "https://www.gooddata.com/terms.html", trustUrl: "https://www.gooddata.com/trust/", appleTouchIconUrl: "/images/appleTouchIcon.png", skipClientRedirect: false, hideRegistration: false, useOnboarding: true, displayNPS: true, }, profileSetting: { hints: {}, projectSettings: {}, currentProjectUri: projectUri(projectId), npsLastParticipation: "2014-09-09 13:25:33", releaseNotice: [], links: { self: `${profileUri}/settings`, profile: profileUri, }, separators, }, current: { project: { content: { guidedNavigation: "1", isPublic: "0", state: "ENABLED", driver: "Pg", authorizationToken: "INTNA000000SRVS", cluster: "", environment: "PRODUCTION", }, links: { invitations: `/gdc/projects/${projectId}/invitations`, ldm: `/gdc/projects/${projectId}/ldm`, ldm_thumbnail: `/gdc/projects/${projectId}/ldm?thumbnail=1`, metadata: `/gdc/md/${projectId}`, roles: `/gdc/projects/${projectId}/roles`, self: `/gdc/projects/${projectId}`, userPermissions: `/gdc/projects/${projectId}/users/${user.identifier}/permissions`, userRoles: `/gdc/projects/${projectId}/users/${user.identifier}/roles`, users: `/gdc/projects/${projectId}/users?link=1&offset=0&limit=100`, templates: `/gdc/md/${projectId}/templates`, connectors: `/gdc/projects/${projectId}/connectors`, publicartifacts: `/gdc/projects/${projectId}/publicartifacts`, uploads: `https://secure-di.gooddata.com/project-uploads/${projectId}/`, dataload: `/gdc/projects/${projectId}/dataload`, schedules: `/gdc/projects/${projectId}/schedules`, eventstores: `/gdc/projects/${projectId}/dataload/eventstore/stores`, clearCaches: `/gdc/projects/${projectId}/clearCaches`, execute: `/gdc/projects/${projectId}/execute`, projectFeatureFlags: `/gdc/projects/${projectId}/projectFeatureFlags`, }, meta: { created: "2014-07-14 14:45:24", updated: "2015-03-14 11:12:00", author: profileUri, contributor: "/gdc/account/profile/876ec68f5630b38de65852ed5d6236ff", summary: "", title: project.project.meta.title, }, }, featureFlags, projectPermissions: { permissions: project.projectPermissions, links: { project: projectUri(projectId), user: profileUri, }, }, clusterStatus: "ONLINE", timezone: { id: "America/Los_Angeles", displayName: "Pacific Standard Time", shortDisplayName: "PST", currentOffsetMs: -28800000, }, projectTemplates: [], dataUploadsInfo: { statusesCount: { OK: 15, }, }, loginMD5: user.identifier, integrations: [], projectIcons: [], requiresRedirect: false, analyticalDashboards: [], mapboxToken: process.env.MAPBOX_TOKEN || "dummy_mapbox_token", }, }, }; } export const DEFAULT_SEPARATORS = { thousand: ",", decimal: ".", }; export const bootstrap = { register(app: Application, project: IMockProject) { app.get("/gdc/app/account/bootstrap", (req, res, next) => { if ( !req.query.projectUri || req.query.projectUri === projectUri(project.project.meta.identifier) ) { const bootstrap = getBootstrap(project); res.status(HttpStatusCodes.OK).json(bootstrap); } else { next(); } }); return app; }, }; export const permissions = { register(app: Application, project: IMockProject) { const projectId = project.project.meta.identifier; const user = project.users[0]; app.get(`/gdc/projects/${projectId}/users/:user/permissions`, (_req, res) => { res.status(HttpStatusCodes.OK).json({ associatedPermissions: { links: { user: `/gdc/account/profile/${user.identifier}`, project: `/gdc/projects/${projectId}/`, }, permissions: project.projectPermissions, }, }); }); return app; }, };