/
addUserSteps.js
137 lines (119 loc) · 4.41 KB
/
addUserSteps.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
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
// @flow
import { pick, get } from 'lodash'
import conf from '../server.config'
import AdminWallet from '../blockchain/AdminWallet'
import UserDBPrivate from '../db/mongo/user-privat-provider'
import { type UserRecord } from '../../imports/types'
import { Mautic } from '../mautic/mauticAPI'
import W3Helper from '../utils/W3Helper'
import requestTimeout from '../utils/timeout'
const addUserToWhiteList = async (userRecord: UserRecord, logger: any) => {
if (!conf.disableFaceVerification) {
return
}
const user = await UserDBPrivate.getUser(userRecord.identifier)
const whiteList = get(user, 'isCompleted.whiteList', false)
if (whiteList) {
logger.debug('addUserToWhiteList user already whitelisted', { address: userRecord.gdAddress })
return true
}
logger.debug('addUserToWhiteList whitelisting user...', {
address: userRecord.gdAddress,
profile: userRecord.profilePublickey
})
try {
await AdminWallet.whitelistUser(userRecord.gdAddress, userRecord.profilePublickey)
await UserDBPrivate.completeStep(userRecord.identifier, 'whiteList')
logger.debug('addUserToWhiteList user whitelisted success', { address: userRecord.gdAddress })
return true
} catch (exception) {
const { message: errMessage } = exception
logger.error('addUserToWhiteList failed whitelisting', errMessage, exception, { userRecord })
return false
}
}
const updateMauticRecord = async (userRecord: UserRecord, utmString: string, logger: any) => {
const userFields = pick(userRecord, [
'fullName',
'mobile',
'email',
'identifier',
'profilePublickey',
'regMethod',
'torusProvider'
])
const utmFields = Mautic.parseUtmString(utmString)
const nameParts = get(userFields, 'fullName', '').split(' ')
const firstName = nameParts[0]
const lastName = nameParts.length > 1 && nameParts.pop()
const fieldsForMautic = {
firstName,
lastName,
...userFields,
...utmFields
}
const mauticRecord = await Mautic.createContact(fieldsForMautic).catch(e => {
logger.error('updateMauticRecord Create Mautic Record Failed', e.message, e, { fieldsForMautic, userRecord })
throw e
})
const mauticId = get(mauticRecord, 'contact.id', userRecord.mauticId)
await UserDBPrivate.updateUser({ identifier: userRecord.identifier, mauticId })
logger.debug('updateMauticRecord user mautic record updated', { fieldsForMautic, userRecord, mauticId, mauticRecord })
return true
}
const updateW3Record = async (user: any, logger: any) => {
if (conf.env !== 'test' && conf.enableInvites === false) {
return
}
let userDB = await UserDBPrivate.getUser(user.identifier)
const w3Record = get(userDB, 'isCompleted.w3Record', false)
if (!w3Record) {
const web3Record = await W3Helper.registerUser(user).catch(e => {
logger.error('updateW3Record error registering user to w3', e.message, e, { user })
})
if (web3Record && web3Record.login_token && web3Record.wallet_token) {
await UserDBPrivate.updateUser({
identifier: user.identifier,
loginToken: web3Record.login_token,
w3Token: web3Record.wallet_token,
'isCompleted.w3Record': true
})
logger.debug('updateW3Record got web3 user records', { web3Record, user })
} else {
logger.error('updateW3Record empty w3 response', '', null, { user })
// supress error while running locally
if (!conf.walletUrl.includes('localhost:')) {
throw new Error('empty w3 response')
}
}
return {
loginToken: web3Record.login_token,
w3Token: web3Record.wallet_token
}
}
return userDB
}
const topUserWallet = async (userRecord: UserRecord, logger: any) => {
let user = await UserDBPrivate.getUser(userRecord.identifier)
const topWallet = get(user, 'isCompleted.topWallet', false)
if (!topWallet) {
return Promise.race([AdminWallet.topWallet(userRecord.gdAddress, null), requestTimeout(15000, 'topWallet')])
.then(r => {
UserDBPrivate.completeStep(userRecord.identifier, 'topWallet')
logger.debug('topUserWallet success', { address: userRecord.gdAddress })
return true
})
.catch(e => {
logger.error('New user topping failed', e.message, e, { userRecord })
return false
})
}
logger.debug('topUserWallet user wallet already topped', { address: userRecord.gdAddress })
return true
}
export default {
topUserWallet,
updateW3Record,
updateMauticRecord,
addUserToWhiteList
}