Remove obsolete files

This commit is contained in:
Yarmo Mackenbach 2021-03-31 14:56:13 +02:00
parent 0c14377a3c
commit c5014e5e73
No known key found for this signature in database
GPG key ID: 37367F4AF4087AD1
15 changed files with 0 additions and 870 deletions

View file

@ -1,439 +0,0 @@
/*
Copyright (C) 2021 Yarmo Mackenbach
This program is free software: you can redistribute it and/or modify it under
the terms of the GNU Affero General Public License as published by the Free
Software Foundation, either version 3 of the License, or (at your option)
any later version.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
details.
You should have received a copy of the GNU Affero General Public License along
with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If your software can interact with users remotely through a computer network,
you should also make sure that it provides a way for users to get its source.
For example, if your program is a web application, its interface could display
a "Source" link that leads users to an archive of the code. There are many
ways you could offer source, and different solutions will be better for different
programs; see section 13 for the specific requirements.
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary. For
more information on this, and how to apply and follow the GNU AGPL, see <https://www.gnu.org/licenses/>.
*/
* {
box-sizing: border-box;
}
body {
margin: 0;
color: #444;
font-family: sans-serif;
background-color: #9dd3f0;
background-image: url('/static/img/background.svg');
background-repeat: repeat;
background-size: 512px;
background-position: -16px -16px;
}
header {
height: 64px;
padding: 8px;
margin: 0 0 48px;
font-size: 1.1em;
background-color: #fff;
box-shadow: 0 8px 16px rgba(0,0,0,0.15);
}
header .container {
display: flex;
align-items: center;
height: 100%;
}
header a.logo {
display: inline-block;
height: 100%;
}
header .logo img {
height: 100%;
margin: 0 1em 0 0;
}
nav a {
margin-left: 12px;
}
footer {
color: #777;
margin: 64px 0;
padding: 0 32px;
font-size: 0.9em;
overflow-wrap: break-word;
}
footer a {
color: #777;
}
.container {
/*max-width: 720px;*/
max-width: 770px;
width: 100%;
margin: 0 auto;
}
.content {
padding: 16px 32px 32px;
background-color: #fff;
border-radius: 8px;
box-shadow: 0 8px 16px rgba(0,0,0,0.15);
}
.spacer {
flex: 1;
}
.flex-column-container {
display: flex;
flex-wrap: wrap;
}
.flex-column {
flex: 1 0 250px;
}
.bigBtn {
display: inline-block;
margin-bottom: 12px;
padding: 6px 12px;
color: #fff;
font-size: 1.1em;
text-transform: uppercase;
text-decoration: none;
background: #3f9acc;
background: linear-gradient(0deg, #3892c2 0%, #6abae5 100%);
border: 0;
border-radius: 8px;
cursor: pointer;
}
.bigBtn:hover {
color: #fff;
background-color: #72bde6;
background: linear-gradient(0deg, #4da4d2 0%, #82c5ea 100%);
}
.fancyBtn {
display: inline-block;
margin-bottom: 12px;
padding: 8px 24px;
color: #fff;
font-size: 1.1em;
text-transform: uppercase;
text-decoration: none;
font-weight: bold;
background: #8b76f2;
/* background: linear-gradient(90deg, #8b76f2 0%, #6abae5 100%); */
background: linear-gradient(90deg, #6957c4 0%, #43afea 100%);
border: 0;
border-radius: 64px;
cursor: pointer;
}
.fancyBtn:hover {
color: #fff;
background-color: #a595f4;
/* background: linear-gradient(90deg, #a595f4 0%, #93d9ff 100%); */
/* background: linear-gradient(90deg, #6957c4 0%, #43afea 100%); */
background: linear-gradient(90deg, #8b76f2 0%, #6abae5 100%);
}
.full-width {
width: 100% !important;
}
h1 {
margin: 0 0 24px 0;
color: #222;
/* background-color: #9dd3f0; */
background-color: #fff;
text-align: center;
cursor: default;
}
h1::after {
content: "";
display: block;
width: 100%;
height: 4px;
margin-top: 12px;
background: linear-gradient(90deg, #8b76f2 0%, #6abae5 100%);
border-radius: 2px;
}
h2, h3 {
margin-top: 32px;
color: #222;
cursor: default;
}
h2 {
padding-right: 32px;
}
h2::after {
content: "";
display: block;
width: 100%;
height: 2px;
/* background: linear-gradient(90deg, #8b76f2 0%, #3892c2 50%, #6abae5 100%); */
background: linear-gradient(90deg, #3892c2 0%, #6abae5 100%);
border-radius: 1px;
}
p {
line-height: 1.4em;
font-size: 1.1em;
}
a {
color: #3f9acc;
}
a:hover {
color: #6957c4;
}
a.bigBtn {
margin-right: 8px;
}
a.header-anchor {
text-decoration: none;
opacity: 0.5;
}
a.header-anchor:hover {
opacity: 1;
}
ul {
list-style: "- ";
}
pre {
white-space: pre-wrap;
}
code {
padding: 2px;
background-color: #eee;
border: solid 1px #ddd;
user-select: all;
}
pre code {
display: block;
padding: 8px;
word-break: break-word;
/* word-break: break-all; */
}
textarea {
width: 100%;
height: 128px;
resize: vertical;
font-size: 0.9rem;
}
input[type="text"] {
margin: 0 12px 12px 0;
width: 45%;
font-size: 0.9rem;
}
input[type="radio"] {
vertical-align: sub;
}
input[type="submit"] {
width: 100%;
}
input[type="submit"][disabled="true"] {
cursor: default;
pointer-events: none;
opacity: 0.3;
}
select {
margin: 0 0 16px 0;
}
.green, a.proofUrl.proofUrl--verified {
color: #499539;
}
.red {
color: red;
}
.label {
display: inline-block;
margin: 0 0 8px;
}
.modes {
display: none;
}
.modes.modes--visible {
display: block;
}
.container--profile {
margin-top: 64px;
}
.container--profile .content {
padding-top: 32px;
font-size: 1.2em;
}
.container--profile footer {
text-align: center;
}
.guides {
display: flex;
flex-wrap: wrap;
}
.guides__section {
flex: 1 0 250px;
}
.guides__section a {
line-height: 1.8em;
}
#profileHeader {
display: flex;
flex-direction: row;
align-items: center;
margin-bottom: 32px;
background-color: #c4e3f657;
padding: 15px;
border-radius: 15px;
}
#profileAvatar {
width: 100%;
max-width: 128px;
border-radius: 100%;
margin-right: 32px;
}
#profileName {
font-size: 1.6em;
font-weight: bold;
display: inline-block;
max-width: 100%;
white-space: wrap;
overflow: hidden;
text-overflow: ellipsis;
}
#profileData {
background-color: #dceef957;
padding: 15px;
border-radius: 15px;
}
.profileDataItem {
position: relative;
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
.profileDataItem--separator {
margin-top: 1em;
font-weight: bold;
}
.profileDataItem__label {
display: inline-block;
position: relative;
flex: 1;
min-height: 32px;
padding: 0 8px;
max-width: 20%;
font-size: 0.9em;
line-height: 1.6em;
color: #777;
text-align: right;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
text-transform: capitalize;
}
.profileDataItem__value {
display: inline-block;
flex: 1;
min-height: 32px;
max-width: 100%;
padding: 0 8px;
}
.profileDataItem__value a {
display: inline-block;
max-width: 100%;
margin-right: 8px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.profileDataItem__value small {
color: white;
background: #2178ff;
border-radius: 6px;
padding: 2.8px 5px;
font-size: 0.65em;
vertical-align: middle;
}
a.proofUrl {
color: #777;
}
a.proofQR {
line-height: 0;
background-color: #499539;
border-radius: 2px;
}
a.proofQR:hover {
background-color: #6abb5a;
}
#form-generate-signature-profile {
margin-bottom: 2em;
font-size: 0.9rem;
}
#qrcode {
display: flex;
justify-content: center;
max-width: 100%;
width: auto !important;
height: auto !important;
margin: 32px auto;
}
noscript {
display: block;
margin-bottom: 2rem;
padding: 8px;
background-color: #f0e68c;
text-align: center;
}
noscript p {
margin: 0;
font-size: 1rem;
}
@media (max-width: 680px) {
#profileHeader {
flex-direction: column;
}
#profileAvatar {
margin: 0;
}
#profileName {
font-size: 1.2em;
}
.profileDataItem {
flex-direction: column;
margin-bottom: 8px;
}
.profileDataItem__label {
max-width: 100%;
min-height: 28px;
text-align: left;
}
.profileDataItem__value {
min-height: 28px;
}
.profileDataItem--noLabel .profileDataItem__label {
display: none;
}
#profileData .profileDataItem__value a:first-child {
max-width: 85%;
}
#profileData #profileProofs .profileDataItem__value a:first-child {
display: block;
}
input[type="text"] {
width: 100%;
}
}

