add flash message capability and invalid key error flash
This commit is contained in:
parent
8aef6fb0b9
commit
90fb255a63
|
@ -2,7 +2,13 @@
|
||||||
|
|
||||||
use async_std::channel::Sender;
|
use async_std::channel::Sender;
|
||||||
use log::{info, warn};
|
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 rocket_dyn_templates::{context, Template};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
|
@ -18,7 +24,7 @@ pub struct PeerForm {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/")]
|
#[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 peers = db.get_peers();
|
||||||
let mut peers_unread = Vec::new();
|
let mut peers_unread = Vec::new();
|
||||||
for peer in peers {
|
for peer in peers {
|
||||||
|
@ -26,7 +32,7 @@ pub async fn home(db: &State<Database>) -> Template {
|
||||||
peers_unread.push((peer, unread_count.to_string()));
|
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")]
|
#[get("/posts/<public_key>/<msg_id>/delete")]
|
||||||
|
@ -153,11 +159,13 @@ pub async fn subscribe_form(
|
||||||
db: &State<Database>,
|
db: &State<Database>,
|
||||||
tx: &State<Sender<Task>>,
|
tx: &State<Sender<Task>>,
|
||||||
peer: Form<PeerForm>,
|
peer: Form<PeerForm>,
|
||||||
) -> Redirect {
|
) -> Result<Redirect, Flash<Redirect>> {
|
||||||
info!("Subscribing to peer {}", &peer.public_key);
|
info!("Subscribing to peer {}", &peer.public_key);
|
||||||
|
|
||||||
if let Err(e) = utils::validate_public_key(&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 {
|
} else {
|
||||||
info!("Public key {} is valid", &peer.public_key);
|
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>")]
|
#[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);
|
info!("Unsubscribing from peer {}", &peer.public_key);
|
||||||
|
|
||||||
if let Err(e) = utils::validate_public_key(&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 {
|
} else {
|
||||||
info!("Public key {} is valid", &peer.public_key);
|
info!("Public key {} is valid", &peer.public_key);
|
||||||
if db.remove_peer(&peer.public_key).is_ok() {
|
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)))
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,6 +19,14 @@
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.flash-message {
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: 0;
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
|
||||||
.flex-container {
|
.flex-container {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
|
|
@ -46,5 +46,8 @@
|
||||||
<input type="submit" value="Subscribe">
|
<input type="submit" value="Subscribe">
|
||||||
<input type="submit" value="Unsubscribe" formaction="/unsubscribe">
|
<input type="submit" value="Unsubscribe" formaction="/unsubscribe">
|
||||||
</form>
|
</form>
|
||||||
|
{% if flash and flash.kind == "error" %}
|
||||||
|
<p class="flash-message">[ {{ flash.message }} ]</p>
|
||||||
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Reference in New Issue