Browse Source

Create middleware to require not being logged in

master
Dylan Baker 3 years ago
parent
commit
9719325741
3 changed files with 25 additions and 13 deletions
  1. 11
    8
      src/main.rs
  2. 14
    0
      src/middleware.rs
  3. 0
    5
      src/routes.rs

+ 11
- 8
src/main.rs View File

2
 
2
 
3
 use tide::utils::After;
3
 use tide::utils::After;
4
 
4
 
5
+use middleware::*;
6
+
5
 mod fs;
7
 mod fs;
6
 mod middleware;
8
 mod middleware;
7
 mod post;
9
 mod post;
13
     tide::log::start();
15
     tide::log::start();
14
     let mut app = tide::new();
16
     let mut app = tide::new();
15
 
17
 
16
-    app.with(After(middleware::errors));
17
-    app.with(middleware::session());
18
+    app.with(After(errors));
19
+    app.with(session());
18
 
20
 
19
     app.at("/").get(routes::index);
21
     app.at("/").get(routes::index);
20
     app.at("/posts")
22
     app.at("/posts")
21
-        .with(middleware::require_auth)
23
+        .with(require_auth)
22
         .post(routes::create_post);
24
         .post(routes::create_post);
23
     app.at("/posts/:id")
25
     app.at("/posts/:id")
24
         .get(routes::single_post)
26
         .get(routes::single_post)
25
         .post(routes::update_post)
27
         .post(routes::update_post)
26
         .delete(routes::delete_post);
28
         .delete(routes::delete_post);
27
     app.at("/posts/:id/edit")
29
     app.at("/posts/:id/edit")
28
-        .with(middleware::require_auth)
30
+        .with(require_auth)
29
         .get(routes::edit_post);
31
         .get(routes::edit_post);
30
-    app.at("/login").get(routes::login_page).post(routes::login);
31
-    app.at("/logout")
32
-        .with(middleware::require_auth)
33
-        .post(routes::logout);
32
+    app.at("/login")
33
+        .with(require_guest)
34
+        .get(routes::login_page)
35
+        .post(routes::login);
36
+    app.at("/logout").with(require_auth).post(routes::logout);
34
 
37
 
35
     app.listen("127.0.0.1:8080").await?;
38
     app.listen("127.0.0.1:8080").await?;
36
 
39
 

+ 14
- 0
src/middleware.rs View File

35
     })
35
     })
36
 }
36
 }
37
 
37
 
38
+pub fn require_guest<'a>(
39
+    req: Request<()>,
40
+    next: Next<'a, ()>,
41
+) -> Pin<Box<dyn Future<Output = Result> + 'a + Send>> {
42
+    Box::pin(async {
43
+        let logged_in: bool = req.session().get("logged_in").unwrap_or(false);
44
+        if logged_in {
45
+            Ok(Redirect::new("/").into())
46
+        } else {
47
+            Ok(next.run(req).await)
48
+        }
49
+    })
50
+}
51
+
38
 pub async fn errors(mut res: Response) -> Result<Response> {
52
 pub async fn errors(mut res: Response) -> Result<Response> {
39
     let mut context = Context::new();
53
     let mut context = Context::new();
40
 
54
 

+ 0
- 5
src/routes.rs View File

76
 }
76
 }
77
 
77
 
78
 pub async fn login(mut req: Request<()>) -> Result {
78
 pub async fn login(mut req: Request<()>) -> Result {
79
-    let logged_in: bool = req.session().get("logged_in").unwrap_or(false);
80
-    if logged_in {
81
-        return Ok(Redirect::new("/").into());
82
-    }
83
-
84
     let username = env::var("ADMIN_USERNAME")?;
79
     let username = env::var("ADMIN_USERNAME")?;
85
     let password = env::var("ADMIN_PASSWORD")?;
80
     let password = env::var("ADMIN_PASSWORD")?;
86
     let user: User = req.body_form().await?;
81
     let user: User = req.body_form().await?;

Loading…
Cancel
Save