aboutsummaryrefslogtreecommitdiff
path: root/examples/auth.go
diff options
context:
space:
mode:
Diffstat (limited to 'examples/auth.go')
-rw-r--r--examples/auth.go33
1 files changed, 15 insertions, 18 deletions
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.GetCertificate = func(hostname string) (tls.Certificate, error) {
- return certificate.Create(certificate.CreateOptions{
- Subject: pkix.Name{
- CommonName: hostname,
- },
- DNSNames: []string{hostname},
- Duration: time.Hour,
- })
+ server := &gemini.Server{
+ Handler: mux,
+ ReadTimeout: 30 * time.Second,
+ WriteTimeout: 1 * time.Minute,
+ GetCertificate: certificates.GetCertificate,
}
- 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