Encrypted messaging app
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.

54 lines
1.1 KiB

  1. package Auth
  2. import (
  3. "errors"
  4. "net/http"
  5. "git.tovijaeschke.xyz/tovi/Capsule/Backend/Database"
  6. "git.tovijaeschke.xyz/tovi/Capsule/Backend/Models"
  7. )
  8. func CheckCookie(r *http.Request) (Models.Session, error) {
  9. var (
  10. c *http.Cookie
  11. sessionToken string
  12. userSession Models.Session
  13. err error
  14. )
  15. c, err = r.Cookie("session_token")
  16. if err != nil {
  17. return userSession, err
  18. }
  19. sessionToken = c.Value
  20. // We then get the session from our session map
  21. userSession, err = Database.GetSessionByID(sessionToken)
  22. if err != nil {
  23. return userSession, errors.New("Cookie not found")
  24. }
  25. // If the session is present, but has expired, we can delete the session, and return
  26. // an unauthorized status
  27. if userSession.IsExpired() {
  28. Database.DeleteSession(&userSession)
  29. return userSession, errors.New("Cookie expired")
  30. }
  31. return userSession, nil
  32. }
  33. func CheckCookieCurrentUser(w http.ResponseWriter, r *http.Request) (Models.User, error) {
  34. var (
  35. session Models.Session
  36. userData Models.User
  37. err error
  38. )
  39. session, err = CheckCookie(r)
  40. if err != nil {
  41. return userData, err
  42. }
  43. return session.User, nil
  44. }