ugly first steps
This commit is contained in:
parent
4fd5fd8bd9
commit
40200e4dc5
134
index.html
134
index.html
|
@ -3,13 +3,143 @@
|
|||
<title>Greenlock™</title>
|
||||
</head>
|
||||
<body>
|
||||
<form>
|
||||
|
||||
<!-- Step 1 Choose Domain(s) -->
|
||||
<form class="js-acme-form js-acme-form-domains">
|
||||
<label>What's your domain?</label>
|
||||
<input type="text" placeholder="www.example.com">
|
||||
<input class="js-acme-domains" type="text" placeholder="example.com,*.example.com" required>
|
||||
<button type="submit">Next</button>
|
||||
</form>
|
||||
|
||||
<!-- Step 2 Create Account -->
|
||||
<form class="js-acme-form js-acme-form-account">
|
||||
<label>What's your email?</label>
|
||||
<input class="js-acme-account-email" type="email" placeholder="john@doe.family" required>
|
||||
<label><input class="js-acme-account-tos" type="checkbox" required>
|
||||
Agree to <a class="js-le-tos">Let's Encrypt Terms of Service</a>?</label>
|
||||
<label><input class="js-greenlock-account-tos" type="checkbox" required>
|
||||
Agree to <a class="js-gl-tos">Greenlock Terms of Service</a>?</label>
|
||||
<a href="#">advanced (use existing account)</a>
|
||||
<button type="submit">Next</button>
|
||||
</form>
|
||||
|
||||
<!-- Step 3 Set Challanges -->
|
||||
<form class="js-acme-form js-acme-form-challenges">
|
||||
<label>How will you validate your domain?</label>
|
||||
<label><input class="js-acme-challenge-type" type="radio" value="http-01" checked required>
|
||||
File Upload to HTTP Web Server</label>
|
||||
<label><input class="js-acme-challenge-type" type="radio" value="dns-01" required>
|
||||
TXT Records on DNS Name Server</label>
|
||||
|
||||
Verify Domains & Sub-Domains:
|
||||
|
||||
<table class="js-acme-table-http-01">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Hostname</th>
|
||||
<th>File Location</th>
|
||||
<th>File Contents</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>example.com</td>
|
||||
<td>.well-known/acme-challenge/xxx</td>
|
||||
<td>sec.ret</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<table class="js-acme-table-dns-01">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Hostname</th>
|
||||
<th>TXT Host</th>
|
||||
<th>TXT Value</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>example.com</td>
|
||||
<td>_acme-challenge.example.com</td>
|
||||
<td>4A54</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<div class="js-acme-wildcards">
|
||||
Verify Wildcard Domains:
|
||||
|
||||
<table class="js-acme-table-wildcards">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Hostname</th>
|
||||
<th>TXT Host</th>
|
||||
<th>TXT Value</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>example.com</td>
|
||||
<td>_acme-challenge.example.com</td>
|
||||
<td>4A54</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<button type="submit">Next</button>
|
||||
</form>
|
||||
|
||||
<!-- Step 4 Process Challanges -->
|
||||
<form class="js-acme-form js-acme-form-poll">
|
||||
Verifying Domains...
|
||||
|
||||
<table class="js-acme-table-verifying">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Hostname</th>
|
||||
<th>Type</th>
|
||||
<th>Pass</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>example.com</td>
|
||||
<td>http-01</td>
|
||||
<td>-</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<a href="#">advanced (use existing keypair for domain)</a>
|
||||
|
||||
<button type="submit">Next</button>
|
||||
</form>
|
||||
|
||||
<!-- Step 4 Process Challanges -->
|
||||
<form class="js-acme-form js-acme-form-download">
|
||||
<label>privkey.pem</label>
|
||||
<textarea>-</textarea>
|
||||
|
||||
<label>fullchain.pem</label>
|
||||
<textarea>-</textarea>
|
||||
|
||||
<label>cert.pem</label>
|
||||
<textarea>-</textarea>
|
||||
|
||||
<label>chain.pem</label>
|
||||
<textarea>-</textarea>
|
||||
|
||||
<button type="button">Download SSL Certificates</button>
|
||||
|
||||
<a href="#">Advanced (copy and paste)</a>
|
||||
|
||||
<button type="submit">Start Over</button>
|
||||
</form>
|
||||
|
||||
<input class="js-acme-directory-url" type="url" placeholder="ACME directory url">
|
||||
|
||||
<script src="./js/pkijs.org/v1.3.33/common.js"></script>
|
||||
<script src="./js/pkijs.org/v1.3.33/asn1.js"></script>
|
||||
<script src="./js/pkijs.org/v1.3.33/x509_schema.js"></script>
|
||||
|
|
55
js/app.js
55
js/app.js
|
@ -1,6 +1,57 @@
|
|||
(function () {
|
||||
'use strict';
|
||||
|
||||
//window.document.querySelector('.js-acme-directory-url').value = 'https://acme-v02.api.letsencrypt.org/directory';
|
||||
window.document.querySelector('.js-acme-directory-url').value = 'https://acme-staging-v02.api.letsencrypt.org/directory';
|
||||
var $qs = function (s) { return window.document.querySelector(s); };
|
||||
var $qsa = function (s) { return window.document.querySelectorAll(s); };
|
||||
var info = {};
|
||||
var steps = {};
|
||||
var i = 1;
|
||||
|
||||
//$qs('.js-acme-directory-url').value = 'https://acme-v02.api.letsencrypt.org/directory';
|
||||
$qs('.js-acme-directory-url').value = 'https://acme-staging-v02.api.letsencrypt.org/directory';
|
||||
|
||||
function hideForms() {
|
||||
$qsa('.js-acme-form').forEach(function (el) {
|
||||
el.hidden = true;
|
||||
});
|
||||
}
|
||||
|
||||
$qs('.js-acme-form-domains').addEventListener('submit', function (ev) {
|
||||
ev.preventDefault();
|
||||
info.identifiers = $qs('.js-acme-domains').value.split(/,/g).map(function (hostname) {
|
||||
return { type: 'dns', value: hostname.trim() };
|
||||
});
|
||||
|
||||
return BACME.directory($qs('.js-acme-directory-url').value).then(function () {
|
||||
i += 1;
|
||||
steps[i]();
|
||||
});
|
||||
});
|
||||
|
||||
steps[1] = function () {
|
||||
hideForms();
|
||||
$qs('.js-acme-form-domains').hidden = false;
|
||||
};
|
||||
|
||||
steps[2] = function () {
|
||||
hideForms();
|
||||
$qs('.js-acme-form-account').hidden = false;
|
||||
};
|
||||
|
||||
steps[3] = function () {
|
||||
hideForms();
|
||||
$qs('.js-acme-form-challenges').hidden = false;
|
||||
};
|
||||
|
||||
steps[4] = function () {
|
||||
hideForms();
|
||||
$qs('.js-acme-form-poll').hidden = false;
|
||||
}
|
||||
|
||||
steps[5] = function () {
|
||||
hideForms();
|
||||
$qs('.js-acme-form-download').hidden = false;
|
||||
}
|
||||
|
||||
steps[1]();
|
||||
}());
|
||||
|
|
18
js/bacme.js
18
js/bacme.js
|
@ -8,13 +8,13 @@ var webCrypto = exports.crypto;
|
|||
var directoryUrl = 'https://acme-staging-v02.api.letsencrypt.org/directory';
|
||||
var directory;
|
||||
|
||||
var nonceUrl = directory.newNonce || 'https://acme-staging-v02.api.letsencrypt.org/acme/new-nonce';
|
||||
var nonceUrl;
|
||||
var nonce;
|
||||
|
||||
var accountKeypair;
|
||||
var accountJwk;
|
||||
|
||||
var accountUrl = directory.newAccount;
|
||||
var accountUrl;
|
||||
var signedAccount;
|
||||
|
||||
BACME.challengePrefixes = {
|
||||
|
@ -38,6 +38,9 @@ BACME.directory = function (url) {
|
|||
BACME._logHeaders(resp);
|
||||
return resp.json().then(function (body) {
|
||||
directory = body;
|
||||
nonceUrl = directory.newNonce || 'https://acme-staging-v02.api.letsencrypt.org/acme/new-nonce';
|
||||
accountUrl = directory.newAccount || 'https://acme-staging-v02.api.letsencrypt.org/acme/new-account';
|
||||
orderUrl = directory.newOrder || "https://acme-staging-v02.api.letsencrypt.org/acme/new-order";
|
||||
BACME._logBody(body);
|
||||
return body;
|
||||
});
|
||||
|
@ -169,7 +172,7 @@ BACME.accounts.set = function () {
|
|||
});
|
||||
};
|
||||
|
||||
var orderUrl = directory.newOrder || "https://acme-staging-v02.api.letsencrypt.org/acme/new-order";
|
||||
var orderUrl;
|
||||
var signedOrder;
|
||||
|
||||
BACME.orders = {};
|
||||
|
@ -305,7 +308,8 @@ BACME.challenges['http-01'] = function () {
|
|||
path: httpPath
|
||||
, value: keyAuth
|
||||
};
|
||||
});
|
||||
};
|
||||
|
||||
BACME.challenges['dns-01'] = function () {
|
||||
return window.crypto.subtle.digest(
|
||||
{ name: "SHA-256", }
|
||||
|
@ -326,7 +330,7 @@ BACME.challenges['dns-01'] = function () {
|
|||
return {
|
||||
type: 'TXT'
|
||||
, host: dnsRecord
|
||||
, answer: dnsAuth;
|
||||
, answer: dnsAuth
|
||||
};
|
||||
});
|
||||
};
|
||||
|
@ -424,13 +428,13 @@ BACME.domains.generateKeypair = function () {
|
|||
});
|
||||
};
|
||||
|
||||
BACME.order.generateCsr = function (keypair, domains) {
|
||||
BACME.orders.generateCsr = function (keypair, domains) {
|
||||
return Promise.resolve(CSR.generate(keypair, domains));
|
||||
};
|
||||
|
||||
var certificateUrl;
|
||||
|
||||
BACME.order.finalize = function () {
|
||||
BACME.orders.finalize = function () {
|
||||
var payload64 = jsto64(
|
||||
{ csr: csr }
|
||||
);
|
||||
|
|
Loading…
Reference in New Issue