import * as Forge from 'node-forge' import axios from 'axios' import { useRouter } from 'vue-router' const router = useRouter() export default { _user: null, loggedIn() { let user = JSON.parse(window.localStorage.getItem('user')); let access_token = window.localStorage.getItem('access_token'); if (user && access_token) { axios.defaults.headers['authorization'] = `Bearer ${access_token}`; return !!user; } return false; }, async logIn(email, password) { try { const response = await axios.post('authentication/login', { email, password: this.encrypt(password), }); const data = response.data; this._user = { username: data.data.username, email: data.data.email, role: data.data.role, avatarUrl: 'https://js.devexpress.com/Demos/WidgetsGallery/JSDemos/images/employees/06.png', }; window.localStorage.setItem('user', JSON.stringify(this._user)) window.localStorage.setItem('access_token', response.data.data.accessToken) window.localStorage.setItem('refresh_token', response.data.data.refreshToken) axios.defaults.headers['authorization'] = `Bearer ${response.data.data.accessToken}`; if (response.status === 200) { return { isOk: true, data: this._user }; } else { return { isOk: false, message: "Authentication failed" }; } } catch { return { isOk: false, message: "Authentication failed" }; } }, async logOut() { this._user = null; window.localStorage.removeItem('user'); window.localStorage.removeItem('access_token'); window.localStorage.removeItem('refresh_token'); await axios.post('authentication/logout') axios.defaults.headers['authorization'] = null; router.push({ name: 'login-form' }) }, async getUser() { try { const user = JSON.parse(window.localStorage.getItem('user')); if (user) { return { isOk: true, data: user, }; } throw new Error(`Could not find current logged in user.`); } catch { return { isOk: false }; } }, async resetPassword(email) { try { // Send request console.log(email); return { isOk: true }; } catch { return { isOk: false, message: "Failed to reset password" }; } }, async changePassword(email, recoveryCode) { try { // Send request console.log(email, recoveryCode); return { isOk: true }; } catch { return { isOk: false, message: "Failed to change password" } } }, async createAccount(email, password) { try { // Send request console.log(email, password); return { isOk: true }; } catch { return { isOk: false, message: "Failed to create account" }; } }, encrypt(param) { const publicKey = `-----BEGIN PUBLIC KEY----- ${process.env.VUE_APP_PUBLIC_KEY} -----END PUBLIC KEY-----` const rsa = Forge.pki.publicKeyFromPem(publicKey) const encrypted = rsa.encrypt(param, 'RSA-OAEP', { md: Forge.md.sha256.create(), mgf1: { md: Forge.md.sha1.create(), }, }); return btoa(encrypted) }, };