diff options
| author | adnano <[email protected]> | 2020-10-13 14:22:15 -0400 |
|---|---|---|
| committer | adnano <[email protected]> | 2020-10-13 14:22:15 -0400 |
| commit | db89a34935c6404e141a6e635c529dae2dad928c (patch) | |
| tree | 96f562420e820c60498a9074ae8d318c4e01521d /examples/server.go | |
| parent | Remove (*Request).Hostname function (diff) | |
| download | go-gemini-db89a34935c6404e141a6e635c529dae2dad928c.tar.xz go-gemini-db89a34935c6404e141a6e635c529dae2dad928c.zip | |
examples/server: Generate new certificates when they expire
Diffstat (limited to 'examples/server.go')
| -rw-r--r-- | examples/server.go | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/examples/server.go b/examples/server.go index a4ed808..2385c95 100644 --- a/examples/server.go +++ b/examples/server.go @@ -3,7 +3,9 @@ package main import ( + "crypto/tls" "log" + "time" "git.sr.ht/~adnano/gmi" ) @@ -13,6 +15,33 @@ func main() { if err := server.CertificateStore.Load("/var/lib/gemini/certs"); err != nil { log.Fatal(err) } + server.GetCertificate = func(hostname string, store *gmi.CertificateStore) *tls.Certificate { + cert, err := store.Lookup(hostname) + if err != nil { + switch err { + case gmi.ErrInvalidCertificate: + log.Print("Old certificate expired, creating new one") + // Generate a new certificate if the old one is expired. + crt, key, err := gmi.NewRawCertificate(hostname, time.Minute) + if err != nil { + // Failed to generate new certificate, abort + return nil + } + // Store and return the new certificate + err = gmi.WriteX509KeyPair("/var/lib/gemini/certs/"+hostname, crt, key) + if err != nil { + return nil + } + newCert, err := tls.X509KeyPair(crt, key) + if err != nil { + return nil + } + store.Add(hostname, newCert) + return &newCert + } + } + return cert + } var mux gmi.ServeMux mux.Handle("/", gmi.FileServer(gmi.Dir("/var/www"))) |