Update examples

This commit is contained in:
Adnan Maolood 2021-02-20 18:30:49 -05:00
parent d479c6391c
commit 0baa66a4e7
3 changed files with 29 additions and 48 deletions

View File

@ -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

View File

@ -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)

View File

@ -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 {