1
0
Fork 0
pingvin-share/frontend/src/services/auth.service.ts

111 lines
2.5 KiB
TypeScript

import { getCookie } from "cookies-next";
import * as jose from "jose";
import api from "./api.service";
const signIn = async (emailOrUsername: string, password: string) => {
const emailOrUsernameBody = emailOrUsername.includes("@")
? { email: emailOrUsername }
: { username: emailOrUsername };
const response = await api.post("auth/signIn", {
...emailOrUsernameBody,
password,
});
return response;
};
const signInTotp = (totp: string, loginToken: string) => {
return api.post("auth/signIn/totp", {
totp,
loginToken,
});
};
const signUp = async (email: string, username: string, password: string) => {
const response = await api.post("auth/signUp", { email, username, password });
return response;
};
const signOut = async () => {
await api.post("/auth/signOut");
window.location.reload();
};
const refreshAccessToken = async () => {
try {
const accessToken = getCookie("access_token") as string;
// If the access token expires in less than 2 minutes refresh it
if (
accessToken &&
(jose.decodeJwt(accessToken).exp ?? 0) * 1000 < Date.now() + 2 * 60 * 1000
) {
await api.post("/auth/token");
}
} catch (e) {
console.info("Refresh token invalid or expired");
}
};
const requestResetPassword = async (email: string) => {
await api.post(`/auth/resetPassword/${email}`);
};
const resetPassword = async (token: string, password: string) => {
await api.post("/auth/resetPassword", { token, password });
};
const updatePassword = async (oldPassword: string, password: string) => {
await api.patch("/auth/password", { oldPassword, password });
};
const enableTOTP = async (password: string) => {
const { data } = await api.post("/auth/totp/enable", { password });
return {
totpAuthUrl: data.totpAuthUrl,
totpSecret: data.totpSecret,
qrCode: data.qrCode,
};
};
const verifyTOTP = async (totpCode: string, password: string) => {
await api.post("/auth/totp/verify", {
code: totpCode,
password,
});
};
const disableTOTP = async (totpCode: string, password: string) => {
await api.post("/auth/totp/disable", {
code: totpCode,
password,
});
};
const getAvailableOAuth = async () => {
return api.get("/oauth/available");
};
const getOAuthStatus = () => {
return api.get("/oauth/status");
};
export default {
signIn,
signInTotp,
signUp,
signOut,
refreshAccessToken,
updatePassword,
requestResetPassword,
resetPassword,
enableTOTP,
verifyTOTP,
disableTOTP,
getAvailableOAuth,
getOAuthStatus,
};