Skip to content

robbymilo/go-meta-image-generator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Build Status

Meta Image Generator

An open graph meta image generator for social previews.

  • Pass the title of your page via URL and get an optimized .jpg returned.
  • Customize templates via Golang templates.
  • Images are cached and only generated once.
  • URLs can be signed via a query param to prevent image bombs.

To run locally:

  • Confirm Go is installed: go version
  • Clone this repo: git clone git@github.com:robbymilo/go-meta-image-generator.git && cd go-meta-image-generator
  • Run locally: make start
  • Visit localhost:3000/Hello world.jpg in your browser.

Then, in your website template you can use:

<head>
  <meta property="og:image" content="http://localhost:3000/Title of my Page.jpg" />
</head>

Run locally with docker:

docker run -p 3000:3000 --name=meta --rm robbymilo/go-meta-image-generator:latest

Updating the template

Follow the instructions above to run locally, then navigate to localhost:3000/render/Hello world.jpg. Here you can inspect the template in your browser with dev tools.

Signed URLs

When running in production, you can sign the URLs to prevent a scripter from crashing your server by generating countless images.

Set the environmental variable SIGNATURE to a secret key, ex:

docker run -p 3000:3000 -e SIGNATURE=milo --name=meta --rm robbymilo/go-meta-image-generator

then visit http://localhost:3000/Hello%20world.jpg?signature=Yjg3Nzc1N2FmZjIxNGU2M2MxMjJkNGM0YmU4ZGM5NTE0NDFjZmJhNmExNzgwOTBjOWZlOTcxOGU5ZTEyYmNhZA==

In your HTML template, you can generate the hash of the URL with your secret key, base64 encode it, then pass it to the signature query param.

With Hugo:

{{ $title := "Hello world" }}
{{ $hashed := base64Encode (sha256 (print $title "milo")) }}
{{ return (print "http://localhost:3000/" $title ".jpg?signature=" $hashed) }}

Images will not be returned without the correct signature passed to the query param when the SIGNATURE env var is set.

Why not:

Todo:

  • Add tests

About

An open graph meta image generator for social previews.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published