github.com/smancke/gogallery

A web gallery written in golang and some JavaScript


Keywords
gallery, golang, image, image-gallery, web-gallery
License
MIT
Install
go get github.com/smancke/gogallery

Documentation

Golang based web image gallery

Gogallery is an image gallery written in golang and jquery. It can be seen here in action

The images are stored in the filesystem and indexed within a sqlite database file.

Functionality

  • Image upload of logged in users
  • Gallery view of the images
  • The user can change it's data
  • A user can see and delete it's own images
  • Image scaling, and auto rotation
  • Facebook integration for the images (like and share)
  • Chunk-Uploading

Building the application

To download and build the gogallery using golang, simply execute

go get github.com/smancke/gogallery

The application used the libvips tools for scaling of the images. To install them on e.g. on ubuntu:

sudo apt-get install libvips-tools --no-install-recommends

Running with docker

We provide a docker container based on the master of this repository

docker run -e testOverwriteUsername=demo \
      -v /opt/gallery/data:/var/lib/gallery \
      -v /tmp:/tmp \
      -p 5005:5005 \
      smancke/gogallery

Tip: You can start the container with --restart=always on your server, to have it running after restarts of the machine.

Configuration

The gogallery can be configured by environment variables with the following defaults:

# The address to listen (host:port)
address=:5005

# The directory for storing data
galleryDir=/tmp/gallery

# The directory for the static html templates
htmlDir=./html

# The name of the cookie to verify logins
cookieName=okmsdc

# The session secret to decrypt cookies with
session_secret=XYcretsecretsecretsecretsecretse

# The maximum lifetime for sessions
sessionLifetimeMinutes=180

# Disable the authentication and
# set the username of the logged in user for testing
testOverwriteUsername=

Authentication

For access control, the gogallery looks for a cookie with the name configured by cookieName. This cookie is interpreted as a base64encoded, pkcs5Padded and AES encrypted by the key configured in session_secret. The payload of the cookie is a json object with the following structure:

{
   "groups" : [
      "admin"
   ],
   "lastSeen" : 1463818233690,
   "userId" : "07323464-76da-44f9-8eec-123451fb72e4",
   "displayName" : "Sebastian Mancke",
   "userName" : "s.mancke@example.com"
}

If someone is interested in that, it would be easy to integrate further access controll methods for simple integration. E.g. forwarding a cookie from the user to an endpoint configured REST endpoint, which returns the above json. Please file a github issue, if you are interested in something like that.