start.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. package main
  2. import (
  3. "log"
  4. "net/http"
  5. "strconv"
  6. "strings"
  7. "time"
  8. "imuslab.com/zoraxy/mod/auth"
  9. "imuslab.com/zoraxy/mod/database"
  10. "imuslab.com/zoraxy/mod/dynamicproxy/redirection"
  11. "imuslab.com/zoraxy/mod/geodb"
  12. "imuslab.com/zoraxy/mod/mdns"
  13. "imuslab.com/zoraxy/mod/sshprox"
  14. "imuslab.com/zoraxy/mod/statistic"
  15. "imuslab.com/zoraxy/mod/tlscert"
  16. )
  17. /*
  18. Startup Sequence
  19. This function starts the startup sequence of all
  20. required modules
  21. */
  22. var (
  23. /*
  24. MDNS related
  25. */
  26. previousmdnsScanResults = []*mdns.NetworkHost{}
  27. mdnsTickerStop chan bool
  28. )
  29. func startupSequence() {
  30. //Create database
  31. db, err := database.NewDatabase("sys.db", false)
  32. if err != nil {
  33. log.Fatal(err)
  34. }
  35. sysdb = db
  36. //Create tables for the database
  37. sysdb.NewTable("settings")
  38. //Create an auth agent
  39. sessionKey, err := auth.GetSessionKey(sysdb)
  40. if err != nil {
  41. log.Fatal(err)
  42. }
  43. authAgent = auth.NewAuthenticationAgent(name, []byte(sessionKey), sysdb, true, func(w http.ResponseWriter, r *http.Request) {
  44. //Not logged in. Redirecting to login page
  45. http.Redirect(w, r, "/login.html", http.StatusTemporaryRedirect)
  46. })
  47. //Create a TLS certificate manager
  48. tlsCertManager, err = tlscert.NewManager("./certs")
  49. if err != nil {
  50. panic(err)
  51. }
  52. //Create a redirection rule table
  53. redirectTable, err = redirection.NewRuleTable("./rules")
  54. if err != nil {
  55. panic(err)
  56. }
  57. //Create a geodb store
  58. geodbStore, err = geodb.NewGeoDb(sysdb, "./system/GeoLite2-Country.mmdb")
  59. if err != nil {
  60. panic(err)
  61. }
  62. //Create a statistic collector
  63. statisticCollector, err = statistic.NewStatisticCollector(statistic.CollectorOption{
  64. Database: sysdb,
  65. })
  66. if err != nil {
  67. panic(err)
  68. }
  69. if err != nil {
  70. panic(err)
  71. }
  72. //Create a mdns discoverer
  73. portInt, err := strconv.Atoi(strings.Split(handler.Port, ":")[1])
  74. if err != nil {
  75. portInt = 8000
  76. }
  77. mdnsScanner, err = mdns.NewMDNS(mdns.NetworkHost{
  78. HostName: "zoraxy_" + nodeUUID,
  79. Port: portInt,
  80. Domain: "zoraxy.imuslab.com",
  81. Model: "Network Gateway",
  82. UUID: nodeUUID,
  83. Vendor: "imuslab.com",
  84. BuildVersion: version,
  85. }, "")
  86. if err != nil {
  87. panic(err)
  88. }
  89. //Start initial scanning
  90. go func() {
  91. hosts := mdnsScanner.Scan(30, "")
  92. previousmdnsScanResults = hosts
  93. log.Println("mDNS Startup scan completed")
  94. }()
  95. //Create a ticker to update mDNS results every 5 minutes
  96. ticker := time.NewTicker(15 * time.Minute)
  97. stopChan := make(chan bool)
  98. go func() {
  99. for {
  100. select {
  101. case <-stopChan:
  102. ticker.Stop()
  103. case <-ticker.C:
  104. hosts := mdnsScanner.Scan(30, "")
  105. previousmdnsScanResults = hosts
  106. log.Println("mDNS scan result updated")
  107. }
  108. }
  109. }()
  110. mdnsTickerStop = stopChan
  111. //Create WebSSH Manager
  112. webSshManager = sshprox.NewSSHProxyManager()
  113. }