feat: rewrite templates

This commit is contained in:
Yarmo Mackenbach 2023-09-15 14:25:15 +02:00
parent 4cb94fd40e
commit c5ea6c3024
No known key found for this signature in database
GPG key ID: 3C57D093219103A3
12 changed files with 124 additions and 137 deletions

View file

@ -1,6 +1,6 @@
extends templates/base.pug extends templates/base.pug
block content block content
section.long_form.narrow section
h1= title h1= title
.card !{ content } !{ content }

View file

@ -1,76 +1,41 @@
extends templates/base.pug extends templates/base.pug
block content block content
#search.form-wrapper.card section#search.form-wrapper
h2#searchTitle View a profile
form(action="post") form(action="post")
label#searchQuery(for="query") Query for fingerprint or email identifier input#query(type="search" name="query" required placeholder="Search for a profile")
input#query(type="search" name="query" required placeholder="3637202523e7c1309ab79e99ef2dc5827b445f4b, test@doip.rocks" aria-labelledby="searchTitle searchQuery") input(type="submit" value="Search")
input(type="submit" value="View profile") section
p Or view a h2 About Keyoxide
a(href="/sig") plaintext signature p Keyoxide is a decentralized tool to create and verify decentralized online identities.
| profile. p Just like passports for real life identities, Keyoxide can be used to verify the online identity of people to make sure one is interacting with whom they intended to be and not an imposter.
p Unlike real life passports, Keyoxide works with online identities or "personas", meaning these identities can be anonymous and one can have multiple separate personas to protect their privacy, both online and in real life.
if highlights.length > 0
h2 Highlights
.hcards.hcards--highlights
each hl in highlights
.card.card--small-profile
h3.name= hl.name
p
span.fingerprint= hl.fingerprint
br
span.details= hl.description
.spacer
p
a(href=`/${hl.fingerprint}`).button.full-width View profile
- var n = 0
while n < 3-highlights.length
.card.card--small-profile-dummy
- n++
h2 About Keyoxide
.hcards.hcards--features.hcards--max-2
.card
h3 Online identity
p Verifying online identity with cryptography. View
a(href="/project@keyoxide.org") Keyoxide's profile
| .
.card
h3 Mobile app
p Available on Android and iOS. More information on
a(href="https://mobile.keyoxide.org") mobile.keyoxide.org
| .
.card
h3 Decentralization &amp; privacy
p No central server or database. No collected data. Control how your data is stored and accessed.
.card
h3 Cryptography
p Your online identity verifiably signed with widely-used cryptographic standards (OpenPGP, others coming).
.card
h3 Open Source
p All Keyoxide projects are licensed under AGPL-3.0-or-later.
.card
h3 Transparent funding
p Funded by donations. Keyoxide stands against VC and surveillance capitalism.
h2 Community
.card
p p
| Discussion of the Keyoxide project happens primarily on the | Here is what a
a(href="/project@keyoxide.org") Keyoxide profile
| looks like.
p
a(href="https://docs.keyoxide.org/getting-started") Get started
| and create your own!
section
h2 Community
p
| Discussion of the Keyoxide project primarily happens on the
a(href="https://matrix.to/#/#keyoxide:matrix.org") #keyoxide Matrix channel
| and the
a(href="https://community.keyoxide.org") Keyoxide Community Forum a(href="https://community.keyoxide.org") Keyoxide Community Forum
| . This is the place to propose new service providers for identity verification, make feature suggestions or report bugs. | .
| The Matrix channel is great for troubleshooting.
| The forum is the place to propose new service providers for identity verification, make feature suggestions or report bugs.
p p
| There is also the | There is also the
a(href="irc://irc.libera.chat/#keyoxide") #keyoxide:libera.chat IRC room a(href="irc://irc.libera.chat/#keyoxide") #keyoxide:libera.chat IRC room
| , the
a(href="https://matrix.to/#/#keyoxide:matrix.org") #keyoxide Matrix channel
| and the | and the
a(href="https://lists.sr.ht/~yarmo/keyoxide-devel") keyoxide-devel mailing list a(href="https://lists.sr.ht/~yarmo/keyoxide-devel") keyoxide-devel mailing list
| . The IRC room and Matrix channel are bridged together. | . The IRC room and Matrix channel are bridged together.
p p
| The project is also present on the fediverse as | The project is also present on the fediverse:
a(href="https://fosstodon.org/@keyoxide") @keyoxide@fosstodon.org a(href="https://fosstodon.org/@keyoxide") @keyoxide@fosstodon.org
| . | .
p p
@ -79,10 +44,10 @@ block content
| . | .
h2 Fund the project section
.card h2 Fund the project
p p
| The development of Keyoxide and the Decentralized OpenPGP Identity Proofs ecosystem is entirely funded by donations. | The development of Keyoxide and the Decentralized Online Identity Proofs ecosystem is entirely funded by donations.
p p
| The Keyoxide project was awarded a NGI Zero grant from the | The Keyoxide project was awarded a NGI Zero grant from the
a(href='https://nlnet.nl/') NLnet Foundation a(href='https://nlnet.nl/') NLnet Foundation

