mirror of
https://codeberg.org/keyoxide/keyoxide-web.git
synced 2024-12-22 23:09:29 -07:00
Merge pull request 'Add profile URL generator utility' (#8) from add-profile-generator into dev
Reviewed-on: https://codeberg.org/yarmo/keyoxide/pulls/8
This commit is contained in:
commit
538289baf3
4 changed files with 88 additions and 4 deletions
|
@ -658,6 +658,32 @@ async function computeWKDLocalPart(message) {
|
||||||
return encodeZBase32(new Uint8Array(hash));
|
return encodeZBase32(new Uint8Array(hash));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function generateProfileURL(data) {
|
||||||
|
if (data.input == "") {
|
||||||
|
return "Waiting for input...";
|
||||||
|
}
|
||||||
|
switch (data.source) {
|
||||||
|
case "wkd":
|
||||||
|
return `https://keyoxide.org/${data.input}`;
|
||||||
|
break;
|
||||||
|
case "hkp":
|
||||||
|
if (/.*@.*\..*/.test(data.input)) {
|
||||||
|
return `https://keyoxide.org/hkp/${data.input}`;
|
||||||
|
} else {
|
||||||
|
return `https://keyoxide.org/${data.input}`;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "keybase":
|
||||||
|
const re = /https\:\/\/keybase.io\/(.*)\/pgp_keys\.asc\?fingerprint\=(.*)/;
|
||||||
|
if (!re.test(data.input)) {
|
||||||
|
return "Incorrect Keybase public key URL.";
|
||||||
|
}
|
||||||
|
const match = data.input.match(re);
|
||||||
|
return `https://keyoxide.org/keybase/${match[1]}/${match[2]}`;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// General purpose
|
// General purpose
|
||||||
let elFormVerify = document.body.querySelector("#form-verify"),
|
let elFormVerify = document.body.querySelector("#form-verify"),
|
||||||
elFormEncrypt = document.body.querySelector("#form-encrypt"),
|
elFormEncrypt = document.body.querySelector("#form-encrypt"),
|
||||||
|
@ -666,7 +692,8 @@ let elFormVerify = document.body.querySelector("#form-verify"),
|
||||||
elProfileMode = document.body.querySelector("#profileMode"),
|
elProfileMode = document.body.querySelector("#profileMode"),
|
||||||
elModeSelect = document.body.querySelector("#modeSelect"),
|
elModeSelect = document.body.querySelector("#modeSelect"),
|
||||||
elUtilWKD = document.body.querySelector("#form-util-wkd"),
|
elUtilWKD = document.body.querySelector("#form-util-wkd"),
|
||||||
elUtilQR = document.body.querySelector("#form-util-qr");
|
elUtilQR = document.body.querySelector("#form-util-qr"),
|
||||||
|
elUtilProfileURL = document.body.querySelector("#form-util-profile-url");
|
||||||
|
|
||||||
if (elModeSelect) {
|
if (elModeSelect) {
|
||||||
elModeSelect.onchange = function (evt) {
|
elModeSelect.onchange = function (evt) {
|
||||||
|
@ -870,3 +897,36 @@ if (elUtilQR) {
|
||||||
|
|
||||||
elInput.dispatchEvent(new Event("input"));
|
elInput.dispatchEvent(new Event("input"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (elUtilProfileURL) {
|
||||||
|
elUtilProfileURL.onsubmit = function (evt) {
|
||||||
|
evt.preventDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
const elInput = document.body.querySelector("#input"),
|
||||||
|
elSource = document.body.querySelector("#source"),
|
||||||
|
elOutput = document.body.querySelector("#output");
|
||||||
|
|
||||||
|
let data = {
|
||||||
|
input: elInput.value,
|
||||||
|
source: elSource.value
|
||||||
|
};
|
||||||
|
|
||||||
|
elInput.addEventListener("input", async function(evt) {
|
||||||
|
data = {
|
||||||
|
input: elInput.value,
|
||||||
|
source: elSource.value
|
||||||
|
};
|
||||||
|
elOutput.innerText = await generateProfileURL(data);
|
||||||
|
});
|
||||||
|
|
||||||
|
elSource.addEventListener("input", async function(evt) {
|
||||||
|
data = {
|
||||||
|
input: elInput.value,
|
||||||
|
source: elSource.value
|
||||||
|
};
|
||||||
|
elOutput.innerText = await generateProfileURL(data);
|
||||||
|
});
|
||||||
|
|
||||||
|
elInput.dispatchEvent(new Event("input"));
|
||||||
|
}
|
||||||
|
|
|
@ -103,6 +103,9 @@ input[type="submit"][disabled="true"] {
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
opacity: 0.3;
|
opacity: 0.3;
|
||||||
}
|
}
|
||||||
|
select {
|
||||||
|
margin: 0 0 16px 0;
|
||||||
|
}
|
||||||
.green {
|
.green {
|
||||||
color: green;
|
color: green;
|
||||||
}
|
}
|
||||||
|
@ -113,9 +116,6 @@ input[type="submit"][disabled="true"] {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
margin: 0 0 8px;
|
margin: 0 0 8px;
|
||||||
}
|
}
|
||||||
.modesContainer {
|
|
||||||
margin-top: 16px;
|
|
||||||
}
|
|
||||||
.modes {
|
.modes {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
</p>
|
</p>
|
||||||
<h2>Utilities</h2>
|
<h2>Utilities</h2>
|
||||||
<p>
|
<p>
|
||||||
|
<a class="bigBtn" href="/util/profile-url">Profile URL</a>
|
||||||
<a class="bigBtn" href="/util/wkd">wkd</a>
|
<a class="bigBtn" href="/util/wkd">wkd</a>
|
||||||
<a class="bigBtn" href="/util/qr">QR</a>
|
<a class="bigBtn" href="/util/qr">QR</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
23
views/util/profile-url.php
Normal file
23
views/util/profile-url.php
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
<?php $this->layout('template.base', ['title' => $title]) ?>
|
||||||
|
|
||||||
|
<h1>Profile URL</h1>
|
||||||
|
<div class="content">
|
||||||
|
<form id="form-util-profile-url" method="post">
|
||||||
|
<p>This tool generates an URL for your Keyoxide profile page.</p>
|
||||||
|
<h3>Public key</h3>
|
||||||
|
<label for="source">Source: </label>
|
||||||
|
<select class="source" name="source" id="source">
|
||||||
|
<option value="wkd">Web Key Directory</option>
|
||||||
|
<option value="hkp">keys.openpgp.org</option>
|
||||||
|
<option value="keybase">Keybase</option>
|
||||||
|
</select>
|
||||||
|
<br>
|
||||||
|
<input type="text" name="input" id="input" placeholder="Input" value="">
|
||||||
|
<h3>Profile URL</h3>
|
||||||
|
<code id="output">Waiting for input...</code>
|
||||||
|
<h3>Help</h3>
|
||||||
|
<p>When using the <strong>Web Key Directory</strong> source, the <strong>Input</strong> looks like <strong>username@domain.org</strong>.</p>
|
||||||
|
<p>When using the <strong>keys.openpgp.org</strong> source, the <strong>Input</strong> is either the <strong>fingerprint</strong> of your public key, or the main identity's <strong>email address</strong>.</p>
|
||||||
|
<p>When using the <strong>Keybase</strong> source, the <strong>Input</strong> is the URL obtained by going to your Keybase profile page, clicking on the <strong>key id</strong> of your keypair and copying the URL of the <strong>this key</strong> link.</p>
|
||||||
|
</form>
|
||||||
|
</div>
|
Loading…
Reference in a new issue