aboutsummaryrefslogtreecommitdiffstats
path: root/src/controllers/login_controller.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/controllers/login_controller.rs')
-rw-r--r--src/controllers/login_controller.rs38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/controllers/login_controller.rs b/src/controllers/login_controller.rs
new file mode 100644
index 0000000..35841b3
--- /dev/null
+++ b/src/controllers/login_controller.rs
@@ -0,0 +1,38 @@
+use rocket;
+use rocket::request::Form;
+use rocket::response::{Flash, Redirect};
+use models;
+use utils;
+
+#[derive(BartDisplay)]
+#[template = "templates/login.html"]
+pub struct LoginTemplate;
+
+implement_responder_for!(LoginTemplate);
+
+#[get("/", format="text/html")]
+pub fn new(flash: Option<rocket::request::FlashMessage>) -> utils::Page<LoginTemplate> {
+ utils::Page {
+ title: String::from("Log in"),
+ flash: flash.map_or(None, |f| Some(f.msg().to_string())),
+ content: LoginTemplate{}
+ }
+}
+
+#[derive(FromForm)]
+pub struct LoginForm {
+ email: String,
+ password: String,
+}
+
+#[post("/create", data="<login>")]
+pub fn create(login: Form<LoginForm>, conn: utils::DbConn) -> Flash<Redirect> {
+ let login = login.get();
+ if let Ok(user) = models::User::by_email(&login.email, conn) {
+ if user.password == login.password {
+ return Flash::success(Redirect::to("/"), format!("{} logged in successfully", user.realname.or(Some(user.username)).unwrap()));
+ }
+ }
+
+ Flash::error(Redirect::to("/login"), "Invalid email or passoword!")
+}