Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| software:monolith:user-qr [2026/01/05 01:50] – fix subheading link diamond | software:monolith:user-qr [2026/01/05 02:22] (current) – run prettier diamond | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | # User QR Protocol | + | # User QR Encoding |
| This document formally defines a QR Code format that encodes the minimum identifiable user information for use by other services. | This document formally defines a QR Code format that encodes the minimum identifiable user information for use by other services. | ||
| Line 17: | Line 17: | ||
| - Encodes at minimum the user ID and username | - Encodes at minimum the user ID and username | ||
| - Robust at allowing users to change username | - Robust at allowing users to change username | ||
| - | - Allow insecure/ | + | - Allow insecure/ |
| - Allow secure verification using remote server to obtain additional, more secretive information about current user (e.g., list of groups or avatar URL) | - Allow secure verification using remote server to obtain additional, more secretive information about current user (e.g., list of groups or avatar URL) | ||
| - QR Code must be small (has at most 4 eyes in most cases, rather than 9 eyes or more) | - QR Code must be small (has at most 4 eyes in most cases, rather than 9 eyes or more) | ||
| - | ## QR Code Design | + | ## Designs |
| + | |||
| + | ### QR Code | ||
| The QR Code encodes a string encoded in Alphanumeric mode. The string must implement this syntax: | The QR Code encodes a string encoded in Alphanumeric mode. The string must implement this syntax: | ||
| Line 39: | Line 41: | ||
| ``` | ``` | ||
| CLAIMS_PART := USER_ID ':' | CLAIMS_PART := USER_ID ':' | ||
| + | USER_ID | ||
| USER_ROLE | USER_ROLE | ||
| ISSUED_DATE := YEAR ' | ISSUED_DATE := YEAR ' | ||
| Line 60: | Line 63: | ||
| - The user's role is `admin`, meaning they belong in the `dma-admins` IdP group | - The user's role is `admin`, meaning they belong in the `dma-admins` IdP group | ||
| - The claims dates back to January 1st, 2026 | - The claims dates back to January 1st, 2026 | ||
| - | |||
| ### Signature Type and Part | ### Signature Type and Part | ||
| Line 85: | Line 87: | ||
| ### Implementation and Example | ### Implementation and Example | ||
| - | The following function implements the algorithm in Go using a fake random source to generate the Ed25519 key (INSECURE): | + | The following function implements the algorithm in Go using a fake random source to generate the Ed25519 key (INSECURE) |
| ```go | ```go | ||
| Line 118: | Line 120: | ||
| ``` | ``` | ||
| - | ## Frontend Server Design | + | ### Frontend Server Design |
| - | The frontend server must be able to handle `/QR` paths and perform a redirection to the Monolith API server' | + | The frontend server must be able to handle `/QR` paths and perform a redirection to the Monolith API server' |
| - | ## Verification Server Design | + | ### Verification Server Design |
| This section is not finalized. | This section is not finalized. | ||
| + | |||
| + | Proposed endpoints: | ||
| + | |||
| + | - `/qr/*`: same as `/QR/*` | ||
| + | - `/ | ||
| + | - `/ | ||
| + | - `/ | ||
| + | - `/ | ||
| ```sh | ```sh | ||
| - | curl -X GET "https://dma.space/QR/LMYTAMBMEJWWK33XNVSW653NMVXXO3LFN53W2ZLPO4RCYITNMVWWEZLSEJOQ.ED25519:V2OZNQJDFNNUJ26XOFY5SEKIG73RNGJJ7AI7YDTHD77V7VGTSXQA4MYH2KZIJT6RB7WAFZUU5DCMFEAB2KL5HZQG27HD7AZZGLPUAAI" | + | $ curl -X GET "HTTPS://DMA.SPACE/QR/10: |
| + | { | ||
| + | " | ||
| + | } | ||
| + | |||
| + | $ curl -X GET " | ||
| { | { | ||
| " | " | ||
| - | "qr_claims": | + | "claims": { |
| - | " | + | |
| " | " | ||
| " | " | ||
| Line 148: | Line 162: | ||
| However, the QR code can still be copied or stolen from others, so the whole system is not perfect and should not be used to gate access to critical things. | However, the QR code can still be copied or stolen from others, so the whole system is not perfect and should not be used to gate access to critical things. | ||
| + | |||