Plan stuff. Log stuff.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

75 lines
1.6 KiB

4 years ago
  1. package api
  2. import (
  3. "github.com/gin-gonic/gin"
  4. "github.com/gisle/stufflog/models"
  5. "github.com/gisle/stufflog/services"
  6. "github.com/gisle/stufflog/slerrors"
  7. )
  8. func User(g *gin.RouterGroup, auth *services.AuthService) {
  9. type loginRegisterRequest struct {
  10. Username string `json:"username"`
  11. Password string `json:"password"`
  12. }
  13. type resObj struct {
  14. User *models.User `json:"user,omitempty"`
  15. }
  16. g.Use(auth.GinSessionMiddleware(false))
  17. // GET / – Check session
  18. g.GET("/", func(c *gin.Context) {
  19. c.JSON(200, resObj{
  20. User: auth.UserFromContext(c.Request.Context()),
  21. })
  22. })
  23. g.POST("/register", func(c *gin.Context) {
  24. data := loginRegisterRequest{}
  25. err := c.BindJSON(&data)
  26. if err != nil {
  27. slerrors.GinRespond(c, &slerrors.SLError{Code: 400, Text: err.Error()})
  28. return
  29. }
  30. user, err := auth.Register(c.Request.Context(), data.Username, data.Password)
  31. if err != nil {
  32. slerrors.GinRespond(c, err)
  33. return
  34. }
  35. c.JSON(200, resObj{User: user})
  36. })
  37. g.POST("/login", func(c *gin.Context) {
  38. data := loginRegisterRequest{}
  39. err := c.BindJSON(&data)
  40. if err != nil {
  41. slerrors.GinRespond(c, &slerrors.SLError{Code: 400, Text: err.Error()})
  42. return
  43. }
  44. user, session, err := auth.Login(c.Request.Context(), data.Username, data.Password)
  45. if err != nil {
  46. slerrors.GinRespond(c, err)
  47. return
  48. }
  49. auth.GinSaveSession(c, *session)
  50. c.JSON(200, resObj{User: user})
  51. })
  52. g.POST("/logout", func(c *gin.Context) {
  53. err := auth.Logout(c.Request.Context())
  54. if err != nil {
  55. slerrors.GinRespond(c, err)
  56. return
  57. }
  58. auth.GinClearSession(c)
  59. c.JSON(200, resObj{})
  60. })
  61. }