aretherecookies-mobile/js/AuthManager.js
2018-06-17 18:19:18 -05:00

84 lines
1.9 KiB
JavaScript

//@flow
import { authFacebook, type FacebookAuth } from './apis/FacebookAuth';
import { type GoogleUser } from './apis/GoogleAuth';
import moment from 'moment';
export const AUTH_PROVIDER_FACEBOOK: 'facebook' = 'facebook';
export const AUTH_PROVIDER_GOOGLE: 'google' = 'google';
export type AUTH_PROVIDER = typeof AUTH_PROVIDER_FACEBOOK | typeof AUTH_PROVIDER_GOOGLE;
export type User = {
name: string,
token: string,
tokenExpires: number,
email: string,
photo: string,
provider: AUTH_PROVIDER,
};
class AuthManager {
user: ?User;
getToken = () => {
return this.user && this.user.token;
};
getAuthHeader = () => {
const { token, provider } = this.user || {};
switch (provider) {
case AUTH_PROVIDER_FACEBOOK:
return { authorization: `facebook-token ${token}` };
default:
return {};
}
};
isLoggedIn = () => {
if (!this.user) {
return false;
}
const { token, tokenExpires } = this.user;
return token && +moment(tokenExpires) >= +moment();
};
setFacebookUser = ({ credentials, profile }: FacebookAuth) => {
this.user = {
token: credentials.token,
tokenExpires: +moment(credentials.tokenExpirationDate),
name: profile.name,
email: profile.email,
photo: profile.picture.data.url,
provider: AUTH_PROVIDER_FACEBOOK,
};
};
setGoogleUser = (googleUser: GoogleUser) => {
this.user = {
token: googleUser.accessToken,
tokenExpires: +moment().add(1, 'week'),
name: googleUser.name,
email: googleUser.email,
photo: googleUser.photo,
provider: AUTH_PROVIDER_GOOGLE,
};
};
authenticate = async (provider: AUTH_PROVIDER) => {
switch (provider) {
case AUTH_PROVIDER_FACEBOOK:
this.setFacebookUser(await authFacebook());
break;
case AUTH_PROVIDER_GOOGLE:
// this.setGoogleUser(await authGoogle());
break;
}
};
deauthenticate = () => {
this.user = null;
};
}
export default new AuthManager();