diff --git a/surfsense_web/lib/apis/auth.api.ts b/surfsense_web/lib/apis/auth.api.ts deleted file mode 100644 index 94865fcdb..000000000 --- a/surfsense_web/lib/apis/auth.api.ts +++ /dev/null @@ -1,55 +0,0 @@ -export const login = async (request: { - username: string; - password: string; - grant_type?: string; -}) => { - const response = await fetch( - `${process.env.NEXT_PUBLIC_FASTAPI_BACKEND_URL}/auth/jwt/login`, - { - method: "POST", - headers: { - "Content-Type": "application/x-www-form-urlencoded", - }, - body: JSON.stringify({ - username: request.username, - password: request.password, - grant_type: request.grant_type || "password", - }), - } - ); - - const data = await response.json(); - - if (!response.ok) { - throw new Error(data.detail || `HTTP ${response.status}`); - } - - return data; -}; - -export const register = async (request: { - email: string; - password: string; - is_active: boolean; - is_superuser: boolean; - is_verified: boolean; -}) => { - const response = await fetch( - `${process.env.NEXT_PUBLIC_FASTAPI_BACKEND_URL}/auth/register`, - { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify(request), - } - ); - - const data = await response.json(); - - if (!response.ok) { - throw new Error(data.detail || `HTTP ${response.status}`); - } - - return data; -}; diff --git a/surfsense_web/lib/apis/auth/auth.service.ts b/surfsense_web/lib/apis/auth/auth.service.ts new file mode 100644 index 000000000..de13b670f --- /dev/null +++ b/surfsense_web/lib/apis/auth/auth.service.ts @@ -0,0 +1,50 @@ +import { LoginRequest, LoginResponse, RegisterRequest, RegisterResponse } from "./contracts"; + +export class AuthApiService { + login = async (request: LoginRequest) : Promise => { + const requestBody = new URLSearchParams(); + requestBody.append("username", request.email); + requestBody.append("password", request.password); + requestBody.append("grant_type", "password"); + + const response = await fetch( + `${process.env.NEXT_PUBLIC_FASTAPI_BACKEND_URL}/auth/jwt/login`, + { + method: "POST", + headers: { + "Content-Type": "application/x-www-form-urlencoded", + }, + body: requestBody.toString(), + } + ); + + const data = await response.json(); + + if (!response.ok) { + throw new Error(data.detail || `HTTP ${response.status}`); + } + + return data; + }; + + register = async (request: RegisterRequest) : Promise => { + const response = await fetch( + `${process.env.NEXT_PUBLIC_FASTAPI_BACKEND_URL}/auth/register`, + { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(request), + } + ); + + const data = await response.json(); + + if (!response.ok) { + throw new Error(data.detail || `HTTP ${response.status}`); + } + + return data; + }; +} diff --git a/surfsense_web/lib/apis/auth/contracts.ts b/surfsense_web/lib/apis/auth/contracts.ts new file mode 100644 index 000000000..5fa574cf3 --- /dev/null +++ b/surfsense_web/lib/apis/auth/contracts.ts @@ -0,0 +1,34 @@ +/** + * LOGIN + */ +export type LoginRequest = { + email: string; + password: string; + grant_type?: string; +}; + +export type LoginResponse = { + access_token: string; + token_type: string; +}; + +/** + * REGISTER + */ +export type RegisterRequest = { + email: string; + password: string; + is_active: boolean; + is_superuser: boolean; + is_verified: boolean; +}; + +export type RegisterResponse = { + id: number; + email: string; + is_active: boolean; + is_superuser: boolean; + is_verified: boolean; + pages_limit: number; + pages_used: number; +};