Files
swiss-datashare/frontend/src/services/auth.service.ts

102 lines
2.2 KiB
TypeScript
Raw Normal View History

2023-01-04 11:54:28 +01:00
import { getCookie } from "cookies-next";
import * as jose from "jose";
import api from "./api.service";
2022-12-01 23:07:49 +01:00
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 = async (
emailOrUsername: string,
password: string,
totp: string,
loginToken: string
) => {
const emailOrUsernameBody = emailOrUsername.includes("@")
? { email: emailOrUsername }
: { username: emailOrUsername };
const response = await api.post("auth/signIn/totp", {
...emailOrUsernameBody,
password,
totp,
loginToken,
});
return response;
};
2022-12-01 23:07:49 +01:00
const signUp = async (email: string, username: string, password: string) => {
const response = await api.post("auth/signUp", { email, username, password });
return response;
};
2023-01-04 11:54:28 +01:00
const signOut = async () => {
await api.post("/auth/signOut");
window.location.reload();
};
const refreshAccessToken = async () => {
try {
const accessToken = getCookie("access_token") as string;
if (
2023-01-04 11:54:28 +01:00
!accessToken ||
(jose.decodeJwt(accessToken).exp ?? 0) * 1000 < Date.now() + 2 * 60 * 1000
) {
2023-01-04 11:54:28 +01:00
await api.post("/auth/token");
}
2023-01-04 11:54:28 +01:00
} catch (e) {
console.info("Refresh token invalid or expired");
}
};
2022-12-05 15:53:24 +01:00
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,
});
};
export default {
signIn,
signInTotp,
signUp,
signOut,
refreshAccessToken,
2022-12-05 16:54:15 +01:00
updatePassword,
enableTOTP,
verifyTOTP,
disableTOTP,
};