From c3408f4f041a8da715071cff06b9b0f703b3dbed Mon Sep 17 00:00:00 2001 From: Harshavardhana Date: Fri, 5 Oct 2018 11:20:00 -0700 Subject: [PATCH] Send correct bucket notifications from web handlers (#6572) Upload, Download, DownloadZip were incomplete --- cmd/web-handlers.go | 48 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/cmd/web-handlers.go b/cmd/web-handlers.go index a4b693798..00e998c17 100644 --- a/cmd/web-handlers.go +++ b/cmd/web-handlers.go @@ -22,6 +22,7 @@ import ( "encoding/json" "fmt" "io" + "net" "net/http" "net/url" "os" @@ -44,6 +45,7 @@ import ( "github.com/minio/minio/pkg/auth" "github.com/minio/minio/pkg/dns" "github.com/minio/minio/pkg/event" + "github.com/minio/minio/pkg/handlers" "github.com/minio/minio/pkg/hash" "github.com/minio/minio/pkg/ioutil" "github.com/minio/minio/pkg/policy" @@ -700,12 +702,21 @@ func (web *webAPIHandlers) Upload(w http.ResponseWriter, r *http.Request) { return } + // Get host and port from Request.RemoteAddr. + host, port, err := net.SplitHostPort(handlers.GetSourceIP(r)) + if err != nil { + host, port = "", "" + } + // Notify object created event. sendEvent(eventArgs{ EventName: event.ObjectCreatedPut, BucketName: bucket, Object: objInfo, ReqParams: extractReqParams(r), + UserAgent: r.UserAgent(), + Host: host, + Port: port, }) } @@ -832,6 +843,24 @@ func (web *webAPIHandlers) Download(w http.ResponseWriter, r *http.Request) { // Wait for decompression go-routine to retire. wg.Wait() } + + // Get host and port from Request.RemoteAddr. + host, port, err := net.SplitHostPort(handlers.GetSourceIP(r)) + if err != nil { + host, port = "", "" + } + + // Notify object accessed via a GET request. + sendEvent(eventArgs{ + EventName: event.ObjectAccessedGet, + BucketName: bucket, + Object: objInfo, + ReqParams: extractReqParams(r), + RespElements: extractRespElements(w), + UserAgent: r.UserAgent(), + Host: host, + Port: port, + }) } // DownloadZipArgs - Argument for downloading a bunch of files as a zip file. @@ -845,6 +874,12 @@ type DownloadZipArgs struct { // Takes a list of objects and creates a zip file that sent as the response body. func (web *webAPIHandlers) DownloadZip(w http.ResponseWriter, r *http.Request) { + // Get host and port from Request.RemoteAddr. + host, port, err := net.SplitHostPort(handlers.GetSourceIP(r)) + if err != nil { + host, port = "", "" + } + var wg sync.WaitGroup objectAPI := web.ObjectAPI() if objectAPI == nil { @@ -988,6 +1023,19 @@ func (web *webAPIHandlers) DownloadZip(w http.ResponseWriter, r *http.Request) { // Wait for decompression go-routine to retire. wg.Wait() } + + // Notify object accessed via a GET request. + sendEvent(eventArgs{ + EventName: event.ObjectAccessedGet, + BucketName: args.BucketName, + Object: info, + ReqParams: extractReqParams(r), + RespElements: extractRespElements(w), + UserAgent: r.UserAgent(), + Host: host, + Port: port, + }) + return nil }