+++ /dev/null
-
-BUSINESS_URL="http://localhost:3000"
-
-PLATFORM_URL="ws://127.0.0.1:8760"
"animejs": "^3.2.0",
"axios": "^0.21.1",
"core-js": "^3.6.5",
- "dotenv": "^10.0.0",
"electron-is-dev": "^2.0.0",
"electron-store": "^8.0.0",
"electron-updater": "^4.3.8",
}
+ const onSessionAuthFail = (_event: IpcRendererEvent, _payload: null) => {
+ clearProfile();
+ }
+
onMounted(async () => {
console.log("APP:mounted.");
+
+ window.ipcRenderer.on("session-auth-fail", onSessionAuthFail)
window.ipcRenderer.on("update-state", updateState)
window.ipcRenderer.on("update_available", () => {
console.log('testing auto update');
postMount();
try {
-
const profile = await invokeProfile() as Profile;
setProfile(profile);
} catch(e) {
- console.log('[AUTH]', e);
+ console.log('[REND] Auth:', e);
clearProfile();
} finally {
ready.value = true;
if (profile.value.crimataId) {
// start session
- postInitSession(profile.value.crimataId);
+ postInitSession();
}
}
onUnmounted(() => {
window.ipcRenderer.removeAllListeners("update-state");
+ window.ipcRenderer.removeAllListeners("session-auth-fail");
})
return {
import { initApp } from './background/init';
import { protocol } from "electron";
-require('dotenv').config()
// Scheme must be registered before the app is ready
protocol.registerSchemesAsPrivileged([
const isDev = require('electron-is-dev');
// NOTE Program Begins Here
-(async () => {
+(() => {
console.log('Starting Crimata electron app.');
- await initApp(isDev);
+ initApp(isDev);
})();
--- /dev/null
+
+import { store } from "@/background/store";
+
+interface PlatformAuthProtocol {
+ key: string;
+ crimata_id: string;
+}
+
+export const getAuthPayload = (): PlatformAuthProtocol => ({
+ key: store.get('key'),
+ crimata_id: store.get('crimataId')
+});
+
import { submit, fetchProfile, logout } from "@/api/account";
import { ipcMain, IpcMainInvokeEvent } from "electron";
import { store } from "@/background/store";
+import { endSession } from "@/background/session";
const parseAuthRes = (authRes: any) => {
resolve(parsed.profile);
} catch(e) {
- console.log('[API]', e.response);
+ console.log('[API]', e);
reject(new Error('Failed to authenticate'));
}
}
store.delete('crimataId');
// TODO: kill crimata platform session
+ endSession();
resolve();
} catch(e) {
// Instantiate socket session with crimata-platorm.
const onSessionInit = (
_event: IpcMainInvokeEvent,
- cid: string
+ _payload: null
): void => {
console.log('[IPC]: init-session');
- initSession(cid);
+ initSession();
initAudioIO();
}
import { backgroundMitt } from "@/modules/emitter";
import { ipcEmit, loadState } from './helpers';
+import WebSocket from 'ws';
import useWebSockets from "./websockets";
// Info saved to json on quit (key, newMessages).
let state: SessionState;
+let socket: WebSocket | null = null;
+
// Calls appropriate endpoint for a server message.
const onMessage = (data: string): void => {
let message = JSON.parse(data);
- console.log('received new message', message);
+
+ if (message === "CLOSE_AUTH_FAIL") {
+ ipcEmit("session-auth-fail", null)
+ return;
+ }
// Standard message.
if (message.content) {
}
+export const endSession = (): void => {
+ if (socket) {
+ socket.close();
+ socket = null;
+ }
+}
+
// Call this to initialize session with Crimata servers.
-export const initSession = (cid: string): void => {
+export const initSession = (): void => {
console.log("SESS:Creating new session.")
// Load Json or createState.
state = loadState("session.json");
// Open socket connection.
- createSocket();
+ if (!socket)
+ socket = createSocket();
// Keep win up-to-date.
backgroundMitt.on('window-active', (state: boolean) => {
+
"use strict";
import WebSocket from 'ws';
+import { getAuthPayload } from "./authPayload";
let socket: WebSocket;
-const socketUrl = process.env.PLATFORM_URL;
+const socketUrl = "ws://127.0.0.1:8760"
// Run every time we want to connect to backend.
export default function useWebSockets(
const onOpen = (_event: WebSocket.OpenEvent) => {
console.log("WS:Connected to WS Server!");
-
+ const jwt = getAuthPayload();
+ socket.send(JSON.stringify(jwt));
if (openCallback) openCallback();
}
}
- const onClose = (_event: WebSocket.CloseEvent) => {
- console.log("WS:Socket closed normally.")
+ const onClose = (event: WebSocket.CloseEvent) => {
+ console.log("WS:Socket closed normally.", event.wasClean)
+ if (!event.wasClean) {
+ setTimeout(createSocket, 1000);
+ }
}
// Reconnect automatically on error.
const onError = (event: WebSocket.ErrorEvent) => {
console.log("WS:WebSocket error: ", event.message);
-
- console.log("Attempting reconnect in 1s.")
- setTimeout(createSocket, 1000)
}
- const createSocket = () => {
- if (socketUrl)
- socket = new WebSocket(socketUrl)
+ const createSocket = (): WebSocket => {
+
+ socket = new WebSocket(socketUrl);
// Add listeners.
- socket.addEventListener("open", onOpen)
- socket.addEventListener("message", onServerMessage)
- socket.addEventListener("close", onClose)
- socket.addEventListener("error", onError)
+ socket.addEventListener("open", onOpen);
+ socket.addEventListener("message", onServerMessage);
+ socket.addEventListener("close", onClose);
+ socket.addEventListener("error", onError);
+
+ return socket;
- console.log("WS:New socket created.")
}
return {
import { useProfile } from '@/modules/auth';
import { invokeLogin } from "@/ipcRend/account";
import { Profile } from "@/types";
+import { postInitSession } from "@/ipcRend/session";
export default defineComponent({
name: "Login",
setup() {
- const { setProfile } = useProfile();
+ const { profile, setProfile } = useProfile();
const usr = ref("");
const pwd = ref("");
setProfile(profile);
} catch(e) {
+ console.log('Error login in.')
+ } finally{
+
+ if (profile.value.crimataId) {
+ // start session
+ postInitSession();
+ }
}
}
);
-export const postInitSession = (cid: string): void => (
- post("init-session", cid)
+export const postInitSession = (): void => (
+ post("init-session", null)
);
export const postMessage = (payload: ClientMessage): void => (
post('client-message', payload)
);
+
+
const preFix = '/api';
-const baseURL = process.env.BUSSINESS_URL + preFix;
+const baseURL = "http://127.0.0.1:3000" + preFix;
interface Request {
let auth = false;
wss.on("connection", function connection(ws, req) {
+
ws.on("message", function incoming(message) {
console.log(message)
auth = true;
} else {
const parsed = JSON.parse(message);
- console.log('got a message', message)
+ console.log('got a message', message);
}
} else {
const parsed = JSON.parse(message);
- console.log('parsed', parsed)
+ console.log('parsed', parsed);
}
});