@@ -2,6 +2,7 @@ package main
2
2
3
3
import (
4
4
"context"
5
+ "crypto/tls"
5
6
"encoding/json"
6
7
"flag"
7
8
"fmt"
@@ -12,6 +13,7 @@ import (
12
13
13
14
"crawshaw.io/sqlite"
14
15
"crawshaw.io/sqlite/sqlitex"
16
+ "golang.org/x/crypto/acme/autocert"
15
17
)
16
18
17
19
func obsHandler (w http.ResponseWriter , r * http.Request ) {
@@ -46,6 +48,7 @@ func speciesHandler(w http.ResponseWriter, r *http.Request) {
46
48
}
47
49
c := pool .Get (context .Background ())
48
50
defer pool .Put (c )
51
+ var stmt * sqlite.Stmt
49
52
stmt := c .Prep (`SELECT
50
53
common_name,
51
54
age_sex,
@@ -138,9 +141,29 @@ func main() {
138
141
mux := & http.ServeMux {}
139
142
mux .HandleFunc ("/obs" , obsHandler )
140
143
mux .HandleFunc ("/species" , speciesHandler )
141
- go func () {
142
- fmt .Println ("open your browser to http://127.0.0.1" + * flagAddr )
143
- }()
144
144
uptime = time .Now ()
145
- log .Fatal (http .ListenAndServe (* flagAddr , mux ))
145
+ srv := & http.Server {
146
+ Addr : * flagAddr ,
147
+ ReadTimeout : 5 * time .Second ,
148
+ WriteTimeout : 10 * time .Second ,
149
+ IdleTimeout : 120 * time .Second ,
150
+ Handler : mux ,
151
+ }
152
+ if * flagAddr == ":443" || * flagAddr == ":https" {
153
+ m := & autocert.Manager {
154
+ Cache : autocert .DirCache ("/opt/acme/" ),
155
+ Prompt : autocert .AcceptTOS ,
156
+ HostPolicy : autocert .HostWhitelist ("wright-lxt-01.boisestate.edu" ),
157
+ }
158
+ go func () {
159
+ log .Fatal (http .ListenAndServe (":http" , m .HTTPHandler (nil )))
160
+ }()
161
+ srv .TLSConfig = & tls.Config {GetCertificate : m .GetCertificate }
162
+ log .Fatal (srv .ListenAndServeTLS (* flagAddr , "" ))
163
+ } else {
164
+ go func () {
165
+ fmt .Println ("open your browser to http://127.0.0.1" + * flagAddr )
166
+ }()
167
+ log .Fatal (srv .ListenAndServe ())
168
+ }
146
169
}
0 commit comments