Skip to content
This repository has been archived by the owner on Jul 20, 2024. It is now read-only.

Commit

Permalink
botway(core): fix env variables
Browse files Browse the repository at this point in the history
  • Loading branch information
abdfnx committed Sep 5, 2023
1 parent 9dcea89 commit 5577fd1
Show file tree
Hide file tree
Showing 10 changed files with 210 additions and 88 deletions.
1 change: 0 additions & 1 deletion core/app/api/projects/config/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import { NextResponse } from "next/server";
import { jwtDecrypt } from "jose";
import { BW_SECRET_KEY } from "@/tools/tokens";
import { fetcher } from "@/tools/fetch";
import { Octokit } from "octokit";
import createClient from "@/supabase/server";

export const revalidate = 0;
Expand Down
79 changes: 79 additions & 0 deletions core/app/api/projects/env/add/route.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
import { NextResponse } from "next/server";
import { jwtDecrypt } from "jose";
import { BW_SECRET_KEY } from "@/tools/tokens";
import { fetcher } from "@/tools/fetch";
import createClient from "@/supabase/server";

export const revalidate = 0;

export async function POST(request: Request) {
const body = await request.json();

const supabase = createClient();

const {
data: { user: user },
error: userError,
} = await supabase.auth.getUser();

if (userError) {
return NextResponse.json({ error: userError });
}

const { payload: zeaburApiToken } = await jwtDecrypt(
user?.user_metadata["zeaburApiToken"],
BW_SECRET_KEY,
);

const { data, error } = await supabase
.from("projects")
.select("zeabur_env_id, zeabur_service_id")
.eq("id", body.projectId)
.single();

if (error) {
return NextResponse.json({ error });
}

const { payload: zeaburEnvId } = await jwtDecrypt(
data.zeabur_env_id,
BW_SECRET_KEY,
);

const { payload: zeaburServiceId } = await jwtDecrypt(
data.zeabur_service_id,
BW_SECRET_KEY,
);

const { payload: value } = await jwtDecrypt(body.value, BW_SECRET_KEY);

const addVar = await fetcher("https://gateway.zeabur.com/graphql", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${zeaburApiToken.data}`,
},
body: JSON.stringify({
query: `
mutation {
createEnvironmentVariable(
environmentID: "${zeaburEnvId.data}"
serviceID: "${zeaburServiceId.data}"
key: "${body.key}"
value: "${value.data}"
) {
_id
}
}
`,
}),
});

if (addVar.errors) {
return NextResponse.json({ error: addVar.errors[0].message });
}

return NextResponse.json({
message: "Success",
});
}
17 changes: 15 additions & 2 deletions core/app/api/projects/env/route.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { NextResponse } from "next/server";
import { jwtDecrypt } from "jose";
import { EncryptJWT, jwtDecrypt } from "jose";
import { BW_SECRET_KEY } from "@/tools/tokens";
import { fetcher } from "@/tools/fetch";
import createClient from "@/supabase/server";
Expand Down Expand Up @@ -69,8 +69,21 @@ export async function POST(request: Request) {
return NextResponse.json({ error: getVars.errors[0].message });
}

const vars = getVars.data.service.variables.filter(
(varx: any) =>
!varx.value.includes(`service-`) && !varx.value.includes(`environment-`),
);

const encVars = await new EncryptJWT({
data: {
vars,
},
})
.setProtectedHeader({ alg: "dir", enc: "A128CBC-HS256" })
.encrypt(BW_SECRET_KEY);

return NextResponse.json({
message: "Success",
vars: getVars.data.service.variables,
vars: encVars,
});
}
16 changes: 15 additions & 1 deletion core/app/api/projects/env/update/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,19 @@ export async function POST(request: Request) {

const { payload: value } = await jwtDecrypt(body.value, BW_SECRET_KEY);

const { payload: vx } = await jwtDecrypt(body.vars, BW_SECRET_KEY);

const vars: any[] =
vx?.data.vars.filter((varx: any) => varx.key != body.key.key) || [];

let allVars = "";

vars.length != 0
? vars.map((v: any) => {
allVars += `${v.key}: "${v.value}"\n`;
})
: null;

const updateVar = await fetcher("https://gateway.zeabur.com/graphql", {
method: "POST",
headers: {
Expand All @@ -60,7 +73,8 @@ export async function POST(request: Request) {
environmentID: "${zeaburEnvId.data}"
serviceID: "${zeaburServiceId.data}"
data: {
${body.key}: "${value.data}"
${allVars}
${body.key.key}: "${value.data}"
}
)
}
Expand Down
57 changes: 35 additions & 22 deletions core/app/project/[id]/env/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import {
QueryClientProvider,
} from "@tanstack/react-query";
import { fetcher } from "@/tools/fetch";
import { EncryptJWT } from "jose";
import { EncryptJWT, jwtDecrypt } from "jose";
import { BW_SECRET_KEY } from "@/tools/tokens";
import {
EyeClosedIcon,
Expand Down Expand Up @@ -87,26 +87,28 @@ const Env = ({ user, projectId }: any) => {
);

const fetchVariables = async () => {
const vars = await fetcher(`/api/projects/env`, {
const encVars = await fetcher(`/api/projects/env`, {
method: "POST",
body: JSON.stringify({
projectId,
}),
});

return vars;
const { payload: vars } = await jwtDecrypt(encVars.vars, BW_SECRET_KEY);

return vars.data;
};

const { data: vars, isLoading: varsIsLoading } = useQuery(
["services"],
fetchVariables,
{
refetchInterval: 1,
refetchOnReconnect: true,
refetchOnWindowFocus: true,
refetchIntervalInBackground: true,
},
);
const {
data: vars,
isLoading: varsIsLoading,
refetch,
}: any = useQuery(["services"], fetchVariables, {
refetchInterval: 60000,
refetchOnReconnect: true,
refetchOnWindowFocus: true,
refetchIntervalInBackground: true,
});

const updateVar = async (formData: any) => {
try {
Expand All @@ -118,8 +120,17 @@ const Env = ({ user, projectId }: any) => {
.setProtectedHeader({ alg: "dir", enc: "A128CBC-HS256" })
.encrypt(BW_SECRET_KEY);

console.log(vars);

const vx = await new EncryptJWT({
data: vars,
})
.setProtectedHeader({ alg: "dir", enc: "A128CBC-HS256" })
.encrypt(BW_SECRET_KEY);

const body = {
value,
vars: vx,
key: currentVar,
projectId,
};
Expand All @@ -131,6 +142,8 @@ const Env = ({ user, projectId }: any) => {
});

closeModalUpdate();

refetch();
} catch (e: any) {
toast.error(e.message, toastStyle);
} finally {
Expand All @@ -154,13 +167,15 @@ const Env = ({ user, projectId }: any) => {
projectId,
};

await fetcher("/api/projects/env/update", {
await fetcher("/api/projects/env/add", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(body),
});

closeModalAdd();

refetch();
} catch (e: any) {
toast.error(e.message, toastStyle);
} finally {
Expand Down Expand Up @@ -213,24 +228,22 @@ const Env = ({ user, projectId }: any) => {
<div className="overflow-x-auto flex-grow rounded-lg border border-gray-800">
<table className="w-full border-collapse select-auto bg-secondary">
<tbody>
{Object.keys(vars?.vars).map((key: any, index: any) => (
{vars?.vars.map((key: any, index: any) => (
<tr className="justify-between">
<td
className={`py-3 px-4 overflow-hidden overflow-ellipsis whitespace-nowrap border-r border-gray-800 ${
index != Object.keys(vars?.vars).length - 1
? "border-b"
: ""
index != vars?.vars.length - 1 ? "border-b" : ""
}`}
style={{ minWidth: "64px", maxWidth: "100px" }}
>
<div className="flex text-sm font-semibold leading-6 text-white space-x-2 items-center font-mono">
{key}
{key.key}
</div>
</td>

<td
className={`py-3 px-4 overflow-hidden hidden md:table-cell overflow-ellipsis whitespace-nowrap ${
index != Object.keys(vars?.vars).length - 1
index != vars?.vars.length - 1
? "border-b border-gray-800"
: ""
} `}
Expand All @@ -239,8 +252,8 @@ const Env = ({ user, projectId }: any) => {
<div className="flex justify-between">
<div className="flex text-sm font-medium leading-6 text-white space-x-2 items-center font-mono">
{show && currentVar === key
? vars?.vars[key]
: "•".repeat(vars?.vars[key].length)}
? vars?.vars[index].value
: "•".repeat(vars?.vars[index].value.length)}

{show && currentVar === key ? (
<div
Expand Down
8 changes: 4 additions & 4 deletions core/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"lint": "next lint"
},
"dependencies": {
"@apollo/client": "^3.8.1",
"@apollo/client": "^3.8.2",
"@faker-js/faker": "^8.0.2",
"@headlessui/react": "^1.7.17",
"@primer/octicons-react": "^19.7.0",
Expand All @@ -29,8 +29,8 @@
"formik": "^2.4.3",
"graphql": "^16.8.0",
"graphql-ws": "^5.14.0",
"jose": "^4.14.4",
"marked": "^7.0.5",
"jose": "^4.14.6",
"marked": "^8.0.0",
"mini-svg-data-uri": "^1.4.4",
"next": "13.4.19",
"octokit": "^3.1.0",
Expand All @@ -51,7 +51,7 @@
"@tailwindcss/typography": "^0.5.9",
"@types/bcryptjs": "^2.4.3",
"@types/marked": "^5.0.1",
"@types/node": "^20.5.7",
"@types/node": "^20.5.9",
"@types/react": "18.2.21",
"@types/react-dom": "18.2.7",
"@types/slug": "^5.0.4",
Expand Down
6 changes: 3 additions & 3 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ require (
github.com/spf13/viper v1.16.0
github.com/tidwall/gjson v1.16.0
github.com/tidwall/sjson v1.2.5
golang.org/x/sys v0.11.0
golang.org/x/term v0.11.0
golang.org/x/sys v0.12.0
golang.org/x/term v0.12.0
)

require (
Expand Down Expand Up @@ -98,7 +98,7 @@ require (
github.com/yuin/goldmark-emoji v1.0.2 // indirect
golang.org/x/net v0.14.0 // indirect
golang.org/x/sync v0.3.0 // indirect
golang.org/x/text v0.12.0 // indirect
golang.org/x/text v0.13.0 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
6 changes: 6 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -564,11 +564,15 @@ golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM=
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o=
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
golang.org/x/term v0.11.0 h1:F9tnn/DA/Im8nCwm+fX+1/eBwi4qFjRT++MhtVC4ZX0=
golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU=
golang.org/x/term v0.12.0 h1:/ZfYdc3zq+q02Rv9vGqTeSItdzZTSNDmfTi0mBAuidU=
golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
Expand All @@ -581,6 +585,8 @@ golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc=
golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
Expand Down
2 changes: 1 addition & 1 deletion packages/botway.js/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
},
"devDependencies": {
"@types/js-yaml": "^4.0.5",
"@types/node": "^20.5.7",
"@types/node": "^20.5.9",
"typescript": "^5.2.2"
},
"engines": {
Expand Down
Loading

0 comments on commit 5577fd1

Please sign in to comment.