diff --git a/app/js/app.js b/app/js/app.js index f1a366c..d465814 100644 --- a/app/js/app.js +++ b/app/js/app.js @@ -1,6 +1,7 @@ (function () { 'use strict'; + /*global URLSearchParams,Headers*/ var BROWSER_SUPPORTS_ECDSA = navigator.userAgent.toLowerCase().indexOf('firefox') === -1; var $qs = function (s) { return window.document.querySelector(s); }; var $qsa = function (s) { return window.document.querySelectorAll(s); }; @@ -9,10 +10,14 @@ var nonce; var kid; var i = 1; + var BACME = window.BACME; + var PromiseA = window.Promise; + var crypto = window.crypto; var apiUrl = 'https://acme-{{env}}.api.letsencrypt.org/directory'; function updateApiType() { console.log("type updated"); + /*jshint validthis: true */ var input = this || Array.prototype.filter.call( $qsa('.js-acme-api-type'), function ($el) { return $el.checked; } )[0]; @@ -43,13 +48,13 @@ progressSteps[j].classList.remove("js-progress-step-complete"); progressSteps[j].classList.remove("js-progress-step-started"); } - }; + } } function submitForm(ev) { var j = i; i += 1; - + steps[j].submit(ev); } @@ -61,6 +66,7 @@ }); function updateChallengeType() { + /*jshint validthis: true*/ var input = this || Array.prototype.filter.call( $qsa('.js-acme-challenge-type'), function ($el) { return $el.checked; } )[0]; @@ -87,22 +93,11 @@ , headers: new Headers({ 'Content-Type': 'application/json' }) , body: JSON.stringify({ address: email - , list: 'greenlock@ppl.family' + , list: 'web@greenlock.domains' , domain: domains.join(',') }) - }).then(function (resp) { - return resp.json().then(function (data) { - /* - if (data.error) { - window.alert("Couldn't save your contact. Email coolaj86@gmail.com instead."); - return; - } - */ - }); - }).catch(function () { - /* - window.alert("Didn't get your contact. Bad network connection? Email coolaj86@gmail.com instead."); - */ + }).catch(function (err) { + console.error(err); }); } @@ -155,17 +150,28 @@ var p; function createKeypair() { - return BACME.accounts.generateKeypair({ - type: 'ECDSA' - , bitlength: '256' - }).then(function (jwk) { + var opts; + + if(BROWSER_SUPPORTS_ECDSA) { + opts = { + type: 'ECDSA' + , bitlength: '256' + }; + } else { + opts = { + type: 'RSA' + , bitlength: '2048' + }; + } + + return BACME.accounts.generateKeypair(opts).then(function (jwk) { localStorage.setItem('account:' + email, JSON.stringify(jwk)); return jwk; - }) + }); } if (jwk) { - p = Promise.resolve(jwk); + p = PromiseA.resolve(jwk); } else { p = createKeypair(); } @@ -196,11 +202,11 @@ return p.then(function (_jwk) { jwk = _jwk; kid = JSON.parse(localStorage.getItem('account-kid:' + email) || 'null'); - var p2 + var p2; // TODO save account id rather than always retrieving it if (kid) { - p2 = Promise.resolve(kid); + p2 = PromiseA.resolve(kid); } else { p2 = createAccount(jwk); } @@ -228,7 +234,7 @@ 'http-01': '.js-acme-verification-http-01' , 'dns-01': '.js-acme-verification-dns-01' , 'wildcard': '.js-acme-verification-wildcard' - } + }; /* var tpls = {}; @@ -241,9 +247,9 @@ */ // TODO make Promise-friendly - return Promise.all(claims.map(function (claim) { + return PromiseA.all(claims.map(function (claim) { var hostname = claim.identifier.value; - return Promise.all(claim.challenges.map(function (c) { + return PromiseA.all(claim.challenges.map(function (c) { var keyAuth = BACME.challenges['http-01']({ token: c.token , thumbprint: thumbprint @@ -374,10 +380,10 @@ var allsWell = true; function checkPolls() { - return new Promise(function (resolve) { + return new PromiseA(function (resolve) { setTimeout(resolve, 1000); }).then(function () { - return Promise.all(polls.map(function (poll) { + return PromiseA.all(polls.map(function (poll) { return BACME.challenges.check({ challengePollUrl: poll.url }); })).then(function (polls) { console.log(polls); @@ -415,7 +421,7 @@ updateProgress(1); hideForms(); $qs('.js-acme-form-poll').hidden = false; - } + }; steps[4].submit = function () { console.log('Congrats! Auto advancing...'); @@ -424,7 +430,7 @@ var p; function createKeypair() { - let opts; + var opts; if(BROWSER_SUPPORTS_ECDSA) { opts = { @@ -441,11 +447,11 @@ return BACME.accounts.generateKeypair(opts).then(function (serverJwk) { localStorage.setItem('server:' + key, JSON.stringify(serverJwk)); return serverJwk; - }) + }); } if (serverJwk) { - p = Promise.resolve(serverJwk); + p = PromiseA.resolve(serverJwk); } else { p = createKeypair(); } @@ -468,7 +474,7 @@ }); }).then(function () { function checkCert() { - return new Promise(function (resolve) { + return new PromiseA(function (resolve) { setTimeout(resolve, 1000); }).then(function () { return BACME.orders.check({ orderUrl: info.orderUrl }); @@ -535,7 +541,7 @@ wcOpts = { name: "ECDSA" , namedCurve: "P-256" - } + }; } return crypto.subtle.importKey( "jwk" @@ -559,10 +565,10 @@ }; steps[5] = function () { - updateProgress(2) + updateProgress(2); hideForms(); $qs('.js-acme-form-download').hidden = false; - } + }; steps[1](); var params = new URLSearchParams(window.location.search); @@ -570,7 +576,7 @@ if(params.has('acme-domains')) { console.log("acme-domains param: ", params.get('acme-domains')); - $qs('.js-acme-domains').value = params.get('acme-domains'); + $qs('.js-acme-domains').value = params.get('acme-domains'); $qsa('.js-acme-api-type').forEach(function(ele) { if(ele.value === apiType) {