Merge pull request #35 from superfly/resolving-conflict-codepope
Adds https promotions
This commit is contained in:
commit
39f4223b5b
3 changed files with 19 additions and 6 deletions
|
@ -15,5 +15,5 @@ FROM scratch
|
||||||
WORKDIR /
|
WORKDIR /
|
||||||
COPY --from=builder /go/src/github.com/PierreZ/goStatic/bin/ .
|
COPY --from=builder /go/src/github.com/PierreZ/goStatic/bin/ .
|
||||||
USER appuser
|
USER appuser
|
||||||
ENTRYPOINT ["/goStatic"]
|
ENTRYPOINT ["/goStatic","-enable-logging","-https-promote"]
|
||||||
|
|
||||||
|
|
12
README.md
12
README.md
|
@ -12,18 +12,18 @@ Yeah, decided to drop support of unsecured HTTPS. Two-years ago, when I started
|
||||||
* A fully static web server in 6MB
|
* A fully static web server in 6MB
|
||||||
* No framework
|
* No framework
|
||||||
* Web server built for Docker
|
* Web server built for Docker
|
||||||
* Can generate certificate on its own
|
* Can generate the certificate on its own
|
||||||
* Light container
|
* Light container
|
||||||
* More secure than official images (see below)
|
* More secure than official images (see below)
|
||||||
* Log enabled
|
* Log enabled
|
||||||
|
|
||||||
### Why?
|
### Why?
|
||||||
Because the official Golang image is wayyyy too big (around 1/2Gb as you can see below) and could be unsecure.
|
Because the official Golang image is wayyyy too big (around 1/2Gb as you can see below) and could be insecure.
|
||||||
|
|
||||||
[](https://imagelayers.io/?images=golang:latest 'Get your own badge on imagelayers.io')
|
[](https://imagelayers.io/?images=golang:latest 'Get your own badge on imagelayers.io')
|
||||||
|
|
||||||
For me, the whole point of containers is to have a light container...
|
For me, the whole point of containers is to have a light container...
|
||||||
Many links should provide you with additionnal info to see my point of view:
|
Many links should provide you with additional info to see my point of view:
|
||||||
|
|
||||||
* [Over 30% of Official Images in Docker Hub Contain High Priority Security Vulnerabilities](http://www.banyanops.com/blog/analyzing-docker-hub/)
|
* [Over 30% of Official Images in Docker Hub Contain High Priority Security Vulnerabilities](http://www.banyanops.com/blog/analyzing-docker-hub/)
|
||||||
* [Create The Smallest Possible Docker Container](http://blog.xebia.com/2014/07/04/create-the-smallest-possible-docker-container/)
|
* [Create The Smallest Possible Docker Container](http://blog.xebia.com/2014/07/04/create-the-smallest-possible-docker-container/)
|
||||||
|
@ -60,11 +60,15 @@ Usage of /goStatic:
|
||||||
The listening port (default 8043)
|
The listening port (default 8043)
|
||||||
-set-basic-auth string
|
-set-basic-auth string
|
||||||
Define the basic auth. Form must be user:password
|
Define the basic auth. Form must be user:password
|
||||||
|
-https-promote
|
||||||
|
Connections to http: are redirected to https:
|
||||||
|
-enable-logging
|
||||||
|
Writes a simple log entry for requests to the server
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Fallback
|
#### Fallback
|
||||||
|
|
||||||
The fallback option is principally useful for single page applications (SPAs) where the browser may request a file, but where part of the path is in fact an internal route in the application, not a file on disk. goStatic supports two possible usages of this option:
|
The fallback option is principally useful for single-page applications (SPAs) where the browser may request a file, but where part of the path is in fact an internal route in the application, not a file on disk. goStatic supports two possible usages of this option:
|
||||||
|
|
||||||
1. Using an absolute path so that all not found requests resolve to the same file
|
1. Using an absolute path so that all not found requests resolve to the same file
|
||||||
2. Using a relative file, which searches up the tree for the specified file
|
2. Using a relative file, which searches up the tree for the specified file
|
||||||
|
|
9
main.go
9
main.go
|
@ -29,6 +29,7 @@ var (
|
||||||
defaultUsernameBasicAuth = flag.String("default-user-basic-auth", "gopher", "Define the user")
|
defaultUsernameBasicAuth = flag.String("default-user-basic-auth", "gopher", "Define the user")
|
||||||
sizeRandom = flag.Int("password-length", 16, "Size of the randomized password")
|
sizeRandom = flag.Int("password-length", 16, "Size of the randomized password")
|
||||||
logRequest = flag.Bool("enable-logging", false, "Enable log request")
|
logRequest = flag.Bool("enable-logging", false, "Enable log request")
|
||||||
|
httpsPromote = flag.Bool("https-promote", false, "All HTTP requests should be redirected to HTTPS")
|
||||||
|
|
||||||
username string
|
username string
|
||||||
password string
|
password string
|
||||||
|
@ -68,6 +69,14 @@ func (w *gzipResponseWriter) Write(b []byte) (int, error) {
|
||||||
|
|
||||||
func handleReq(h http.Handler) http.Handler {
|
func handleReq(h http.Handler) http.Handler {
|
||||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
if *httpsPromote && r.Header.Get("X-Forwarded-Proto") == "http" {
|
||||||
|
http.Redirect(w, r, "https://"+r.Host+r.RequestURI, http.StatusMovedPermanently)
|
||||||
|
if *logRequest {
|
||||||
|
log.Println(301, r.Method, r.URL.Path)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if *logRequest {
|
if *logRequest {
|
||||||
log.Println(r.Method, r.URL.Path)
|
log.Println(r.Method, r.URL.Path)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue