-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
53 lines (46 loc) · 1.23 KB
/
index.js
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
require('dotenv').config()
const { STATUS_CODES } = require('http')
const { send, json } = require('micro')
const { router, post } = require('microrouter')
const cors = require('micro-cors-multiple-allow-origin')
const admin = require('firebase-admin')
const pick = require('lodash.pick')
const initialize = require('./initialize-firebase')
initialize()
module.exports = cors({
allowMethods: ['POST', 'OPTIONS'],
origin: process.env.CORS_ALLOWED_ORIGINS.split(','),
})(
router(
post ('/', async (req, res) => {
let idToken
try {
const body = await json(req)
idToken = body.id_token
} catch (e) {
send(res, 400, { error: STATUS_CODES[400] })
return
}
if (!idToken) {
send(res, 400, { error: STATUS_CODES[400] })
return
}
let decodedToken
try {
decodedToken = await admin.auth().verifyIdToken(idToken)
} catch (e) {
send(res, 401, { ...e.toJSON(), message: e.message, error: STATUS_CODES[401] })
return
}
const responseBody = pick(decodedToken, [
'name',
'picture',
'auth_time',
'email',
'email_verified',
'uid',
])
return responseBody
})
)
)