View file

@ -1,35 +1,34 @@
footer footer
.container .container
.hcards p
div | This site:
h1 Keyoxide a(href="/") Homepage
a(href="/") Homepage | •
br a(href="/util") Utilities
a(href="/util") Utilities | •
br a(href="/privacy") Privacy policy
a(href="/privacy") Privacy policy br
div | Keyoxide project:
h1 Keyoxide project a(href="https://community.keyoxide.org") Forum
a(href="https://keyoxide.org") Keyoxide.org | •
br a(href="https://docs.keyoxide.org") Documentation
a(href="https://community.keyoxide.org") Community forum | •
br a(href="https://blog.keyoxide.org") Blog
a(href="https://docs.keyoxide.org") Documentation | •
br a(href="https://codeberg.org/keyoxide") Source code
a(href="https://blog.keyoxide.org") Blog br
div | Related:
h1 Development a(href="https://doip.rocks") doip.rocks
a(href="https://codeberg.org/keyoxide/") Source code | •
br a(href="https://ariadne.id") ariadne.id
a(href="https://doip.rocks") doip.rocks
br
a(href="https://ariadne.id") ariadne.id
p.copyright p
| Version #{meta.keyoxide.version} | Version #{meta.keyoxide.version}
if (meta.env === "development") if (meta.env === "development")
| -dev | -dev
br br
| &copy; 2023 Keyoxide project contributors | &copy; 2023 Keyoxide project contributors

View file

@ -3,7 +3,8 @@ header
nav nav
a.logo(href='/' aria-label='Home') a.logo(href='/' aria-label='Home')
img(src='/static/img/logo_circle.png' alt='Keyoxide' aria-hidden='true') img(src='/static/img/logo_circle.png' alt='Keyoxide' aria-hidden='true')
a.text(href='/') Home | Keyoxide
a.text(href='https://docs.keyoxide.org') Docs .links
a.text(href='https://blog.keyoxide.org') Blog a.text(href='https://docs.keyoxide.org/getting-started') Getting started
a.text(href='https://community.keyoxide.org') Forum a.text(href='https://docs.keyoxide.org') Docs
a.text(href='https://blog.keyoxide.org') Blog

View file

