When you create a password URL, PassED firstly encrypts the password in your browser using `AES-GCM`. It then uploads the encrypted password to the server, which responds with an ID that uniquely identifies that password. The AES Key and IV (Initialization vector) is then stored in the URL, along with the ID.
When someone views the password, PassED looks at the URL. It knows the password ID, AES Key and IV. It reaches out to the server, asks for a password with the ID from the URL, and then decrypts it with the AES Key and IV.
This model ensures that a malicous host can not read the passwords.
Installation can be done with docker compose or from source. As the website uses the [Web Crypto API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API) it needs to be in a [secure context](https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts). That means that you will need to access the website via "localhost" or HTTPS.
-`PASSED_ADDRESS`: Specifies the address that PassED should listen on, defaults to `:3000`.
-`PASSED_LOG_REQUESTS`: Specifies wether HTTP requests should be logged or not, defaults to `true`.
-`PASSED_MAX_LENGTH`: Specifies the maximum password length in bytes, defaults to `12288` (12KiB).
-`PASSED_STORE_TYPE`: Specify which store is used to save passwords, defaults to `ram`:
-`ram`: Stores all passwords in RAM, they are lost on restart.
-`dir`: Stores all passwords in a directory. Requires `PASSED_STORE_DIR_PATH` to be set to the directory, defaults to `passwords`. PassED will **not** create the directory.
-`PASSED_STORE_CLEAR_INTERVAL`: Specifies the delay in seconds to wait between clearing expired passwords, defaults to `30`.