diff options
| author | adnano <[email protected]> | 2020-10-12 16:34:52 -0400 |
|---|---|---|
| committer | adnano <[email protected]> | 2020-10-12 16:34:59 -0400 |
| commit | a33a5be0634cbbca6c6f8eb2fd53bceb014fed02 (patch) | |
| tree | a23fdfdab8807baa8a604023f25d729f3edaabf1 /doc.go | |
| parent | Use a map for registering server handlers (diff) | |
| download | go-gemini-a33a5be0634cbbca6c6f8eb2fd53bceb014fed02.tar.xz go-gemini-a33a5be0634cbbca6c6f8eb2fd53bceb014fed02.zip | |
Update documentation
Diffstat (limited to 'doc.go')
| -rw-r--r-- | doc.go | 80 |
1 files changed, 80 insertions, 0 deletions
@@ -0,0 +1,80 @@ +/* +Package gmi implements the Gemini protocol. + +Send makes a Gemini request: + + req := gmi.NewRequest("gemini://example.com") + err := gmi.Send(req) + if err != nil { + // handle error + } + +For control over client behavior, create a Client: + + var client gmi.Client + err := client.Send(req) + if err != nil { + // handle error + } + +The default client loads known hosts from "$XDG_DATA_HOME/gemini/known_hosts". +Custom clients can load their own list of known hosts: + + err := client.KnownHosts.LoadFrom("path/to/my/known_hosts") + if err != nil { + // handle error + } + +Clients can control when to trust certificates with TrustCertificate: + + client.TrustCertificate = func(hostname string, cert *x509.Certificate, knownHosts *gmi.KnownHosts) error { + return knownHosts.Lookup(hostname, cert) + } + +If a server responds with StatusCertificateRequired, the default client will generate a certificate and resend the request with it. Custom clients can specify GetCertificate: + + client.GetCertificate = func(hostname string, store *gmi.CertificateStore) *tls.Certificate { + // If the certificate is in the store, return it + if cert, err := store.Lookup(hostname); err == nil { + return &cert + } + // Otherwise, generate a certificate + duration := time.Hour + cert, err := gmi.NewCertificate(hostname, duration) + if err != nil { + return nil + } + // Store and return the certificate + store.Add(hostname, cert) + return &cert + } + +Server is a Gemini server. + + var server gmi.Server + +Servers must be configured with certificates: + + var server gmi.Server + server.CertificateStore.Load("/var/lib/gemini/certs") + +Servers can accept requests for multiple hosts and schemes: + + server.HandleFunc("example.com", func(rw *gmi.ResponseWriter, req *gmi.Request) { + fmt.Fprint(rw, "Welcome to example.com") + }) + server.HandleFunc("example.org", func(rw *gmi.ResponseWriter, req *gmi.Request) { + fmt.Fprint(rw, "Welcome to example.org") + }) + server.HandleSchemeFunc("http", "example.net", func(rw *gmi.ResponseWriter, req *gmi.Request) { + fmt.Fprint(rw, "Proxied content from example.net") + }) + +To start the server, call ListenAndServe: + + err := server.ListenAndServe() + if err != nil { + // handle error + } +*/ +package gmi |