From 013d2fcb16d890de7d0861e6c516b55f2e42c31e Mon Sep 17 00:00:00 2001 From: talksik Date: Thu, 17 Mar 2022 22:45:53 -0400 Subject: [PATCH] adding route that works with creating user and such --- packages/api/index.ts | 4 +-- packages/api/package.json | 1 + packages/api/routes/index.ts | 10 ------- packages/api/routes/user.ts | 10 ++++--- packages/api/services/user.service.ts | 16 ++++++----- .../src/components/ProtectedRoute/index.tsx | 21 ++++++++------ packages/desktop/src/controller/index.tsx | 18 +++++++++--- packages/desktop/src/controller/nirvanaApi.ts | 26 +++++++++++------ packages/desktop/src/nirvanaApp.tsx | 2 +- packages/desktop/src/pages/Login/index.tsx | 28 ++++++++++++++++--- 10 files changed, 87 insertions(+), 49 deletions(-) delete mode 100644 packages/api/routes/index.ts diff --git a/packages/api/index.ts b/packages/api/index.ts index e07ece2..026f03f 100644 --- a/packages/api/index.ts +++ b/packages/api/index.ts @@ -3,7 +3,7 @@ import express, { Application, Request, Response } from "express"; import { NextFunction } from "express"; import { connectToDatabase } from "./services/database.service"; import cors from "cors"; -import getRoutes from "./routes"; +import getUserRoutes from "./routes/user"; const app = express(); @@ -18,7 +18,7 @@ app.get("/", (req: Request, res: Response) => { res.send("hello world."); }); -app.use("/api", getRoutes()); +app.use("/api/users", getUserRoutes()); app.listen(5000, () => console.log("Example app is listening on port 5000.")); diff --git a/packages/api/package.json b/packages/api/package.json index 11ebf15..c544414 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -5,6 +5,7 @@ "license": "MIT", "dependencies": { "@nirvana/core": "*", + "axios": "^0.26.1", "cors": "^2.8.5", "express": "^4.17.3", "google-auth-library": "^7.14.0", diff --git a/packages/api/routes/index.ts b/packages/api/routes/index.ts deleted file mode 100644 index cfbc673..0000000 --- a/packages/api/routes/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -import express from "express"; -import getUserRoutes from "./user"; - -export default function getRoutes() { - const router = express.Router(); - - router.use("/users", getUserRoutes()); - - return router; -} diff --git a/packages/api/routes/user.ts b/packages/api/routes/user.ts index e26ff1e..39e054a 100644 --- a/packages/api/routes/user.ts +++ b/packages/api/routes/user.ts @@ -14,8 +14,7 @@ export default function getUserRoutes() { // get user details based on id token router.get("/", authCheck, getUserDetails); - // - router.post("/", createUser); + router.post("/create", createUser); return router; } @@ -45,8 +44,10 @@ async function createUser(req: Request, res: Response) { try { const { access_token } = req.query; + console.log(access_token); + if (!access_token) { - res.status(400); + res.status(400).send("No access token provided"); return; } @@ -79,6 +80,7 @@ async function createUser(req: Request, res: Response) { ? res.status(200).send("User created") : res.status(500).send("Failed to create new user"); } catch (error) { - res.status(500); + console.log(error); + res.status(500).send("Problem in creating user"); } } diff --git a/packages/api/services/user.service.ts b/packages/api/services/user.service.ts index 43dc0f4..a8b11ea 100644 --- a/packages/api/services/user.service.ts +++ b/packages/api/services/user.service.ts @@ -1,5 +1,7 @@ +import { GoogleUserInfo, User } from "@nirvana/core/models"; + import { ObjectId } from "mongodb"; -import { User } from "@nirvana/core/models"; +import axios from "axios"; import { collections } from "./database.service"; export class UserService { @@ -13,11 +15,11 @@ export class UserService { return await collections.users?.insertOne(newUser); } - static async getGoogleUserInfoWithAccessToken(accessToken: string) { - return await ( - await fetch( - `https://www.googleapis.com/oauth2/v1/userinfo?access_token=${accessToken}` - ) - ).json(); + static async getGoogleUserInfoWithAccessToken( + accessToken: string + ): Promise { + return await axios.get( + `https://www.googleapis.com/oauth2/v1/userinfo?access_token=${accessToken}` + ); } } diff --git a/packages/desktop/src/components/ProtectedRoute/index.tsx b/packages/desktop/src/components/ProtectedRoute/index.tsx index 115f4da..e184468 100644 --- a/packages/desktop/src/components/ProtectedRoute/index.tsx +++ b/packages/desktop/src/components/ProtectedRoute/index.tsx @@ -5,24 +5,27 @@ import { nirvanaApi } from "../../controller/nirvanaApi"; import { useEffect } from "react"; import { useGetUserDetails } from "../../controller/index"; -export default function ProtectedRoute({ ...children }) { +export default function ProtectedRoute({ + children, +}: { + children?: React.ReactNode; +}) { const { isLoading, isError } = useGetUserDetails(); - - useEffect(() => { - // console.log(window.electronAPI.store.get(STORE_ITEMS.AUTH_TOKENS)); - // nirvanaApi.getUserDetails(); - }, []); - const navigate = useNavigate(); - if (isLoading) return please wait while we authenticate you; - useEffect(() => { if (isError) { navigate("/login"); } }, [isError]); + useEffect(() => { + // console.log(window.electronAPI.store.get(STORE_ITEMS.AUTH_TOKENS)); + // nirvanaApi.getUserDetails(); + }, []); + + if (isLoading) return please wait while we authenticate you; + // if we can successfully get user details, we are good to continue return <>{children}; diff --git a/packages/desktop/src/controller/index.tsx b/packages/desktop/src/controller/index.tsx index 293934e..5554a71 100644 --- a/packages/desktop/src/controller/index.tsx +++ b/packages/desktop/src/controller/index.tsx @@ -1,12 +1,22 @@ +import { useMutation, useQuery } from "react-query"; + import { nirvanaApi } from "./nirvanaApi"; -import { useQuery } from "react-query"; +import { queryClient } from "../nirvanaApp"; export enum Querytypes { GET_USER_DETAILS = "GET_USER_DETAILS", } export function useGetUserDetails() { - return useQuery(Querytypes.GET_USER_DETAILS, () => - nirvanaApi.getUserDetails() - ); + return useQuery(Querytypes.GET_USER_DETAILS, nirvanaApi.user.getUserDetails, { + retry: false, + }); +} + +export function useCreateUser() { + return useMutation(nirvanaApi.user.createUser, { + onSettled: (data, error) => { + return queryClient.invalidateQueries(Querytypes.GET_USER_DETAILS); + }, + }); } diff --git a/packages/desktop/src/controller/nirvanaApi.ts b/packages/desktop/src/controller/nirvanaApi.ts index 1a215f6..73cd5de 100644 --- a/packages/desktop/src/controller/nirvanaApi.ts +++ b/packages/desktop/src/controller/nirvanaApi.ts @@ -40,14 +40,24 @@ class NirvanaApi { } } - async getUserDetails(): Promise { - return await ( - await fetch(localHost + `/users`, { - method: "GET", - headers: { Authorization: this._authToken }, - }) - ).json(); - } + user = { + async getUserDetails(): Promise { + return await ( + await fetch(localHost + `/users`, { + method: "GET", + headers: { Authorization: this._authToken }, + }) + ).json(); + }, + async createUser(accessToken: string) { + return await fetch( + localHost + `/users/create?access_token=${accessToken}`, + { + method: "POST", + } + ); + }, + }; } export const nirvanaApi = new NirvanaApi(); diff --git a/packages/desktop/src/nirvanaApp.tsx b/packages/desktop/src/nirvanaApp.tsx index d50de5f..13d87a1 100644 --- a/packages/desktop/src/nirvanaApp.tsx +++ b/packages/desktop/src/nirvanaApp.tsx @@ -10,7 +10,7 @@ import testConnection from "@nirvana/core"; testConnection(); // Create a client -const queryClient = new QueryClient(); +export const queryClient = new QueryClient(); function NirvanaApp() { return ( diff --git a/packages/desktop/src/pages/Login/index.tsx b/packages/desktop/src/pages/Login/index.tsx index 5fa8bee..b3b2f09 100644 --- a/packages/desktop/src/pages/Login/index.tsx +++ b/packages/desktop/src/pages/Login/index.tsx @@ -4,12 +4,17 @@ import Channels from "../../electron/constants"; import { CircularProgress } from "@mui/material"; import Logo from "../../components/Logo"; import { nirvanaApi } from "../../controller/nirvanaApi"; +import { useCreateUser } from "../../controller/index"; import { useNavigate } from "react-router-dom"; export default function Login() { const navigate = useNavigate(); - const logIn = () => { + const [isSignUp, setIsSignUp] = useState(false); + + const { mutateAsync } = useCreateUser(); + + const continueAuth = () => { setIsLoading(true); // send to main process // ipcRenderer.send(Channels.ACTIVATE_LOG_IN); @@ -25,7 +30,12 @@ export default function Login() { nirvanaApi.setGoogleIdToken(id_token); - // home should handle this user now that they have signed in with google + // create user if on sign up page + if (isSignUp) { + await mutateAsync(access_token); + } + + // now can go to home and get authenticated regardless of type of user navigate("/home"); }); @@ -48,10 +58,20 @@ export default function Login() { ) : ( + )} + + {isSignUp ? ( + + ) : ( + )}