Skip to content

Frameio/cloudfront-signer

Repository files navigation

CloudfrontSigner

Elixir implementation of Cloudfront's url signature algorithm. Supports expiration policies and runtime configurable distributions.

Installation

If available in Hex, the package can be installed by adding cloudfront_signer to your list of dependencies in mix.exs:

def deps do
  [
    {:cloudfront_signer, "~> 0.1.0"}
  ]
end

Configure a distribution with:

config :my_app, :my_distribution,
  domain: "https://some.cloudfront.domain",
  private_key: {:system, "ENV_VAR"}, # or {:file, "/path/to/key"}
  key_pair_id: {:system, "OTHER_ENV_VAR"}

Then simply do:

CloudfrontSigner.Distribution.from_config(:my_app, :my_distribution)
|> CloudfrontSigner.sign(path, [arg: "value"], expiry_in_seconds)

If you want to cache pem decodes (which is a wise choice), a registry of decoded distributions is available. Simply do:

CloudfrontSigner.DistributionRegistry.get_distribution(:my_app, :my_distribution)
|> CloudfrontSigner.sign(path, [arg: "value], expiry)