diff --git a/Lab01/app/database/database.go b/Lab01/app/database/database.go index 3104662..bebee4c 100644 --- a/Lab01/app/database/database.go +++ b/Lab01/app/database/database.go @@ -23,3 +23,21 @@ func (db *Database) Initialize() { migrateInitial(orm) db.ORM = orm } + +func (db *Database) CreateUser(username string, password string) error { + user := User{Username: username, Password: password} + result := db.ORM.Create(&user) + return result.Error +} + +func (db *Database) LoginUser(username string, password string) (bool, error) { + user := User{Username: username, Password: password} + result := db.ORM.Where("username = ? AND password = ?", username, password).Find(&user) + if result.Error != nil { + return false, result.Error + } + if result.RowsAffected == 1 { + return true, nil + } + return false, nil +} diff --git a/Lab01/app/templates/index.tmpl b/Lab01/app/templates/index.tmpl index 0d7ffa8..27f45d6 100644 --- a/Lab01/app/templates/index.tmpl +++ b/Lab01/app/templates/index.tmpl @@ -9,10 +9,13 @@ {{template "navbar" .}}
-
Welcome to the {{ .title }}.
-
- Login to continue. -
+ {{if .loggedIn}} +
Welcome to the {{ .title }}.
+ {{else}} +
+ Login to continue. +
+ {{end}}
{{template "scripts" .}} @@ -42,9 +45,18 @@ @@ -101,5 +113,9 @@ form.classList.add('was-validated'); }, false); } + + function redirect(location) { + window.location.href = location; + } {{end}} diff --git a/Lab01/app/templates/login.tmpl b/Lab01/app/templates/login.tmpl index fc3c21e..3645e74 100644 --- a/Lab01/app/templates/login.tmpl +++ b/Lab01/app/templates/login.tmpl @@ -17,13 +17,15 @@ {{template "scripts" .}} diff --git a/Lab01/app/templates/register.tmpl b/Lab01/app/templates/register.tmpl index 9bd440a..7765d7e 100644 --- a/Lab01/app/templates/register.tmpl +++ b/Lab01/app/templates/register.tmpl @@ -18,13 +18,15 @@ {{template "scripts" .}} diff --git a/Lab01/app/webpage/types.go b/Lab01/app/webpage/types.go index 578fc26..7e3b50c 100644 --- a/Lab01/app/webpage/types.go +++ b/Lab01/app/webpage/types.go @@ -6,6 +6,7 @@ import ( ) type Webpage struct { - Database database.Database - Router *gin.Engine + Database database.Database + Router *gin.Engine + isLoggedIn bool } diff --git a/Lab01/app/webpage/webpage.go b/Lab01/app/webpage/webpage.go index 80e6e06..d2320e7 100644 --- a/Lab01/app/webpage/webpage.go +++ b/Lab01/app/webpage/webpage.go @@ -2,66 +2,94 @@ package webpage import ( "app/database" - "fmt" "github.com/gin-contrib/static" "github.com/gin-gonic/gin" "net/http" - "time" ) +func (wp *Webpage) redirectHome(c *gin.Context) { + c.Redirect(http.StatusTemporaryRedirect, "/") +} + +func (wp *Webpage) userIsLoggedIn(c *gin.Context) bool { + if wp.isLoggedIn { + wp.redirectHome(c) + return true + } + return false +} + func (wp *Webpage) defineRoutes() { wp.Router.GET("/", func(c *gin.Context) { c.HTML(http.StatusOK, "index.tmpl", gin.H{ - "title": "SuperSafe", + "title": "SuperSafe", + "loggedIn": wp.isLoggedIn, }) }) + wp.Router.GET("/login", func(c *gin.Context) { + if wp.userIsLoggedIn(c) { + return + } c.HTML(http.StatusOK, "login.tmpl", gin.H{ - "title": "Login", + "title": "Login", + "loggedIn": wp.isLoggedIn, }) }) + + wp.Router.GET("/logout", func(c *gin.Context) { + wp.isLoggedIn = false + wp.redirectHome(c) + }) + wp.Router.GET("/register", func(c *gin.Context) { + wp.userIsLoggedIn(c) c.HTML(http.StatusOK, "register.tmpl", gin.H{ - "title": "Register", + "title": "Register", + "loggedIn": wp.isLoggedIn, }) }) - wp.Router.GET("/health", func(c *gin.Context) { - currentTime := time.Now().UnixMilli() - c.JSON(http.StatusOK, gin.H{ - "timestamp": currentTime, - }) - }) - wp.Router.NoRoute(func(c *gin.Context) { - c.Redirect(http.StatusTemporaryRedirect, "/") - }) wp.Router.POST("/login", func(c *gin.Context) { - username, existing := c.GetPostForm("username") - password, existing := c.GetPostForm("password") - if existing == false || username == "" || password == "" { + username, uExisting := c.GetPostForm("username") + password, pExisting := c.GetPostForm("password") + if uExisting == false || pExisting == false || username == "" || password == "" { c.JSON(400, gin.H{"message": "bad post form"}) return } - fmt.Println(username, password) - c.JSON(200, gin.H{"message": "login successfull"}) + success, err := wp.Database.LoginUser(username, password) + if err != nil { + c.JSON(500, gin.H{"message": err.Error()}) + return + } + if success == true { + wp.isLoggedIn = true + c.JSON(200, gin.H{"message": "login successfull"}) + return + } + wp.isLoggedIn = false + c.JSON(401, gin.H{"message": "user or password not found"}) }) wp.Router.POST("/register", func(c *gin.Context) { - username, existing := c.GetPostForm("username") - password, existing := c.GetPostForm("password") - if existing == false || username == "" || password == "" { + username, uExisting := c.GetPostForm("username") + password, pExisting := c.GetPostForm("password") + if uExisting == false || pExisting == false || username == "" || password == "" { c.JSON(400, gin.H{"message": "bad post form"}) return } - user := database.User{Username: username, Password: password} - result := wp.Database.ORM.Create(&user) - if result.Error != nil { - c.JSON(400, gin.H{"message": result.Error.Error()}) + err := wp.Database.CreateUser(username, password) + if err != nil { + c.JSON(500, gin.H{"message": err.Error()}) return } c.JSON(200, gin.H{"message": "user registered"}) }) + + wp.Router.NoRoute(func(c *gin.Context) { + wp.redirectHome(c) + }) } func (wp *Webpage) initialize() { @@ -73,7 +101,6 @@ func (wp *Webpage) Run() { wp.initialize() wp.Router = gin.New() wp.Router.Use(gin.Recovery()) - wp.Router.Use(gin.Logger()) wp.Router.SetTrustedProxies(nil) wp.Router.Use(static.Serve("/static", static.LocalFile("./static", false))) wp.Router.LoadHTMLGlob("templates/*")