mirror of
https://github.com/dutchcoders/transfer.sh.git
synced 2024-11-27 06:30:19 +01:00
Add: Support for Authenticated Uploads
This commit is contained in:
parent
d0c7241b31
commit
5f114dcac8
4 changed files with 44 additions and 12 deletions
|
@ -51,6 +51,7 @@ aws-access-key | aws access key | | AWS_ACCESS_KEY
|
||||||
aws-secret-key | aws access key | | AWS_SECRET_KEY
|
aws-secret-key | aws access key | | AWS_SECRET_KEY
|
||||||
bucket | aws bucket | | BUCKET
|
bucket | aws bucket | | BUCKET
|
||||||
basedir | path storage for local provider| |
|
basedir | path storage for local provider| |
|
||||||
|
auth-key | key to use for authentication (must be supplied in 'Authorization' header with each request)| |
|
||||||
lets-encrypt-hosts | hosts to use for lets encrypt certificates (comma seperated) | |
|
lets-encrypt-hosts | hosts to use for lets encrypt certificates (comma seperated) | |
|
||||||
log | path to log file| |
|
log | path to log file| |
|
||||||
|
|
||||||
|
|
10
cmd/cmd.go
10
cmd/cmd.go
|
@ -139,6 +139,12 @@ var globalFlags = []cli.Flag{
|
||||||
Name: "profiler",
|
Name: "profiler",
|
||||||
Usage: "enable profiling",
|
Usage: "enable profiling",
|
||||||
},
|
},
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "auth-key",
|
||||||
|
Usage: "auth-key",
|
||||||
|
Value: "",
|
||||||
|
EnvVar: "AUTH_KEY",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
type Cmd struct {
|
type Cmd struct {
|
||||||
|
@ -198,6 +204,10 @@ func New() *Cmd {
|
||||||
options = append(options, server.VirustotalKey(v))
|
options = append(options, server.VirustotalKey(v))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if v := c.String("auth-key"); v != "" {
|
||||||
|
options = append(options, server.AuthenticateUploads(v))
|
||||||
|
}
|
||||||
|
|
||||||
if v := c.String("clamav-host"); v != "" {
|
if v := c.String("clamav-host"); v != "" {
|
||||||
options = append(options, server.ClamavHost(v))
|
options = append(options, server.ClamavHost(v))
|
||||||
}
|
}
|
||||||
|
|
|
@ -760,3 +760,17 @@ func LoveHandler(h http.Handler) http.HandlerFunc {
|
||||||
h.ServeHTTP(w, r)
|
h.ServeHTTP(w, r)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *Server) AuthenticatedHandler (h http.Handler) http.HandlerFunc {
|
||||||
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
authKey := r.Header.Get ("Authorization")
|
||||||
|
|
||||||
|
if s.AuthKey != "" && authKey != s.AuthKey {
|
||||||
|
log.Printf("Recieved: Bad Auth Token: %s", authKey)
|
||||||
|
http.Error(w, errors.New("Bad Auth Token").Error(), 403)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
h.ServeHTTP(w, r)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -75,6 +75,12 @@ func VirustotalKey(s string) OptionFn {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func AuthenticateUploads(key string) OptionFn {
|
||||||
|
return func(srvr *Server) {
|
||||||
|
srvr.AuthKey = key
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func Listener(s string) OptionFn {
|
func Listener(s string) OptionFn {
|
||||||
return func(srvr *Server) {
|
return func(srvr *Server) {
|
||||||
srvr.ListenerString = s
|
srvr.ListenerString = s
|
||||||
|
@ -189,6 +195,7 @@ type Server struct {
|
||||||
locks map[string]*sync.Mutex
|
locks map[string]*sync.Mutex
|
||||||
|
|
||||||
rateLimitRequests int
|
rateLimitRequests int
|
||||||
|
AuthKey string
|
||||||
|
|
||||||
storage Storage
|
storage Storage
|
||||||
|
|
||||||
|
@ -317,10 +324,10 @@ func (s *Server) Run() {
|
||||||
|
|
||||||
r.HandleFunc("/{filename}/virustotal", s.virusTotalHandler).Methods("PUT")
|
r.HandleFunc("/{filename}/virustotal", s.virusTotalHandler).Methods("PUT")
|
||||||
r.HandleFunc("/{filename}/scan", s.scanHandler).Methods("PUT")
|
r.HandleFunc("/{filename}/scan", s.scanHandler).Methods("PUT")
|
||||||
r.HandleFunc("/put/{filename}", s.putHandler).Methods("PUT")
|
r.HandleFunc("/put/{filename}", s.AuthenticatedHandler (http.HandlerFunc (s.putHandler))).Methods("PUT")
|
||||||
r.HandleFunc("/upload/{filename}", s.putHandler).Methods("PUT")
|
r.HandleFunc("/upload/{filename}", s.AuthenticatedHandler (http.HandlerFunc (s.putHandler))).Methods("PUT")
|
||||||
r.HandleFunc("/{filename}", s.putHandler).Methods("PUT")
|
r.HandleFunc("/{filename}", s.AuthenticatedHandler (http.HandlerFunc (s.putHandler))).Methods("PUT")
|
||||||
r.HandleFunc("/", s.postHandler).Methods("POST")
|
r.HandleFunc("/", s.AuthenticatedHandler (http.HandlerFunc (s.postHandler))).Methods("POST")
|
||||||
// r.HandleFunc("/{page}", viewHandler).Methods("GET")
|
// r.HandleFunc("/{page}", viewHandler).Methods("GET")
|
||||||
|
|
||||||
r.NotFoundHandler = http.HandlerFunc(s.notFoundHandler)
|
r.NotFoundHandler = http.HandlerFunc(s.notFoundHandler)
|
||||||
|
|
Loading…
Reference in a new issue