fix logout endpoint

Seto Elkahfi committed Aug 1, 2024 at 14:35 UTC 1995dfd72d48bef513d58b534bbc2d4223d97cd0
2 files changed +40 -20
frontend/splitfire-desktop/app/logout/page.tsx
+39 -19
@@ -1,12 +1,13 @@
1 "use client";
2
3 -import { useContext, useEffect, useState } from "react";
3 +import { useContext, useState } from "react";
4 import { UserContext } from "../_src/lib/CurrentUserContext";
5 import { useLogger } from "../_src/lib/logger";
6 -import { db } from "../_src/lib/db";
6 +import { CurrentUser, db } from "../_src/lib/db";
7 import { invoke } from "@tauri-apps/api/tauri";
8 import { TAURI_ACCOUNT_LOGOUT } from "../_src/lib/tauriHandler";
9 import { useRouter } from "next/navigation";
10 +import { Button } from "../_ui/components/button";
11
12 enum State {
13 LOADING,
@@ -16,30 +17,49 @@ enum State {
17
18 export default function Page() {
19 const [state, setState] = useState(State.LOADING);
20 + const [user, setUser] = useState<CurrentUser | null>(null);
21 const log = useLogger("Logout/Page");
20 - const currentUser = useContext(UserContext);
22 const router = useRouter();
23 + const userContext = useContext(UserContext);
24
23 - useEffect(() => {
24 - async function logout() {
25 - log.debug(currentUser);
25 + const updateUser = (newUser: CurrentUser | null) => {
26 + setUser(newUser);
27 + };
28 +
29 + const logout = async () => {
30 + try {
31 + setState(State.LOADING);
32 + log.debug("user", user);
33 + log.debug("userContext", userContext);
34 + const payload = {
35 + accessToken: userContext.user?.accessToken,
36 + };
37 + log.debug("Logging out", payload);
38 + const res = await invoke(TAURI_ACCOUNT_LOGOUT, payload);
39 + log.debug(res);
40 + updateUser(null);
41 db.currentUser.clear();
27 - if (currentUser.user?.accessToken) {
28 - const res = await invoke(TAURI_ACCOUNT_LOGOUT, {
29 - accessToken: currentUser.user?.accessToken,
30 - });
31 - log.debug(res);
32 - }
42 setState(State.LOADED);
43 router.push("/");
44 + router.refresh();
45 + } catch (error) {
46 + log.error(error);
47 + setState(State.ERROR);
48 }
36 - logout();
37 - // eslint-disable-next-line react-hooks/exhaustive-deps
38 - }, [state]);
39 - const text = state === State.LOADING ? "Logging out..." : "Logged out";
49 + };
50 +
51 + const buttonText = state === State.LOADING ? "Logging out..." : "Logout";
52 +
53 return (
41 - <div className="prose prose-sm prose-invert max-w-none">
42 - <div className="grid grid-cols-1 gap-6 lg:grid-cols-3">{text}</div>
43 - </div>
54 + <UserContext.Provider value={{ user, updateUser }}>
55 + <div className="prose prose-sm prose-invert max-w-none">
56 + <div className="grid grid-cols-1 gap-6 lg:grid-cols-3">
57 + <Button onClick={() => logout()} variant={"outline"} size={"lg"}>
58 + {buttonText}
59 + </Button>
60 + <div>This will remove your session and caches.</div>
61 + </div>
62 + </div>
63 + </UserContext.Provider>
64 );
65 }
frontend/splitfire-desktop/src-tauri/src/rest/account.rs
+1 -1
@@ -96,7 +96,7 @@ pub async fn account_logout(access_token: String) {
96 debug!("Logging out with access token {}", access_token);
97 // Logout
98 let response = Client::new()
99 - .post(account_url_builder(PATH_ACCOUNT_LOGOUT))
99 + .delete(account_url_builder(PATH_ACCOUNT_LOGOUT))
100 .header("Authorization", format!("Bearer {}", access_token))
101 .send()
102 .await;