()
| 81 | } |
| 82 | |
| 83 | func (mod *HttpsServer) Configure() error { |
| 84 | var err error |
| 85 | var path string |
| 86 | var address string |
| 87 | var port int |
| 88 | var certFile string |
| 89 | var keyFile string |
| 90 | |
| 91 | if mod.Running() { |
| 92 | return session.ErrAlreadyStarted(mod.Name()) |
| 93 | } |
| 94 | |
| 95 | if err, path = mod.StringParam("https.server.path"); err != nil { |
| 96 | return err |
| 97 | } |
| 98 | |
| 99 | router := http.NewServeMux() |
| 100 | fileServer := http.FileServer(http.Dir(path)) |
| 101 | |
| 102 | router.HandleFunc("/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { |
| 103 | mod.Debug("%s %s %s%s", tui.Bold(strings.Split(r.RemoteAddr, ":")[0]), r.Method, r.Host, r.URL.Path) |
| 104 | fileServer.ServeHTTP(w, r) |
| 105 | })) |
| 106 | |
| 107 | mod.server.Handler = router |
| 108 | |
| 109 | if err, address = mod.StringParam("https.server.address"); err != nil { |
| 110 | return err |
| 111 | } |
| 112 | |
| 113 | if err, port = mod.IntParam("https.server.port"); err != nil { |
| 114 | return err |
| 115 | } |
| 116 | |
| 117 | mod.server.Addr = fmt.Sprintf("%s:%d", address, port) |
| 118 | |
| 119 | if err, certFile = mod.StringParam("https.server.certificate"); err != nil { |
| 120 | return err |
| 121 | } else if certFile, err = fs.Expand(certFile); err != nil { |
| 122 | return err |
| 123 | } |
| 124 | |
| 125 | if err, keyFile = mod.StringParam("https.server.key"); err != nil { |
| 126 | return err |
| 127 | } else if keyFile, err = fs.Expand(keyFile); err != nil { |
| 128 | return err |
| 129 | } |
| 130 | |
| 131 | if !fs.Exists(certFile) || !fs.Exists(keyFile) { |
| 132 | cfg, err := tls.CertConfigFromModule("https.server", mod.SessionModule) |
| 133 | if err != nil { |
| 134 | return err |
| 135 | } |
| 136 | |
| 137 | mod.Debug("%+v", cfg) |
| 138 | mod.Info("generating server TLS key to %s", keyFile) |
| 139 | mod.Info("generating server TLS certificate to %s", certFile) |
| 140 | if err := tls.Generate(cfg, certFile, keyFile, false); err != nil { |
no test coverage detected