http urls monitor.

ab0x.go 2.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. // Code generated by fileb0x at "2017-11-26 17:57:18.000591466 +0600 +06 m=+3.756909921" from config file "b0x.yml" DO NOT EDIT.
  2. package swaggerFiles
  3. import (
  4. "bytes"
  5. "io"
  6. "log"
  7. "net/http"
  8. "os"
  9. "path"
  10. "golang.org/x/net/context"
  11. "golang.org/x/net/webdav"
  12. )
  13. var (
  14. // CTX is a context for webdav vfs
  15. CTX = context.Background()
  16. // FS is a virtual memory file system
  17. FS = webdav.NewMemFS()
  18. // Handler is used to server files through a http handler
  19. Handler *webdav.Handler
  20. // HTTP is the http file system
  21. HTTP http.FileSystem = new(HTTPFS)
  22. )
  23. // HTTPFS implements http.FileSystem
  24. type HTTPFS struct{}
  25. func init() {
  26. if CTX.Err() != nil {
  27. log.Fatal(CTX.Err())
  28. }
  29. //var err error
  30. Handler = &webdav.Handler{
  31. FileSystem: FS,
  32. LockSystem: webdav.NewMemLS(),
  33. }
  34. }
  35. // Open a file
  36. func (hfs *HTTPFS) Open(path string) (http.File, error) {
  37. f, err := FS.OpenFile(CTX, path, os.O_RDONLY, 0644)
  38. if err != nil {
  39. return nil, err
  40. }
  41. return f, nil
  42. }
  43. // ReadFile is adapTed from ioutil
  44. func ReadFile(path string) ([]byte, error) {
  45. f, err := FS.OpenFile(CTX, path, os.O_RDONLY, 0644)
  46. if err != nil {
  47. return nil, err
  48. }
  49. buf := bytes.NewBuffer(make([]byte, 0, bytes.MinRead))
  50. // If the buffer overflows, we will get bytes.ErrTooLarge.
  51. // Return that as an error. Any other panic remains.
  52. defer func() {
  53. e := recover()
  54. if e == nil {
  55. return
  56. }
  57. if panicErr, ok := e.(error); ok && panicErr == bytes.ErrTooLarge {
  58. err = panicErr
  59. } else {
  60. panic(e)
  61. }
  62. }()
  63. _, err = buf.ReadFrom(f)
  64. return buf.Bytes(), err
  65. }
  66. // WriteFile is adapTed from ioutil
  67. func WriteFile(filename string, data []byte, perm os.FileMode) error {
  68. f, err := FS.OpenFile(CTX, filename, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, perm)
  69. if err != nil {
  70. return err
  71. }
  72. n, err := f.Write(data)
  73. if err == nil && n < len(data) {
  74. err = io.ErrShortWrite
  75. }
  76. if err1 := f.Close(); err == nil {
  77. err = err1
  78. }
  79. return err
  80. }
  81. // WalkDirs looks for files in the given dir and returns a list of files in it
  82. // usage for all files in the b0x: WalkDirs("", false)
  83. func WalkDirs(name string, includeDirsInList bool, files ...string) ([]string, error) {
  84. f, err := FS.OpenFile(CTX, name, os.O_RDONLY, 0)
  85. if err != nil {
  86. return nil, err
  87. }
  88. fileInfos, err := f.Readdir(0)
  89. f.Close()
  90. if err != nil {
  91. return nil, err
  92. }
  93. for _, info := range fileInfos {
  94. filename := path.Join(name, info.Name())
  95. if includeDirsInList || !info.IsDir() {
  96. files = append(files, filename)
  97. }
  98. if info.IsDir() {
  99. files, err = WalkDirs(filename, includeDirsInList, files...)
  100. if err != nil {
  101. return nil, err
  102. }
  103. }
  104. }
  105. return files, nil
  106. }