From e23b7070b14ed9e490dff0f77002ed27f045b956 Mon Sep 17 00:00:00 2001 From: Ambrose Chua Date: Tue, 26 May 2020 15:12:22 +0800 Subject: [PATCH] Add sample request signer --- .gitignore | 5 ++++ README.md | 2 +- cmd/control/control.go | 66 ++++++++++++++++++++++++++++++++++++++++++ go.mod | 2 ++ go.sum | 35 ++++++++++++++++++++++ 5 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 .gitignore create mode 100644 cmd/control/control.go create mode 100644 go.sum diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c322087 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +cmd/admin/admin +cmd/control/control +cmd/web/web +cmd/indexer/indexer +cmd/thumbnail/thumbnail diff --git a/README.md b/README.md index bceaf2f..fbf87b4 100644 --- a/README.md +++ b/README.md @@ -75,7 +75,7 @@ Pointed to by a reverse proxy to handle the following paths on all buckets: A proxy for all buckets, treats the URL as a directory and serves up directory + `index.html`. -## `thumbnails` +## `thumbnail` Generate thumbnails from photo buckets. Registers webhooks. diff --git a/cmd/control/control.go b/cmd/control/control.go new file mode 100644 index 0000000..194409e --- /dev/null +++ b/cmd/control/control.go @@ -0,0 +1,66 @@ +package main + +import ( + "fmt" + "net/http" + "net/url" + "os" + "time" + + "github.com/minio/minio-go/v6/pkg/s3utils" + "github.com/minio/minio-go/v6/pkg/signer" +) + +var accessKey string +var secretKey string + +func main() { + // Read configuration + accessKey = os.Getenv("MINIO_ACCESS_KEY") + secretKey = os.Getenv("MINIO_SECRET_KEY") + + http.HandleFunc("/list", hello) + http.HandleFunc("/write", hello2) + http.ListenAndServe(":8090", nil) +} + +func hello(w http.ResponseWriter, req *http.Request) { + // Based upon https://github.com/minio/minio-go/blob/337bb00bc3c832292b36681c7bde1b56a185c310/api.go#L873 + expires := 60 * time.Second + reqValues := make(url.Values) + reqValues.Set("list-type", "2") + reqValues.Set("metadata", "true") + reqValues.Set("encoding-type", "url") + reqValues.Set("prefix", "") + reqValues.Set("delimiter", "") + reqValues.Set("max-keys", fmt.Sprintf("%d", 500)) + reqValues.Set("start-after", "") + // Change path accordingly https://github.com/minio/minio-go/blob/337bb00bc3c832292b36681c7bde1b56a185c310/api.go#L911 + // Request URL MUST not have a port + reqString := "https://rock.six.six.six.six.six.eurica.eu.org/?" + s3utils.QueryEncode(reqValues) + req, err := http.NewRequest("GET", reqString, nil) + if err != nil { + panic(err) + } + signedReq := signer.PreSignV4(*req, accessKey, secretKey, "", "sgp1", int64(expires/time.Second)) + + w.Header().Add("Location", signedReq.URL.String()) + w.WriteHeader(http.StatusTemporaryRedirect) +} + +func hello2(w http.ResponseWriter, req *http.Request) { + // Based upon https://github.com/minio/minio-go/blob/337bb00bc3c832292b36681c7bde1b56a185c310/api.go#L873 + expires := 60 * time.Second + reqValues := make(url.Values) + // Change path accordingly https://github.com/minio/minio-go/blob/337bb00bc3c832292b36681c7bde1b56a185c310/api.go#L911 + // Request URL MUST not have a port + reqString := "https://rock.six.six.six.six.six.eurica.eu.org/rock.txt?" + s3utils.QueryEncode(reqValues) + req, err := http.NewRequest("PUT", reqString, nil) + if err != nil { + panic(err) + } + signedReq := signer.PreSignV4(*req, accessKey, secretKey, "", "sgp1", int64(expires/time.Second)) + + w.Header().Add("Location", signedReq.URL.String()) + w.WriteHeader(http.StatusTemporaryRedirect) +} diff --git a/go.mod b/go.mod index 0c8b781..91105f7 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,5 @@ module git.makerforce.io/photos/photos go 1.14 + +require github.com/minio/minio-go/v6 v6.0.55 diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..83a7e18 --- /dev/null +++ b/go.sum @@ -0,0 +1,35 @@ +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/minio/minio-go v1.0.0 h1:ooSujki+Z1PRGZsYffJw5jnF5eMBvzMVV86TLAlM0UM= +github.com/minio/minio-go v3.0.2+incompatible h1:TgjYEriSwSpcawLVPw4LpkENIJdqqtVwkyMEnNapZ8w= +github.com/minio/minio-go/v6 v6.0.55 h1:Hqm41952DdRNKXM+6hCnPXCsHCYSgLf03iuYoxJG2Wk= +github.com/minio/minio-go/v6 v6.0.55/go.mod h1:KQMM+/44DSlSGSQWSfRrAZ12FVMmpWNuX37i2AX0jfI= +github.com/minio/sha256-simd v0.1.1 h1:5QHSlgo3nt5yKOJrC7W8w7X+NFl8cMPZm96iu8kKUJU= +github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/sirupsen/logrus v1.5.0/go.mod h1:+F7Ogzej0PZc/94MaYx/nvG9jOFMD2osvC3s+Squfpo= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190513172903-22d7a77e9e5f/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +gopkg.in/ini.v1 v1.42.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=