aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdnan Maolood <[email protected]>2021-02-20 18:30:49 -0500
committerAdnan Maolood <[email protected]>2021-02-20 18:30:49 -0500
commit0baa66a4e70a2302c044fbd9eb7ee4eb5e3bb03e (patch)
treeecae9eabd20c6691b79a34ecf62f5e7c25128617
parentcertificate.Store: Support "*" wildcard pattern (diff)
downloadgo-gemini-0baa66a4e70a2302c044fbd9eb7ee4eb5e3bb03e.tar.xz
go-gemini-0baa66a4e70a2302c044fbd9eb7ee4eb5e3bb03e.zip
Update examples
-rw-r--r--examples/auth.go33
-rw-r--r--examples/server.go14
-rw-r--r--examples/stream.go30
3 files changed, 29 insertions, 48 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
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 {