res.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package srv
  2. import (
  3. "fmt"
  4. "net/http"
  5. "os"
  6. "time"
  7. "git.clearsky.net.au/cody/gex.git/utils"
  8. )
  9. type Res struct {
  10. w http.ResponseWriter
  11. r *http.Request
  12. status int
  13. cookies map[string]*http.Cookie
  14. }
  15. func (res *Res) Construct(w http.ResponseWriter, r *http.Request) {
  16. res.w = w
  17. res.r = r
  18. res.status = 200
  19. res.cookies = make(map[string]*http.Cookie)
  20. }
  21. func (res *Res) Send(txt string) {
  22. for _, v := range res.cookies {
  23. http.SetCookie(res.w, v)
  24. }
  25. res.w.WriteHeader(res.status)
  26. fmt.Fprint(res.w, txt)
  27. }
  28. func (res *Res) File(filePath string) error {
  29. _, err := os.Stat(filePath)
  30. if err != nil {
  31. utils.Err(err)
  32. return err
  33. }
  34. http.ServeFile(res.w, res.r, filePath)
  35. return nil
  36. }
  37. func (res *Res) Redirect(url string) {
  38. for _, v := range res.cookies {
  39. http.SetCookie(res.w, v)
  40. }
  41. http.Redirect(res.w, res.r, url, http.StatusTemporaryRedirect)
  42. }
  43. func (res *Res) Status(code int) *Res {
  44. res.status = code
  45. return res
  46. }
  47. func (res *Res) Header(k string, v string) *Res {
  48. res.w.Header().Add(k, v)
  49. return res
  50. }
  51. func (res *Res) JSON(json string) {
  52. res.Header("Content-type", "application/json").Send(json)
  53. }
  54. func (res *Res) Cookie(name string, val string, expires ...time.Time) *Res {
  55. Expires := time.Now().Add(365 * 24 * time.Hour)
  56. for _, v := range expires {
  57. Expires = v
  58. }
  59. cookie := &http.Cookie{
  60. Name: name,
  61. Value: val,
  62. Expires: Expires,
  63. Path: "/",
  64. Secure: false,
  65. HttpOnly: true,
  66. SameSite: http.SameSiteStrictMode,
  67. }
  68. res.cookies[name] = cookie
  69. return res
  70. }