Skip to content

Commit 5fee727

Browse files
authored
Merge branch 'dev' into feature-basic-auth
2 parents ed7e2ee + 04ff1b9 commit 5fee727

File tree

2 files changed

+43
-1
lines changed

2 files changed

+43
-1
lines changed

gen_cert.sh

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#!/usr/bin/env bash
2+
3+
openssl genrsa -out server.key 2048
4+
openssl ecparam -genkey -name secp384r1 -out server.key
5+
openssl req -new -x509 -sha256 -key server.key -out server.crt -days 3650

simplehttpserver.go

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,11 @@ import (
44
"bytes"
55
"flag"
66
"fmt"
7+
"io/ioutil"
78
"log"
89
"net/http"
910
"net/http/httputil"
11+
"path"
1012
)
1113

1214
type options struct {
@@ -15,18 +17,27 @@ type options struct {
1517
Username string
1618
Password string
1719
Realm string
20+
Certificate string
21+
Key string
22+
HTTPS bool
1823
Verbose bool
24+
Upload bool
1925
}
2026

2127
var opts options
2228

2329
func main() {
2430
flag.StringVar(&opts.ListenAddress, "listen", "0.0.0.0:8000", "Address:Port")
2531
flag.StringVar(&opts.Folder, "path", ".", "Folder")
32+
flag.BoolVar(&opts.Upload, "upload", false, "Enable upload via PUT")
33+
flag.BoolVar(&opts.HTTPS, "https", false, "HTTPS")
34+
flag.StringVar(&opts.Certificate, "cert", "", "Certificate")
35+
flag.StringVar(&opts.Key, "key", "", "Key")
2636
flag.BoolVar(&opts.Verbose, "v", false, "Verbose")
2737
flag.StringVar(&opts.Username, "username", "", "Basic auth username")
2838
flag.StringVar(&opts.Password, "password", "", "Basic auth password")
2939
flag.StringVar(&opts.Realm, "realm", "Please enter username and password", "Realm")
40+
3041
flag.Parse()
3142

3243
if flag.NArg() > 0 && opts.Folder == "." {
@@ -39,7 +50,17 @@ func main() {
3950
layers = loglayer(basicauthlayer(http.FileServer(http.Dir(opts.Folder))))
4051
}
4152

42-
fmt.Println(http.ListenAndServe(opts.ListenAddress, layers))
53+
if opts.Upload {
54+
log.Println("Upload enabled")
55+
}
56+
if opts.HTTPS {
57+
if opts.Certificate == "" || opts.Key == "" {
58+
log.Fatal("Certificate or Key file not specified")
59+
}
60+
fmt.Println(http.ListenAndServeTLS(opts.ListenAddress, opts.Certificate, opts.Key, layers))
61+
} else {
62+
fmt.Println(http.ListenAndServe(opts.ListenAddress, layers))
63+
}
4364
}
4465

4566
func loglayer(handler http.Handler) http.Handler {
@@ -48,6 +69,18 @@ func loglayer(handler http.Handler) http.Handler {
4869
lrw := newLoggingResponseWriter(w)
4970
handler.ServeHTTP(lrw, r)
5071

72+
// Handles file write if enabled
73+
if opts.Upload && r.Method == http.MethodPut {
74+
data, err := ioutil.ReadAll(r.Body)
75+
if err != nil {
76+
log.Println(err)
77+
}
78+
err = handleUpload(path.Base(r.URL.Path), data)
79+
if err != nil {
80+
log.Println(err)
81+
}
82+
}
83+
5184
if opts.Verbose {
5285
headers := new(bytes.Buffer)
5386
lrw.Header().Write(headers) //nolint
@@ -94,3 +127,7 @@ func (lrw *loggingResponseWriter) WriteHeader(code int) {
94127
lrw.statusCode = code
95128
lrw.ResponseWriter.WriteHeader(code)
96129
}
130+
131+
func handleUpload(file string, data []byte) error {
132+
return ioutil.WriteFile(file, data, 0655)
133+
}

0 commit comments

Comments
 (0)