aboutsummaryrefslogtreecommitdiff
path: root/examples/auth.go
diff options
context:
space:
mode:
authorAdnan Maolood <[email protected]>2020-11-01 16:25:59 -0500
committerAdnan Maolood <[email protected]>2020-11-01 16:25:59 -0500
commitb6475aa7d997a680742d2d8285cb8d95e2437989 (patch)
tree7bb004919473385a4b772f46e3e5c7601c5ce146 /examples/auth.go
parentPrevent infinite loop in client requests (diff)
downloadgo-gemini-b6475aa7d997a680742d2d8285cb8d95e2437989.tar.xz
go-gemini-b6475aa7d997a680742d2d8285cb8d95e2437989.zip
server: Populate (*Request).Certificate fieldv0.1.5
Diffstat (limited to 'examples/auth.go')
-rw-r--r--examples/auth.go33
1 files changed, 18 insertions, 15 deletions
diff --git a/examples/auth.go b/examples/auth.go
index cc54b5b..c32e398 100644
--- a/examples/auth.go
+++ b/examples/auth.go
@@ -3,9 +3,11 @@
package main
import (
+ "crypto/tls"
"crypto/x509"
"fmt"
"log"
+ "time"
"git.sr.ht/~adnano/go-gemini"
)
@@ -44,6 +46,12 @@ func main() {
if err := server.Certificates.Load("/var/lib/gemini/certs"); err != nil {
log.Fatal(err)
}
+ server.CreateCertificate = func(hostname string) (tls.Certificate, error) {
+ return gemini.CreateCertificate(gemini.CertificateOptions{
+ DNSNames: []string{hostname},
+ Duration: time.Hour,
+ })
+ }
server.Register("localhost", &mux)
if err := server.ListenAndServe(); err != nil {
@@ -58,8 +66,7 @@ func getSession(cert *x509.Certificate) (*session, bool) {
}
func login(w *gemini.ResponseWriter, r *gemini.Request) {
- cert := gemini.Certificate(r)
- if cert == nil {
+ if r.Certificate == nil {
w.WriteStatus(gemini.StatusCertificateRequired)
return
}
@@ -68,7 +75,7 @@ func login(w *gemini.ResponseWriter, r *gemini.Request) {
w.WriteHeader(gemini.StatusInput, "Username")
return
}
- fingerprint := gemini.Fingerprint(cert)
+ fingerprint := gemini.Fingerprint(r.Certificate.Leaf)
sessions[fingerprint] = &session{
username: username,
}
@@ -76,12 +83,11 @@ func login(w *gemini.ResponseWriter, r *gemini.Request) {
}
func loginPassword(w *gemini.ResponseWriter, r *gemini.Request) {
- cert := gemini.Certificate(r)
- if cert == nil {
+ if r.Certificate == nil {
w.WriteStatus(gemini.StatusCertificateRequired)
return
}
- session, ok := getSession(cert)
+ session, ok := getSession(r.Certificate.Leaf)
if !ok {
w.WriteStatus(gemini.StatusCertificateNotAuthorized)
return
@@ -102,23 +108,21 @@ func loginPassword(w *gemini.ResponseWriter, r *gemini.Request) {
}
func logout(w *gemini.ResponseWriter, r *gemini.Request) {
- cert := gemini.Certificate(r)
- if cert == nil {
+ if r.Certificate == nil {
w.WriteStatus(gemini.StatusCertificateRequired)
return
}
- fingerprint := gemini.Fingerprint(cert)
+ fingerprint := gemini.Fingerprint(r.Certificate.Leaf)
delete(sessions, fingerprint)
fmt.Fprintln(w, "Successfully logged out.")
}
func profile(w *gemini.ResponseWriter, r *gemini.Request) {
- cert := gemini.Certificate(r)
- if cert == nil {
+ if r.Certificate == nil {
w.WriteStatus(gemini.StatusCertificateRequired)
return
}
- session, ok := getSession(cert)
+ session, ok := getSession(r.Certificate.Leaf)
if !ok {
w.WriteStatus(gemini.StatusCertificateNotAuthorized)
return
@@ -130,12 +134,11 @@ func profile(w *gemini.ResponseWriter, r *gemini.Request) {
}
func admin(w *gemini.ResponseWriter, r *gemini.Request) {
- cert := gemini.Certificate(r)
- if cert == nil {
+ if r.Certificate == nil {
w.WriteStatus(gemini.StatusCertificateRequired)
return
}
- session, ok := getSession(cert)
+ session, ok := getSession(r.Certificate.Leaf)
if !ok {
w.WriteStatus(gemini.StatusCertificateNotAuthorized)
return