From 2571f048add478b51231baf9fa62fe6bf527c68e Mon Sep 17 00:00:00 2001 From: Wyatt Johnson Date: Mon, 29 Oct 2018 14:31:35 -0600 Subject: [PATCH] feat: support development url's --- src/core/server/app/middleware/context/tenant.ts | 4 ++++ src/core/server/app/router/api/tenant.ts | 6 +----- src/core/server/app/url.ts | 7 ++++++- src/core/server/graph/common/context.ts | 6 +++++- src/core/server/graph/management/context.ts | 6 ++++-- src/core/server/graph/management/middleware.ts | 2 +- src/core/server/graph/tenant/context.ts | 5 ++++- .../server/graph/tenant/resolvers/oidc_auth_integration.ts | 2 +- 8 files changed, 26 insertions(+), 12 deletions(-) diff --git a/src/core/server/app/middleware/context/tenant.ts b/src/core/server/app/middleware/context/tenant.ts index c52772b6b..549e70266 100644 --- a/src/core/server/app/middleware/context/tenant.ts +++ b/src/core/server/app/middleware/context/tenant.ts @@ -2,6 +2,7 @@ import { RequestHandler } from "express-jwt"; import { Redis } from "ioredis"; import { Db } from "mongodb"; +import { Config } from "talk-common/config"; import TenantContext from "talk-server/graph/tenant/context"; import { TaskQueue } from "talk-server/services/queue"; import { Request } from "talk-server/types/express"; @@ -10,12 +11,14 @@ export interface TenantContextMiddlewareOptions { mongo: Db; redis: Redis; queue: TaskQueue; + config: Config; } export const tenantContext = ({ mongo, redis, queue, + config, }: TenantContextMiddlewareOptions): RequestHandler => ( req: Request, res, @@ -38,6 +41,7 @@ export const tenantContext = ({ req.talk.context = { tenant: new TenantContext({ req, + config, mongo, redis, tenant, diff --git a/src/core/server/app/router/api/tenant.ts b/src/core/server/app/router/api/tenant.ts index 23567d770..2f7e73d4f 100644 --- a/src/core/server/app/router/api/tenant.ts +++ b/src/core/server/app/router/api/tenant.ts @@ -42,11 +42,7 @@ export async function createTenantRouter( // Any users may submit their GraphQL requests with authentication, this // middleware will unpack their user into the request. options.passport.authenticate("jwt", { session: false }), - tenantContext({ - mongo: app.mongo, - redis: app.redis, - queue: app.queue, - }), + tenantContext(app), await tenantGraphMiddleware({ schema: app.schemas.tenant, config: app.config, diff --git a/src/core/server/app/url.ts b/src/core/server/app/url.ts index a37def2c5..d9b7da56d 100644 --- a/src/core/server/app/url.ts +++ b/src/core/server/app/url.ts @@ -1,3 +1,4 @@ +import { Config } from "talk-common/config"; import { Tenant } from "talk-server/models/tenant"; import { Request } from "talk-server/types/express"; import { URL } from "url"; @@ -16,10 +17,14 @@ export function reconstructURL(req: Request, path: string = "/"): string { * reconstructTenantURL will reconstruct a URL based off of the Tenant's domain. */ export function reconstructTenantURL( + config: Config, tenant: Pick, path: string = "/" ): string { - const url = new URL(path, `https://${tenant.domain}`); + let url: URL = new URL(path, `https://${tenant.domain}`); + if (config.get("env") === "development") { + url = new URL(path, `http://${tenant.domain}:${config.get("port")}`); + } return url.href; } diff --git a/src/core/server/graph/common/context.ts b/src/core/server/graph/common/context.ts index 7e191e3f8..016aa37d6 100644 --- a/src/core/server/graph/common/context.ts +++ b/src/core/server/graph/common/context.ts @@ -1,17 +1,21 @@ +import { Config } from "talk-common/config"; import { User } from "talk-server/models/user"; import { Request } from "talk-server/types/express"; export interface CommonContextOptions { user?: User; req?: Request; + config: Config; } export default class CommonContext { public user?: User; public req?: Request; + public config: Config; - constructor({ user, req }: CommonContextOptions) { + constructor({ user, req, config }: CommonContextOptions) { this.user = user; this.req = req; + this.config = config; } } diff --git a/src/core/server/graph/management/context.ts b/src/core/server/graph/management/context.ts index cdb25dbe3..41e59e094 100644 --- a/src/core/server/graph/management/context.ts +++ b/src/core/server/graph/management/context.ts @@ -1,18 +1,20 @@ import { Db } from "mongodb"; +import { Config } from "talk-common/config"; import CommonContext from "talk-server/graph/common/context"; import { Request } from "talk-server/types/express"; export interface ManagementContextOptions { mongo: Db; + config: Config; req?: Request; } export default class ManagementContext extends CommonContext { public mongo: Db; - constructor({ req, mongo }: ManagementContextOptions) { - super({ req }); + constructor({ req, mongo, config }: ManagementContextOptions) { + super({ req, config }); this.mongo = mongo; } diff --git a/src/core/server/graph/management/middleware.ts b/src/core/server/graph/management/middleware.ts index 6dd15e5da..5e96a6a36 100644 --- a/src/core/server/graph/management/middleware.ts +++ b/src/core/server/graph/management/middleware.ts @@ -10,5 +10,5 @@ import ManagementContext from "./context"; export default (schema: GraphQLSchema, config: Config, mongo: Db) => graphqlMiddleware(config, async (req: Request) => ({ schema, - context: new ManagementContext({ req, mongo }), + context: new ManagementContext({ req, mongo, config }), })); diff --git a/src/core/server/graph/tenant/context.ts b/src/core/server/graph/tenant/context.ts index b6facbb30..3456e8029 100644 --- a/src/core/server/graph/tenant/context.ts +++ b/src/core/server/graph/tenant/context.ts @@ -8,6 +8,7 @@ import { TaskQueue } from "talk-server/services/queue"; import TenantCache from "talk-server/services/tenant/cache"; import { Request } from "talk-server/types/express"; +import { Config } from "talk-common/config"; import loaders from "./loaders"; import mutators from "./mutators"; @@ -17,6 +18,7 @@ export interface TenantContextOptions { tenant: Tenant; tenantCache: TenantCache; queue: TaskQueue; + config: Config; req?: Request; user?: User; } @@ -37,10 +39,11 @@ export default class TenantContext extends CommonContext { tenant, mongo, redis, + config, tenantCache, queue, }: TenantContextOptions) { - super({ user, req }); + super({ user, req, config }); this.tenant = tenant; this.tenantCache = tenantCache; diff --git a/src/core/server/graph/tenant/resolvers/oidc_auth_integration.ts b/src/core/server/graph/tenant/resolvers/oidc_auth_integration.ts index 9e2890222..44e28b6ec 100644 --- a/src/core/server/graph/tenant/resolvers/oidc_auth_integration.ts +++ b/src/core/server/graph/tenant/resolvers/oidc_auth_integration.ts @@ -19,7 +19,7 @@ const OIDCAuthIntegration: GQLOIDCAuthIntegrationTypeResolver< // Note that when constructing the callback url with the tenant, the port // information is lost. - return reconstructTenantURL(ctx.tenant, path); + return reconstructTenantURL(ctx.config, ctx.tenant, path); }, };