-
Notifications
You must be signed in to change notification settings - Fork 97
Expand file tree
/
Copy pathsignup.js
More file actions
62 lines (58 loc) · 1.6 KB
/
signup.js
File metadata and controls
62 lines (58 loc) · 1.6 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
const fromEvent = require('graphcool-lib').fromEvent
const bcrypt = require('bcrypt')
const validator = require('validator')
module.exports = function(event) {
const phoneNumber = event.data.phoneNumber
const deviceId = event.data.deviceId
const graphcool = fromEvent(event)
const api = graphcool.api('simple/v1')
const SALT_ROUNDS = 10
function getGraphcoolUser(phoneNumber) {
return api.request(`
query {
User(phoneNumber: "${phoneNumber}") {
id
}
}`)
.then((userQueryResult) => {
if (userQueryResult.error) {
return Promise.reject(userQueryResult.error)
} else {
return userQueryResult.User
}
})
}
function createGraphcoolUser(phoneNumber, deviceIdHash) {
return api.request(`
mutation {
createUser(
phoneNumber: "${phoneNumber}",
deviceId: "${deviceIdHash}"
) {
id
}
}`)
.then((userMutationResult) => {
return userMutationResult.createUser.id
})
}
if (validator.isMobilePhone(phoneNumber, 'any')) {
return getGraphcoolUser(phoneNumber)
.then((graphcoolUser) => {
if (graphcoolUser === null) {
return bcrypt.hash(deviceId, SALT_ROUNDS)
.then(hash => createGraphcoolUser(phoneNumber, hash))
} else {
return Promise.reject("phone number already in use")
}
})
.then((id) => {
return { data: { id } }
})
.catch((error) => {
return { error: error.toString() }
})
} else {
return { error: "Not a valid phone number" }
}
}