update authservice

This commit is contained in:
john 2025-05-18 21:20:32 +02:00
parent ca0a6b2950
commit 27098ec9fa
3 changed files with 108 additions and 19 deletions

View file

@ -6,15 +6,13 @@ import { MediaService } from './app/media/mediaService.ts'
import SignupPage from './app/auth/pages/SignupPage.tsx'
import LoginPage from './app/auth/pages/LoginPage.tsx'
import { AuthService } from './app/auth/authService.ts'
import { useUser } from './app/user/userStore.ts'
import LogoutPage from './app/auth/pages/LogoutPage.tsx'
import UnauthorizedHandler from './app/auth/components/UnauthorizedHandler.tsx'
function App() {
const { user } = useUser()
const postService = new PostsService()
const mediaService = new MediaService()
const authService = new AuthService(user)
const authService = new AuthService()
return (
<BrowserRouter>

View file

@ -87,8 +87,7 @@ export interface paths {
requestBody: {
content: {
'multipart/form-data': {
/** Format: binary */
file?: string
file?: components['schemas']['IFormFile']
}
}
}
@ -266,6 +265,66 @@ export interface paths {
patch?: never
trace?: never
}
'/auth/signup-codes': {
parameters: {
query?: never
header?: never
path?: never
cookie?: never
}
get: {
parameters: {
query?: never
header?: never
path?: never
cookie?: never
}
requestBody?: never
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown
}
content: {
'text/plain': components['schemas']['ListSignupCodesResult']
'application/json': components['schemas']['ListSignupCodesResult']
'text/json': components['schemas']['ListSignupCodesResult']
}
}
}
}
put?: never
post: {
parameters: {
query?: never
header?: never
path?: never
cookie?: never
}
requestBody: {
content: {
'application/json': components['schemas']['CreateSignupCodeRequest']
'text/json': components['schemas']['CreateSignupCodeRequest']
'application/*+json': components['schemas']['CreateSignupCodeRequest']
}
}
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown
}
content?: never
}
}
}
delete?: never
options?: never
head?: never
patch?: never
trace?: never
}
}
export type webhooks = Record<string, never>
export interface components {
@ -292,11 +351,21 @@ export interface components {
/** Format: uuid */
postId: string
}
CreateSignupCodeRequest: {
code: string
email: string
name: string
}
GetAllPublicPostsResponse: {
posts: components['schemas']['PostDto'][]
/** Format: uuid */
next: string | null
}
/** Format: binary */
IFormFile: string
ListSignupCodesResult: {
signupCodes: components['schemas']['SignupCodeDto'][]
}
LoginRequest: {
username: string
password: string
@ -339,6 +408,16 @@ export interface components {
userId: string
username: string
}
SignupCodeDto: {
code: string
email: string
name: string
/** Format: uuid */
redeemingUserId: string | null
redeemingUsername: string | null
/** Format: date-time */
expiresOn: string | null
}
UploadMediaResponse: {
/** Format: uuid */
mediaId: string

View file

@ -1,16 +1,11 @@
import { User } from '../user/userStore.ts'
import { dispatchMessage } from '../messageBus/messageBus.ts'
import client from '../api/client.ts'
import { ProblemDetails } from '../../types'
export class AuthService {
constructor(private readonly user: User | null) {}
constructor() {}
async login(username: string, password: string) {
if (this.user != null) {
throw new Error('already logged in')
}
const res = await client.POST('/auth/login', {
body: { username, password },
credentials: 'include',
@ -24,10 +19,6 @@ export class AuthService {
}
async signup(username: string, password: string, signupCode: string) {
if (this.user != null) {
throw new Error('already logged in')
}
const res = await client.POST('/auth/register', {
body: { username, password, signupCode, email: null },
credentials: 'include',
@ -42,12 +33,33 @@ export class AuthService {
}
async logout() {
if (this.user == null) {
return
}
await client.DELETE('/auth/session', { credentials: 'include' })
dispatchMessage('auth:logged-out', null)
}
async createSignupCode(code: string, email: string, name: string) {
const res = await client.POST('/auth/signup-codes', {
body: { code, email, name },
credentials: 'include',
})
if (!res.data) {
console.error(res.error)
throw new Error('failed to create signup code')
}
}
async listSignupCodes() {
const res = await client.GET('/auth/signup-codes', {
credentials: 'include',
})
if (!res.data) {
console.error(res.error)
throw new Error('error')
}
return res.data.signupCodes
}
}