diff --git a/src/pages/admin/settings/profile/(functions)/submit-profile-form.ts b/src/pages/admin/settings/profile/(functions)/submit-profile-form.ts index 9343755..28e4e05 100644 --- a/src/pages/admin/settings/profile/(functions)/submit-profile-form.ts +++ b/src/pages/admin/settings/profile/(functions)/submit-profile-form.ts @@ -5,12 +5,14 @@ import clientUploadMediaHandler from "@/src/functions/frontend/client-upload-med import type useFormInit from "@/src/hooks/use-form-init"; import type { UserFormObject } from "@/src/types"; import { ProfileFields } from "../(data)/profile-fields"; +import fetchApi from "@moduletrace/twui/utils/fetch/fetchApi"; type Params = ReturnType> & { onSaved: (params: { saved: UserFormObject; photo_src?: string; msg: string; + success?: boolean; }) => void; }; @@ -87,7 +89,14 @@ export default async function submitProfileForm({ } } - onSaved({ saved, photo_src: image?.imageBase64Full, msg: "Saved." }); + const reauth = await fetchApi(`/api/admin/reauth`); + + onSaved({ + saved, + photo_src: image?.imageBase64Full, + msg: "Saved.", + success: true, + }); } catch (error: any) { setStatus({ error: true, diff --git a/src/pages/admin/settings/profile/(partials)/profile-form.tsx b/src/pages/admin/settings/profile/(partials)/profile-form.tsx index 6e2128c..1a3a186 100644 --- a/src/pages/admin/settings/profile/(partials)/profile-form.tsx +++ b/src/pages/admin/settings/profile/(partials)/profile-form.tsx @@ -25,8 +25,7 @@ export default function ProfileForm({ person }: Props) { ); const [saved_photo_src, setSavedPhotoSrc] = useState(() => person.profile_media_id - ? grabMediaURL({ media: { id: person.profile_media_id } }) - .media_url + ? grabMediaURL({ media: { id: person.profile_media_id } }).media_url : undefined, ); /** @@ -39,8 +38,7 @@ export default function ProfileForm({ person }: Props) { existing: saved, existing_full: { id: person.id }, }); - const { form, setForm, image, setImage, loading, status, setStatus } = - init; + const { form, setForm, image, setImage, loading, status, setStatus } = init; const dirty = isProfileDirty({ form, existing: saved, image }); const initials = [saved.first_name, saved.last_name] @@ -70,6 +68,8 @@ export default function ProfileForm({ person }: Props) { setImage(undefined); if (photo_src) setSavedPhotoSrc(photo_src); setNotice(msg); + + window.location.reload(); }, }); }} @@ -87,7 +87,10 @@ export default function ProfileForm({ person }: Props) { /> - + - + diff --git a/src/pages/api/admin/reauth.ts b/src/pages/api/admin/reauth.ts new file mode 100644 index 0000000..2403911 --- /dev/null +++ b/src/pages/api/admin/reauth.ts @@ -0,0 +1,43 @@ +import findUserByIdentifier from "@/src/functions/backend/auth/find-user-by-identifier"; +import verifyUserPassword from "@/src/functions/backend/auth/verify-user-password"; +import loginUser from "@/src/functions/backend/auth/login-user"; +import logEvent, { grabRequestIP } from "@/src/functions/backend/logger"; +import { AppData } from "@/src/data/app-data"; +import rateLimit from "@/src/utils/rate-limit"; +import { PasswordLoginRequestSchema } from "@/src/schemas/auth-schema"; +import parseWithSchema from "@/src/utils/parse-with-schema"; +import safeErrorMessage from "@/src/utils/safe-error-message"; +import AppError from "@/src/utils/app-error"; +import type { + APIResponseObject, + BunextAPIRouteHandler, +} from "@moduletrace/bunext/types"; +import userAuth from "@/src/functions/backend/auth/user-auth"; + +/** + * Re-authenticate a logged in user + */ +export const handler: BunextAPIRouteHandler = async ({ + req, +}) => { + try { + const { user } = await userAuth({ req }); + + if (!user?.logged_in_status) { + return { + success: false, + msg: `Unauthorized`, + }; + } + + return await loginUser({ + user_id: user.id, + req, + }); + } catch (error: unknown) { + return { + success: false, + msg: safeErrorMessage({ error }), + }; + } +};