Files
smartproc-fe/src/auth.js
Mulia Nasution eb3599b351 Update auth
2023-05-29 17:22:40 +07:00

167 lines
3.4 KiB
JavaScript

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)
},
};