File tree Expand file tree Collapse file tree 2 files changed +75
-0
lines changed Expand file tree Collapse file tree 2 files changed +75
-0
lines changed Original file line number Diff line number Diff line change @@ -7,6 +7,8 @@ const authModel = require('../models/auth');
7
7
const gravatar = require ( 'gravatar' ) ;
8
8
const internalToken = require ( './token' ) ;
9
9
const internalAuditLog = require ( './audit-log' ) ;
10
+ const authenticator = require ( 'authenticator' ) ;
11
+ const qrcode = require ( 'qrcode' ) ;
10
12
11
13
function omissions ( ) {
12
14
return [ 'is_deleted' ] ;
@@ -507,6 +509,36 @@ const internalUser = {
507
509
. then ( ( user ) => {
508
510
return internalToken . getTokenFromUser ( user ) ;
509
511
} ) ;
512
+ } ,
513
+
514
+ createMFAKey : ( access , data ) => {
515
+ return access . can ( 'users:activate_mfa' , data . id )
516
+ . then ( ( ) => {
517
+ return internalUser . get ( access , { id : data . id } ) ;
518
+ } )
519
+ . then ( ( user ) => {
520
+ let secret = authenticator . generateKey ( ) ;
521
+ return userModel
522
+ . query ( )
523
+ . patchAndFetchById ( user . id , { mfa_key : secret } )
524
+ . then ( ( ) => {
525
+ let uri = authenticator . generateTotpUri ( secret , user . email , 'NginxProxyManager' ) ;
526
+ return qrcode . toDataURL ( uri ) ;
527
+ } )
528
+ . then ( ( qrCode ) => {
529
+ return { user, qrCode } ;
530
+ } ) ;
531
+ } )
532
+ . then ( ( { user, qrCode } ) => {
533
+ return internalAuditLog . add ( access , {
534
+ action : 'updated' ,
535
+ object_type : 'user' ,
536
+ object_id : user . id ,
537
+ meta : data
538
+
539
+ } )
540
+ . then ( ( ) => ( { user, qrCode } ) ) ;
541
+ } ) ;
510
542
}
511
543
} ;
512
544
Original file line number Diff line number Diff line change
1
+ const migrate_name = 'identifier_for_migrate' ;
2
+ const logger = require ( '../logger' ) . migrate ;
3
+
4
+ /**
5
+ * Migrate
6
+ *
7
+ * @see http://knexjs.org/#Schema
8
+ *
9
+ * @param {Object } knex
10
+ * @param {Promise } Promise
11
+ * @returns {Promise }
12
+ */
13
+ exports . up = function ( knex /*, Promise*/ ) {
14
+
15
+ logger . info ( '[' + migrate_name + '] Migrating Up...' ) ;
16
+
17
+ return knex . schema . alterTable ( 'user' , ( table ) => {
18
+ table . string ( 'mfa_secret' ) ;
19
+ } )
20
+ . then ( ( ) => {
21
+ logger . info ( '[' + migrate_name + '] User Table altered' ) ;
22
+ logger . info ( '[' + migrate_name + '] Migrating Up Complete' ) ;
23
+ } ) ;
24
+ } ;
25
+
26
+ /**
27
+ * Undo Migrate
28
+ *
29
+ * @param {Object } knex
30
+ * @param {Promise } Promise
31
+ * @returns {Promise }
32
+ */
33
+ exports . down = function ( knex /*, Promise*/ ) {
34
+ logger . info ( '[' + migrate_name + '] Migrating Down...' ) ;
35
+
36
+ return knex . schema . alterTable ( 'user' , ( table ) => {
37
+ table . dropColumn ( 'mfa_key' ) ;
38
+ } )
39
+ . then ( ( ) => {
40
+ logger . info ( '[' + migrate_name + '] User Table altered' ) ;
41
+ logger . info ( '[' + migrate_name + '] Migrating Down Complete' ) ;
42
+ } ) ;
43
+ } ;
You can’t perform that action at this time.
0 commit comments