]> Repos - mime-chat/commitdiff
add login and register logic
authorEnrique Hernandez <hernandeze2@xavier.edu>
Thu, 11 Feb 2021 02:46:10 +0000 (20:46 -0600)
committerEnrique Hernandez <hernandeze2@xavier.edu>
Thu, 11 Feb 2021 02:46:10 +0000 (20:46 -0600)
src/background/createWindow.ts
src/background/initApp.ts
src/background/run.ts
src/background/session.ts
src/views/login.vue
src/views/register.vue
testServer.js

index 22b1cd50005982b1bf49eec44b71e32e322cf1aa..8b280c322fecca077f1596d28b4633aa17f2d6b5 100644 (file)
@@ -34,9 +34,9 @@ export const createWindow = async (options: WindowSettings): Promise<BrowserWind
         win.loadURL("app://./index.html");
       }
 
-        win.webContents.on('did-finish-load', () => {
-            resolve(win);
-        });
+      win.webContents.on('did-finish-load', () => {
+          resolve(win);
+      });
     })
 }
 
index 6fb9ac301be78ec1e719ee86104f23e7923694c0..93416d51601f994d507b298e5196683d0be12645 100644 (file)
@@ -4,13 +4,13 @@ import { app } from "electron";
 import { main } from './run';
 import { windowEmitter } from './windowEmitter';
 
