diff options
| author | Adnan Maolood <[email protected]> | 2020-10-31 16:33:56 -0400 |
|---|---|---|
| committer | Adnan Maolood <[email protected]> | 2020-10-31 16:33:56 -0400 |
| commit | 14ef3be6fe38ea697c2f09be545d0fbb73c1d832 (patch) | |
| tree | 81e72d6d11de2a47d44941b59a29ee28449a2568 /server.go | |
| parent | Call CreateCertificate for missing certificates (diff) | |
| download | go-gemini-14ef3be6fe38ea697c2f09be545d0fbb73c1d832.tar.xz go-gemini-14ef3be6fe38ea697c2f09be545d0fbb73c1d832.zip | |
server: Automatically write new certificates to disk
Diffstat (limited to 'server.go')
| -rw-r--r-- | server.go | 30 |
1 files changed, 16 insertions, 14 deletions
@@ -39,7 +39,7 @@ type responderKey struct { // // Patterns must be in the form of hostname or scheme://hostname // (e.g. gemini://example.com). -// If no scheme is specified, a default scheme of gemini:// is assumed. +// If no scheme is specified, a default scheme of gemini:// is implied. // // Wildcard patterns are supported (e.g. *.example.com). // To register a certificate for a wildcard hostname, call Certificates.Add: @@ -132,27 +132,29 @@ func (s *Server) Serve(l net.Listener) error { } func (s *Server) getCertificate(h *tls.ClientHelloInfo) (*tls.Certificate, error) { - hostname := h.ServerName - cert, err := s.Certificates.Lookup(hostname) - if err == ErrCertificateUnknown { + cert, err := s.getCertificateFor(h.ServerName) + if err != nil { + // Try wildcard wildcard := strings.SplitN(h.ServerName, ".", 2) if len(wildcard) == 2 { - cert, err = s.Certificates.Lookup("*." + wildcard[1]) + cert, err = s.getCertificateFor("*." + wildcard[1]) } } + return cert, err +} - switch err { - case ErrCertificateUnknown: - if _, ok := s.hosts[hostname]; !ok { - break - } - fallthrough +func (s *Server) getCertificateFor(hostname string) (*tls.Certificate, error) { + if _, ok := s.hosts[hostname]; !ok { + return nil, ErrCertificateUnknown + } + cert, err := s.Certificates.Lookup(hostname) - case ErrCertificateExpired: + switch err { + case ErrCertificateUnknown, ErrCertificateExpired: if s.CreateCertificate != nil { - cert, err := s.CreateCertificate(h.ServerName) + cert, err := s.CreateCertificate(hostname) if err == nil { - s.Certificates.Add(h.ServerName, cert) + s.Certificates.Add(hostname, cert) } return &cert, err } |