MAJOR: Updates for Authenticated Web UI and CLI #30
| @ -3,6 +3,7 @@ | |||||||
| 
 | 
 | ||||||
| var Vue = window.Vue; | var Vue = window.Vue; | ||||||
| var Telebit = window.TELEBIT; | var Telebit = window.TELEBIT; | ||||||
|  | var Keypairs = window.Keypairs; | ||||||
| var api = {}; | var api = {}; | ||||||
| 
 | 
 | ||||||
| /* | /* | ||||||
| @ -462,8 +463,15 @@ new Vue({ | |||||||
| , methods: appMethods | , methods: appMethods | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| 
 | function run(key) { | ||||||
| api.config().then(function (config) { |   // 1. Get ACME directory
 | ||||||
|  |   // 2. Fetch ACME account
 | ||||||
|  |   // 3. Test if account has access
 | ||||||
|  |   // 4. Show command line auth instructions to auth
 | ||||||
|  |   // 5. Sign requests / use JWT
 | ||||||
|  |   // 6. Enforce token required for config, status, etc
 | ||||||
|  |   // 7. Move admin interface to standard ports (admin.foo-bar-123.telebit.xyz)
 | ||||||
|  |   api.config().then(function (config) { | ||||||
|     telebitState.config = config; |     telebitState.config = config; | ||||||
|     if (config.greenlock) { |     if (config.greenlock) { | ||||||
|       appData.init.acmeServer = config.greenlock.server; |       appData.init.acmeServer = config.greenlock.server; | ||||||
| @ -500,14 +508,36 @@ api.config().then(function (config) { | |||||||
| 
 | 
 | ||||||
|     // TODO handle default state
 |     // TODO handle default state
 | ||||||
|     changeState('status'); |     changeState('status'); | ||||||
| }).catch(function (err) { |   }).catch(function (err) { | ||||||
|     appData.views.flash.error = err.message || JSON.stringify(err, null, 2); |     appData.views.flash.error = err.message || JSON.stringify(err, null, 2); | ||||||
| }); |   }); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | // TODO protect key with passphrase (or QR code?)
 | ||||||
|  | function getKey() { | ||||||
|  |   var key; | ||||||
|  |   try { | ||||||
|  |     key = JSON.parse(localStorage.getItem('key')); | ||||||
|  |   } catch(e) { | ||||||
|  |     // ignore
 | ||||||
|  |   } | ||||||
|  |   if (key && key.kid && key.d) { | ||||||
|  |     return Promise.resolve(key); | ||||||
|  |   } | ||||||
|  |   return Keypairs.generate().then(function (pair) { | ||||||
|  |     key = pair.private; | ||||||
|  |     localStorage.setItem('key', JSON.stringify(key)); | ||||||
|  |     return key; | ||||||
|  |   }); | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| window.api = api; | window.api = api; | ||||||
| 
 | getKey().then(function (key) { | ||||||
| setTimeout(function () { |   run(key); | ||||||
|  |   setTimeout(function () { | ||||||
|     document.body.hidden = false; |     document.body.hidden = false; | ||||||
| }, 50); |   }, 50); | ||||||
|  | }); | ||||||
| 
 | 
 | ||||||
| }()); | }()); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user