@@ -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
1214type options struct {
@@ -16,24 +18,30 @@ type options struct {
1618 Key string
1719 HTTPS bool
1820 Verbose bool
21+ Upload bool
1922}
2023
2124var opts options
2225
2326func main () {
2427 flag .StringVar (& opts .ListenAddress , "listen" , "0.0.0.0:8000" , "Address:Port" )
2528 flag .StringVar (& opts .Folder , "path" , "." , "Folder" )
29+ flag .BoolVar (& opts .Upload , "upload" , false , "Enable upload via PUT" )
2630 flag .BoolVar (& opts .HTTPS , "https" , false , "HTTPS" )
2731 flag .StringVar (& opts .Certificate , "cert" , "" , "Certificate" )
2832 flag .StringVar (& opts .Key , "key" , "" , "Key" )
2933 flag .BoolVar (& opts .Verbose , "v" , false , "Verbose" )
34+
3035 flag .Parse ()
3136
3237 if flag .NArg () > 0 && opts .Folder == "." {
3338 opts .Folder = flag .Args ()[0 ]
3439 }
3540
3641 log .Printf ("Serving %s on http://%s/..." , opts .Folder , opts .ListenAddress )
42+ if opts .Upload {
43+ log .Println ("Upload enabled" )
44+ }
3745 if opts .HTTPS {
3846 if opts .Certificate == "" || opts .Key == "" {
3947 log .Fatal ("Certificate or Key file not specified" )
@@ -50,6 +58,18 @@ func loglayer(handler http.Handler) http.Handler {
5058 lrw := newLoggingResponseWriter (w )
5159 handler .ServeHTTP (lrw , r )
5260
61+ // Handles file write if enabled
62+ if opts .Upload && r .Method == http .MethodPut {
63+ data , err := ioutil .ReadAll (r .Body )
64+ if err != nil {
65+ log .Println (err )
66+ }
67+ err = handleUpload (path .Base (r .URL .Path ), data )
68+ if err != nil {
69+ log .Println (err )
70+ }
71+ }
72+
5373 if opts .Verbose {
5474 headers := new (bytes.Buffer )
5575 lrw .Header ().Write (headers ) //nolint
@@ -83,3 +103,7 @@ func (lrw *loggingResponseWriter) WriteHeader(code int) {
83103 lrw .statusCode = code
84104 lrw .ResponseWriter .WriteHeader (code )
85105}
106+
107+ func handleUpload (file string , data []byte ) error {
108+ return ioutil .WriteFile (file , data , 0655 )
109+ }
0 commit comments