107 lines
3.1 KiB
TypeScript
107 lines
3.1 KiB
TypeScript
// - Import react components
|
|
import { firebaseRef, firebaseAuth } from 'app/firebase/'
|
|
|
|
import { IAuthorizeService } from 'services/authorize'
|
|
import { User } from 'Domain/users'
|
|
import { LoginUser, RegisterUserResult } from 'domain/authorize'
|
|
import { SocialError } from 'domain/common'
|
|
|
|
/**
|
|
* Firbase authorize service
|
|
*
|
|
* @export
|
|
* @class AuthorizeService
|
|
* @implements {IAuthorizeService}
|
|
*/
|
|
export class AuthorizeService implements IAuthorizeService {
|
|
|
|
/**
|
|
* Login the user
|
|
*
|
|
* @returns {Promise<LoginUser>}
|
|
* @memberof IAuthorizeService
|
|
*/
|
|
public login: (email: string, password: string) => Promise<LoginUser> = (email, password) => {
|
|
|
|
return new Promise<LoginUser>((resolve, reject) => {
|
|
firebaseAuth()
|
|
.signInWithEmailAndPassword(email, password)
|
|
.then((result) => {
|
|
resolve(new LoginUser(result.uid))
|
|
})
|
|
.catch((error: any) => {
|
|
reject(new SocialError(error.code, error.message))
|
|
})
|
|
})
|
|
}
|
|
|
|
/**
|
|
* Logs out the user
|
|
*
|
|
* @returns {Promise<void>}
|
|
* @memberof IAuthorizeService
|
|
*/
|
|
public logout: () => Promise<void> = () => {
|
|
return new Promise<void>((resolve, reject) => {
|
|
firebaseAuth()
|
|
.signOut()
|
|
.then((result) => {
|
|
resolve()
|
|
})
|
|
.catch((error: any) => {
|
|
|
|
reject(new SocialError(error.code, error.message))
|
|
})
|
|
})
|
|
}
|
|
|
|
/**
|
|
* Register a user
|
|
*
|
|
* @returns {Promise<void>}
|
|
* @memberof IAuthorizeService
|
|
*/
|
|
public registerUser: (user: User) => Promise<RegisterUserResult> = (user) => {
|
|
return new Promise<RegisterUserResult>((resolve, reject) => {
|
|
firebaseAuth()
|
|
.createUserWithEmailAndPassword(user.email as string, user.password as string)
|
|
.then((signupResult) => {
|
|
firebaseRef.child(`users/${signupResult.uid}/info`)
|
|
.set({
|
|
...user,
|
|
avatar: 'noImage'
|
|
})
|
|
.then((result) => {
|
|
resolve(new RegisterUserResult(signupResult.uid))
|
|
})
|
|
.catch((error: any) => reject(new SocialError(error.name, error.message)))
|
|
})
|
|
.catch((error: any) => reject(new SocialError(error.code, error.message)))
|
|
})
|
|
}
|
|
|
|
/**
|
|
* Update user password
|
|
*
|
|
* @returns {Promise<void>}
|
|
* @memberof IAuthorizeService
|
|
*/
|
|
public updatePassword: (newPassword: string) => Promise<void> = (newPassword) => {
|
|
|
|
return new Promise<void>((resolve, reject) => {
|
|
let user = firebaseAuth().currentUser
|
|
if (user) {
|
|
user.updatePassword(newPassword).then(() => {
|
|
// Update successful.
|
|
resolve()
|
|
}).catch((error: any) => {
|
|
// An error happened.
|
|
reject(new SocialError(error.code, error.message))
|
|
})
|
|
}
|
|
|
|
})
|
|
}
|
|
|
|
}
|