Last active
May 13, 2021 03:08
-
-
Save json-m/a29f0a014fd931363a140ef9aaebfea5 to your computer and use it in GitHub Desktop.
httpserver for quickly sharing a folder on disks contents
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
syntax: | |
httpserver port path cidr | |
arguments are optional but expected in the above order | |
current directory via just . works | |
*/ | |
package main | |
import ( | |
"fmt" | |
"log" | |
"net" | |
"net/http" | |
"os" | |
"strconv" | |
"strings" | |
) | |
var ( | |
Port int | |
Path string | |
Acl *net.IPNet | |
) | |
// log/acl wrapper | |
func httpLogger(h http.Handler) http.Handler { | |
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { | |
remoteIP := net.ParseIP(strings.Split(r.RemoteAddr, ":")[0]) | |
if Acl.Contains(remoteIP) { | |
log.Println(r.RemoteAddr, r.URL) | |
h.ServeHTTP(w, r) | |
return | |
} | |
log.Println("denied:", r.RemoteAddr) | |
http.Error(w, "Permission Denied", http.StatusForbidden) | |
}) | |
} | |
func init() { | |
// configure console logging | |
log.SetOutput(os.Stdout) | |
// assume some defaults | |
Port = 8888 | |
Path = "." | |
_, Acl, _ = net.ParseCIDR("0.0.0.0/0") | |
// read/set args if any | |
if len(os.Args) >= 2 { | |
Port, _ = strconv.Atoi(os.Args[1]) | |
} | |
if len(os.Args) >= 3 { | |
Path = os.Args[2] | |
} | |
if len(os.Args) >= 4 { | |
_, Acl, _ = net.ParseCIDR(os.Args[3]) | |
} | |
} | |
func main() { | |
log.Println("sharing on port", Port) | |
// define server | |
srv := &http.Server{ | |
Addr: fmt.Sprintf(":%d", Port), | |
Handler: httpLogger(http.FileServer(http.Dir(Path))), | |
ErrorLog: log.New(os.Stdout, "httpserver: ", log.LstdFlags), | |
} | |
// start server | |
if err := srv.ListenAndServe(); err != nil { | |
panic(err) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment