forked from coolaj86/telebit.js
		
	add client otp
This commit is contained in:
		
							parent
							
								
									ee15f1be9c
								
							
						
					
					
						commit
						bff71aa813
					
				| @ -102,7 +102,12 @@ function serveControls() { | |||||||
| 
 | 
 | ||||||
|       if (/\btelebit\.cloud\b/i.test(state.config.relay) && state.config.email && !state.token) { |       if (/\btelebit\.cloud\b/i.test(state.config.relay) && state.config.email && !state.token) { | ||||||
|         dumpy.code = "AWAIT_AUTH"; |         dumpy.code = "AWAIT_AUTH"; | ||||||
|         dumpy.message = "Check your email. You must verify your email address to activate this device."; |         dumpy.message = [ | ||||||
|  |           "Check your email." | ||||||
|  |         , "You must verify your email address to activate this device." | ||||||
|  |         , "" | ||||||
|  |         , "    Login Code (if needed): " + state.otp | ||||||
|  |         ].join('\n'); | ||||||
|       } |       } | ||||||
| 
 | 
 | ||||||
|       res.end(JSON.stringify(dumpy)); |       res.end(JSON.stringify(dumpy)); | ||||||
| @ -465,6 +470,16 @@ function connectTunnel() { | |||||||
|     tun.end(); |     tun.end(); | ||||||
|     controlServer.close(); |     controlServer.close(); | ||||||
|   } |   } | ||||||
|  |   // reverse 2FA otp
 | ||||||
|  |   function leftpad(i, n, c) { | ||||||
|  |     while (i.toString().length < (n || 4)) { | ||||||
|  |       i = (c || '0') + i; | ||||||
|  |     } | ||||||
|  |     return i; | ||||||
|  |   } | ||||||
|  |   function getOtp() { | ||||||
|  |     return leftpad(Math.random() * 9999, 4, '0'); | ||||||
|  |   } | ||||||
|   process.on('SIGINT', sigHandler); |   process.on('SIGINT', sigHandler); | ||||||
|   state.net = state.net || { |   state.net = state.net || { | ||||||
|     createConnection: function (info, cb) { |     createConnection: function (info, cb) { | ||||||
| @ -477,6 +492,7 @@ function connectTunnel() { | |||||||
|     } |     } | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|  |   state.otp = getOtp(); | ||||||
|   state.greenlock = state.config.greenlock || {}; |   state.greenlock = state.config.greenlock || {}; | ||||||
|   state.sortingHat = state.config.sortingHat || path.resolve(__dirname, '..', 'lib/sorting-hat.js'); |   state.sortingHat = state.config.sortingHat || path.resolve(__dirname, '..', 'lib/sorting-hat.js'); | ||||||
| 
 | 
 | ||||||
| @ -484,15 +500,19 @@ function connectTunnel() { | |||||||
| 
 | 
 | ||||||
|   if (state.config.email && !state.token) { |   if (state.config.email && !state.token) { | ||||||
|     console.info(); |     console.info(); | ||||||
|     console.info('=================================='); |     console.info('===================================='); | ||||||
|     console.info('=           HEY! LISTEN!           ='); |     console.info('=           HEY! LISTEN!           ='); | ||||||
|     console.info('=================================='); |     console.info('===================================='); | ||||||
|     console.info('=                                  ='); |     console.info('=                                  ='); | ||||||
|     console.info('= 1. Open your email               ='); |     console.info('= 1. Open your email               ='); | ||||||
|  |     console.info('=                                  ='); | ||||||
|     console.info('= 2. Click the magic login link    ='); |     console.info('= 2. Click the magic login link    ='); | ||||||
|  |     console.info('=    Login Code (if needed): 0000  ='.replace('0000', state.otp)); | ||||||
|  |     console.info('=                                  ='); | ||||||
|     console.info('= 3. Check back here for deets     ='); |     console.info('= 3. Check back here for deets     ='); | ||||||
|     console.info('=                                  ='); |     console.info('=                                  ='); | ||||||
|     console.info('=================================='); |     console.info('=                                  ='); | ||||||
|  |     console.info('===================================='); | ||||||
|     console.info(); |     console.info(); | ||||||
|   } |   } | ||||||
|   // TODO Check undefined vs false for greenlock config
 |   // TODO Check undefined vs false for greenlock config
 | ||||||
| @ -579,6 +599,7 @@ function connectTunnel() { | |||||||
|   var tun = remote.connect({ |   var tun = remote.connect({ | ||||||
|     relay: state.relay |     relay: state.relay | ||||||
|   , config: state.config |   , config: state.config | ||||||
|  |   , otp: state.otp | ||||||
|   , sortingHat: state.sortingHat |   , sortingHat: state.sortingHat | ||||||
|   , net: state.net |   , net: state.net | ||||||
|   , insecure: state.insecure |   , insecure: state.insecure | ||||||
|  | |||||||
| @ -485,6 +485,7 @@ function _connect(state) { | |||||||
|         , subject_scheme: 'mailto' |         , subject_scheme: 'mailto' | ||||||
|           // TODO create domains list earlier
 |           // TODO create domains list earlier
 | ||||||
|         , scope: Object.keys(state.config.servernames || {}).join(',') |         , scope: Object.keys(state.config.servernames || {}).join(',') | ||||||
|  |         , otp: state.otp | ||||||
|         , hostname: os.hostname() |         , hostname: os.hostname() | ||||||
|           // Used for User-Agent
 |           // Used for User-Agent
 | ||||||
|         , os_type: os.type() |         , os_type: os.type() | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user