mirror of https://github.com/waku-org/metrics.git
85 lines
2.0 KiB
JavaScript
85 lines
2.0 KiB
JavaScript
|
import axios from "axios";
|
||
|
|
||
|
export async function login() {
|
||
|
return (window.location.href = `https://github.com/login/oauth/authorize?client_id=${process.env.NEXT_PUBLIC_GITHUB_CLIENT_ID}&scope=repo read:org read:project`);
|
||
|
}
|
||
|
|
||
|
export async function isLoggedIn() {
|
||
|
if (
|
||
|
!localStorage.getItem("access_token") ||
|
||
|
!localStorage.getItem("token_expiration") ||
|
||
|
localStorage.getItem("access_token") === "undefined"
|
||
|
) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
if (
|
||
|
localStorage.getItem("token_expiration") < Math.floor(Date.now() / 1000)
|
||
|
) {
|
||
|
if (
|
||
|
!localStorage.getItem("refresh_token") ||
|
||
|
localStorage.getItem("refresh_token_expiration") <
|
||
|
Math.floor(Date.now() / 1000)
|
||
|
) {
|
||
|
return false;
|
||
|
} else {
|
||
|
await refreshToken();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
export async function logout() {
|
||
|
localStorage.clear();
|
||
|
|
||
|
window.location.href = "/";
|
||
|
}
|
||
|
|
||
|
export async function getToken(code) {
|
||
|
const data = (await axios.get(`/api/verify?code=${code}`)).data;
|
||
|
|
||
|
if (!data.access_token) {
|
||
|
await logout();
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
localStorage.setItem("access_token", data.access_token);
|
||
|
localStorage.setItem("refresh_token", data.refresh_token);
|
||
|
localStorage.setItem(
|
||
|
"token_expiration",
|
||
|
Math.floor(Date.now() / 1000) + data.expires_in - 5
|
||
|
);
|
||
|
localStorage.setItem(
|
||
|
"refresh_token_expiration",
|
||
|
Math.floor(Date.now() / 1000) + data.refresh_token_expires_in - 5
|
||
|
);
|
||
|
}
|
||
|
|
||
|
export async function refreshToken() {
|
||
|
const token = localStorage.getItem("refresh_token");
|
||
|
|
||
|
if (!token) {
|
||
|
await logout();
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
const data = (await axios.get(`/api/refresh?token=${token}`)).data;
|
||
|
|
||
|
if (!data.access_token) {
|
||
|
await logout();
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
localStorage.setItem("access_token", data.access_token);
|
||
|
localStorage.setItem("refresh_token", data.refresh_token);
|
||
|
localStorage.setItem(
|
||
|
"token_expiration",
|
||
|
Math.floor(Date.now() / 1000) + data.expires_in - 5
|
||
|
);
|
||
|
localStorage.setItem(
|
||
|
"refresh_token_expiration",
|
||
|
Math.floor(Date.now() / 1000) + data.refresh_token_expires_in - 5
|
||
|
);
|
||
|
}
|