View file

@ -1,6 +0,0 @@
extends template.base.pug
block content
.content
h1 404
p The requested page could not be found :(

View file

@ -1,4 +0,0 @@
extends template.base.pug
block content
.content !{ content }

View file

@ -1,17 +0,0 @@
extends template.base.pug
block content
.content
noscript
p Keyoxide requires JavaScript to function.
h1 Encrypt
form#form-encrypt(method='post')
h3 Recipient
label(for='modeSelect') Mode:
include partials/key_selector
h3 Message
textarea#message(name='message')
p#result
input.bigBtn(type='submit' name='submit' value='ENCRYPT MESSAGE')

View file

@ -1,67 +0,0 @@
extends template.base.pug
block content
.content
h1 Guides
.guides
.guides__section
h3 Using Keyoxide
a(href='/guides/verify') Verifying a signature
br
a(href='/guides/encrypt') Encrypting a message
br
a(href='/guides/proofs') Verifying identity proofs
br
a(href='/guides/contributing') Contributing to Keyoxide
br
a(href='/guides/self-hosting-keyoxide') Self-hosting Keyoxide
.guides__section
h3 OpenPGP and identity proofs
a(href='/guides/openpgp-proofs') How OpenPGP identity proofs work
br
a(href='/guides/web-key-directory') Uploading keys using web key directory
br
a(href='/guides/signature-profiles') Using signature profiles
.guides__section
h3 Adding proofs
a(href='/guides/devto') Dev.to
br
a(href='/guides/discourse') Discourse
br
a(href='/guides/dns') Domain / DNS
br
a(href='/guides/gitea') Gitea
br
a(href='/guides/github') GitHub
br
a(href='/guides/gitlab') GitLab
br
a(href='/guides/hackernews') Hackernews
br
a(href='/guides/lobsters') Lobste.rs
br
a(href='/guides/mastodon') Mastodon
br
a(href='/guides/owncast') Owncast
br
a(href='/guides/pleroma') Pleroma
br
a(href='/guides/reddit') Reddit
br
a(href='/guides/twitter') Twitter
br
a(href='/guides/xmpp') XMPP+OMEMO
.guides__section
h3 Other services
a(href='/guides/feature-comparison-keybase') Feature comparison with Keybase
br
a(href='/guides/migrating-from-keybase') Migrating from Keybase
.guides__section
h3 Managing proofs in GnuPG
a(href='/guides/managing-proofs-listing') Listing proofs
br
a(href='/guides/managing-proofs-deleting') Deleting proofs

View file

@ -1,103 +0,0 @@
extends template.base.pug
block content
.content
h1 Keyoxide
p
a(href="/") Keyoxide
| is a modern, secure and privacy-friendly platform to establish your
strong decentralized online identity
| .
a(href="/getting-started").fancyBtn Get started here
h2 About
p
strong Keyoxide
| allows you to link accounts on various online services and platforms together, prove they belong to you and establish an online identity. This puts
strong you
| , the internet citizen, in charge when it comes to defining who you are on the internet instead of large corporations.
p
| As an example, here&apos;s the
a(href='/9f0048ac0b23301e1f77e994909f6bd6f80f485d') developer&apos;s Keyoxide profile
| .
p
strong Keyoxide
| is developed by
a(href='https://yarmo.eu') Yarmo Mackenbach
| . The AGPL-v3-licensed code is hosted on
a(href='https://codeberg.org/keyoxide/web') Codeberg
| . It uses
a(href='https://github.com/openpgpjs/openpgpjs') openpgp.js
| for all cryptographic operations.
h2 Features
h3 Decentralized online identity proofs
ul
li You decide which accounts are linked together
li You decide where this data is stored
li Keyoxide does not hold your identity data on its servers
li Keyoxide merely verifies the identity proofs and displays them
h3 Empowering the internet citizen
ul
li A verified identity proof proves ownership of an account and builds trust
li No bad actor can impersonate you as long as your accounts aren&apos;t compromised
li Your online identity data is safe from greedy internet corporations
h3 User-centric platform
ul
li Easily encrypt messages and verify signatures from the profile page
li
| Keyoxide generates QR codes that integrate with
a(href='https://www.openkeychain.org/') OpenKeychain
| and
a(href='https://conversations.im/') Conversations
li Keyoxide fetches the key wherever the user decides to store it
li Keyoxide is self-hostable, meaning you could put it on any server you trust
h3 Secure and privacy-friendly
ul
li Keyoxide doesn&apos;t want your personal data, track you or show you ads
li You never give data to Keyoxide, it simply uses the data you have made public
li
| Keyoxide relies on OpenPGP, a widely used public-key cryptography standard (
a(href='https://tools.ietf.org/html/rfc4880') RFC-4880
| )
li
| Cryptographic operations are performed in-browser by
a(href='https://openpgpjs.org/') OpenPGP.js
| , a library maintained by
a(href='https://protonmail.com/blog/openpgpjs-email-encryption/') ProtonMail
h3 Free Open Source Software
ul
li
| Keyoxide is licensed under the
a(href='https://codeberg.org/keyoxide/web/src/branch/main/LICENSE') AGPL-v3 license
li
| The source code is hosted on
a(href='https://codeberg.org/keyoxide/web') Codeberg.org
li
| Even the
a(href='https://drone.keyoxide.org/keyoxide/web/') CI/CD activity
| is publicly visible
.flex-column-container
.flex-column
h2 Cryptographic operations
p
a(href='/verify') Verify PGP signature
br
a(href='/encrypt') Encrypt PGP message
br
a(href='/proofs') Verify distributed identity proofs
.flex-column
h2 Utilities
p
a(href='/util/profile-url') Profile URL generator
br
a(href='/util/wkd') Web Key Directory URL generator
br
a(href='/util/qrfp') Fingerprint QR generator

View file

@ -1,24 +0,0 @@
select#modeSelect.modeSelect(name='modeSelect')
option(value='auto' selected=(mode == "auto" ? true : false)) Autodetect
option(value='wkd' selected=(mode == "wkd" ? true : false)) Web Key Directory
option(value='hkp' selected=(mode == "hkp" ? true : false)) Keyserver
option(value='plaintext' selected=(mode == "plaintext" ? true : false)) Plaintext
option(value='keybase' selected=(mode == "keybase" ? true : false)) Keybase
.modesContainer
.modes.modes--auto(class=(mode == "auto" ? "modes--visible" : ""))
input#auto_input(type='text' name='auto_input' placeholder='Email / key id / fingerprint' value=(mode == "auto" ? input : ""))
.modes.modes--wkd(class=(mode == "wkd" ? "modes--visible" : ""))
input#wkd_input(type='text' name='wkd_input' placeholder='name@domain.org' value=(mode == "wkd" ? input : ""))
.modes.modes--hkp(class=(mode == "hkp" ? "modes--visible" : ""))
input#hkp_input(type='text' name='hkp_input' placeholder='Email / key id / fingerprint' value=(mode == "hkp" ? input : ""))
input#hkp_server(type='text' name='hkp_server' placeholder='https://keys.openpgp.org/ (default)')
.modes.modes--plaintext(class=(mode == "plaintext" ? "modes--visible" : ""))
textarea#plaintext_input(name='plaintext_input')
.modes.modes--keybase(class=(mode == "keybase" ? "modes--visible" : ""))
input#keybase_username(type='text' name='keybase_username' placeholder='username' value=(mode == "keybase" ? username : ""))
input#keybase_fingerprint(type='text' name='keybase_fingerprint' placeholder='fingerprint' value=(mode == "keybase" ? fingerprint : ""))

View file

@ -1,41 +0,0 @@
doctype html
head
meta(charset='utf-8')
meta(name='viewport' content='width=device-width, initial-scale=1')
meta(name='robots' content='noindex')
link(rel='shortcut icon' href='/favicon.svg')
title Keyoxide
link(rel='stylesheet' href='/static/styles.css')
main.container.container--profile
.content
noscript
p Keyoxide requires JavaScript to function.
span#profileUid(style='display: none;') #{uid}
span#profileServer(style='display: none;') #{server}
span#profileMode(style='display: none;') #{mode}
if (mode == 'sig')
#profileSigInput
form#form-generate-signature-profile(method='post')
p Please enter the raw profile signature below and press "Generate profile".
textarea#plaintext_input(name='plaintext_input')
input(type='submit', name='submit', value='Generate profile').bigBtn
#profileHeader
img#profileAvatar(src='/static/img/avatar_placeholder.png' alt='avatar' style='display: none')
p#profileName
#profileData
if (mode == 'sig')
p Waiting for input&mldr;
else
p Loading keys &amp; verifying proofs&mldr;
footer
p
| Generated by
a(href='/') Keyoxide
| (
a(href="https://codeberg.org/keyoxide/web/releases")= settings.keyoxide_version
| ).
script(type='application/javascript' src='/static/openpgp.min.js' charset='utf-8')
script(type='application/javascript' src='/static/doip.js' charset='utf-8')
script(type='application/javascript' src='/static/scripts.js' charset='utf-8')

View file

@ -1,17 +0,0 @@
extends template.base.pug
block content
.content
noscript
p Keyoxide requires JavaScript to function.
h1 Proofs
form#form-proofs(method='post')
h3 Public key
label(for='modeSelect') Mode:
include partials/key_selector
h3 Result
p#result
p#resultContent
input.bigBtn(type='submit' name='submit' value='VERIFY PROOFS')

View file

@ -1,41 +0,0 @@
doctype html
head
meta(charset='utf-8')
meta(name='viewport' content='width=device-width, initial-scale=1')
meta(name='theme-color' content='#fff')
link(rel='shortcut icon' href='/favicon.svg')
title= (title ? title : "Keyoxide")
link(rel='stylesheet' href='/static/styles.css')
header
.container
a.logo(href='/')
img(src='/static/img/logo_96.png' alt='Keyoxide logo')
.spacer
nav
a(href='/') about
a(href='/getting-started') getting started
a(href='/guides') guides
a(href='/faq') faq
main.container
block content
footer
if settings.onion_url
p
| This website is available via Tor:
a(href=`${settings.onion_url}`) #{settings.onion_url}
p
| Keyoxide
a(href="https://codeberg.org/keyoxide/web/releases")= settings.keyoxide_version
p
a(href='https://codeberg.org/keyoxide') Source code
| -
a(href='https://drone.keyoxide.org/keyoxide/web/') CI/CD
| -
a(href='https://fosstodon.org/@keyoxide') Mastodon
p &copy; 2021 Keyoxide contributors
script(type='application/javascript' src='/static/openpgp.min.js' charset='utf-8')
script(type='application/javascript' src='/static/qrcode.min.js' charset='utf-8')
script(type='application/javascript' src='/static/scripts.js' charset='utf-8')

View file

@ -1,46 +0,0 @@
extends ../template.base.pug
block content
.content
h1 Profile URL
form#form-util-profile-url(method='post')
p This tool generates an URL for your Keyoxide profile page.
h3 Public key
label(for='source') Source:
select#source.source(name='source')
option(value='wkd') Web Key Directory
option(value='hkp') keys.openpgp.org
option(value='keybase') Keybase
br
input#input(type='text' name='input' placeholder='Input' value='')
h3 Profile URL
code#output Waiting for input...
h3 Help
p
| When using the
strong Web Key Directory
| source, the
strong Input
| looks like
strong username@domain.org
| .
p
| When using the
strong keys.openpgp.org
| source, the
strong Input
| is either the
strong fingerprint
| of your public key, or the main identity&apos;s
strong email address
| .
p
| When using the
strong Keybase
| source, the
strong Input
| is the URL obtained by going to your Keybase profile page, clicking on the
strong key id
| of your keypair and copying the URL of the
strong this key
| link.

View file

@ -1,9 +0,0 @@
extends ../template.base.pug
block content
.content
h1 QR Code
form#form-util-qr(method='post')
code#input.full-width !{input}
canvas#qrcode
a#qrcode--altLink(href='#') Press this link to directly open the URI

View file

@ -1,15 +0,0 @@
extends ../template.base.pug
block content
.content
h1 QR Code
form#form-util-qrfp(method='post')
p
| This tool generates a QR code containing the fingerprint of your public key (
a(href='https://github.com/open-keychain/open-keychain/wiki/QR-Codes') format
| ). This QR code can be scanned by apps like
a(href='https://www.openkeychain.org/') OpenKeyChain
| .
h3 Fingerprint
input#input(type='text' name='input' placeholder='Fingerprint' value=input)
canvas#qrcode

View file

@ -1,21 +0,0 @@
extends ../template.base.pug
block content
.content
h1 Web Key Directory generator
form#form-util-wkd(method='post')
p
| This tool computes the part of the WKD URL that corresponds to the username when
a(href='/guides/web-key-directory') uploading keys using web key directory
| .
p
| If you enter the entire WKD identifier (username@domain.org), this tool will also generate the complete URLs.
h3 Input
input#input(type='text' name='input' placeholder='WKD username or identifier' value=input)
h3 Output
h4 Local part
code#output.full-width Waiting for input...
h4 Direct URL
code#output_url_direct.full-width Waiting for input...
h4 Advanced URL
code#output_url_advanced.full-width Waiting for input...

View file

@ -1,20 +0,0 @@
extends template.base.pug
block content
.content
noscript
p Keyoxide requires JavaScript to function.
h1 Verify
form#form-verify(method='post')
h3 Signer
label(for='modeSelect') Mode:
include partials/key_selector
h3 Signature
textarea#signature(name='signature')
h3 Result
p#result
p#resultContent
input.bigBtn(type='submit' name='submit' value='VERIFY SIGNATURE')