Merge pull request 'Add flash message capability' (#1) from flash_msg into main

Reviewed-on: #1
This commit is contained in:
glyph 2022-08-17 12:40:58 +00:00
commit 5a1fcd5288
3 changed files with 33 additions and 9 deletions

View File

@ -2,7 +2,13 @@
use async_std::channel::Sender;
use log::{info, warn};
use rocket::{form::Form, get, post, response::Redirect, uri, FromForm, State};
use rocket::{
form::Form,
get, post,
request::FlashMessage,
response::{Flash, Redirect},
uri, FromForm, State,
};
use rocket_dyn_templates::{context, Template};
use crate::{
@ -18,7 +24,7 @@ pub struct PeerForm {
}
#[get("/")]
pub async fn home(db: &State<Database>) -> Template {
pub async fn home(db: &State<Database>, flash: Option<FlashMessage<'_>>) -> Template {
let peers = db.get_peers();
let mut peers_unread = Vec::new();
for peer in peers {
@ -26,7 +32,7 @@ pub async fn home(db: &State<Database>) -> Template {
peers_unread.push((peer, unread_count.to_string()));
}
Template::render("base", context! { peers: &peers_unread })
Template::render("base", context! { peers: &peers_unread, flash: flash })
}
#[get("/posts/<public_key>/<msg_id>/delete")]
@ -153,11 +159,13 @@ pub async fn subscribe_form(
db: &State<Database>,
tx: &State<Sender<Task>>,
peer: Form<PeerForm>,
) -> Redirect {
) -> Result<Redirect, Flash<Redirect>> {
info!("Subscribing to peer {}", &peer.public_key);
if let Err(e) = utils::validate_public_key(&peer.public_key) {
warn!("Public key {} is invalid: {}", &peer.public_key, e)
let err_msg = format!("Public key {} is invalid: {}", &peer.public_key, e);
warn!("{}", err_msg);
return Err(Flash::error(Redirect::to(uri!(home)), err_msg));
} else {
info!("Public key {} is valid", &peer.public_key);
@ -191,15 +199,20 @@ pub async fn subscribe_form(
}
}
Redirect::to(uri!(home))
Ok(Redirect::to(uri!(home)))
}
#[post("/unsubscribe", data = "<peer>")]
pub async fn unsubscribe_form(db: &State<Database>, peer: Form<PeerForm>) -> Redirect {
pub async fn unsubscribe_form(
db: &State<Database>,
peer: Form<PeerForm>,
) -> Result<Redirect, Flash<Redirect>> {
info!("Unsubscribing from peer {}", &peer.public_key);
if let Err(e) = utils::validate_public_key(&peer.public_key) {
warn!("Public key {} is invalid: {}", &peer.public_key, e)
let err_msg = format!("Public key {} is invalid: {}", &peer.public_key, e);
warn!("{}", err_msg);
return Err(Flash::error(Redirect::to(uri!(home)), err_msg));
} else {
info!("Public key {} is valid", &peer.public_key);
if db.remove_peer(&peer.public_key).is_ok() {
@ -216,5 +229,5 @@ pub async fn unsubscribe_form(db: &State<Database>, peer: Form<PeerForm>) -> Red
}
}
Redirect::to(uri!(home))
Ok(Redirect::to(uri!(home)))
}

View File

@ -19,6 +19,14 @@
pointer-events: none;
}
.flash-message {
margin-left: auto;
margin-right: 0;
margin-top: 0;
margin-bottom: 0;
color: red;
}
.flex-container {
display: flex;
align-items: center;

View File

@ -46,5 +46,8 @@
<input type="submit" value="Subscribe">
<input type="submit" value="Unsubscribe" formaction="/unsubscribe">
</form>
{% if flash and flash.kind == "error" %}
<p class="flash-message">[ {{ flash.message }} ]</p>
{% endif %}
</div>
</div>