add socket connect and reconnect to session code
This commit is contained in:
parent
e0da50eb27
commit
b05cb202b6
9 changed files with 140 additions and 166 deletions
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue