feat(handlers/main): Add 'anonymous' mode for forum

Adds a `REQUIRE_LOGIN` environment variable which, if set to anything
other than true, will let users post anonymously on the forums.
This commit is contained in:
Vincent Ambo 2018-04-12 01:28:37 +02:00
parent e7a54a5aff
commit bf02c70f74
2 changed files with 27 additions and 9 deletions

View file

@ -64,6 +64,15 @@ pub fn new_thread(state: State<AppState>) -> ConverseResponse {
.responder()
}
/// This function provides an anonymous "default" author if logins are
/// not required.
fn anonymous() -> Author {
Author {
name: "Anonymous".into(),
email: "anonymous@nothing.org".into(),
}
}
#[derive(Deserialize)]
pub struct NewThreadForm {
pub title: String,
@ -90,9 +99,10 @@ pub fn submit_thread(state: State<AppState>,
.responder();
}
// Author is "unwrapped" because the RequireLogin middleware
// guarantees it to be present.
let author: Author = req.session().get(AUTHOR).unwrap().unwrap();
let author: Author = req.session().get(AUTHOR)
.unwrap_or_else(|_| Some(anonymous()))
.unwrap_or_else(anonymous);
let new_thread = NewThread {
title: input.0.title,
body: input.0.body,
@ -123,9 +133,10 @@ pub struct NewPostForm {
pub fn reply_thread(state: State<AppState>,
input: Form<NewPostForm>,
mut req: HttpRequest<AppState>) -> ConverseResponse {
// Author is "unwrapped" because the RequireLogin middleware
// guarantees it to be present.
let author: Author = req.session().get(AUTHOR).unwrap().unwrap();
let author: Author = req.session().get(AUTHOR)
.unwrap_or_else(|_| Some(anonymous()))
.unwrap_or_else(anonymous);
let new_post = NewPost {
thread_id: input.thread_id,
body: input.0.body,