@ -3,24 +3,38 @@ extends templates/base.pug
mixin generatePersona(persona, isPrimary) mixin generatePersona(persona, isPrimary)
h2 h2
if persona.email if persona.email
span.p-email Identity claims (#{persona.email}) | Identity claims (
span.p-email #{persona.email}
| )
else else
span.p-email Identity claims | Identity claims
if isPrimary if isPrimary
small.primary primary small.primary primary
if persona.description if persona.description
span.p-comment &#9432; #{persona.description} span.persona__description.p-comment
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-info"><circle cx="12" cy="12" r="10"/><line x1="12" y1="16" x2="12" y2="12"/><line x1="12" y1="8" x2="12.01" y2="8"/></svg>
| #{persona.description}
each claim in persona.claims each claim in persona.claims
if claim.matches.length > 0 if claim.matches.length > 0
kx-claim.kx-item(data-claim=claim) kx-claim.kx-item(data-claim=claim,data-status='running')
details(aria-label="Claim") details(aria-label="Claim")
summary summary
.info .info
p.subtitle= claim.display.serviceproviderName p
p.title= claim.display.name span.title= claim.display.name
span.subtitle-wrapper
| [
span.subtitle= claim.display.serviceproviderName
| ]
.icons .icons
.verificationStatus(data-value='running') .verificationStatus
.inProgress .inProgress
<svg style="width:24px;height:24px" viewBox="0 0 24 24"><path fill="currentColor" d="M12,4V2A10,10 0 0,0 2,12H4A8,8 0 0,1 12,4Z"></path></svg>
.success
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-check"><polyline points="20 6 9 17 4 12"></polyline></svg>
.failure
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-x"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg>
.content .content
.subsection .subsection
img(src='/static/img/link.png') img(src='/static/img/link.png')
@ -59,7 +73,7 @@ block content
a(href="https://docs.keyoxide.org/getting-started/something-went-wrong/") documentation a(href="https://docs.keyoxide.org/getting-started/something-went-wrong/") documentation
| for help. | for help.
else else
section.profile.narrow.h-card section.profile
noscript noscript
p Keyoxide requires JavaScript to function. p Keyoxide requires JavaScript to function.
@ -103,10 +117,12 @@ block content
input(type='submit', name='submit', value='Generate profile') input(type='submit', name='submit', value='Generate profile')
unless (isSignature && !signature) unless (isSignature && !signature)
#profileHeader.card.card--transparent.card--profileHeader .profile__header
img#profileAvatar.u-logo(src=data.personas[data.primaryPersonaIndex].avatarUrl alt="avatar") img.profile__avatar.u-logo(src=data.personas[data.primaryPersonaIndex].avatarUrl alt="avatar")
p#profileName.p-name= data.personas[data.primaryPersonaIndex].name p.profile__name.p-name= data.personas[data.primaryPersonaIndex].name
if (data.personas[data.primaryPersonaIndex].description)
p= data.personas[data.primaryPersonaIndex].description
if (enable_message_encryption || enable_signature_verification) if (enable_message_encryption || enable_signature_verification)
.button-wrapper .button-wrapper
@ -115,28 +131,34 @@ block content
if (enable_signature_verification) if (enable_signature_verification)
button(onClick="document.querySelector('#dialog--verifySignature').showModal();") Verify signature button(onClick="document.querySelector('#dialog--verifySignature').showModal();") Verify signature
+generatePersona(data.personas[data.primaryPersonaIndex], true && data.personas.length > 1) .profile__claims
each persona, index in data.personas +generatePersona(data.personas[data.primaryPersonaIndex], true && data.personas.length > 1)
unless index == data.primaryPersonaIndex each persona, index in data.personas
+generatePersona(persona, false) unless index == data.primaryPersonaIndex
+generatePersona(persona, false)
#profileProofs.card.card--transparent section
h2 Key h2 Profile information
kx-key.kx-item(data-keydata=data.publicKey) h3 Public key
details(aria-label="Key") kx-key.kx-item(data-keydata=data.publicKey)
summary details(aria-label="Key")
.info summary
p.subtitle= data.publicKey.fetch.method .info
p.title= data.identifier p
.content span.title= data.identifier
.subsection span.subtitle-wrapper
img(src='/static/img/link.png') | [
div span.subtitle= data.publicKey.fetch.method
p Key link: | ]
a.u-key(href=data.publicKey.fetch.resolvedUrl rel="pgpkey" aria-label="Link to cryptographic key")= data.publicKey.fetch.resolvedUrl .content
hr .subsection
if (data.profileType === 'openpgp') img(src='/static/img/link.png')
.subsection div
img(src='/static/img/qrcode.png') p Key link:
div a.u-key(href=data.publicKey.fetch.resolvedUrl rel="pgpkey" aria-label="Link to cryptographic key")= data.publicKey.fetch.resolvedUrl
button(onClick=`showQR('${data.publicKey.fingerprint}', 'fingerprint')` aria-label='Show QR code for cryptographic fingerprint') Show OpenPGP fingerprint QR hr
if (data.profileType === 'openpgp')
.subsection
img(src='/static/img/qrcode.png')
div
button(onClick=`showQR('${data.publicKey.fingerprint}', 'fingerprint')` aria-label='Show QR code for cryptographic fingerprint') Show OpenPGP fingerprint QR

View file

@ -1,7 +1,7 @@
extends ../templates/base.pug extends ../templates/base.pug
block content block content
section.narrow section
h1 Argon2 utility h1 Argon2 utility
h2 Generate Argon2 hash h2 Generate Argon2 hash

View file

@ -1,7 +1,7 @@
extends ../templates/base.pug extends ../templates/base.pug
block content block content
section.narrow section
h1 bcrypt utility h1 bcrypt utility
h2 Generate bcrypt hash h2 Generate bcrypt hash

View file

@ -1,8 +1,8 @@
extends ../templates/base.pug extends ../templates/base.pug
block content block content
section.narrow section
h1 Keyoxide utilities h2 Keyoxide utilities
p p
a(href="/util/profile-url") Get the URL for a Keyoxide profile a(href="/util/profile-url") Get the URL for a Keyoxide profile
p p

View file

@ -1,7 +1,7 @@
extends ../templates/base.pug extends ../templates/base.pug
block content block content
section.narrow section
h1 Profile URL h1 Profile URL
form#form-util-profile-url(method='post') form#form-util-profile-url(method='post')
p This tool generates an URL for your Keyoxide profile page. p This tool generates an URL for your Keyoxide profile page.

View file

@ -1,7 +1,7 @@
extends ../templates/base.pug extends ../templates/base.pug
block content block content
section.narrow section
h1 QR Code h1 QR Code
form#form-util-qr(method='post') form#form-util-qr(method='post')
pre pre

View file

@ -1,7 +1,7 @@
extends ../templates/base.pug extends ../templates/base.pug
block content block content
section.narrow section
h1 QR Code h1 QR Code
form#form-util-qrfp(method='post') form#form-util-qrfp(method='post')
p p

View file

@ -1,7 +1,7 @@
extends ../templates/base.pug extends ../templates/base.pug
block content block content
section.narrow section
h1 Web Key Directory URL generator h1 Web Key Directory URL generator
form#form-util-wkd(method='post') form#form-util-wkd(method='post')
p p