add socket connect and reconnect to session code

This commit is contained in:
Enrique Hernandez 2021-02-10 09:00:42 -06:00 committed by riqo
commit b05cb202b6
9 changed files with 140 additions and 166 deletions

View file

@ -1,23 +1,13 @@
import { reactive, watch, toRefs } from 'vue';
import { useIpc } from './ipc';
interface User {
id: string;
email: string;
firstName: string;
lastName: string;
access_token: string;
}
interface AuthState {
authenticating: boolean;
user?: User;
access_token?: string | null;
error?: Error;
}
const state = reactive<AuthState>({
authenticating: false,
user: undefined,
access_token: undefined,
error: undefined,
});
@ -26,11 +16,11 @@ const AUTH_KEY = 'crimata_token';
const token = window.localStorage.getItem(AUTH_KEY);
// authenticate on socket connect
window.ipcRenderer.on("fetch-token", async (event, payload) => {
const { data, invoke } = useIpc('auth-token');
window.ipcRenderer.on("fetch-token", async (event, payload: null) => {
const { data, invoke } = useIpc('auth-user');
try {
await invoke(token);
state.user = data.value;
state.access_token = data.value;
}
catch(e) {
state.error = e;
@ -39,51 +29,25 @@ window.ipcRenderer.on("fetch-token", async (event, payload) => {
}
});
if (token) {
const { loading, error, data, send, invoke } = useIpc('auth-user');
state.authenticating = true;
// authenticate token against crimata-platform
console.log('sending token to main')
send({
token: token
});
watch(loading, () => {
if (error.value) {
console.log('ERROR: failed authentication')
window.localStorage.removeItem(AUTH_KEY);
}
else if (data.value) {
state.user = data.value;
}
state.authenticating = false;
})
} else {
console.log('no token to send')
}
export const useAuth = () => {
const setUser = (payload: User, remember: boolean) => {
const setToken = (token: string, remember: boolean) => {
if (remember) {
// Save
window.localStorage.setItem(AUTH_KEY, payload.access_token);
window.localStorage.setItem(AUTH_KEY, token);
}
state.user = payload;
state.access_token = token;
state.error = undefined;
}
const logout = (): Promise<void> => {
window.localStorage.removeItem(AUTH_KEY);
return Promise.resolve(state.user = undefined);
return Promise.resolve(state.access_token = undefined);
}
return {
setUser,
setToken,
logout,
...toRefs(state), // authenticating, user, error
...toRefs(state), // access_token, error
}
}