about summary refs log tree commit diff
path: root/src
AgeCommit message (Collapse)AuthorFilesLines
2018-04-15 feat(handlers): Implement post editing handlerVincent Ambo3-2/+31
Implements a handler that receives the edit form result and updates the database accordingly if the user identity matches.
2018-04-15 feat(db): Support UpdatePost messageVincent Ambo1-0/+23
Simple message intended to be used for post editing.
2018-04-15 feat(handlers/render): Display edit form for user's own postsVincent Ambo4-1/+62
Displays an edit form for posts that are owned by a user (which is currently defined as "email addresses match").
2018-04-15 feat(db): Support GetPost messageVincent Ambo1-0/+16
Very simple message that retrieves a post from the DB.
2018-04-15 refactor: Add a message!-macro to reduce message boilerplateVincent Ambo4-48/+22
2018-04-15 refactor(render): Pass serializable structs to Tera directlyVincent Ambo1-9/+3
No need to go the intermediate step via `Context::new()`
2018-04-15 refactor(templates/render): Add generic post editing templateVincent Ambo3-15/+52
Adds a generic template that can be used for submitting, responding to and editing posts.
2018-04-15 refactor(main): Split enormous main() into smaller methodsVincent Ambo1-38/+58
A little bit of logical grouping of things has never hurt anyone.
2018-04-15 fix(handlers): Trim leading/trailing whitespace from new threadsVincent Ambo1-6/+12
2018-04-15 feat(handlers): Determine whether current user can edit a postVincent Ambo3-3/+19
2018-04-14 refactor(handlers): Receive search terms via query parametersVincent Ambo2-4/+4
There are several reasons for this, but one important one is that people expect to be able to share search links.
2018-04-14 fix(render): Escape post bodiesVincent Ambo1-1/+2
... derp. Well, the CSP prevented script executions already.
2018-04-14 feat: Implement search result view & enable searchVincent Ambo4-1/+39
Implements a very simple and currently kinda broken-looking search result view.
2018-04-14 chore(db): Arbitrarily limit search result sizeVincent Ambo1-0/+1
... until pagination is in place.
2018-04-14 feat(main/db): Schedule regular search view refreshVincent Ambo3-0/+50
Schedules refreshes of the database view used for search at one-minute intervals.
2018-04-14 refactor(schema): Unify integer type usage across tablesVincent Ambo1-2/+2
2018-04-14 refactor(handlers): Improve error handling in post creationVincent Ambo1-2/+2
2018-04-14 feat(db): Implement handling of 'SearchPosts' messageVincent Ambo2-1/+61
Adds support for executing full-text search across a forum instance by sending the `SearchPosts` message with a search query to the DB actor. The struct used for results is mapped manually to the expected query result as the query is embedded via raw SQL.
2018-04-14 feat(templates): Highlight stickied threads in indexVincent Ambo1-0/+2
2018-04-14 feat(db): Add support for stickies in databaseVincent Ambo3-5/+13
Adds a 'sticky' column to threads and rewrites the thread index to take sticky markings into account when ordering threads. Stickies are not yet highlighted in any way in the forum overview.
2018-04-14 feat(db): Add view for ordering thread index by most recent postVincent Ambo4-7/+29
This implements the classic thread ordering expected by most forum users (i.e. the thread with the most recent post is at the top).
2018-04-14 feat: License project under GPLv3Vincent Ambo7-0/+112
2018-04-14 refactor(db): Store thread body in the posts tableVincent Ambo5-23/+36
This is a simplification over the previous approach. The OP of a thread is just a normal post like any other in this model, which allows some code simplifications (and future query convenience).
2018-04-12 feat(handlers/main): Add 'anonymous' mode for forumVincent Ambo2-9/+27
Adds a `REQUIRE_LOGIN` environment variable which, if set to anything other than true, will let users post anonymously on the forums.
2018-04-12 feat(handler): Perform basic input validation on new thread viewVincent Ambo2-5/+32
2018-04-12 fix(handlers): Fix chained error handling in actorsVincent Ambo1-14/+15
This took me some time to figure out so it's useful to document in the commit message. When chaining messages from actors, the result type of a message (i.e. the actual `<M as Message>::Result`) is sometimes itself a `Result<T, E>`. In many cases this leads to a situation where the return type of a message sending process is something like (simplified): Future<Item=Result<Foo, ConverseError>, Error=actix::MailboxError> Due to the implementation of `From<actix::MailboxError> for ConverseError` it is possible to use `.from_err()` on these futures to convert the future's `Error` to `ConverseError`. The type `Result` apparently implements `IntoFuture`, which means that due to some trait magic that's been applied somewhere in the futures API a call to `flatten()` can "lift" the contained error if the error types match and give us a "simple" Future<Item=Foo, Error=ConverseError> From that point on chaining becomes easy.
2018-04-11 chore(handlers): Remove unused codeVincent Ambo1-8/+0
2018-04-11 fix(templates/handlers): Fix post anchorsVincent Ambo1-1/+1
- ensure users are correctly linked to a post actor after replying - ensure timestamps are clickable to get post IDs
2018-04-11 chore: Clean up unused importsVincent Ambo2-3/+1
2018-04-11 feat(render): Use a more human-readable format for datesVincent Ambo1-5/+15
2018-04-11 fix(render): Escape thread titles in indexVincent Ambo1-1/+19
2018-04-11 feat(render): Implement Markdown thread rendering & GravatarVincent Ambo2-10/+79
Implements a new thread rendering pipeline which all posts and the main thread body are first converted to a `RenderablePost` structure. During the conversion to this structure, the post body is rendered as Markdown and the author's email address is converted into the format required by Gravatar.
2018-04-11 chore(cargo): Add md5 crate dependencyVincent Ambo1-0/+2
Required for Gravatar.
2018-04-11 fix(main): Correctly set up rendering actorVincent Ambo1-3/+7
2018-04-11 refactor(handlers): Use rendering actor for page rendersVincent Ambo1-45/+27
This currently breaks error handling in page render flows. To fix it properly, the database actor should return failable futures instead of `Result<T>` wrapped in a future.
2018-04-11 feat(render): Add rendering actorVincent Ambo2-1/+72
Adds a separate actor that handles page rendering, templating engine state and other related topics.
2018-04-10 fix(main): Update cookie session setup for new actix-webVincent Ambo1-4/+3
2018-04-09 fix(db): Order index threads in descending post timeVincent Ambo1-1/+3
Technically the last post date should matter more here, but we'll get there.
2018-04-09 feat(handlers/templates): Add "New Thread" handler and templateVincent Ambo2-1/+10
2018-04-09 feat(handlers): Extract & add author to thread and post informationVincent Ambo3-6/+46
2018-04-09 feat(main): Initialise RequireLogin middleware on launchVincent Ambo1-4/+11
2018-04-09 feat(handlers): Add RequireLogin middlewareVincent Ambo2-4/+27
Adds a middleware that automatically redirects users to the login page if they don't have an active session (i.e. 'author' set).
2018-04-09 fix(main): Generate random session keyVincent Ambo1-1/+10
2018-04-08 feat(handlers): Use cookie session backend to store author infoVincent Ambo3-12/+34
2018-04-08 feat(main): Configure & start OIDC actor when Converse launchesVincent Ambo1-5/+33
2018-04-08 feat(handler): Implement OIDC login & callback handlersVincent Ambo1-0/+23
2018-04-08 chore(models/schema): Update with author fieldsVincent Ambo2-0/+8
2018-04-08 feat(oidc): Implement initial OIDC actorVincent Ambo3-2/+152
Implements an actor that can perform OAuth2 logins (not really OIDC-compliant yet because Rust doesn't have an easy to use JWT library that supports JWKS, and I don't have time for that right now). Currently this hardcodes some Office365-specific stuff.
2018-04-08 feat(handlers): Add reply_thread handler for postsVincent Ambo2-2/+18
2018-04-08 feat(db/models): Add handling of CreatePost messageVincent Ambo2-2/+30