Skip to content

Instantly share code, notes, and snippets.

@viesti
Created May 27, 2021 13:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save viesti/4fbe2e226b923adebadffcf44a3ed8e7 to your computer and use it in GitHub Desktop.
Save viesti/4fbe2e226b923adebadffcf44a3ed8e7 to your computer and use it in GitHub Desktop.
;; 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