static.go 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. package wrapper
  2. import (
  3. "html/template"
  4. "io/ioutil"
  5. "net/http"
  6. "os"
  7. Images "golang-fave/engine/wrapper/resources/images"
  8. Others "golang-fave/engine/wrapper/resources/others"
  9. Scripts "golang-fave/engine/wrapper/resources/scripts"
  10. Styles "golang-fave/engine/wrapper/resources/styles"
  11. Templates "golang-fave/engine/wrapper/resources/templates"
  12. )
  13. type tmplDataErrorMsg struct {
  14. ErrorMessage string
  15. }
  16. func (e *Wrapper) staticResource() bool {
  17. if e.R.URL.Path == "/assets/sys/styles.css" {
  18. (*e.W).Header().Set("Content-Type", "text/css")
  19. (*e.W).Write(Styles.File_assets_sys_styles_css)
  20. return true
  21. } else if e.R.URL.Path == "/assets/cp/styles.css" {
  22. (*e.W).Header().Set("Content-Type", "text/css")
  23. (*e.W).Write(Styles.File_assets_cp_styles_css)
  24. return true
  25. } else if e.R.URL.Path == "/assets/sys/bootstrap.css" {
  26. (*e.W).Header().Set("Content-Type", "text/css")
  27. (*e.W).Write(Styles.File_assets_sys_bootstrap_css)
  28. return true
  29. } else if e.R.URL.Path == "/assets/sys/jquery.js" {
  30. (*e.W).Header().Set("Content-Type", "application/javascript; charset=utf-8")
  31. (*e.W).Write(Scripts.File_assets_sys_jquery_js)
  32. return true
  33. } else if e.R.URL.Path == "/assets/sys/popper.js" {
  34. (*e.W).Header().Set("Content-Type", "application/javascript; charset=utf-8")
  35. (*e.W).Write(Scripts.File_assets_sys_popper_js)
  36. return true
  37. } else if e.R.URL.Path == "/assets/sys/bootstrap.js" {
  38. (*e.W).Header().Set("Content-Type", "application/javascript; charset=utf-8")
  39. (*e.W).Write(Scripts.File_assets_sys_bootstrap_js)
  40. return true
  41. } else if e.R.URL.Path == "/assets/cp/scripts.js" {
  42. (*e.W).Header().Set("Content-Type", "application/javascript; charset=utf-8")
  43. (*e.W).Write(Scripts.File_assets_cp_scripts_js)
  44. return true
  45. } else if e.R.URL.Path == "/assets/sys/logo.svg" {
  46. (*e.W).Header().Set("Content-Type", "image/svg+xml")
  47. (*e.W).Write(Others.File_assets_sys_logo_svg)
  48. return true
  49. } else if e.R.URL.Path == "/assets/sys/bg.png" {
  50. (*e.W).Header().Set("Content-Type", "image/png")
  51. (*e.W).Write(Images.File_assets_sys_bg_png)
  52. return true
  53. } else if e.R.URL.Path == "/assets/sys/logo.png" {
  54. (*e.W).Header().Set("Content-Type", "image/png")
  55. (*e.W).Write(Images.File_assets_sys_logo_png)
  56. return true
  57. } else if e.R.URL.Path == "/assets/sys/fave.ico" {
  58. (*e.W).Header().Set("Content-Type", "image/x-icon")
  59. (*e.W).Write(Others.File_assets_sys_fave_ico)
  60. return true
  61. }
  62. return false
  63. }
  64. func (e *Wrapper) staticFile() bool {
  65. file := e.R.URL.Path
  66. if file != "/" {
  67. f, err := os.Open(e.DirVhostHome + "/htdocs" + file)
  68. if err == nil {
  69. defer f.Close()
  70. st, err := os.Stat(e.DirVhostHome + "/htdocs" + file)
  71. if err != nil {
  72. return false
  73. }
  74. if st.Mode().IsDir() {
  75. return false
  76. }
  77. http.ServeFile(*e.W, e.R, e.DirVhostHome+"/htdocs"+file)
  78. return true
  79. }
  80. } else {
  81. f, err := os.Open(e.DirVhostHome + "/htdocs/index.html")
  82. if err == nil {
  83. defer f.Close()
  84. st, err := os.Stat(e.DirVhostHome + "/htdocs/index.html")
  85. if err != nil {
  86. return false
  87. }
  88. if st.Mode().IsDir() {
  89. return false
  90. }
  91. http.ServeFile(*e.W, e.R, e.DirVhostHome+"/htdocs/index.html")
  92. return true
  93. }
  94. }
  95. return false
  96. }
  97. func (e *Wrapper) printPageDefault() {
  98. // Custom page
  99. f, err := os.Open(e.DirVhostHome + "/htdocs" + "/index.html")
  100. if err == nil {
  101. defer f.Close()
  102. http.ServeFile(*e.W, e.R, e.DirVhostHome+"/htdocs"+"/index.html")
  103. return
  104. }
  105. // Default page
  106. tmpl, err := template.New("template").Parse(string(Templates.PageDefault))
  107. if err != nil {
  108. e.printTmplPageError(err)
  109. return
  110. }
  111. (*e.W).Header().Set("Cache-Control", "no-cache, no-store, must-revalidate")
  112. (*e.W).Header().Set("Content-Type", "text/html")
  113. tmpl.Execute(*e.W, tmplDataAll{
  114. System: e.tmplGetSystemData(),
  115. })
  116. }
  117. func (e *Wrapper) printPage404() {
  118. // Custom 404 error page
  119. f, err := ioutil.ReadFile(e.DirVhostHome + "/htdocs" + "/404.html")
  120. if err == nil {
  121. (*e.W).WriteHeader(http.StatusNotFound)
  122. (*e.W).Header().Set("Content-Type", "text/html")
  123. (*e.W).Write(f)
  124. return
  125. }
  126. // Default error page
  127. tmpl, err := template.New("template").Parse(string(Templates.PageError404))
  128. if err != nil {
  129. e.printTmplPageError(err)
  130. return
  131. }
  132. (*e.W).Header().Set("Cache-Control", "no-cache, no-store, must-revalidate")
  133. (*e.W).WriteHeader(http.StatusNotFound)
  134. (*e.W).Header().Set("Content-Type", "text/html")
  135. tmpl.Execute(*e.W, tmplDataAll{
  136. System: e.tmplGetSystemData(),
  137. })
  138. }
  139. func (e *Wrapper) printTmplPageError(perr error) {
  140. tmpl, err := template.New("template").Parse(string(Templates.PageTmplError))
  141. if err != nil {
  142. (*e.W).Header().Set("Cache-Control", "no-cache, no-store, must-revalidate")
  143. (*e.W).WriteHeader(http.StatusInternalServerError)
  144. (*e.W).Header().Set("Content-Type", "text/html")
  145. (*e.W).Write([]byte("<h1>Critical engine error!</h1>"))
  146. (*e.W).Write([]byte("<h2>" + perr.Error() + "</h2>"))
  147. return
  148. }
  149. (*e.W).Header().Set("Cache-Control", "no-cache, no-store, must-revalidate")
  150. (*e.W).WriteHeader(http.StatusInternalServerError)
  151. (*e.W).Header().Set("Content-Type", "text/html")
  152. tmpl.Execute(*e.W, tmplDataAll{
  153. System: e.tmplGetSystemData(),
  154. Data: tmplDataErrorMsg{
  155. ErrorMessage: perr.Error(),
  156. },
  157. })
  158. }