Browse Source

Implement flashed error messages

master
Dylan Baker 3 years ago
parent
commit
9afe1e863a
2 changed files with 34 additions and 23 deletions
  1. 34
    22
      src/main.rs
  2. 0
    1
      templates/login.html

+ 34
- 22
src/main.rs View File

@@ -141,29 +141,41 @@ async fn main() -> std::io::Result<()> {
141 141
             }
142 142
         });
143 143
 
144
-    app.at("/login").get(|req: tide::Request<()>| async move {
145
-        let tera = Tera::new("templates/**/*.html")?;
146
-        let mut context = Context::new();
147
-        let logged_in: bool = req.session().get("logged_in").unwrap_or(false);
148
-        context.insert("logged_in", &logged_in);
149
-        let html = tera.render("login.html", &context)?;
150
-        Ok(Body::from_string(html))
151
-    }).post(|mut req: tide::Request<()>| async move {
152
-        let logged_in: bool = req.session().get("logged_in").unwrap_or(false);
153
-        if logged_in {
154
-            return Ok(tide::Redirect::new("/"));
155
-        }
144
+    app.at("/login")
145
+        .get(|mut req: tide::Request<()>| async move {
146
+            let tera = Tera::new("templates/**/*.html")?;
147
+            let mut context = Context::new();
148
+            let logged_in: bool = req.session().get("logged_in").unwrap_or(false);
149
+            context.insert("logged_in", &logged_in);
150
+            match req.session_mut().get::<String>("flash_error") {
151
+                Some(error) => {
152
+                    req.session_mut().remove("flash_error");
153
+                    &context.insert("error", &error);
154
+                }
155
+                None => {}
156
+            }
157
+            let html = tera.render("login.html", &context)?;
158
+            Ok(Body::from_string(html))
159
+        })
160
+        .post(|mut req: tide::Request<()>| async move {
161
+            let logged_in: bool = req.session().get("logged_in").unwrap_or(false);
162
+            if logged_in {
163
+                return Ok(tide::Redirect::new("/"));
164
+            }
156 165
 
157
-        let username = env::var("ADMIN_USERNAME")?;
158
-        let password = env::var("ADMIN_PASSWORD")?;
159
-        let user: User = req.body_form().await?;
160
-        if user.username == username && user.password == password {
161
-            req.session_mut().insert("logged_in", true)?;
162
-            Ok(tide::Redirect::new("/"))
163
-        } else {
164
-            Ok(tide::Redirect::new("/login"))
165
-        }
166
-    });
166
+            let username = env::var("ADMIN_USERNAME")?;
167
+            let password = env::var("ADMIN_PASSWORD")?;
168
+            let user: User = req.body_form().await?;
169
+            if user.username == username && user.password == password {
170
+                req.session_mut().remove("logged_in");
171
+                req.session_mut().insert("logged_in", true)?;
172
+                Ok(tide::Redirect::new("/"))
173
+            } else {
174
+                req.session_mut().remove("logged_in");
175
+                req.session_mut().insert("flash_error", "Invalid credentials")?;
176
+                Ok(tide::Redirect::new("/login"))
177
+            }
178
+        });
167 179
 
168 180
     app.at("/logout").get(|mut req: tide::Request<()>| async move {
169 181
         req.session_mut().remove("logged_in");

+ 0
- 1
templates/login.html View File

@@ -11,7 +11,6 @@
11 11
   </div>
12 12
   {% if error %}
13 13
     <div class="error">
14
-      <h1 class="error__heading">Error:</h1>
15 14
       <p class="error__message">{{ error }}</p>
16 15
     </div>
17 16
   {% endif %}

Loading…
Cancel
Save