Created
May 27, 2021 13:42
-
-
Save viesti/4fbe2e226b923adebadffcf44a3ed8e7 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;; dependency: [software.amazon.awssdk/s3 "2.16.7"] | |
(ns some-ns | |
(:import (software.amazon.awssdk.services.s3.presigner S3Presigner) | |
(software.amazon.awssdk.services.s3.model GetObjectRequest) | |
(software.amazon.awssdk.services.s3.presigner.model GetObjectPresignRequest) | |
(software.amazon.awssdk.auth.credentials AwsCredentialsProvider) | |
(software.amazon.awssdk.auth.credentials AwsBasicCredentials) | |
(software.amazon.awssdk.regions Region) | |
(java.net URI) | |
(java.time Duration))) | |
(def create-presigner | |
(memoize #(S3Presigner/create))) | |
(def create-dev-presigner | |
(memoize | |
(fn [endpoint-override access-key secret-access-key] | |
(-> (S3Presigner/builder) | |
(.region Region/EU_WEST_1) | |
(.endpointOverride (URI. endpoint-override)) | |
(.credentialsProvider (reify AwsCredentialsProvider | |
(resolveCredentials [this] | |
(AwsBasicCredentials/create access-key secret-access-key)))) | |
(.build))))) | |
(defn presign-get-request | |
([bucket object-key ^Duration duration] | |
(presign-get-request (create-presigner) bucket object-key duration)) | |
([presigner bucket object-key ^Duration duration] | |
(-> presigner | |
(.presignGetObject (-> (GetObjectPresignRequest/builder) | |
(.signatureDuration duration) | |
(.getObjectRequest (-> (GetObjectRequest/builder) | |
(.bucket bucket) | |
(.key object-key) | |
(.build))) | |
(.build))) | |
(.url)))) | |
(comment | |
(presign-get-request (S3Presigner/create) "some-bucket-name" "file.txt" (Duration/ofMinutes 2)) | |
;; Minio example, with dev time credentials: https://docs.min.io/docs/minio-docker-quickstart-guide.html | |
(presign-get-request (-> (S3Presigner/builder) | |
(.endpointOverride (java.net.URI. "http://localhost:9000")) | |
(.credentialsProvider (reify software.amazon.awssdk.auth.credentials.AwsCredentialsProvider | |
(resolveCredentials [this] | |
(software.amazon.awssdk.auth.credentials.AwsBasicCredentials/create | |
"AKIAIOSFODNN7EXAMPLE" | |
"wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY")))) | |
(.build)) | |
"some-bucket" | |
"some-key.txt" | |
(java.time.Duration/ofMinutes 2))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment