engine.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package main
  2. import (
  3. "database/sql"
  4. "net/http"
  5. "strings"
  6. "golang-fave/engine/backend"
  7. "golang-fave/engine/frontend"
  8. "golang-fave/engine/wrapper"
  9. templates "golang-fave/engine/wrapper/resources/templates"
  10. utils "golang-fave/engine/wrapper/utils"
  11. )
  12. func handlerPage(wrapper *wrapper.Wrapper) bool {
  13. mysql_conf_exists := utils.IsMySqlConfigExists(wrapper.DirVHostHome)
  14. is_front_end := true
  15. if wrapper.R.URL.Path == "/cp" || strings.HasPrefix(wrapper.R.URL.Path, "/cp/") {
  16. is_front_end = false
  17. }
  18. if is_front_end {
  19. // Front-end
  20. if !mysql_conf_exists {
  21. (*wrapper.W).Header().Set("Cache-Control", "no-cache, no-store, must-revalidate")
  22. http.Redirect(*wrapper.W, wrapper.R, wrapper.R.URL.Scheme+"://"+wrapper.R.Host+"/cp/", 302)
  23. return true
  24. }
  25. } else {
  26. // Back-end
  27. if !mysql_conf_exists {
  28. return wrapper.TmplBackEnd(templates.CpMySQL, nil)
  29. }
  30. }
  31. // Connect to database or show error
  32. mc, err := utils.MySqlConfigRead(wrapper.DirVHostHome)
  33. if wrapper.EngineErrMsgOnError(err) {
  34. return true
  35. }
  36. db, err := sql.Open("mysql", mc.User+":"+mc.Password+"@tcp("+mc.Host+":"+mc.Port+")/"+mc.Name)
  37. if wrapper.EngineErrMsgOnError(err) {
  38. return true
  39. }
  40. defer db.Close()
  41. err = db.Ping()
  42. if wrapper.EngineErrMsgOnError(err) {
  43. return true
  44. }
  45. // Parse url params
  46. url_args := utils.UrlToArray(wrapper.R.URL.Path)
  47. // Run WebSite or CP
  48. if is_front_end {
  49. // Front-end
  50. return frontend.New(wrapper, db, &url_args).Run()
  51. } else {
  52. // Back-end
  53. return backend.New(wrapper, db, &url_args).Run()
  54. }
  55. }