mirror of
https://github.com/webstudio-is/webstudio.git
synced 2026-11-08 21:15:18 +09:00
## Description At publish we would allow to check domains we want to publish. As of now we publish all project domains. But already pass them from UI, so future move would be just UI changes, without touching API - [x] - Fix "no access to project domains using service api call" ## Steps for reproduction 1. click button 2. expect xyz ## Code Review - [ ] hi @kof, I need you to do - conceptual review (architecture, feature-correctness) - detailed review (read every line) - test it on preview ## Before requesting a review - [ ] made a self-review - [ ] added inline comments where things may be not obvious (the "why", not "what") ## Before merging - [ ] tested locally and on preview environment (preview dev login: 5de6) - [ ] updated [test cases](https://github.com/webstudio-is/webstudio-builder/blob/main/apps/builder/docs/test-cases.md) document - [ ] added tests - [ ] if any new env variables are added, added them to `.env.example` and the `builder/env-check.js` if mandatory
65 lines
1.6 KiB
TypeScript
65 lines
1.6 KiB
TypeScript
import type { AppContext } from "@webstudio-is/trpc-interface/index.server";
|
|
import env from "~/env/env.server";
|
|
import { authenticator } from "~/services/auth.server";
|
|
import { trpcClient } from "~/services/trpc.server";
|
|
|
|
const createAuthorizationContext = async (
|
|
request: Request
|
|
): Promise<AppContext["authorization"]> => {
|
|
const url = new URL(request.url);
|
|
|
|
const authToken = url.searchParams.get("authToken") ?? url.hostname;
|
|
|
|
const user = await authenticator.isAuthenticated(request);
|
|
|
|
const isServiceCall =
|
|
request.headers.has("Authorization") &&
|
|
request.headers.get("Authorization") === env.TRPC_SERVER_API_TOKEN;
|
|
|
|
const context: AppContext["authorization"] = {
|
|
userId: user?.id,
|
|
authToken,
|
|
isServiceCall,
|
|
authorizeTrpc: trpcClient.authorize,
|
|
};
|
|
|
|
return context;
|
|
};
|
|
|
|
const createDomainContext = (request: Request) => {
|
|
const context: AppContext["domain"] = {
|
|
domainTrpc: trpcClient.domain,
|
|
};
|
|
|
|
return context;
|
|
};
|
|
|
|
const createDeploymentContext = (request: Request) => {
|
|
const url = new URL(request.url);
|
|
|
|
const context: AppContext["deployment"] = {
|
|
deploymentTrpc: trpcClient.deployment,
|
|
env: {
|
|
BUILDER_ORIGIN: url.origin,
|
|
BRANCH_NAME: env.BRANCH_NAME ?? "main",
|
|
},
|
|
};
|
|
|
|
return context;
|
|
};
|
|
|
|
/**
|
|
* argument buildEnv==="prod" only if we are loading project with production build
|
|
*/
|
|
export const createContext = async (request: Request): Promise<AppContext> => {
|
|
const authorization = await createAuthorizationContext(request);
|
|
const domain = createDomainContext(request);
|
|
const deployment = createDeploymentContext(request);
|
|
|
|
return {
|
|
authorization,
|
|
domain,
|
|
deployment,
|
|
};
|
|
};
|