This commit is contained in:
Stefan Schwarz 2020-08-21 20:02:44 +02:00
parent c4d44c68a0
commit c67fcc6fa3
7 changed files with 37 additions and 15 deletions

View file

@ -59,7 +59,6 @@ ORDER BY
}
pub fn for_mac(macaddr: &'q str) -> QueryAs<'q, Self> {
dbg!(&macaddr);
sqlx::query_as(
"
SELECT DISTINCT

View file

@ -1,7 +1,7 @@
use crate::db;
use crate::middleware::ForwardAuthInfo;
use crate::Level;
use crate::Message;
use crate::USER;
use serde::Deserialize;
use std::convert::TryFrom;
@ -31,6 +31,8 @@ impl ChangeForm {
}
pub async fn register(self, request: &crate::Request) -> Message {
let forward_auth: &ForwardAuthInfo = request.ext().unwrap();
let nickname = forward_auth.nickname.clone();
let privacy = match db::PrivacyLevel::try_from(self.privacy) {
Ok(privacy) => privacy,
Err(_) => return (Level::Error, "unable to parse privacy level".to_string()),
@ -38,7 +40,7 @@ impl ChangeForm {
let dbresult = db::Device {
id: None,
macaddr: self.macaddr,
nickname: USER.to_string(),
nickname: nickname.clone(),
descr: self.descr.clone(),
privacy,
present: false,
@ -51,7 +53,7 @@ impl ChangeForm {
return match dbresult {
Ok(_) => (
Level::Info,
format!("assinged device \"{}\" to {}", self.descr, USER),
format!("assinged device \"{}\" to {}", &self.descr, &nickname),
),
Err(_) => (Level::Error, "unable to create device".to_string()),
};

View file

@ -10,8 +10,6 @@ mod routes;
mod session;
mod templates;
pub const USER: &str = "hansi";
/// Configuration
#[derive(FromArgs, Debug)]
struct Config {
@ -77,6 +75,7 @@ async fn main() -> Result<(), io::Error> {
let mut app = tide::with_state(State { pool });
app.with(middleware::ErrorHandler::default());
app.with(middleware::ForwardAuth::default());
app.with(session_store);
app.at("/").get(routes::index);
app.at("/change").post(routes::change);

View file

@ -21,3 +21,23 @@ impl Middleware<State> for ErrorHandler {
"ErrorHandler"
}
}
#[derive(Default)]
pub struct ForwardAuth {}
#[derive(Default)]
pub struct ForwardAuthInfo {
pub nickname: String,
}
#[async_trait]
impl Middleware<State> for ForwardAuth {
async fn handle(&self, mut request: Request, next: Next<'_, State>) -> Result {
let mut nickname = "Anonymous".to_string();
if let Some(cookie) = request.cookie("_forward_auth_name") {
nickname = cookie.value().to_string();
}
request.set_ext(ForwardAuthInfo { nickname });
Ok(next.run(request).await)
}
}

View file

@ -1,8 +1,8 @@
use crate::db;
use crate::forms::ChangeForm;
use crate::middleware::ForwardAuthInfo;
use crate::session::Session;
use crate::templates::IndexTemplate;
use crate::USER;
use tide::Redirect;
pub async fn healthz(_request: crate::Request) -> tide::Result {
@ -10,16 +10,16 @@ pub async fn healthz(_request: crate::Request) -> tide::Result {
}
pub async fn index(mut request: crate::Request) -> tide::Result {
let my = db::Device::for_user(USER)
let forward_auth: &ForwardAuthInfo = request.ext().unwrap();
let nickname = forward_auth.nickname.clone();
let my = db::Device::for_user(&nickname)
.fetch_all(&request.state().pool)
.await
.map_err(|err| dbg!(err))?;
.await?;
let unassinged = db::AliveDevice::unassinged()
.fetch_all(&request.state().pool)
.await
.map_err(|err| dbg!(err))?;
.await?;
let messages = Session::from(&mut request).pop_messages();
Ok(IndexTemplate::new(my, unassinged, messages).into())
Ok(IndexTemplate::new(nickname, my, unassinged, messages).into())
}
pub async fn change(mut request: crate::Request) -> tide::Result {

View file

@ -5,6 +5,7 @@ use askama::Template;
#[derive(Template, Default)]
#[template(path = "index.html")]
pub struct IndexTemplate {
nickname: String,
my: Vec<db::Device>,
unassinged: Vec<db::AliveDevice>,
messages: Vec<Message>,
@ -12,11 +13,13 @@ pub struct IndexTemplate {
impl IndexTemplate {
pub fn new(
nickname: String,
my: Vec<db::Device>,
unassinged: Vec<db::AliveDevice>,
messages: Vec<Message>,
) -> Self {
Self {
nickname,
my,
unassinged,
messages,

View file

@ -5,7 +5,6 @@
<meta charset="utf-8">
<title>macnickenson</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" integrity="sha384-JcKb8q3iqJ61gNV9KGb8thSsNjpSL0n8PARn9HuZOnIxN0hoP+VmmDGMN5t9UJ0Z" crossorigin="anonymous">
</head>
<body>
@ -18,7 +17,7 @@
{% endfor %}
<div class="mt-5">
<h2>Your Devices:</h2>
<h2>Your ({{ nickname }}) Devices:</h2>
<table class="table">
<thead><tr>
<th scope="col">Mac-Address</th>