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.

53 lines
1.1 KiB

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