add audit/admin trace support for browser requests (#10947)

To support this functionality we had to fork
the gorilla/rpc package with relevant changes
This commit is contained in:
Harshavardhana
2020-11-20 22:52:17 -08:00
committed by GitHub
parent 7bc47a14cc
commit 86409fa93d
21 changed files with 2033 additions and 64 deletions
+18 -3
View File
@@ -23,9 +23,10 @@ import (
assetfs "github.com/elazarl/go-bindata-assetfs"
"github.com/gorilla/handlers"
"github.com/gorilla/mux"
jsonrpc "github.com/gorilla/rpc/v2"
"github.com/gorilla/rpc/v2/json2"
"github.com/minio/minio/browser"
"github.com/minio/minio/cmd/logger"
jsonrpc "github.com/minio/minio/pkg/rpc"
"github.com/minio/minio/pkg/rpc/json2"
)
// webAPI container for Web API.
@@ -76,9 +77,23 @@ func registerWebRouter(router *mux.Router) error {
webRPC := jsonrpc.NewServer()
webRPC.RegisterCodec(codec, "application/json")
webRPC.RegisterCodec(codec, "application/json; charset=UTF-8")
webRPC.RegisterAfterFunc(func(ri *jsonrpc.RequestInfo) {
if ri != nil {
claims, _, _ := webRequestAuthenticate(ri.Request)
bucketName, objectName := extractBucketObject(ri.Args)
ri.Request = mux.SetURLVars(ri.Request, map[string]string{
"bucket": bucketName,
"object": objectName,
})
if globalHTTPTrace.HasSubscribers() {
globalHTTPTrace.Publish(WebTrace(ri))
}
logger.AuditLog(ri.ResponseWriter, ri.Request, ri.Method, claims.Map())
}
})
// Register RPC handlers with server
if err := webRPC.RegisterService(web, "Web"); err != nil {
if err := webRPC.RegisterService(web, "web"); err != nil {
return err
}