aboutsummaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)Author
2018-11-13internal_error.html: Fix logo imageTeddy Wing
Hadn't tested this when I made it. Was outputting a formatted byte string instead of the plain base64, which resulted in `b'BASE_64'` being inserted. Output the real base64 to get the image to decode properly.
2018-11-13Add 400 error pageTeddy Wing
HTML copied from the 404 page, but I remove the `text-center` on the error message because it doesn't look good. Took a multiline message for me to realise it.
2018-11-13license: Add "Content-Type" to 404 responseTeddy Wing
The `set_404()` function doesn't do this, as it makes no assumptions about response content type.
2018-11-13Add 500 error page with generatorTeddy Wing
Base structure copied from `404.html`. Python script based on the `generate_homebrew_formula.py` script in the main DomeKey repository. The filename comes from the Apache server configuration. Generate the 500 page because we can't rely on dependencies. This gets the CSS and logo and includes them inline in the HTML page. Thanks to this answer for explaining how to get a byte string from a file to send to the base64 encoder: https://stackoverflow.com/questions/45482272/typeerror-a-bytes-like-object-is-required-not-str-python-2-to-3/45482834#45482834
2018-11-13404.html: Make subtitle maroonTeddy Wing
Match the change in `index.html`.
2018-11-13license: Get URL path without query string parametersTeddy Wing
The `REQUEST_URI` parameter gives us the URL path including the query string. Unfortunately, there's no param for just the path without the query string. Well, that's not entirely true. On my production server I'll be using Apache, and in development I'm using Lighttpd. Apache provides a `SCRIPT_URL` param that does include just the path, but Lighttpd doesn't appear to have an equivalent. I wasn't able to figure out how to add a `SCRIPT_URL` param in Lighttpd manually, either. Using `bin-environment` in the FastCGI config didn't work, and using `setenv.add-environment` wouldn't allow me to set it to both of our routes (I assume). In light of this, just grab the path from `REQUEST_URI` by getting the part in front of `?`.
2018-11-13logger: Remove query string from log lineTeddy Wing
The query string is already included in the `REQUEST_URI` param. What we had would just print it twice.
2018-11-13Add a meta description to HTML pagesTeddy Wing
2018-11-13license: Render HTML 404 page from /licenseTeddy Wing
2018-11-13lighttpd.conf: Serve static assetsTeddy Wing
Want to be able to use our static image and CSS assets from the FCGI code when rendering HTML.
2018-11-13Makefile: Restart `lighttpd` when both binaries changeTeddy Wing
2018-11-13license: Extract response logic from `/license/download`Teddy Wing
I want to be able to use the exact same logic for the `/license` route. To do so, we move the common logic to a new `build_response()` function. For all responses we need to return from `build_response()`, make new structs `HtmlResponse` and `ZipResponse` that write the response in the desired format. The `ZipResponse` does what we're already doing in `/license/download`. The `HtmlResponse` will respond with HTML and show a thank-you page on success.
2018-11-13logger: Use `REQUEST_URI` instead of `SCRIPT_NAME`Teddy Wing
The script name isn't necessarily the same as the request path. We really want the request path.
2018-11-13license: Respond 404 if purchaser not foundTeddy Wing
2018-11-13license: Send 400 Bad Request if requested with incorrect parametersTeddy Wing
2018-11-13license: Clean up commentsTeddy Wing
2018-11-13license: Remove `unwrap`sTeddy Wing
Respond with a 500 on error. Add 'aquatic-prime' to `foreign_links` errors to be able to convert it with `into()`.
2018-11-13database: Reduce connection pool sizeTeddy Wing
Read https://github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing recently, and reducing the pool size seemed like a good idea.
2018-11-13license: Combine zip response writersTeddy Wing
2018-11-13license: Move database query to a functionTeddy Wing
Will make it a bit easier to handle errors from `Result`s.
2018-11-13license: Refuse non-POST requestsTeddy Wing
2018-11-13licene: Set filename of license Zip fileTeddy Wing
2018-11-13license: Replace `include_bytes!` with `include_str!` for keysTeddy Wing
Forgot that `include_str!` existed. Certainly makes things a lot cleaner this way.
2018-11-13license: Generate a license and send it in HTTP responseTeddy Wing
If the purchaser coming from POST params is found in the database, generate a license for the purchaser, zip the license, and send a response containing the zipped data. zip: Change the writer input to a mutable reference to enable us to use the zip data when writing to the response. Otherwise we get a borrow error.
2018-11-13license: Get purchaser from database using paramsTeddy Wing
Use POST params `name`, `email`, and `secret` to get a purchaser from the database. If none exists, we should probably send a 404, otherwise we'll generate a license for that purchaser and send it in the response as a Zip archive.
2018-11-13lighttpd.conf: Use `license` binary for `/license/download` routeTeddy Wing
2018-11-12Add src/bin/license.rsTeddy Wing
This binary will show a thank-you page to purchasers. I had also planned to make a third binary to send the license file as a Zip archive, but now I think I'm going to do that here too, working out the routing inside this program.
2018-11-12lighttpd.conf: Add routes for additional license handlersTeddy Wing
We want another route for a thank-you page, and a third for a Zip download of the license.
2018-11-11main(): Move logging code into its own moduleTeddy Wing
This will enable us to use the logging code in other binaries.
2018-11-11Add `zip::license()` to make a Zip archive of a license plistTeddy Wing
2018-11-11aquatic-prime.rs: Add a "usage" messageTeddy Wing
2018-11-11Add `src/bin/aquatic-prime.rs`Teddy Wing
Binary to generate a license plist.
2018-11-11aquatic-prime: Make things publicTeddy Wing
So we can use them from outside the crate.
2018-11-11Rename `src/bin/license_generator.rs` to `src/bin/license-generator.rs`Teddy Wing
Want a `license-generator` binary with a hyphen. Normally I'd name my Rust files with underscores, but I didn't want to add `[[bin]]` sections to `Cargo.toml`.
2018-11-11Move src/main.rs to src/bin/license_generator.rsTeddy Wing
Want to make another binary to generate license files.
2018-11-11Make subtitle maroonTeddy Wing
Makes it stand out a bit differently.
2018-11-11Use a different colour for section headersTeddy Wing
2018-11-11Fix button text-shadowTeddy Wing
It was too blurry.
2018-11-11Add responsive breakpointsTeddy Wing
Ensure that nothing leaves the viewable page area and that no elements collide with one another.
2018-11-11Revert "buttons.hcss: Fix typo `to` -> `top`"Teddy Wing
This reverts commit efa10ba02a7e45eae9bbedd134719842a02dfe5c. Huh, looks like "to bottom" is the correct syntax. I thought it was a faulty search-and-replace in my editor.
2018-11-11buttons.hcss: Fix typo `to` -> `top`Teddy Wing
Not sure how that happened.
2018-11-11Move "Buy" button to the right side of the "Try it free" headerTeddy Wing
Needed to adjust some positioning styles and fix the padding on the button.
2018-11-11Separate `.button` class into `.button` and `.button-magenta`Teddy Wing
Use `.button` only for base button traits.
2018-11-11Style "Buy" buttonTeddy Wing
* Move Lucida Grande font stack to a variable * Add buttons styles for a magenta gradiented button
2018-11-11Extract 403 and 405 errors to functionsTeddy Wing
Like what I did in edf6fceedd9b4169ceb63172c60733ef84d78951 for 500 errors, extract these errors to functions also. Doesn't give us any gains in terms of reusability like it did before, as we're only responding with each of these errors once, but it does clean up the code in the `main()` function a bit.
2018-11-11main(): Extract 500 errors to a functionTeddy Wing
Clean up the `main()` function by extracting all these similar lines to a function.
2018-11-11main(): Give the FastCGI closure access to the DB connection poolTeddy Wing
Otherwise we get a borrow error: error[E0373]: closure may outlive the current function, but it borrows `pool`, which is owned by the current function --> src/main.rs:67:18 | 67 | fastcgi::run(|mut req| { | ^^^^^^^^^ may outlive borrowed value `pool` ... 123 | let mut cx = match pool.get_conn() { | ---- `pool` is borrowed here help: to force the closure to take ownership of `pool` (and any other referenced variables), use the `move` keyword | 67 | fastcgi::run(move |mut req| { | ^^^^^^^^^^^^^^
2018-11-11main(): Get a database connection pool instead of a single connectionTeddy Wing
This way we can ask the pool for a connection on each request instead of trying to reuse a single connection.
2018-11-11main(): Insert purchaser into datatabase (WIP)Teddy Wing
This currently errors on a borrow problem with the `cx` in the closure. Here we get the purchaser name and email from the POST params and insert them as a record in the database. If all goes well, we respond with a 200. Otherwise we log errors and respond with 500.
2018-11-11main(): Get a map of POST paramsTeddy Wing
Move the call to `params::parse()` from `request::verified()` into `main()`. This enables us to access values from POST params inside the `main()` function. We'll need this to store purchaser name and email address.