|
|
@@ -2,7 +2,6 @@
|
|
2
|
2
|
require('dotenv').config()
|
|
3
|
3
|
const crypto = require('crypto')
|
|
4
|
4
|
const Util = require('util')
|
|
5
|
|
-const Jwt = require('@hapi/jwt')
|
|
6
|
5
|
const JWT = require('jsonwebtoken')
|
|
7
|
6
|
const Schmervice = require('@hapipal/schmervice')
|
|
8
|
7
|
const SecurePassword = require('secure-password')
|
|
|
@@ -23,7 +22,6 @@ const hashEmail = async email => {
|
|
23
|
22
|
return undefined
|
|
24
|
23
|
}
|
|
25
|
24
|
}
|
|
26
|
|
-// const emailsSent = {}
|
|
27
|
25
|
const hasher = async (pwd, steak) => {
|
|
28
|
26
|
const hash = await pwd.hash(steak)
|
|
29
|
27
|
const result = await pwd.verify(steak, hash)
|
|
|
@@ -43,7 +41,7 @@ const hasher = async (pwd, steak) => {
|
|
43
|
41
|
try {
|
|
44
|
42
|
squirtle = await pwd.hash(steak)
|
|
45
|
43
|
// console.log('improvedHash', squirtle)
|
|
46
|
|
- // const saveHash = Auth.insert({user_email: matchingEmails}, ).into('token')
|
|
|
44
|
+ // const saveHash = Auth.insert({user_email: matchingEmails}).into('token')
|
|
47
|
45
|
return squirtle
|
|
48
|
46
|
} catch (err) {
|
|
49
|
47
|
console.error(
|
|
|
@@ -63,8 +61,7 @@ module.exports = class UserService extends Schmervice.Service {
|
|
63
|
61
|
constructor(...args) {
|
|
64
|
62
|
super(...args)
|
|
65
|
63
|
const pwd = new SecurePassword()
|
|
66
|
|
- // TODO: Invalidate this cache somehow after a certain time period has
|
|
67
|
|
- // passed
|
|
|
64
|
+ // TODO: Invalidate this application state somehow after a certain time period has passed
|
|
68
|
65
|
// TODO: Remove hashedEmails in preference of activeSessions
|
|
69
|
66
|
this.hashedEmails = {
|
|
70
|
67
|
// NOTE: key is email hash and value is timestamp in ms
|
|
|
@@ -231,93 +228,10 @@ module.exports = class UserService extends Schmervice.Service {
|
|
231
|
228
|
//
|
|
232
|
229
|
createToken(user) {
|
|
233
|
230
|
const key = this.server.registrations['main-app-plugin'].options.jwtKey
|
|
|
231
|
+ const obj = {}
|
|
234
|
232
|
|
|
235
|
|
- let token = Jwt.token.generate(
|
|
236
|
|
- {
|
|
237
|
|
- aud: 'urn:audience:test',
|
|
238
|
|
- iss: 'urn:issuer:test',
|
|
239
|
|
- // ...payload,
|
|
240
|
|
- email: user.email,
|
|
241
|
|
- name: user.name,
|
|
242
|
|
- seeking: user.seeking,
|
|
243
|
|
- salt: 'a;ldfkjas;l/dfkafnml;/cjkf',
|
|
244
|
|
- // profile_id: user.profile_id,
|
|
245
|
|
- },
|
|
246
|
|
- {
|
|
247
|
|
- key: key,
|
|
248
|
|
- algorithm: 'HS256',
|
|
249
|
|
- },
|
|
250
|
|
- {
|
|
251
|
|
- ttlSec: 4 * 60 * 60, // 7 days
|
|
252
|
|
- },
|
|
253
|
|
- )
|
|
254
|
|
- console.log('token :=>', token)
|
|
255
|
|
- token = Jwt.token.generate(
|
|
256
|
|
- {
|
|
257
|
|
- aud: 'urn:audience:test',
|
|
258
|
|
- iss: 'urn:issuer:test',
|
|
259
|
|
- // ...payload,
|
|
260
|
|
- email: user.email,
|
|
261
|
|
- name: user.name,
|
|
262
|
|
- seeking: user.seeking,
|
|
263
|
|
- salt: 'qpowieurpqowytqpoieryu',
|
|
264
|
|
- // profile_id: user.profile_id,
|
|
265
|
|
- },
|
|
266
|
|
- {
|
|
267
|
|
- key: key,
|
|
268
|
|
- algorithm: 'HS256',
|
|
269
|
|
- },
|
|
270
|
|
- {
|
|
271
|
|
- ttlSec: 4 * 60 * 60, // 7 days
|
|
272
|
|
- },
|
|
273
|
|
- )
|
|
274
|
|
- console.log('\n')
|
|
275
|
|
- console.log('token :=>', token)
|
|
276
|
|
- token = Jwt.token.generate(
|
|
277
|
|
- {
|
|
278
|
|
- aud: 'urn:audience:test',
|
|
279
|
|
- iss: 'urn:issuer:test',
|
|
280
|
|
- // ...payload,
|
|
281
|
|
- email: user.email,
|
|
282
|
|
- name: user.name,
|
|
283
|
|
- seeking: user.seeking,
|
|
284
|
|
- salt: 'a;ldfkjas;l/dfkafnml;/cjkf',
|
|
285
|
|
- // profile_id: user.profile_id,
|
|
286
|
|
- },
|
|
287
|
|
- {
|
|
288
|
|
- key: key,
|
|
289
|
|
- algorithm: 'HS256',
|
|
290
|
|
- },
|
|
291
|
|
- {
|
|
292
|
|
- ttlSec: 6 * 60 * 60, // 7 days
|
|
293
|
|
- },
|
|
294
|
|
- )
|
|
295
|
|
- console.log('token :=>', token)
|
|
296
|
|
- token = Jwt.token.generate(
|
|
297
|
|
- {
|
|
298
|
|
- aud: 'urn:audience:test',
|
|
299
|
|
- iss: 'urn:issuer:test',
|
|
300
|
|
- // ...payload,
|
|
301
|
|
- email: user.email,
|
|
302
|
|
- name: user.name,
|
|
303
|
|
- seeking: user.seeking,
|
|
304
|
|
- salt: 'a;ldfkjas;l/dfkafnml;/cjkf',
|
|
305
|
|
- // profile_id: user.profile_id,
|
|
306
|
|
- },
|
|
307
|
|
- {
|
|
308
|
|
- key: key,
|
|
309
|
|
- algorithm: 'HS256',
|
|
310
|
|
- },
|
|
311
|
|
- {
|
|
312
|
|
- ttlSec: 7 * 60 * 60, // 7 days
|
|
313
|
|
- },
|
|
314
|
|
- )
|
|
315
|
|
- console.log('token :=>', token)
|
|
316
|
|
-
|
|
317
|
|
- // TODO: keep userinfo and it's association with the sessionToken in state/memory
|
|
318
|
|
- // registerSession(user, sessionToken) // useremail, token
|
|
319
|
|
- // this.registerSession(user, token)
|
|
320
|
|
- return token
|
|
|
233
|
+ Object.assign(obj, { ...user })
|
|
|
234
|
+ return JWT.sign(obj, key)
|
|
321
|
235
|
}
|
|
322
|
236
|
|
|
323
|
237
|
async registerSession(user, hashedEmail, token) {
|
|
|
@@ -326,6 +240,7 @@ module.exports = class UserService extends Schmervice.Service {
|
|
326
|
240
|
hashedEmail: hashedEmail,
|
|
327
|
241
|
token: token,
|
|
328
|
242
|
}
|
|
|
243
|
+
|
|
329
|
244
|
const alreadyExists = this.activeSessions.find(
|
|
330
|
245
|
sessionRequester => sessionRequester.hashedEmail === hashedEmail,
|
|
331
|
246
|
)
|
|
|
@@ -339,13 +254,14 @@ module.exports = class UserService extends Schmervice.Service {
|
|
339
|
254
|
* @returns {Token}
|
|
340
|
255
|
*/
|
|
341
|
256
|
validateToken(token) {
|
|
|
257
|
+ console.log('token :=>', token)
|
|
342
|
258
|
const key = this.server.registrations['main-app-plugin'].options.jwtKey
|
|
343
|
|
- // NOTE: reveals email...perhaps unhashed email belongs here instead...
|
|
344
|
259
|
try {
|
|
345
|
|
- const decodedToken = Jwt.token.decode(token)
|
|
346
|
|
- Jwt.token.verify(decodedToken, key)
|
|
347
|
|
- return { isValid: true, payload: decodedToken.decoded.payload }
|
|
|
260
|
+ const decodedToken = JWT.verify(token, key)
|
|
|
261
|
+ console.log('decodedToken :=>', decodedToken)
|
|
|
262
|
+ return { isValid: true, payload: decodedToken }
|
|
348
|
263
|
} catch (err) {
|
|
|
264
|
+ console.error('ERROR :=>', err)
|
|
349
|
265
|
return { isValid: false, error: err.message }
|
|
350
|
266
|
}
|
|
351
|
267
|
}
|
|
|
@@ -419,6 +335,7 @@ module.exports = class UserService extends Schmervice.Service {
|
|
419
|
335
|
}
|
|
420
|
336
|
// Set expiration time for five minutes from now
|
|
421
|
337
|
const duration = 1000 * 60 * 5
|
|
|
338
|
+
|
|
422
|
339
|
this.hashedEmails[hashedEmail] = Date.now() + duration
|
|
423
|
340
|
const sendSmtpEmail = {
|
|
424
|
341
|
to: [
|
|
|
@@ -435,16 +352,10 @@ module.exports = class UserService extends Schmervice.Service {
|
|
435
|
352
|
|
|
436
|
353
|
await apiInstance.sendTransacEmail(sendSmtpEmail).then(
|
|
437
|
354
|
data => {
|
|
438
|
|
- return {
|
|
439
|
|
- wasSuccessfull: true,
|
|
440
|
|
- data: data,
|
|
441
|
|
- }
|
|
|
355
|
+ return { wasSuccessfull: true, data: data }
|
|
442
|
356
|
},
|
|
443
|
357
|
error => {
|
|
444
|
|
- return {
|
|
445
|
|
- wasSuccessfull: false,
|
|
446
|
|
- error: error,
|
|
447
|
|
- }
|
|
|
358
|
+ return { wasSuccessfull: false, error: error }
|
|
448
|
359
|
},
|
|
449
|
360
|
)
|
|
450
|
361
|
}
|