-export function initApp(dev: boolean): void {
+let winActive: boolean;
 
-    let winActive: boolean;
+windowEmitter.on('window-active', (state: boolean) => {
+    winActive =  state;
+});
 
-    windowEmitter.on('window-active', (state: boolean) => {
-        winActive =  state;
-    });
+export function initApp(dev: boolean): void {
 
     app.on("ready", () => {
       main();
index 63d7b3d8c55132635d5fedd16b48ae58d3d2dea0..e2315752ad140db32b5797bb8d974f6b04c3eaba 100644 (file)
@@ -1,5 +1,5 @@
 import { createWindow } from './createWindow';
-import { ipcMain  } from "electron";
+import { ipcMain, BrowserWindow  } from "electron";
 import { initSession, sendMessage } from './session';
 import { windowEmitter } from './windowEmitter';
 const portAudio = require('naudiodon');
@@ -10,6 +10,14 @@ interface ipcRendererPayload {
 }
 
 let activeSession = false;
+let win: BrowserWindow | null;
+
+windowEmitter.on('ipc-renderer', (payload: ipcRendererPayload) => {
+    if (win)
+    win.webContents.send(payload.endpoint, {
+      message: payload.message
+    });
+});
 
 /*
  * The main function will be run after electron app is ready.
@@ -17,13 +25,10 @@ let activeSession = false;
 export async function main() {
 
     // create main window.
-    const win = await createWindow({ width: 350, height: 525, resizable: false });
+    if (!win) {
+        win = await createWindow({ width: 350, height: 525, resizable: false });
+    }
 
-    windowEmitter.on('ipc-renderer', (payload: ipcRendererPayload) => {
-        win.webContents.send(payload.endpoint, {
-          message: payload.message
-        });
-    });
 
     // Instantiate socket session with crimata-platorm.
     if (!activeSession) {
@@ -41,8 +46,9 @@ export async function main() {
     }
 
     const windowDismount = (): void => {
-         windowEmitter.emit('window-active', false);
-         ipcMain.removeAllListeners('send-message');
+        win = null;
+        windowEmitter.emit('window-active', false);
+        ipcMain.removeAllListeners('send-message');
     }
 
     // Handle window mount and dismount.
index 8902281f09b1d855ae170714f3ab0972887d40ca..d2d188360b684f6b4023cd0d1486b78d08ee9b48 100644 (file)
@@ -2,6 +2,12 @@ import WebSocket from 'ws';
 import { windowEmitter } from './windowEmitter';
 import { ipcMain  } from "electron";
 
+const EventEmitter = require('events');
+
+class SocketEmitter extends EventEmitter {}
+
+export const socketEmitter = new SocketEmitter();
+
 interface RenderMessage  {
   type: 'render';
   content: string;
@@ -27,6 +33,7 @@ let auth = false;
 const receiveMessage = (message: string): void => {
 
     while(!auth) {
+        console.log('window emitter @ session.ts recieve')
         windowEmitter.emit('auth-res', message);
         return;
     }
@@ -43,6 +50,7 @@ const receiveMessage = (message: string): void => {
 const authUser = async (event: any, payload: string | UserCreds | null): Promise<string> => {
     return new Promise((resolve, reject) => {
         console.log('authenticating...');
+        console.log('window emitter @ session.ts auth')
         windowEmitter.on('auth-res', (res: string) => {
             if (res === 'locked') {
                 reject(res);
@@ -74,20 +82,20 @@ export const initSession = () => {
     socket = new WebSocket(`${ip}:${port}`);
     socket.binaryType = 'arraybuffer';
 
+    // handle renderer auth-token event
+    ipcMain.removeHandler('auth-user'); // avoid setting duplicate handlers
+    ipcMain.handle('auth-user', authUser);
+
     socket.on('open', () => {
         console.log('Success! Connected to Crimata.');
 
-        // handle renderer auth-token event
-        ipcMain.removeHandler('auth-user'); // avoid setting duplicate handlers
-        ipcMain.handle('auth-user', authUser);
-
         // fetch token from renderer
         windowEmitter.emit('ipc-renderer', {
             endpoint: 'fetch-token',
             message: null
         });
-
         success = true;
+
     });
 
     socket.on('error', (e) => {
index 38b96b6f3fd0125719a3be9f056a114db26a1278..edc5096ece54c45dc0019393fc6f8282001b6f0f 100644 (file)
@@ -49,10 +49,14 @@ export default defineComponent({
           email: email.value,
           password: password.value
         };
-        await invoke(payload);
-        console.log('testing incoke', data.value)
-        setToken(data.value, rememberMe.value);
-        router.push({ name: "home" });
+        try {
+            await invoke(payload);
+            console.log('testing incoke', data.value)
+            setToken(data.value, rememberMe.value);
+            router.push({ name: "home" });
+        } catch(e){
+            console.log('Error loging in.')
+        }
     };
 
     return {
index a4a3a15a3ba0ed06e8678d64756285f25fd4c36a..ba54bef5bcb2bcb170b0b056735c8ce2a6139ff7 100644 (file)
@@ -1,19 +1,28 @@
 <template>
   <div id="login">
     <!-- login title -->
-    <div id="loginTitle">Login</div>
+    <div id="loginTitle">Register</div>
 
     <!-- username and password forms -->
     <div id="loginBox">
       <!-- username -->
-      <input class="input" type="text" v-model="login.username" placeholder="username" />
+      <input class="input" type="text" v-model="email" placeholder="email" />
 
       <!-- password -->
-      <input class="input" type="password" v-model="login.password" placeholder="Password" />
+      <input class="input" type="password" v-model="password" placeholder="Password" />
+
+      <!-- firstName -->
+      <input class="input" type="text" v-model="firstName" placeholder="First name" />
+
+      <!-- lastName -->
+      <input class="input" type="text" v-model="lastName" placeholder="Last name" />
+
+      <input type="checkbox" id="checkbox" v-model="rememberMe" />
+      <label for="checkbox">Remember Me</label>
     </div>
 
     <!-- submit button -->
-    <button class="button" @click="submitCreds">Submit</button>
+    <button class="button" @click="submit">Submit</button>
   </div>
 </template>
 
@@ -40,31 +49,39 @@ interface RegisterPayload {
 export default defineComponent({
   name: "Register",
   setup() {
-    const payload = reactive<RegisterPayload>({
-      email: undefined,
-      password: undefined,
-      firstName: undefined,
-      lastName: undefined,
-    });
-
-    const { error, loading, invoke, data, errorMessage } = useIpc(
-      "auth-register"
-    );
+    const email = ref("");
+    const password = ref("");
+    const firstName = ref("");
+    const lastName = ref("");
+    const rememberMe = ref("");
 
+    const { invoke, data,} = useIpc("auth-user");
     const { setToken } = useAuth();
     const router = useRouter();
 
+    const payload: RegisterPayload = {
+      email: email.value,
+      password: password.value,
+      firstName: firstName.value,
+      lastName: lastName.value,
+    };
+
     const submit = async () => {
-      await invoke(payload);
-      setToken(data.value, true);
-      router.push({ name: "home" });
+      try {
+          await invoke(payload);
+          setToken(data.value, true);
+          router.push({ name: "home" });
+      } catch(e) {
+          console.log('Failed to register.')
+      }
     };
 
     return {
-      ...toRefs(payload),
+      email,
+      password,
+      firstName,
+      lastName,
       submit,
-      loading,
-      errorMessage,
     };
   },
 });
index e5066250bd2fc202084a3fd2895441a4ea9c4483..344e9b8dcde39d3771c43bb78b8264dacf9324fb 100644 (file)
@@ -16,7 +16,7 @@ wss.on("connection", function connection(ws, req) {
   ws.on("message", function incoming(message) {
 
     console.log(message)
-      if (message === 'no-token') {
+      if (message === 'no-token' || message === 'undefined') {
           console.log('no token to authenticate');
           ws.send('locked');
       }