diff --git a/controllers/authController.go b/controllers/authController.go index 5d2661a..a77d309 100644 --- a/controllers/authController.go +++ b/controllers/authController.go @@ -2,6 +2,7 @@ package controllers import ( "context" + "fmt" "os" "time" @@ -247,3 +248,18 @@ func Login(c *fiber.Ctx) error { return c.Status(fiber.StatusNotImplemented).Redirect("/dashboard") } + +func Logout(c *fiber.Ctx) error { + fmt.Println("here") + cookie := fiber.Cookie{ + Name: "jwt", + Value: "", + Expires: time.Now().Add(-time.Hour), + HTTPOnly: true, + } + c.Cookie(&cookie) + + return c.Status(fiber.StatusOK).Render("index", fiber.Map{ + "loggedIn": false, + }) +} diff --git a/controllers/viewsController.go b/controllers/viewsController.go index 63c7322..8380c44 100644 --- a/controllers/viewsController.go +++ b/controllers/viewsController.go @@ -11,7 +11,32 @@ import ( // Render Index func MainPage(c *fiber.Ctx) error { - return c.Render("index", fiber.Map{}) + cookie := c.Cookies("jwt") + + token, err := jwt.ParseWithClaims(cookie, &jwt.StandardClaims{}, func(token *jwt.Token) (interface{}, error) { + return []byte(SecretKey), nil + }) + // This returns not authorized for both admin and student + if err != nil { + return c.Status(fiber.StatusUnauthorized).Render("index", fiber.Map{ + "loggedIn": false, + }) + } + + claims := token.Claims.(*jwt.StandardClaims) + uid := claims.Issuer + + var user models.User + findErr := userCollection.FindOne(context.TODO(), bson.M{"uid": uid}).Decode(&user) + if findErr != nil { + return c.Status(fiber.StatusUnauthorized).Render("index", fiber.Map{ + "loggedIn": false, + }) + } + + return c.Status(fiber.StatusAccepted).Render("index", fiber.Map{ + "loggedIn": true, + }) } func RegisterPage(c *fiber.Ctx) error { @@ -21,22 +46,15 @@ func RegisterPage(c *fiber.Ctx) error { } func LoginPage(c *fiber.Ctx) error { - return c.Render("login", fiber.Map{ - "msg": "", - "errorMsg": "", - }) -} - -func DashboardPage(c *fiber.Ctx) error { cookie := c.Cookies("jwt") token, err := jwt.ParseWithClaims(cookie, &jwt.StandardClaims{}, func(token *jwt.Token) (interface{}, error) { return []byte(SecretKey), nil }) - // This returns not authorized for both admin and student + // This returns not authorized if err != nil { return c.Status(fiber.StatusUnauthorized).Render("login", fiber.Map{ - "msg": "not authorized", + "msg": "", "errorMsg": "", }) } @@ -48,7 +66,7 @@ func DashboardPage(c *fiber.Ctx) error { findErr := userCollection.FindOne(context.TODO(), bson.M{"uid": uid}).Decode(&user) if findErr != nil { return c.Status(fiber.StatusUnauthorized).Render("login", fiber.Map{ - "msg": "User not found", + "msg": "", "errorMsg": "", }) } diff --git a/routes/routes.go b/routes/routes.go index da89a13..7af57a7 100644 --- a/routes/routes.go +++ b/routes/routes.go @@ -11,11 +11,12 @@ func Setup(app *fiber.App) { app.Get("/", controllers.MainPage) app.Get("/register", controllers.RegisterPage) app.Get("/login", controllers.LoginPage) - app.Get("/dashboard", controllers.DashboardPage) + app.Get("/dashboard", controllers.LoginPage) // Authentication handlers app.Post("/register", controllers.Register) app.Post("/login", controllers.Login) + app.Post("/logout", controllers.Logout) // 404 Handler app.Use(func(c *fiber.Ctx) error { diff --git a/views/dashboard.html b/views/dashboard.html index 9ea5590..66ded90 100644 --- a/views/dashboard.html +++ b/views/dashboard.html @@ -6,8 +6,12 @@
- {{ .username }} - {{ .email }} - {{ .firstname }} {{ .lastname }} +