diff --git a/examples/auth.go b/examples/auth.go index 447ab17..831c7fc 100644 --- a/examples/auth.go +++ b/examples/auth.go @@ -3,10 +3,9 @@ package main import ( + "context" "crypto/sha512" - "crypto/tls" "crypto/x509" - "crypto/x509/pkix" "fmt" "log" "time" @@ -25,24 +24,22 @@ var ( ) func main() { - var mux gemini.ServeMux + certificates := &certificate.Store{} + certificates.Register("localhost") + if err := certificates.Load("/var/lib/gemini/certs"); err != nil { + log.Fatal(err) + } + + mux := &gemini.ServeMux{} mux.HandleFunc("/", profile) mux.HandleFunc("/username", changeUsername) - var server gemini.Server - if err := server.Certificates.Load("/var/lib/gemini/certs"); err != nil { - log.Fatal(err) + server := &gemini.Server{ + Handler: mux, + ReadTimeout: 30 * time.Second, + WriteTimeout: 1 * time.Minute, + GetCertificate: certificates.GetCertificate, } - server.GetCertificate = func(hostname string) (tls.Certificate, error) { - return certificate.Create(certificate.CreateOptions{ - Subject: pkix.Name{ - CommonName: hostname, - }, - DNSNames: []string{hostname}, - Duration: time.Hour, - }) - } - server.Handler = &mux if err := server.ListenAndServe(); err != nil { log.Fatal(err) @@ -54,7 +51,7 @@ func fingerprint(cert *x509.Certificate) string { return string(b[:]) } -func profile(w gemini.ResponseWriter, r *gemini.Request) { +func profile(ctx context.Context, w gemini.ResponseWriter, r *gemini.Request) { if len(r.TLS.PeerCertificates) == 0 { w.WriteHeader(gemini.StatusCertificateRequired, "Certificate required") return @@ -69,7 +66,7 @@ func profile(w gemini.ResponseWriter, r *gemini.Request) { fmt.Fprintln(w, "=> /username Change username") } -func changeUsername(w gemini.ResponseWriter, r *gemini.Request) { +func changeUsername(ctx context.Context, w gemini.ResponseWriter, r *gemini.Request) { if len(r.TLS.PeerCertificates) == 0 { w.WriteHeader(gemini.StatusCertificateRequired, "Certificate required") return diff --git a/examples/server.go b/examples/server.go index 6e00f32..430da55 100644 --- a/examples/server.go +++ b/examples/server.go @@ -5,8 +5,6 @@ package main import ( - "crypto/tls" - "crypto/x509/pkix" "log" "os" "time" @@ -16,17 +14,7 @@ import ( ) func main() { - certificates := &certificate.Store{ - CreateCertificate: func(hostname string) (tls.Certificate, error) { - return certificate.Create(certificate.CreateOptions{ - Subject: pkix.Name{ - CommonName: hostname, - }, - DNSNames: []string{hostname}, - Duration: 365 * 24 * time.Hour, - }) - }, - } + certificates := &certificate.Store{} certificates.Register("localhost") if err := certificates.Load("/var/lib/gemini/certs"); err != nil { log.Fatal(err) diff --git a/examples/stream.go b/examples/stream.go index 3f21e20..607ae1c 100644 --- a/examples/stream.go +++ b/examples/stream.go @@ -6,8 +6,6 @@ package main import ( "context" - "crypto/tls" - "crypto/x509/pkix" "fmt" "log" "time" @@ -17,23 +15,21 @@ import ( ) func main() { - var server gemini.Server - if err := server.Certificates.Load("/var/lib/gemini/certs"); err != nil { + certificates := &certificate.Store{} + certificates.Register("localhost") + if err := certificates.Load("/var/lib/gemini/certs"); err != nil { log.Fatal(err) } - server.GetCertificate = func(hostname string) (tls.Certificate, error) { - return certificate.Create(certificate.CreateOptions{ - Subject: pkix.Name{ - CommonName: hostname, - }, - DNSNames: []string{hostname}, - Duration: 365 * 24 * time.Hour, - }) - } - var mux gemini.ServeMux + mux := &gemini.ServeMux{} mux.HandleFunc("/", stream) - server.Handler = &mux + + server := &gemini.Server{ + Handler: mux, + ReadTimeout: 30 * time.Second, + WriteTimeout: 1 * time.Minute, + GetCertificate: certificates.GetCertificate, + } if err := server.ListenAndServe(); err != nil { log.Fatal(err) @@ -41,7 +37,7 @@ func main() { } // stream writes an infinite stream to w. -func stream(w gemini.ResponseWriter, r *gemini.Request) { +func stream(ctx context.Context, w gemini.ResponseWriter, r *gemini.Request) { flusher, ok := w.(gemini.Flusher) if !ok { w.WriteHeader(gemini.StatusTemporaryFailure, "Internal error") @@ -49,7 +45,7 @@ func stream(w gemini.ResponseWriter, r *gemini.Request) { } ch := make(chan string) - ctx, cancel := context.WithCancel(context.Background()) + ctx, cancel := context.WithCancel(ctx) go func(ctx context.Context) { for {