README.md (2921B)
1 # Forro 2 3 Forro is an end-to-end encrypted contact form application for web browsers. 4 5 It is written in pure javascript using the [alpinejs](https://alpinejs.dev/) framework. 6 7 It uses [PGP (openpgpjs)](https://openpgpjs.org/) for signatures and encryption. 8 9 10 ## Dependencies 11 12 * [wala-rust](https://defalsify.org/git/wala-rust/) `v0.1.7` (see `Backend` below) 13 14 15 ## Install 16 17 * `nvm install 18.8` 18 * `nvm use 18.8` 19 * `npm install` 20 21 22 ## Run 23 24 Simple serve the repository root directory with a web server, e.g. [webfsd](https://github.com/ourway/webfsd) 25 26 27 ## User interface 28 29 The application consists of only two pages. 30 31 ### Key unlock screen 32 33 Session storage is checked for an existing key from a previous visit. If none is found, a new PGP key is created. Upon key creation, the user chooses whether or not to provide a passphrase to encrypt the key in storage. 34 35 ### Main screen 36 37 All functionality is contained within a single page. 38 39 It contains: 40 41 * Application state description 42 * Descriptions and download links for the client's private key, aswell as the receiver's public key. 43 * A form with: 44 - text area for message content. 45 - file attachment button to attach files. 46 - option to manually supply name and email to use as identity for the key 47 * Download link for successfully submitted content. 48 * Button to delete private key from storage 49 50 51 ## Data format 52 53 The data is submitted in MIME Multipart format. 54 55 The `sha256` of the MIME Multipart part that contains the submitted data is signed by the PGP key, and a MIME signature part is added to the message. 56 57 The submitted content can be viewed by any email client application. 58 59 The signature can also be verified by any email application that provides this feature, or can of course be separately verified using gnupg tools. 60 61 62 ## Backend 63 64 ### Configuration. 65 66 Forro will load settings from `settings.json` in the same HTTP path as the application files are hosted. 67 68 The available settings are: 69 70 * `remote_pubkey_url`: Relative path to recipient public key 71 * `data_endpoint`: HTTP address to host that will accept submitted data. 72 * `help`: `true` to show interactive help 73 * `dev`: `true` to display debugging information for development 74 * `email_sender`: `From:` sender address to use on the MIME Multipart message 75 * `email_sender_name`: `From:` sender name to use on the MIME Multipart message 76 77 78 ### Data endpoint 79 80 This prototype makes use of the [wala](https://defalsify.org/git/wala-rust/) service, which returns a reference to the content submitted. 81 82 The host is defined by the `data_endpoint` settings in the configuration. 83 84 The submitted content is signed with the client's PGP key. The reference to the content is a sum of the digest of the content aswell as the key used to sign the content. 85 86 See [the wala code](https://defalsify.org/git/wala-rust/file/README.html) for a description on how to submit content in a similar manner using the CLI. 87 88 89 ## License 90 91 AGPLv3+