change to envs
This commit is contained in:
parent
57877cbafa
commit
0e9d87db72
22
.drone.yml
22
.drone.yml
|
@ -1,22 +0,0 @@
|
||||||
kind: pipeline
|
|
||||||
name: default
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: build
|
|
||||||
image: golang:latest
|
|
||||||
commands:
|
|
||||||
- make test
|
|
||||||
|
|
||||||
- name: coverage
|
|
||||||
image: plugins/codecov
|
|
||||||
settings:
|
|
||||||
token:
|
|
||||||
from_secret: codecov-token
|
|
||||||
|
|
||||||
- name: notify
|
|
||||||
image: plugins/webhook
|
|
||||||
urls: https://msgbus.mills.io/ci.mills.io
|
|
||||||
when:
|
|
||||||
status:
|
|
||||||
- success
|
|
||||||
- failure
|
|
|
@ -1,6 +1,4 @@
|
||||||
*~
|
*~
|
||||||
dist
|
dist
|
||||||
*.bak
|
*.bak
|
||||||
coverage.txt
|
|
||||||
|
|
||||||
gopherproxy
|
gopherproxy
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
language: go
|
||||||
|
sudo: false
|
||||||
|
go:
|
||||||
|
- tip
|
||||||
|
before_install:
|
||||||
|
- go get github.com/mattn/goveralls
|
||||||
|
script:
|
||||||
|
- $HOME/gopath/bin/goveralls -service=travis-ci
|
||||||
|
after_success:
|
||||||
|
- test -n "$TRAVIS_TAG" && curl -sL https://git.io/goreleaser | bash
|
14
Makefile
14
Makefile
|
@ -1,4 +1,4 @@
|
||||||
.PHONY: dev build profile bench test clean
|
.PHONY: dev build clean
|
||||||
|
|
||||||
all: dev
|
all: dev
|
||||||
|
|
||||||
|
@ -6,16 +6,8 @@ dev: build
|
||||||
./gopherproxy -bind 127.0.0.1:8000
|
./gopherproxy -bind 127.0.0.1:8000
|
||||||
|
|
||||||
build: clean
|
build: clean
|
||||||
|
go get ./...
|
||||||
go build -o ./gopherproxy ./cmd/gopherproxy/main.go
|
go build -o ./gopherproxy ./cmd/gopherproxy/main.go
|
||||||
|
|
||||||
profile:
|
|
||||||
@go test -cpuprofile cpu.prof -memprofile mem.prof -v -bench .
|
|
||||||
|
|
||||||
bench:
|
|
||||||
@go test -v -bench .
|
|
||||||
|
|
||||||
test:
|
|
||||||
@go test -v -race -cover -coverprofile=coverage.txt -covermode=atomic .
|
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
@git clean -f -d -X
|
rm -rf gopherproxy
|
||||||
|
|
22
README.md
22
README.md
|
@ -1,10 +1,9 @@
|
||||||
# Gopher (RFC 1436) Web Proxy
|
# Gopher (RFC 1436) Web Proxy
|
||||||
|
[![Build Status](https://travis-ci.org/prologic/gopherproxy.svg)](https://travis-ci.org/prologic/gopherproxy)
|
||||||
[![Build Status](https://cloud.drone.io/api/badges/prologic/gopherproxy/status.svg)](https://cloud.drone.io/prologic/gopherproxy)
|
[![GoDoc](https://godoc.org/github.com/prologic/gopherproxy?status.svg)](https://godoc.org/github.com/prologic/gopherproxy)
|
||||||
[![CodeCov](https://codecov.io/gh/prologic/gopherproxy/branch/master/graph/badge.svg)](https://codecov.io/gh/prologic/gopherproxy)
|
[![Wiki](https://img.shields.io/badge/docs-wiki-blue.svg)](https://github.com/prologic/gopherproxy/wiki)
|
||||||
[![Go Report Card](https://goreportcard.com/badge/prologic/gopherproxy)](https://goreportcard.com/report/prologic/gopherproxy)
|
[![Go Report Card](https://goreportcard.com/badge/github.com/prologic/gopherproxy)](https://goreportcard.com/report/github.com/prologic/gopherproxy)
|
||||||
[![GoDoc](https://godoc.org/github.com/prologic/gopherproxy?status.svg)](https://godoc.org/github.com/prologic/gopherproxy)
|
[![Coverage](https://coveralls.io/repos/prologic/gopherproxy/badge.svg)](https://coveralls.io/r/prologic/gopherproxy)
|
||||||
[![Sourcegraph](https://sourcegraph.com/github.com/prologic/gopherproxy/-/badge.svg)](https://sourcegraph.com/github.com/prologic/gopherproxy?badge)
|
|
||||||
|
|
||||||
gopherproxy is a Gopher (RFC 1436) Web Proxy that acts as a gateway into Gopherspace
|
gopherproxy is a Gopher (RFC 1436) Web Proxy that acts as a gateway into Gopherspace
|
||||||
by proxying standard Web HTTP requests to Gopher requests of the target server.
|
by proxying standard Web HTTP requests to Gopher requests of the target server.
|
||||||
|
@ -41,17 +40,6 @@ $ gopherproxy
|
||||||
|
|
||||||
Then simply visit: http://localhost/gopher.floodgap.com
|
Then simply visit: http://localhost/gopher.floodgap.com
|
||||||
|
|
||||||
## Related
|
|
||||||
|
|
||||||
Related projects:
|
|
||||||
|
|
||||||
- [go-gopher](https://github.com/prologic/go-gopher)
|
|
||||||
go-gopher is the Gopher client and server library used by gopherproxy
|
|
||||||
|
|
||||||
- [gopherclient](https://github.com/prologic/gopherclient)
|
|
||||||
gopherclient is a cross-platform QT/QML GUI Gopher Client
|
|
||||||
using the gopherproxy library as its backend.
|
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
MIT
|
MIT
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
theme: jekyll-theme-architect
|
|
|
@ -4,7 +4,7 @@ import (
|
||||||
"flag"
|
"flag"
|
||||||
"log"
|
"log"
|
||||||
|
|
||||||
"github.com/prologic/gopherproxy"
|
"tildegit.org/tildeverse/gopherproxy"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -12,7 +12,7 @@ var (
|
||||||
// (opt -> env -> config -> default)
|
// (opt -> env -> config -> default)
|
||||||
bind = flag.String("bind", "0.0.0.0:8000", "[int]:port to bind to")
|
bind = flag.String("bind", "0.0.0.0:8000", "[int]:port to bind to")
|
||||||
robotsfile = flag.String("robots-file", "robots.txt", "robots.txt file")
|
robotsfile = flag.String("robots-file", "robots.txt", "robots.txt file")
|
||||||
uri = flag.String("uri", "floodgap.com", "<host>:[port] to proxy to")
|
uri = flag.String("uri", "tilde.team", "<host>:[port] to proxy to")
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|
6
go.mod
6
go.mod
|
@ -1,6 +0,0 @@
|
||||||
module github.com/prologic/gopherproxy
|
|
||||||
|
|
||||||
require (
|
|
||||||
github.com/prologic/go-gopher v0.0.0-20181230133552-0c68ed5f58b0
|
|
||||||
github.com/temoto/robotstxt v0.0.0-20180810133444-97ee4a9ee6ea
|
|
||||||
)
|
|
9
go.sum
9
go.sum
|
@ -1,9 +0,0 @@
|
||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
|
||||||
github.com/prologic/go-gopher v0.0.0-20181230133552-0c68ed5f58b0 h1:10LO/S8HVjIuEHsHea//Cena1Ztgy23f/e8HFC0w5ow=
|
|
||||||
github.com/prologic/go-gopher v0.0.0-20181230133552-0c68ed5f58b0/go.mod h1:LiuwIXz4es4YIUOD6yRv8mES9n9dFbe4z0+TcrLkhXg=
|
|
||||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
|
||||||
github.com/temoto/robotstxt v0.0.0-20180810133444-97ee4a9ee6ea h1:hH8P1IiDpzRU6ZDbDh/RDnVuezi2oOXJpApa06M0zyI=
|
|
||||||
github.com/temoto/robotstxt v0.0.0-20180810133444-97ee4a9ee6ea/go.mod h1:aOux3gHPCftJ3KHq6Pz/AlDjYJ7Y+yKfm1gU/3B0u04=
|
|
||||||
golang.org/x/net v0.0.0-20181220203305-927f97764cc3 h1:eH6Eip3UpmR+yM/qI9Ijluzb1bNv/cAU/n+6l8tRSis=
|
|
||||||
golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
|
@ -1,6 +1,7 @@
|
||||||
package gopherproxy
|
package gopherproxy
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"fmt"
|
"fmt"
|
||||||
"html/template"
|
"html/template"
|
||||||
"io"
|
"io"
|
||||||
|
@ -10,9 +11,8 @@ import (
|
||||||
"net/url"
|
"net/url"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
gopher "github.com/prologic/go-gopher"
|
||||||
"github.com/temoto/robotstxt"
|
"github.com/temoto/robotstxt"
|
||||||
|
|
||||||
"github.com/prologic/go-gopher"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type Item struct {
|
type Item struct {
|
||||||
|
@ -71,9 +71,10 @@ func renderDirectory(w http.ResponseWriter, tpl *template.Template, hostport str
|
||||||
}
|
}
|
||||||
|
|
||||||
return tpl.Execute(w, struct {
|
return tpl.Execute(w, struct {
|
||||||
Title string
|
Title string
|
||||||
Lines []Item
|
Lines []Item
|
||||||
}{title, out})
|
Gophermap bool
|
||||||
|
}{title, out, true})
|
||||||
}
|
}
|
||||||
|
|
||||||
// GopherHandler returns a Handler that proxies requests
|
// GopherHandler returns a Handler that proxies requests
|
||||||
|
@ -125,7 +126,28 @@ func GopherHandler(tpl *template.Template, robotsdata *robotstxt.RobotsData, uri
|
||||||
}
|
}
|
||||||
|
|
||||||
if res.Body != nil {
|
if res.Body != nil {
|
||||||
io.Copy(w, res.Body)
|
if strings.HasSuffix(uri, ".md") {
|
||||||
|
// handle markdown
|
||||||
|
tpl.Execute(w, struct {
|
||||||
|
Title string
|
||||||
|
MdText template.HTML
|
||||||
|
Gophermap bool
|
||||||
|
Pre bool
|
||||||
|
}{uri, renderMd(res.Body), false, false})
|
||||||
|
|
||||||
|
} else if strings.HasSuffix(uri, ".txt") {
|
||||||
|
// handle .txt files
|
||||||
|
buf := new(bytes.Buffer)
|
||||||
|
buf.ReadFrom(res.Body)
|
||||||
|
tpl.Execute(w, struct {
|
||||||
|
Title string
|
||||||
|
MdText string
|
||||||
|
Gophermap bool
|
||||||
|
Pre bool
|
||||||
|
}{uri, buf.String(), false, true})
|
||||||
|
} else {
|
||||||
|
io.Copy(w, res.Body)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if err := renderDirectory(w, tpl, hostport, res.Dir); err != nil {
|
if err := renderDirectory(w, tpl, hostport, res.Dir); err != nil {
|
||||||
io.WriteString(w, fmt.Sprintf("<b>Error:</b><pre>%s</pre>", err))
|
io.WriteString(w, fmt.Sprintf("<b>Error:</b><pre>%s</pre>", err))
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
package gopherproxy
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"html/template"
|
||||||
|
"io"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/gomarkdown/markdown"
|
||||||
|
)
|
||||||
|
|
||||||
|
func renderMd(b io.Reader) template.HTML {
|
||||||
|
buf := new(bytes.Buffer)
|
||||||
|
buf.ReadFrom(b)
|
||||||
|
md := string(markdown.ToHTML(buf.Bytes(), nil, nil))
|
||||||
|
return template.HTML(strings.Replace(md, "<img", "<img class=\"img-responsive\"", -1))
|
||||||
|
}
|
19
template.go
19
template.go
|
@ -5,14 +5,25 @@ var tpltext = `<!doctype html>
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
<link rel="stylesheet" href="https://tilde.team/css/dracula.css">
|
||||||
<title>{{.Title}}</title>
|
<title>{{.Title}}</title>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
<div class="container">
|
||||||
<section>
|
<section>
|
||||||
<pre>
|
{{if .Gophermap}}<pre>
|
||||||
{{range .Lines}} {{if .Link}}({{.Type}}) <a class="{{ .Type }}" href="{{.Link}}">{{.Text}}</a>{{else}} {{.Text}}{{end}}
|
{{range .Lines}} {{if .Link}}({{.Type}}) <a class="{{ .Type }}" href="{{.Link}}">{{.Text}}</a>{{else}} {{.Text}}{{end}}
|
||||||
{{end}}</pre>
|
{{end}}
|
||||||
|
</pre>
|
||||||
|
{{else}}
|
||||||
|
{{if .Pre}}<pre>{{end}}
|
||||||
|
{{.MdText}}
|
||||||
|
{{if .Pre}}</pre>{{end}}
|
||||||
|
{{end}}
|
||||||
</section>
|
</section>
|
||||||
|
</div>
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
var qry=document.getElementsByClassName('QRY')
|
var qry=document.getElementsByClassName('QRY')
|
||||||
var i=qry.length
|
var i=qry.length
|
||||||
|
@ -25,5 +36,7 @@ while (i--) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>`
|
</html>
|
||||||
|
`
|
||||||
|
|
Loading…
Reference in New Issue