StaticMaps.Plug (staticmaps v0.1.0)

Copy Markdown View Source

Serves maps from signed URLs, for browsers and CDNs to cache.

Compiled only when :plug is a dependency. Mount it where no session or CSRF plug touches its responses, since a response that sets a cookie is not cached by a CDN:

forward "/maps", StaticMaps.Plug,
  secret: {MyApp.Config, :map_secret, []},
  source: StaticMaps.Source.OSM,
  icons: %{office: File.read!("priv/office.svg")}

and build URLs with path/3, using the same secret:

StaticMaps.Plug.path("/maps", [center: {14.5547, 121.0244}, zoom: 15], secret: secret)

Options

  • :secret — at least 32 bytes, or {module, function, args} returning them, to read runtime configuration. Required.
  • :cache — :max_age (86 400), :s_maxage (2 592 000), :stale_while_revalidate (86 400) and :immutable (false) for successful responses; false sends no-store instead.
  • :max_size ({1280, 1280}), :max_scale (2), :max_markers (100) — limits on every request, signed or not.
  • :max_concurrency — renders in progress at once; defaults to the number of schedulers.
  • :source, :attribution — passed to StaticMaps.render/1, and never read from a request.
  • :background — the default background; a URL built with :background overrides it.
  • :icons — named marker icons, %{name => svg_or_image_bytes}, for markers given icon: :name. A URL names an icon; it never carries one.

Responses

SituationStatusCache-Control
Rendered200the :cache settings
If-None-Match matches304the :cache settings
Bad or missing signature403no-store
Signed, but over a limit or invalid400no-store
A tile failed503no-store
Not GET or HEAD405no-store

A 304 is answered straight after the signature check, without rendering or fetching a tile. Identical requests that arrive during a render wait for it rather than starting their own.

Summary

Functions

The signed path of a map, under prefix, where the Plug is mounted.

Functions

path(prefix, render_opts, opts)

@spec path(String.t(), keyword(), keyword()) :: String.t()

The signed path of a map, under prefix, where the Plug is mounted.

render_opts are the options StaticMaps.render/1 takes, except :source, :attribution and :on_tile_error, which the Plug decides. A marker's :icon is the name of an icon registered with the Plug. The same options always give the same path.

Options: :secret, as for the Plug, and :format, :png (default) or :jpeg. Raises ArgumentError for render options a URL cannot carry.