about summary refs log tree commit diff
AgeCommit message (Collapse)AuthorFilesLines
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(migrations): Add materialized view & index for full text searchVincent Ambo2-0/+23
Adds a materialized view to be used for full-text searches that indexes the tsvector documents for each post.
2018-04-14 fix(templates): Fluidly scale all imagesVincent Ambo1-0/+2
2018-04-14 fix(templates): Set CSPs on templatesVincent Ambo3-0/+3
2018-04-14 docs(todo): Stickies are done!Vincent Ambo1-1/+1
2018-04-14 feat(templates): Highlight stickied threads in indexVincent Ambo2-2/+4
2018-04-14 feat(db): Add support for stickies in databaseVincent Ambo7-21/+36
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 docs(todo): Add note about stickiesVincent Ambo1-1/+2
2018-04-14 feat(db): Add view for ordering thread index by most recent postVincent Ambo6-7/+45
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(build): Configure Travis builds for RustVincent Ambo1-0/+1
2018-04-14 feat: License project under GPLv3Vincent Ambo8-0/+786
2018-04-14 docs(CODE_OF_CONDUCT): Add a reasonable code of conductVincent Ambo1-0/+29
2018-04-14 docs(README): Add a very simple README fileVincent Ambo2-1/+18
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-14 feat(migrations): Drop 'body' column from threadsVincent Ambo2-0/+7
As a data model simplification, the text of a thread's top post should simply also go into the posts table.
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 Ambo4-11/+39
2018-04-12 chore(cargo): Remove unused dependencyVincent Ambo2-15/+0
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 chore(cargo): Use stable release of actix-webVincent Ambo2-20/+20
The git version previously tracked by Converse has been released.
2018-04-11 fix(templates/handlers): Fix post anchorsVincent Ambo2-3/+5
- 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 Ambo3-35/+85
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 Ambo3-0/+10
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 Ambo2-46/+31
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-10 chore(cargo): Dependency bump & pin versionsVincent Ambo2-8/+105
2018-04-09 fix(templates): Fix author name & avatar displayVincent Ambo1-4/+12
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 Ambo3-1/+62
2018-04-09 feat(templates): Slightly less barebones index & thread templatesVincent Ambo2-39/+115
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 Ambo3-1/+12
2018-04-08 docs(todo): Add TODO listVincent Ambo1-0/+4
2018-04-08 feat(handlers): Use cookie session backend to store author infoVincent Ambo3-12/+34
2018-04-08 feat(templates): Display author information in templatesVincent Ambo2-3/+3
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 Ambo5-2/+489
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(migrations): Add author columns to tablesVincent Ambo2-0/+15
Adds columns for author names and emails to both threads and posts. "Users" don't (yet? who knows!) exist as independent entity in Converse, they are simply "inferred" via OIDC providers.
2018-04-08 feat(templates): Add shitty little response form in thread viewVincent Ambo2-2/+14