Browse Source

ugly first steps

v1
AJ ONeal 4 years ago
parent
commit
40200e4dc5
  1. 134
      index.html
  2. 55
      js/app.js
  3. 18
      js/bacme.js

134
index.html

@ -3,13 +3,143 @@
<title>Greenlock&trade;</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 &amp; 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

@ -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

@ -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…
Cancel
Save