res.go 1.6 KB

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