diff --git a/packages/api/middleware/auth.ts b/packages/api/middleware/auth.ts
index ef83a94..f0bccc4 100644
--- a/packages/api/middleware/auth.ts
+++ b/packages/api/middleware/auth.ts
@@ -26,7 +26,6 @@ export const authCheck = async (
next();
} catch (error) {
- console.log(error);
res.status(401).send("unauthorized");
}
};
diff --git a/packages/api/routes/user.ts b/packages/api/routes/user.ts
index b766dfd..f83ad39 100644
--- a/packages/api/routes/user.ts
+++ b/packages/api/routes/user.ts
@@ -43,8 +43,6 @@ async function handleAuthCheck(req: Request, res: Response) {
async function getUserDetails(req: Request, res: Response) {
try {
- console.log(res.locals.userInfo as JwtClaims);
-
const userInfo = res.locals.userInfo as JwtClaims;
const user = await UserService.getUserById(userInfo.userId);
diff --git a/packages/api/services/user.service.ts b/packages/api/services/user.service.ts
index 7ae564f..412b63e 100644
--- a/packages/api/services/user.service.ts
+++ b/packages/api/services/user.service.ts
@@ -7,7 +7,7 @@ import { collections } from "./database.service";
export class UserService {
static async getUserById(userId: string) {
- const query = { _id: userId };
+ const query = { _id: new ObjectId(userId) };
const res = await collections.users?.findOne(query);
diff --git a/packages/desktop/src/components/ProtectedRoute/index.tsx b/packages/desktop/src/components/ProtectedRoute/index.tsx
index 7c06820..78f093c 100644
--- a/packages/desktop/src/components/ProtectedRoute/index.tsx
+++ b/packages/desktop/src/components/ProtectedRoute/index.tsx
@@ -1,11 +1,12 @@
import { useAuthCheck, useLogin } from "../../controller/index";
-import { $authTokens } from "../../controller/recoil";
+import { $jwtToken } from "../../controller/recoil";
import Login from "../../pages/Login";
import NirvanaApi from "../../controller/nirvanaApi";
import { STORE_ITEMS } from "../../electron/constants";
import SkeletonLoader from "../loading/skeleton";
import { useEffect } from "react";
+import { useRecoilState } from "recoil";
export default function ProtectedRoute({
children,
@@ -14,6 +15,8 @@ export default function ProtectedRoute({
}) {
const { isLoading, isError, isSuccess, refetch } = useAuthCheck();
+ const [jwtToken, setJwtToken] = useRecoilState($jwtToken);
+
useEffect(() => {
// on load of this, if we already have jwt tokens in store,
// then try using them with auth check
@@ -27,6 +30,17 @@ export default function ProtectedRoute({
});
}, []);
+ useEffect(() => {
+ if (jwtToken) {
+ window.electronAPI.store.set(STORE_ITEMS.AUTH_SESSION_JWT, jwtToken);
+ } else {
+ window.electronAPI.store.set(STORE_ITEMS.AUTH_SESSION_JWT, null);
+ }
+
+ NirvanaApi._jwtToken = jwtToken;
+ refetch();
+ }, [jwtToken]);
+
if (isLoading) {
return (
diff --git a/packages/desktop/src/components/User/userAvatarWithStatus.tsx b/packages/desktop/src/components/User/userAvatarWithStatus.tsx
index b0a092e..6449711 100644
--- a/packages/desktop/src/components/User/userAvatarWithStatus.tsx
+++ b/packages/desktop/src/components/User/userAvatarWithStatus.tsx
@@ -18,19 +18,19 @@ export function UserStatusBubble(props: { status: UserStatus }) {
switch (props.status) {
case UserStatus.ONLINE:
return (
-
+
);
case UserStatus.OFFLINE:
return (
-
+
);
case UserStatus.FLOW_STATE:
return (
-
+
);
default:
return (
-
+
);
}
}
diff --git a/packages/desktop/src/controller/index.tsx b/packages/desktop/src/controller/index.tsx
index 6bdabb3..5bc7e2a 100644
--- a/packages/desktop/src/controller/index.tsx
+++ b/packages/desktop/src/controller/index.tsx
@@ -6,7 +6,6 @@ export function useAuthCheck() {
return useQuery("AUTH_CHECK", ApiCalls.authCheck, {
retry: false,
refetchOnWindowFocus: false,
- enabled: NirvanaApi._jwtToken ? true : false,
});
}
diff --git a/packages/desktop/src/controller/nirvanaApi.ts b/packages/desktop/src/controller/nirvanaApi.ts
index 012c488..5d51efd 100644
--- a/packages/desktop/src/controller/nirvanaApi.ts
+++ b/packages/desktop/src/controller/nirvanaApi.ts
@@ -19,31 +19,25 @@ export default class NirvanaApi {
const fullUrl = localHost + url;
- try {
- let res;
- if (privateRoute && !this._jwtToken)
- throw Error("No jwt token available!");
+ let res;
+ if (privateRoute && !this._jwtToken) throw Error("No jwt token available!");
- if (privateRoute && this._jwtToken) {
- res = await fetch(fullUrl, {
- method: method,
- headers: { Authorization: this._jwtToken },
- });
- } else {
- res = await fetch(fullUrl);
- }
-
- if (!res.ok) {
- if (res.status === 401) throw new Error("You are not authorized here");
-
- throw new Error("Something went wrong");
- }
-
- return await res.json();
- } catch (error) {
- console.log(error);
- throw error;
+ if (privateRoute && this._jwtToken) {
+ res = await fetch(fullUrl, {
+ method: method,
+ headers: { Authorization: this._jwtToken },
+ });
+ } else {
+ res = await fetch(fullUrl);
}
+
+ if (!res.ok) {
+ if (res.status === 401) throw new Error("You are not authorized here");
+
+ throw new Error("Something went wrong");
+ }
+
+ return await res.json();
}
}
diff --git a/packages/desktop/src/controller/recoil.tsx b/packages/desktop/src/controller/recoil.tsx
index 762e5c7..80f9888 100644
--- a/packages/desktop/src/controller/recoil.tsx
+++ b/packages/desktop/src/controller/recoil.tsx
@@ -1,19 +1,15 @@
import { atom } from "recoil";
-export const $authTokens = atom<{
- accessToken: string;
- refreshToken: string;
- idToken: string;
-} | null>({
- key: "AUTH_TOKENS", // unique ID (with respect to other atoms/selectors)
- default: null, // default value (aka initial value)
-});
-
export const $searchQuery = atom
({
key: "SEARCH_QUERY",
default: "",
});
+export const $jwtToken = atom({
+ key: "JWT_TOKEN",
+ default: null,
+});
+
// conversation id
export const $selectedConversation = atom({
key: "SELECTED_CONVERSATION",
diff --git a/packages/desktop/src/electron/constants.ts b/packages/desktop/src/electron/constants.ts
index ebaafa7..a4d5798 100644
--- a/packages/desktop/src/electron/constants.ts
+++ b/packages/desktop/src/electron/constants.ts
@@ -8,7 +8,6 @@ enum Channels {
}
export enum STORE_ITEMS {
- GOOGLE_AUTH_TOKENS = "GOOGLE_AUTH_TOKENS",
AUTH_SESSION_JWT = "AUTH_SESSION_JWT",
}
diff --git a/packages/desktop/src/electron/handleLogin.ts b/packages/desktop/src/electron/handleLogin.ts
index 40e4106..55bb6b3 100644
--- a/packages/desktop/src/electron/handleLogin.ts
+++ b/packages/desktop/src/electron/handleLogin.ts
@@ -16,7 +16,5 @@ const myApiOauth = new ElectronGoogleOAuth2(
export async function handleGoogleLogin() {
const tokens = await myApiOauth.openAuthWindowAndGetTokens();
- store.set(STORE_ITEMS.GOOGLE_AUTH_TOKENS, tokens);
-
browserWindow.webContents.send(Channels.GOOGLE_AUTH_TOKENS, tokens);
}
diff --git a/packages/desktop/src/pages/Home/header/index.tsx b/packages/desktop/src/pages/Home/header/index.tsx
index 1b17775..c59a223 100644
--- a/packages/desktop/src/pages/Home/header/index.tsx
+++ b/packages/desktop/src/pages/Home/header/index.tsx
@@ -1,9 +1,10 @@
-import { $authTokens, $searchQuery } from "../../../controller/recoil";
+import { $jwtToken, $searchQuery } from "../../../controller/recoil";
import { Dropdown, Menu } from "antd";
import Logo, { LogoType } from "../../../components/Logo";
import { useRecoilState, useSetRecoilState } from "recoil";
import { GlobalHotKeys } from "react-hotkeys";
+import NirvanaApi from "../../../controller/nirvanaApi";
import { STORE_ITEMS } from "../../../electron/constants";
import SocketChannels from "@nirvana/core/sockets/channels";
import UserAvatarWithStatus from "../../../components/User/userAvatarWithStatus";
@@ -16,17 +17,16 @@ export default function Header() {
const { data: userDetailsResponse, isLoading } = useGetUserDetails();
const [searchQuery, setSearchQuery] = useRecoilState($searchQuery);
- const inputRef = useRef(null);
+ const setJwtToken = useSetRecoilState($jwtToken);
- const setAuthTokens = useSetRecoilState($authTokens);
+ const inputRef = useRef(null);
if (isLoading) {
return getting data;
}
const logOut = () => {
- window.electronAPI.store.set(STORE_ITEMS.GOOGLE_AUTH_TOKENS, null);
- setAuthTokens(null);
+ setJwtToken(undefined);
};
const updateStatus = (newStatus: UserStatus) => {
diff --git a/packages/desktop/src/pages/Home/index.tsx b/packages/desktop/src/pages/Home/index.tsx
index 5bb5aae..e18460c 100644
--- a/packages/desktop/src/pages/Home/index.tsx
+++ b/packages/desktop/src/pages/Home/index.tsx
@@ -17,7 +17,7 @@ export default function Home() {
{/* header */}
- {/*
*/}
+
{/* main content */}
diff --git a/packages/desktop/src/pages/Login/index.tsx b/packages/desktop/src/pages/Login/index.tsx
index fedfa69..9ca68b5 100644
--- a/packages/desktop/src/pages/Login/index.tsx
+++ b/packages/desktop/src/pages/Login/index.tsx
@@ -2,23 +2,17 @@ import Channels, { STORE_ITEMS } from "../../electron/constants";
import { useEffect, useState } from "react";
import { useRecoilState, useSetRecoilState } from "recoil";
-import { $authTokens } from "../../controller/recoil";
+import { $jwtToken } from "../../controller/recoil";
import { CircularProgress } from "@mui/material";
import { FcGoogle } from "react-icons/fc";
import Logo from "../../components/Logo";
-import NirvanaApi from "../../controller/nirvanaApi";
import { useLogin } from "../../controller/index";
export default function Login() {
const { mutateAsync } = useLogin();
const [isLoading, setIsLoading] = useState
(false);
- const continueAuth = () => {
- setIsLoading(true);
-
- // send to main process
- window.electronAPI.auth.initiateLogin();
- };
+ const setJwtToken = useSetRecoilState($jwtToken);
useEffect(() => {
window.electronAPI.once(
@@ -39,12 +33,7 @@ export default function Login() {
});
const { jwtToken, userDetails } = loginResponse;
-
- window.electronAPI.store.set(STORE_ITEMS.AUTH_SESSION_JWT, jwtToken);
-
- console.log(loginResponse);
-
- // window.location.reload();
+ setJwtToken(jwtToken);
}
);
@@ -54,6 +43,13 @@ export default function Login() {
// };
}, []);
+ const continueAuth = () => {
+ setIsLoading(true);
+
+ // send to main process
+ window.electronAPI.auth.initiateLogin();
+ };
+
return (