From 7a0be01cc8d060342c62ecd62026bc9f81066a72 Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Sat, 18 Apr 2026 16:00:32 +0000 Subject: [PATCH 1/3] Work in progress --- bun.lockb | Bin 362288 -> 356158 bytes src/routeTree.gen.ts | 9 +++++++++ 2 files changed, 9 insertions(+) diff --git a/bun.lockb b/bun.lockb index 8a51b8ad03798034f5b6f8a92b11be5ef1d9c497..dab31462ab9a18393a0e54b194906f36db5170fd 100755 GIT binary patch delta 42212 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 delta 45600 zcmeEvcU+C{|NnjN(@7^nXi3P-C@RXzi8yA+Y*=Y18Z;=Y>=|<7$_Uw;tgP&j5i$!Q zL`KM7@q51R`#$tu-|zSH_>F&l@AK%{^Ljn6*L7X5Yuwj;pSyFPj@&cZIoEW)UA@t5 zW=ua^X62Z#VM8CivvYS}xU0*j4YvnrzeH7Y>(_b)w`!V-qnB4=ziPb8u+*3WbzFWl z$Cc-}_$y!&aBr|N*n2d`8G;web{g0M_U#yss{}p)HV3bRUIAQH=G9|3t~BiNu+6{$ zVDf7RrglC=aa={PVm!wgaa>^hJ_uByUqnC%l3ZgrlASw2swmVyIwAzRZ^Y0Mz7dfD z7obyvvGE*N1{?&YfDKU26#M{{n1IiN$zBVtAY>Z)@!U+op>&vo&3ullhKxcmMbs%# zs<0WDDk=@#3jBVa)PtMzgsY{saWfZ7_4ZHVxN^vj42TFHylRycvu{{z zsBe^CP@%qLUqT-)hpb|ZYFf&vh$e{f(RD2{VWk%Al#2O9jS)f`s?>;7@TY(y142gyL~z`&$ndbH(1!+uMaG8t zad+3z9K~_*myn;TgwuH3+JRlsv$TZ8v*lzI~D8xj&68O3daO@SWYB=rc*`G)xV z2ke1Ofvp15YFh{ABzySf7z)!a}jL}n?%Fo-S1L7{2>>{P) zH{lS*pCWqzfmXTwVQFp@N2IyGm(FoDp&tX&+^q!Dnur5e2ltorTYzcNRsz=ne?&dx zp98i69|TiJmx8HWbuhKJJMM(k(j7*z=SWU^bYB+67EK9F0Se zUYVz*5jYH{3hN@@6l^Rr2PSZ2{-Y=#s_JJ{6mo~aP1z|(Wm5MKtCofNquSyuE=o>;{C$0AqH^VQ#ep(Z-Ht3ow_eo zvb{&U>fYA$I`O(f=y$Y{7{Nh1G_Tpv9M{iG=NQ$ zFbFpF#{@Rj(*`!Jo?KFb%YBZ|n=3HUdBNoBYKSNMib(xWyPr%D9D*q)5iVri$S&_B0?eBseUJlN7#mh`}szp)sW!O;3zKg zhm`MxdMF^hpHc^g2gK3};>N%(O=pL|5Z|b%0DrD794XR($mpoxkVq~da%6NsL@c+3 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 diff --git a/src/routeTree.gen.ts b/src/routeTree.gen.ts index f44751d..2ce160e 100644 --- a/src/routeTree.gen.ts +++ b/src/routeTree.gen.ts @@ -847,3 +847,12 @@ const rootRouteChildren: RootRouteChildren = { export const routeTree = rootRouteImport ._addFileChildren(rootRouteChildren) ._addFileTypes() + +import type { getRouter } from './router.tsx' +import type { createStart } from '@tanstack/react-start' +declare module '@tanstack/react-start' { + interface Register { + ssr: true + router: Awaited> + } +} From 9f558fb41c351e7a7b8449c6035809f413c13708 Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Sat, 18 Apr 2026 16:01:01 +0000 Subject: [PATCH 2/3] Changes Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com> --- src/routeTree.gen.ts | 9 --- src/routes/admin.users.tsx | 51 ++++++------- .../functions/admin-set-password/index.ts | 71 +++++++++++++++++++ 3 files changed, 98 insertions(+), 33 deletions(-) create mode 100644 supabase/functions/admin-set-password/index.ts diff --git a/src/routeTree.gen.ts b/src/routeTree.gen.ts index 2ce160e..f44751d 100644 --- a/src/routeTree.gen.ts +++ b/src/routeTree.gen.ts @@ -847,12 +847,3 @@ const rootRouteChildren: RootRouteChildren = { export const routeTree = rootRouteImport ._addFileChildren(rootRouteChildren) ._addFileTypes() - -import type { getRouter } from './router.tsx' -import type { createStart } from '@tanstack/react-start' -declare module '@tanstack/react-start' { - interface Register { - ssr: true - router: Awaited> - } -} diff --git a/src/routes/admin.users.tsx b/src/routes/admin.users.tsx index e866344..af07c44 100644 --- a/src/routes/admin.users.tsx +++ b/src/routes/admin.users.tsx @@ -50,7 +50,7 @@ import { TableRow, } from "@/components/ui/table"; import { Badge } from "@/components/ui/badge"; -import { Loader2, UserPlus, Trash2 } from "lucide-react"; +import { Loader2, UserPlus, Trash2, KeyRound } from "lucide-react"; import { toast } from "sonner"; export const Route = createFileRoute("/admin/users")({ @@ -231,29 +231,32 @@ function UsersPage() { /> - {!isSelf && ( - - - - - - - Delete user? - - This will permanently remove {u.email} and revoke their access. - - - - Cancel - handleDelete(u.id)}> - Delete - - - - - )} +
+ + {!isSelf && ( + + + + + + + Delete user? + + This will permanently remove {u.email} and revoke their access. + + + + Cancel + handleDelete(u.id)}> + Delete + + + + + )} +
); diff --git a/supabase/functions/admin-set-password/index.ts b/supabase/functions/admin-set-password/index.ts new file mode 100644 index 0000000..1edd33d --- /dev/null +++ b/supabase/functions/admin-set-password/index.ts @@ -0,0 +1,71 @@ +// Admin-only edge function to set a user's password. +import { createClient } from "https://esm.sh/@supabase/supabase-js@2.49.4"; + +const corsHeaders = { + "Access-Control-Allow-Origin": "*", + "Access-Control-Allow-Headers": "authorization, x-client-info, apikey, content-type", + "Access-Control-Allow-Methods": "POST, OPTIONS", +}; + +Deno.serve(async (req) => { + if (req.method === "OPTIONS") return new Response(null, { headers: corsHeaders }); + + try { + const SUPABASE_URL = Deno.env.get("SUPABASE_URL")!; + const SERVICE_ROLE = Deno.env.get("SUPABASE_SERVICE_ROLE_KEY")!; + const ANON_KEY = Deno.env.get("SUPABASE_PUBLISHABLE_KEY") ?? Deno.env.get("SUPABASE_ANON_KEY")!; + + const token = (req.headers.get("Authorization") ?? "").replace("Bearer ", ""); + if (!token) { + return new Response(JSON.stringify({ error: "Missing auth" }), { + status: 401, + headers: { ...corsHeaders, "Content-Type": "application/json" }, + }); + } + + const userClient = createClient(SUPABASE_URL, ANON_KEY, { + global: { headers: { Authorization: `Bearer ${token}` } }, + }); + const { data: userData } = await userClient.auth.getUser(); + if (!userData.user) { + return new Response(JSON.stringify({ error: "Unauthorized" }), { + status: 401, + headers: { ...corsHeaders, "Content-Type": "application/json" }, + }); + } + + const admin = createClient(SUPABASE_URL, SERVICE_ROLE); + const { data: isAdminData } = await admin.rpc("is_admin", { _user_id: userData.user.id }); + if (!isAdminData) { + return new Response(JSON.stringify({ error: "Forbidden" }), { + status: 403, + headers: { ...corsHeaders, "Content-Type": "application/json" }, + }); + } + + const { user_id, password } = (await req.json()) as { user_id: string; password: string }; + if (!user_id || !password || typeof password !== "string" || password.length < 10) { + return new Response( + JSON.stringify({ error: "Password must be at least 10 characters" }), + { status: 400, headers: { ...corsHeaders, "Content-Type": "application/json" } }, + ); + } + + const { error } = await admin.auth.admin.updateUserById(user_id, { password }); + if (error) { + return new Response(JSON.stringify({ error: error.message }), { + status: 400, + headers: { ...corsHeaders, "Content-Type": "application/json" }, + }); + } + + return new Response(JSON.stringify({ ok: true }), { + headers: { ...corsHeaders, "Content-Type": "application/json" }, + }); + } catch (e) { + return new Response(JSON.stringify({ error: (e as Error).message }), { + status: 500, + headers: { ...corsHeaders, "Content-Type": "application/json" }, + }); + } +}); From c3c7a34d6762031dfa79fc7a98ff37c84c6423d7 Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Sat, 18 Apr 2026 16:01:17 +0000 Subject: [PATCH 3/3] Changes Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com> --- src/routes/admin.users.tsx | 65 +++++++++++++++++++++++++++++++++++++- 1 file changed, 64 insertions(+), 1 deletion(-) diff --git a/src/routes/admin.users.tsx b/src/routes/admin.users.tsx index af07c44..68fb4ef 100644 --- a/src/routes/admin.users.tsx +++ b/src/routes/admin.users.tsx @@ -189,7 +189,7 @@ function UsersPage() { Email Role Hourly rate - + Actions @@ -315,6 +315,69 @@ function RateInput({ } +function SetPasswordDialog({ userId, email }: { userId: string; email: string }) { + const [open, setOpen] = useState(false); + const [password, setPassword] = useState(""); + const [submitting, setSubmitting] = useState(false); + + const onSubmit = async (e: React.FormEvent) => { + e.preventDefault(); + setSubmitting(true); + const { error } = await supabase.functions.invoke("admin-set-password", { + body: { user_id: userId, password }, + }); + setSubmitting(false); + if (error) { + toast.error("Could not change password", { description: error.message }); + return; + } + toast.success("Password updated", { + description: "Share the new password securely with the user.", + }); + setPassword(""); + setOpen(false); + }; + + return ( + + + + + + + Change password + + Set a new password for {email}. Share it with them through a secure channel. + + +
+
+ + setPassword(e.target.value)} + minLength={10} + required + autoFocus + /> +

Min 10 characters.

+
+ + + +
+
+
+ ); +} + function InviteDialog({ onCreated }: { onCreated: () => void }) { const [email, setEmail] = useState(""); const [fullName, setFullName] = useState("");