109 lines
3.7 KiB
TypeScript
109 lines
3.7 KiB
TypeScript
import { IRegisterData, IAuthLoginResponse, ILoginData, IAuthRegisterResponse, IAuthProfileResponse, IAuthResetPassword } from './api.auth.interface';
|
|
import { environment } from '../../environments/environment';
|
|
|
|
export class CAuth {
|
|
public get AccessToken(): string | null {
|
|
return window.localStorage.getItem('melon:access-token')
|
|
}
|
|
|
|
public set AccessToken(value: string | null) {
|
|
value == null ?
|
|
window.localStorage.removeItem('melon:access-token') :
|
|
window.localStorage.setItem('melon:access-token', value!)
|
|
}
|
|
|
|
public async Register(data: IRegisterData): Promise<IAuthRegisterResponse> {
|
|
try {
|
|
let res = await fetch(`${environment.endpoint}/users`, {
|
|
method: 'POST',
|
|
body: JSON.stringify(data),
|
|
headers: {
|
|
'content-type': 'application/json'
|
|
}
|
|
})
|
|
return await res.json()
|
|
} catch (error) {
|
|
return Promise.reject(error)
|
|
}
|
|
}
|
|
|
|
public async Login(data: ILoginData): Promise<IAuthLoginResponse> {
|
|
try {
|
|
let res = await fetch(`${environment.endpoint}/auth`, {
|
|
method: 'POST',
|
|
body: JSON.stringify(data),
|
|
headers: {
|
|
'content-type': 'application/json'
|
|
}
|
|
})
|
|
return await res.json()
|
|
} catch (error) {
|
|
return Promise.reject(error)
|
|
}
|
|
}
|
|
|
|
public async Me(): Promise<IAuthProfileResponse | null> {
|
|
try {
|
|
if (!this.AccessToken) return Promise.resolve(null)
|
|
let res = await fetch(`${environment.endpoint}/auth/profile`, {
|
|
method: 'GET',
|
|
headers: {
|
|
'content-type': 'application/json',
|
|
'Authorization': `Bearer ${this.AccessToken}`
|
|
}
|
|
})
|
|
return await res.json()
|
|
} catch (error) {
|
|
return Promise.reject(error)
|
|
}
|
|
}
|
|
|
|
public async RequestResetPassword(email: string): Promise<IAuthResetPassword> {
|
|
try {
|
|
let res = await fetch(`${environment.endpoint}/users/password/send/email`, {
|
|
method: 'POST',
|
|
body: JSON.stringify({ email }),
|
|
headers: {
|
|
'content-type': 'application/json'
|
|
}
|
|
})
|
|
return await res.json()
|
|
} catch (error) {
|
|
return Promise.reject(error)
|
|
}
|
|
}
|
|
|
|
public async ResetPassword(email: string, password: string, token: string): Promise<IAuthResetPassword> {
|
|
try {
|
|
let res = await fetch(`${environment.endpoint}/users/password/check/email`, {
|
|
method: 'POST',
|
|
body: JSON.stringify({ email, password, token }),
|
|
headers: {
|
|
'content-type': 'application/json'
|
|
}
|
|
})
|
|
return await res.json()
|
|
} catch (error) {
|
|
return Promise.reject(error)
|
|
}
|
|
}
|
|
|
|
public async ChangePassword(password: string): Promise<IAuthResetPassword> {
|
|
try {
|
|
if (!this.AccessToken) return Promise.resolve({ 'status': false })
|
|
let res = await fetch(`${environment.endpoint}/users/password/update`, {
|
|
method: 'POST',
|
|
body: JSON.stringify({ password }),
|
|
headers: {
|
|
'content-type': 'application/json',
|
|
'Authorization': `Bearer ${this.AccessToken}`
|
|
}
|
|
})
|
|
return await res.json()
|
|
} catch (error) {
|
|
return Promise.reject(error)
|
|
}
|
|
}
|
|
}
|
|
|
|
export const Auth: CAuth = new CAuth() |