// - 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} * @memberof IAuthorizeService */ public login: (email: string, password: string) => Promise = (email, password) => { return new Promise((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} * @memberof IAuthorizeService */ public logout: () => Promise = () => { return new Promise((resolve, reject) => { firebaseAuth() .signOut() .then((result) => { resolve() }) .catch((error: any) => { reject(new SocialError(error.code, error.message)) }) }) } /** * Register a user * * @returns {Promise} * @memberof IAuthorizeService */ public registerUser: (user: User) => Promise = (user) => { return new Promise((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} * @memberof IAuthorizeService */ public updatePassword: (newPassword: string) => Promise = (newPassword) => { return new Promise((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)) }) } }) } }