package api import ( "net/http" "git.tek.govt.hu/dowerx/chat/server/config" "git.tek.govt.hu/dowerx/chat/server/controller" "github.com/gin-gonic/gin" ) const SESSION_COOKIE string = "session" func isLoggedIn(c *gin.Context) { token, err := c.Cookie(SESSION_COOKIE) if err != nil { c.JSON(http.StatusBadRequest, gin.H{ "error": "missing token", }) c.Abort() return } c.Set(SESSION_COOKIE, token) c.Next() } func register(c *gin.Context) { type registerTransaction struct { Username string `form:"username" json:"username"` Password string `form:"password" json:"password"` RepeatPassword string `form:"repeatPassword" json:"repeatPassword"` } transaction := registerTransaction{} if err := c.Bind(&transaction); err != nil { c.JSON(http.StatusBadRequest, gin.H{ "error": err.Error(), }) return } userController, err := controller.MakeUserController() if err != nil { c.JSON(http.StatusInternalServerError, gin.H{ "error": err.Error(), }) return } err = userController.Register(transaction.Username, transaction.Password, transaction.RepeatPassword) if err != nil { c.JSON(http.StatusBadRequest, gin.H{ "error": err.Error(), }) return } c.JSON(http.StatusOK, gin.H{ "message": "sucessful register", }) } func login(c *gin.Context) { type loginTransaction struct { Username string `form:"username" json:"username"` Password string `form:"password" json:"password"` } transaction := loginTransaction{} if err := c.Bind(&transaction); err != nil { c.JSON(http.StatusBadRequest, gin.H{ "error": err.Error(), }) return } userController, err := controller.MakeUserController() if err != nil { c.JSON(http.StatusInternalServerError, gin.H{ "error": err.Error(), }) return } token, ok, err := userController.Login(transaction.Username, transaction.Password) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{ "error": err.Error(), }) return } if !ok { c.JSON(http.StatusUnauthorized, gin.H{ "error": "bad credentials", }) return } c.SetCookie(SESSION_COOKIE, token, config.GetConfig().API.TokenLife, "", "", false, false) c.JSON(http.StatusOK, gin.H{ "message": "sucessful login", "session": token, }) } func logout(c *gin.Context) { userController, err := controller.MakeUserController() if err != nil { c.JSON(http.StatusInternalServerError, gin.H{ "error": err.Error(), }) return } token, _ := c.Get(SESSION_COOKIE) // must exist after isLoggedIn err = userController.Logout(token.(string)) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{ "error": err.Error(), }) return } c.SetCookie(SESSION_COOKIE, "", 0, "", "", false, false) c.JSON(http.StatusOK, gin.H{ "message": "sucessful logout", }) }