main.go 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package main
  2. import (
  3. "log"
  4. "net/http"
  5. "os"
  6. "os/signal"
  7. "syscall"
  8. "time"
  9. "imuslab.com/arozos/ReverseProxy/mod/aroz"
  10. "imuslab.com/arozos/ReverseProxy/mod/database"
  11. "imuslab.com/arozos/ReverseProxy/mod/dynamicproxy/redirection"
  12. "imuslab.com/arozos/ReverseProxy/mod/tlscert"
  13. )
  14. var (
  15. handler *aroz.ArozHandler
  16. sysdb *database.Database
  17. tlsCertManager *tlscert.Manager
  18. redirectTable *redirection.RuleTable
  19. )
  20. // Kill signal handler. Do something before the system the core terminate.
  21. func SetupCloseHandler() {
  22. c := make(chan os.Signal, 2)
  23. signal.Notify(c, os.Interrupt, syscall.SIGTERM)
  24. go func() {
  25. <-c
  26. log.Println("\r- Shutting down ReverseProxy")
  27. sysdb.Close()
  28. os.Exit(0)
  29. }()
  30. }
  31. func main() {
  32. //Start the aoModule pipeline (which will parse the flags as well). Pass in the module launch information
  33. handler = aroz.HandleFlagParse(aroz.ServiceInfo{
  34. Name: "ReverseProxy",
  35. Desc: "Basic reverse proxy listener",
  36. Group: "Network",
  37. IconPath: "reverseproxy/img/small_icon.png",
  38. Version: "0.3",
  39. StartDir: "reverseproxy/index.html",
  40. SupportFW: true,
  41. LaunchFWDir: "reverseproxy/index.html",
  42. SupportEmb: false,
  43. InitFWSize: []int{1080, 580},
  44. })
  45. //Register the standard web services urls
  46. fs := http.FileServer(http.Dir("./web"))
  47. http.Handle("/", fs)
  48. initAPIs()
  49. SetupCloseHandler()
  50. //Create database
  51. db, err := database.NewDatabase("sys.db", false)
  52. if err != nil {
  53. log.Fatal(err)
  54. }
  55. sysdb = db
  56. //Create tables for the database
  57. sysdb.NewTable("settings")
  58. //Create a TLS certificate manager
  59. tlsCertManager, err = tlscert.NewManager("./certs")
  60. if err != nil {
  61. panic(err)
  62. }
  63. //Create a redirection rule table
  64. redirectTable, err = redirection.NewRuleTable("./rules")
  65. if err != nil {
  66. panic(err)
  67. }
  68. //Start the reverse proxy server in go routine
  69. go func() {
  70. ReverseProxtInit()
  71. }()
  72. time.Sleep(300 * time.Millisecond)
  73. //Any log println will be shown in the core system via STDOUT redirection. But not STDIN.
  74. log.Println("ReverseProxy started. Visit control panel at http://localhost" + handler.Port)
  75. err = http.ListenAndServe(handler.Port, nil)
  76. if err != nil {
  77. log.Fatal(err)
  78. }
  79. }