diff --git a/gemini.go b/gemini.go deleted file mode 100644 index 216484b..0000000 --- a/gemini.go +++ /dev/null @@ -1,102 +0,0 @@ -package main - -// Gemini-related stuff. This is currently a proof-of-concept implementation, no one really uses it. -// Maybe we should deprecate it until we find power to do it properly? -// -// When this stuff gets more serious, a separate module will be needed. - -import ( - "crypto/tls" - "crypto/x509/pkix" - "io" - "io/ioutil" - "log" - "path/filepath" - "strings" - "time" - - "git.sr.ht/~adnano/go-gemini" - "git.sr.ht/~adnano/go-gemini/certificate" - - "github.com/bouncepaw/mycorrhiza/cfg" - "github.com/bouncepaw/mycorrhiza/hyphae" - "github.com/bouncepaw/mycorrhiza/util" -) - -func geminiHomeHypha(w *gemini.ResponseWriter, rq *gemini.Request) { - log.Println(rq.URL) - _, _ = io.WriteString(w, `# Mycorrhiza Wiki - -You have successfully served the wiki through Gemini. Currently, support is really work-in-progress; you should resort to using Mycorrhiza through the web protocols. - -Visit home hypha: -=> /hypha/`+cfg.HomeHypha) -} - -func geminiHypha(w *gemini.ResponseWriter, rq *gemini.Request) { - log.Println(rq.URL) - var ( - hyphaName = geminiHyphaNameFromRq(rq, "page", "hypha") - h = hyphae.ByName(hyphaName) - hasAmnt = h.Exists && h.BinaryPath != "" - contents string - ) - if h.Exists { - fileContentsT, errT := ioutil.ReadFile(h.TextPath) - if errT == nil { - contents = string(fileContentsT) - } - } - if hasAmnt { - _, _ = io.WriteString(w, "This hypha has an attachment\n") - } - _, _ = io.WriteString(w, contents) -} - -func handleGemini() { - if cfg.GeminiCertificatePath == "" { - return - } - certPath, err := filepath.Abs(cfg.GeminiCertificatePath) - if err != nil { - log.Fatal(err) - } - - var server gemini.Server - server.ReadTimeout = 30 * time.Second - server.WriteTimeout = 1 * time.Minute - if err := server.Certificates.Load(certPath); err != nil { - log.Fatal(err) - } - server.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, - }) - } - - var mux gemini.ServeMux - mux.HandleFunc("/", geminiHomeHypha) - mux.HandleFunc("/hypha/", geminiHypha) - mux.HandleFunc("/page/", geminiHypha) - - server.Handle("localhost", &mux) - if err := server.ListenAndServe(); err != nil { - log.Fatal(err) - } -} - -// geminiHyphaNameFromRq extracts hypha name from gemini request. You have to also pass the action which is embedded in the url or several actions. For url /hypha/hypha, the action would be "hypha". -func geminiHyphaNameFromRq(rq *gemini.Request, actions ...string) string { - p := rq.URL.Path - for _, action := range actions { - if strings.HasPrefix(p, "/"+action+"/") { - return util.CanonicalName(strings.TrimPrefix(p, "/"+action+"/")) - } - } - log.Fatal("HyphaNameFromRq: no matching action passed") - return "" -} diff --git a/go.mod b/go.mod index daf1807..bf383c9 100644 --- a/go.mod +++ b/go.mod @@ -3,13 +3,10 @@ module github.com/bouncepaw/mycorrhiza go 1.16 require ( - git.sr.ht/~adnano/go-gemini v0.1.13 - github.com/adrg/xdg v0.2.2 github.com/bouncepaw/mycomarkup v0.5.5 github.com/go-ini/ini v1.62.0 github.com/gorilla/feeds v1.1.1 github.com/kr/pretty v0.2.1 // indirect - github.com/mitchellh/go-homedir v1.1.0 github.com/smartystreets/goconvey v1.6.4 // indirect github.com/valyala/quicktemplate v1.6.3 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 diff --git a/go.sum b/go.sum index d6b1bbb..3f50fb0 100644 --- a/go.sum +++ b/go.sum @@ -1,12 +1,6 @@ -git.sr.ht/~adnano/go-gemini v0.1.13 h1:vzKkkVrOzMpfJ1AAeE/PChg0Rw5Zf+9HrnwsgVxXUT4= -git.sr.ht/~adnano/go-gemini v0.1.13/go.mod h1:If1VxEWcZDrRt5FeAFnGTcM2Ud1E3BXs3VJ5rnZWKq0= -github.com/adrg/xdg v0.2.2 h1:A7ZHKRz5KGOLJX/bg7IPzStryhvCzAE1wX+KWawPiAo= -github.com/adrg/xdg v0.2.2/go.mod h1:7I2hH/IT30IsupOpKZ5ue7/qNi3CoKzD6tL3HwpaRMQ= github.com/andybalholm/brotli v1.0.0/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= github.com/bouncepaw/mycomarkup v0.5.5 h1:dEZcNDUQKxwOITkhvE8Zf5HDuYJ4C8c1K8mxSY0UNE8= github.com/bouncepaw/mycomarkup v0.5.5/go.mod h1:0n6thlGGgrx2Y/2NaaUH4qHW4v1xJ+EpW7yMFUxNRIg= -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/go-ini/ini v1.62.0 h1:7VJT/ZXjzqSrvtraFp4ONq80hTcRQth1c9ZnQ3uNQvU= github.com/go-ini/ini v1.62.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= @@ -22,17 +16,10 @@ github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfn github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasthttp v1.16.0/go.mod h1:YOKImeEosDdBPnxc0gy7INqi3m1zK6A+xl6TwOBhHCA= @@ -51,8 +38,5 @@ golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/ini.v1 v1.62.0 h1:duBzk771uxoUuOlyRLkHsygud9+5lrlGjdFBb4mSKDU= gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/main.go b/main.go index 86efb51..b5c60c5 100644 --- a/main.go +++ b/main.go @@ -48,7 +48,6 @@ func main() { static.InitFS(files.StaticFiles()) // Network: - go handleGemini() web.Init() log.Fatal(http.ListenAndServe("0.0.0.0:"+cfg.HTTPPort, nil)) }