Files
webstudio/apps/builder/app/shared/context.server.ts
T
Ivan Starkov 00c02201a0 Add domains to publish (#1694)
## 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
2023-06-01 17:59:10 +04:00

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,
};
};