forked from zendesk/linksf
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsession.js
More file actions
89 lines (70 loc) · 1.79 KB
/
Copy pathsession.js
File metadata and controls
89 lines (70 loc) · 1.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import camelize from 'camelize'
import firebase from 'firebase'
import globalConfig from '../config'
import { redirectTo } from './navigation'
export const CURRENT_USER = 'linksf::currentUser'
export const authenticate = () => {
const user = currentUser()
if (!user) {
redirectTo('/login')
return false
}
return user
}
export const currentUser = () => {
const sessionData = sessionStorage[CURRENT_USER]
let user = null
try {
user = sessionData && JSON.parse(sessionData)
} catch (e) {
console.warn('Failed to load current user', e)
}
return user
}
export const setCurrentUser = (user) => {
try {
sessionStorage[CURRENT_USER] = JSON.stringify(user)
} catch (e) {
console.warn('Failed to set current user', e)
return false
}
}
export const destroySession = () => {
delete sessionStorage[CURRENT_USER]
}
export const login = (email, password, loginSuccessCallback, loginFailureCallback) => {
const firebase = firebaseClient()
firebase
.auth()
.onAuthStateChanged((user) => {
if (user) {
const userData = camelize({
name: user.displayName,
email: user.email,
photo: user.photoUrl,
})
user.getToken().then((token) => {
userData.token = token
setCurrentUser(userData)
})
}
})
firebase
.auth()
.signInWithEmailAndPassword(email, password)
.then(loginSuccessCallback)
.catch((error) => {
loginFailureCallback(error.message)
})
}
function firebaseClient() {
if (firebase.apps.length == 1) {
return firebase // Don't initialize more than one client
}
const config = {
apiKey: globalConfig.firebaseApiKey,
authDomain: globalConfig.firebaseAuthDomain,
}
firebase.initializeApp(config)
return firebase
}