51 lines
1.1 KiB
JavaScript
51 lines
1.1 KiB
JavaScript
import { request } from "./axios";
|
|
import { setItem, getItem, removeItem } from "./localStorage";
|
|
|
|
const storageKeys = {
|
|
TOKEN: "AUTHORIZATION_TOKEN",
|
|
USER: "USER_NAME"
|
|
};
|
|
|
|
const authenticate = async (userName, password) => {
|
|
const urlTemplate = process.env.REACT_APP_IDENTITY_AUTHENTICATION_URL;
|
|
const url = urlTemplate
|
|
.replace("{username}", userName)
|
|
.replace("{password}", password);
|
|
const options = {
|
|
method: "post"
|
|
};
|
|
|
|
const response = await request(url, options);
|
|
if (response.status === "SUCCESS") {
|
|
setItem(storageKeys.TOKEN, response.token);
|
|
setItem(storageKeys.USER, userName);
|
|
}
|
|
|
|
return response;
|
|
};
|
|
|
|
const invalidate = () => {
|
|
const token = getItem(storageKeys.TOKEN);
|
|
if (token) {
|
|
removeItem(storageKeys.TOKEN);
|
|
removeItem(storageKeys.USER);
|
|
}
|
|
};
|
|
|
|
const validateToken = () => {
|
|
let token = getItem(storageKeys.TOKEN);
|
|
if (!token) {
|
|
return { valid: false };
|
|
}
|
|
|
|
const valid = new Date(token.validUntil) >= new Date();
|
|
if (!valid) {
|
|
invalidate();
|
|
token = null;
|
|
}
|
|
|
|
return { valid, token };
|
|
};
|
|
|
|
export { storageKeys, authenticate, invalidate, validateToken };
|