res.go 1.6 KB

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