Skip to content
This repository has been archived by the owner on Feb 26, 2023. It is now read-only.

Commit

Permalink
Browse files Browse the repository at this point in the history
feat: Log HTTP GET requests like with TFTP
  • Loading branch information
pojntfx committed Jun 13, 2021
1 parent 374d694 commit bd2c0ab
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 10 deletions.
2 changes: 1 addition & 1 deletion cmd/bofied-backend/main.go
Expand Up @@ -96,7 +96,7 @@ For more information, please visit https://github.com/pojntfx/bofied.`,
eventsHandler,
)
grpcServer, grpcServerHandler := servers.NewGRPCServer(viper.GetString(grpcListenAddressKey), eventsService, metadataService)
extendedHTTPServer := servers.NewExtendedHTTPServer(viper.GetString(workingDirKey), viper.GetString(webDAVAndHTTPListenAddressKey), oidcValidator, grpcServerHandler)
extendedHTTPServer := servers.NewExtendedHTTPServer(viper.GetString(workingDirKey), viper.GetString(webDAVAndHTTPListenAddressKey), oidcValidator, grpcServerHandler, eventsHandler)

// Start servers
log.Printf(
Expand Down
15 changes: 15 additions & 0 deletions pkg/eventing/http_logging.go
@@ -0,0 +1,15 @@
package eventing

import (
"net/http"
)

func LogRequestHandler(h http.Handler, eventHandler *EventHandler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if r.Method == http.MethodGet {
eventHandler.Emit(`sending file "%v" to client "%v" with user agent "%v"`, r.URL.Path, r.RemoteAddr, r.UserAgent())
}

h.ServeHTTP(w, r)
})
}
18 changes: 15 additions & 3 deletions pkg/servers/extended_http.go
Expand Up @@ -5,6 +5,7 @@ import (

"github.com/pojntfx/bofied/pkg/authorization"
"github.com/pojntfx/bofied/pkg/constants"
"github.com/pojntfx/bofied/pkg/eventing"
"github.com/pojntfx/liwasc/pkg/validators"
"github.com/rs/cors"
"golang.org/x/net/webdav"
Expand All @@ -21,18 +22,26 @@ type ExtendedHTTPServer struct {
FileServer

eventsServerHandler http.Handler
eventHandler *eventing.EventHandler

oidcValidator *validators.OIDCValidator
}

func NewExtendedHTTPServer(workingDir string, listenAddress string, oidcValidator *validators.OIDCValidator, eventsServerHandler http.Handler) *ExtendedHTTPServer {
func NewExtendedHTTPServer(
workingDir string,
listenAddress string,
oidcValidator *validators.OIDCValidator,
eventsServerHandler http.Handler,
eventHandler *eventing.EventHandler,
) *ExtendedHTTPServer {
return &ExtendedHTTPServer{
FileServer: FileServer{
workingDir: workingDir,
listenAddress: listenAddress,
},

eventsServerHandler: eventsServerHandler,
eventHandler: eventHandler,

oidcValidator: oidcValidator,
}
Expand All @@ -47,8 +56,11 @@ func (s *ExtendedHTTPServer) GetWebDAVHandler(prefix string) webdav.Handler {
}

func (s *ExtendedHTTPServer) GetHTTPHandler() http.Handler {
return http.FileServer(
http.Dir(s.workingDir),
return eventing.LogRequestHandler(
http.FileServer(
http.Dir(s.workingDir),
),
s.eventHandler,
)
}

Expand Down
12 changes: 6 additions & 6 deletions pkg/servers/tftp.go
Expand Up @@ -14,7 +14,7 @@ import (
type TFTPServer struct {
FileServer

EventHandler *eventing.EventHandler
eventHandler *eventing.EventHandler
}

func NewTFTPServer(workingDir string, listenAddress string, eventHandler *eventing.EventHandler) *TFTPServer {
Expand All @@ -24,7 +24,7 @@ func NewTFTPServer(workingDir string, listenAddress string, eventHandler *eventi
listenAddress: listenAddress,
},

EventHandler: eventHandler,
eventHandler: eventHandler,
}
}

Expand All @@ -37,28 +37,28 @@ func (s *TFTPServer) ListenAndServe() error {
// Prevent accessing any parent directories
fullFilename := filepath.Join(s.workingDir, filename)
if strings.Contains(filename, "..") {
s.EventHandler.Emit(`could not send file: get request to file "%v" by client "%v" blocked because it is located outside the working directory "%v"`, fullFilename, raddr.String(), s.workingDir)
s.eventHandler.Emit(`could not send file: get request to file "%v" by client "%v" blocked because it is located outside the working directory "%v"`, fullFilename, raddr.String(), s.workingDir)

return errors.New("unauthorized: tried to access file outside working directory")
}

// Open file to send
file, err := os.Open(fullFilename)
if err != nil {
s.EventHandler.Emit(`could not open file "%v" for client "%v": %v`, fullFilename, raddr.String(), err)
s.eventHandler.Emit(`could not open file "%v" for client "%v": %v`, fullFilename, raddr.String(), err)

return err
}

// Send the file to the client
n, err := rf.ReadFrom(file)
if err != nil {
s.EventHandler.Emit(`could not sent file "%v" to client "%v": %v`, fullFilename, raddr.String(), err)
s.eventHandler.Emit(`could not sent file "%v" to client "%v": %v`, fullFilename, raddr.String(), err)

return err
}

s.EventHandler.Emit(`sent file "%v" (%v bytes) to client "%v"`, fullFilename, n, raddr.String())
s.eventHandler.Emit(`sent file "%v" (%v bytes) to client "%v"`, fullFilename, n, raddr.String())

return nil
},
Expand Down

0 comments on commit bd2c0ab

Please sign in to comment.