167 lines
3.4 KiB
JavaScript
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)
|
|
},
|
|
};
|