helpers.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package helpers
  2. import (
  3. "errors"
  4. "log"
  5. "net/http"
  6. "os"
  7. "regexp"
  8. "strconv"
  9. "time"
  10. "github.com/vladimirok5959/golang-server-sessions/session"
  11. )
  12. var mHtml = regexp.MustCompile(`>[\n\t\r\s]+<`)
  13. var mHtmlLeft = regexp.MustCompile(`>[\n\t\r\s]+`)
  14. var mHtmlRight = regexp.MustCompile(`[\n\t\r\s]+<`)
  15. func MinifyHtmlCode(str string) string {
  16. str = mHtml.ReplaceAllString(str, "><")
  17. str = mHtmlLeft.ReplaceAllString(str, ">")
  18. str = mHtmlRight.ReplaceAllString(str, "<")
  19. return str
  20. }
  21. // Example:
  22. //
  23. // sess := helpers.SessionStart(w, r)
  24. //
  25. // defer sess.Close()
  26. func SessionStart(w http.ResponseWriter, r *http.Request) (*session.Session, error) {
  27. sess, err := session.New(w, r, "/tmp")
  28. if err != nil && !errors.Is(err, os.ErrNotExist) {
  29. log.Printf("%s\n", err.Error())
  30. }
  31. return sess, err
  32. }
  33. func RespondAsBadRequest(w http.ResponseWriter, r *http.Request, err error) {
  34. if err != nil {
  35. log.Printf("%s\n", err.Error())
  36. w.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate")
  37. w.Header().Set("Content-Type", "application/json")
  38. w.WriteHeader(http.StatusBadRequest)
  39. if _, e := w.Write([]byte(`{"error":"` + strconv.Quote(err.Error()) + `"}`)); e != nil {
  40. log.Printf("%s\n", e.Error())
  41. }
  42. } else {
  43. w.WriteHeader(http.StatusBadRequest)
  44. }
  45. }
  46. func RespondAsMethodNotAllowed(w http.ResponseWriter, r *http.Request) {
  47. w.WriteHeader(http.StatusMethodNotAllowed)
  48. }
  49. func SetLanguageCookie(w http.ResponseWriter, r *http.Request) error {
  50. var clang string
  51. if c, err := r.Cookie("lang"); err == nil {
  52. clang = c.Value
  53. }
  54. // if err := r.ParseForm(); err != nil {
  55. // RespondAsBadRequest(w, r, err)
  56. // return err
  57. // }
  58. lang := r.Form.Get("lang")
  59. if lang != "" && lang != clang {
  60. http.SetCookie(w, &http.Cookie{
  61. Name: "lang",
  62. Value: lang,
  63. Expires: time.Now().Add(365 * 24 * time.Hour),
  64. HttpOnly: true,
  65. })
  66. }
  67. return nil
  68. }