From 9bf749689984c4ef91929e93f3a69e2316fc88c3 Mon Sep 17 00:00:00 2001 From: Andrew Gundersen Date: Tue, 23 Mar 2021 10:24:06 -0500 Subject: [PATCH] upgrading auth functionality --- src/App.vue | 40 ++++-- src/background/audio.ts | 19 ++- src/background/handlers.ts | 46 ++---- src/background/run.ts | 12 +- src/background/session.ts | 131 ++---------------- .../inputItem/controllers/audioCtrl.ts | 2 +- src/components/settings.vue | 10 +- src/main.ts | 2 - src/modules/auth.ts | 2 +- src/modules/ws.ts | 79 +---------- src/router.ts | 55 -------- src/views/login.vue | 56 ++------ 12 files changed, 92 insertions(+), 362 deletions(-) delete mode 100644 src/router.ts diff --git a/src/App.vue b/src/App.vue index c60eb6c..44c2a11 100644 --- a/src/App.vue +++ b/src/App.vue @@ -15,8 +15,9 @@ /> - - + + + @@ -26,7 +27,7 @@ diff --git a/src/main.ts b/src/main.ts index fcad020..35774f7 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,7 +1,6 @@ // src/main.ts import App from "./App.vue"; -import router from "./router"; import mitt from "mitt"; import { createApp } from "vue"; @@ -12,6 +11,5 @@ const emitter = mitt(); const app = createApp(App) -app.use(router) app.provide("mitt", emitter) app.mount("#app"); diff --git a/src/modules/auth.ts b/src/modules/auth.ts index 3430cf2..b095034 100644 --- a/src/modules/auth.ts +++ b/src/modules/auth.ts @@ -21,7 +21,7 @@ if (token) { window.localStorage.setItem(AUTH_KEY, token); } -// Load key and invoke onAuthSession to try key-login. +// Token authentication. const authToken = async () => { console.log("Calling auth token!!") const { invoke } = useIpc(); diff --git a/src/modules/ws.ts b/src/modules/ws.ts index c487573..6a6594b 100644 --- a/src/modules/ws.ts +++ b/src/modules/ws.ts @@ -7,7 +7,7 @@ let socket: WebSocket; // Run every time we want to connect to backend. -export default function useWebSockets(receiveCallback: (s: Buffer) => any) { +export default function useWebSockets(receiveCallback: (s: string) => any) { const sendMessage = (data: string) => { @@ -27,14 +27,15 @@ export default function useWebSockets(receiveCallback: (s: Buffer) => any) { console.log('Message received: ', event); - receiveCallback(event.data) + receiveCallback(event.data.toString()) } const onClose = (event: WebSocket.CloseEvent) => { - console.log("socket closed normally.") + console.log("Socket closed normally.") } + // Reconnect automatically on error. const onError = (event: WebSocket.ErrorEvent) => { console.log('WebSocket error: ', event); @@ -55,76 +56,8 @@ export default function useWebSockets(receiveCallback: (s: Buffer) => any) { } return { - createSocket + createSocket, + sendMessage } -} - - - - - - - - - // Close existing sockets. - if (socket) { - socket.removeAllListeners(); - socket.terminate(); - socket.close(); - success = false; - } - - // Init new socket. - socket = new WebSocket(`ws://127.0.0.1:8760`); - socket.binaryType = 'arraybuffer'; - - // Handle requests for authentication (promise). - ipcMain.removeHandler('auth-session'); // avoid setting duplicate handlers - ipcMain.handle('auth-session', onAuthSession); - - // handle user message event - ipcMain.removeAllListeners('client-message'); - ipcMain.on('client-message', onClientMessage); - - // handle renderer logout event - ipcMain.removeAllListeners('logout'); - ipcMain.on('logout', (_event, _payload: string) => restart()); - - // Connect to the backend. - socket.on('open', () => { - console.log('Connected to Crimata Servers.'); - - // Try to authenticate token right away. - backgroundMitt.emit('ipc-renderer', { - endpoint: 'auth', - message: null - }); - - success = true; - - }); - - // Error handling. - socket.on('error', (_e) => { - - console.log('ERROR: Failed to connect.'); - socket.removeAllListeners(); - socket.close(); - - setTimeout(() => { - if (!success) { - console.log('Reconnecting...'); - initSession(); - } - }, 3000); // reconnect timeout - - }); - - socket.on('close', () => { - console.log('Connection droped! Restarting...'); - restart(); - }); - - socket.on("message", onMessage); } \ No newline at end of file diff --git a/src/router.ts b/src/router.ts deleted file mode 100644 index ee94a61..0000000 --- a/src/router.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { - createRouter, - createWebHistory, - createWebHashHistory, - RouteRecordRaw -} from "vue-router"; -import Home from "@/views/messenger.vue"; -import { useAuth } from '@/modules/auth'; - -// Define the routes (/*) for the app here. -const routes: Array = [ - { - path: "/", - name: "home", - component: Home, - meta: { requiresAuth: true }, - }, - { - path: "/login", - name: "login", - component: () => import("@/views/login.vue"), - meta: { requiresAuth: false }, - }, - { - path: "/register", - name: "register", - component: () => import("@/views/register.vue"), - meta: { requiresAuth: false }, - }, -]; - -const router = createRouter({ - history: process.env.IS_ELECTRON ? createWebHashHistory() : createWebHistory(process.env.BASE_URL), - routes -}); - -// route auth check -router.beforeEach((to, from, next) => { - const { accessToken } = useAuth(); - - // Not logged into a guarded route? - if (to.meta.requiresAuth && !accessToken.value) { - next({ name: 'login' }) - } - - // Logged in for an auth route - else if ((to.name == 'login' || to.name == 'register') && accessToken.value){ - next({ name: 'home' }); - } - - // Carry On... - else next(); -}) - -export default router; diff --git a/src/views/login.vue b/src/views/login.vue index 53e335f..5f31fbd 100644 --- a/src/views/login.vue +++ b/src/views/login.vue @@ -24,7 +24,7 @@ - +
Incorrect Credentials @@ -48,57 +48,31 @@ export default defineComponent({ setup() { + const { post } = useIpc(); const { setToken } = useAuth(); const { resetMessages } = useMessages(); - const router = useRouter(); - - const email = ref(""); - const password = ref(""); - const invalid = ref(false); - - const { invoke } = useIpc(); - - const submit = async () => { - - const payload = { - request: "login", - email: email.value, - password: password.value - }; - - try { - const response = await invoke('auth-session', payload); - // On login without token, we clear localStorage and messages. - window.localStorage.clear(); - resetMessages(); - - setToken(response); - invalid.value = false; - router.push({ name: "home" }); - } - - catch(e) { - invalid.value = true; - console.log('Error loging in.'); - } + const router = useRouter(); - }; + const form = ref({ + email: "", + password: "", + }) - const switchView = () => { - router.push({ name: "register" }); - }; + // Submit login credentials to the backend. + const submitForm = () => { + post("auth-message", form) + } return { - submit, - email, - password, - switchView, - invalid + form, + submitForm } }, + }); +