Mnemosyne
Introduction
Mnemosyne is an open-source self-hosted session management service.
It's written in Go, making it easy to build and deploy as a static binary.
It provides two ways for communication:
Quick Start
To install and run service:
$ go get -d github.com/piotrkowalczuk/mnemosyne/...
$ cd $GOPATH/src/github.com/piotrkowalczuk/mnemosyne
$ glide install
$ go install ./cmd/mnemosyned
$ mnemosyned -log.format=humane -postgres.address='postgres://localhost/example?sslmode=disable'
Simpliest implementation could looks like that:
package main
import (
"fmt"
"golang.org/x/net/context"
"github.com/piotrkowalczuk/mnemosyne"
)
func main() {
mnemo, err := mnemosyne.New(mnemosyne.MnemosyneOpts{
Addresses: []string{"127.0.0.1:8080"},
Block: true,
})
if err != nil {
// ...
}
defer mnemo.Close()
ses, err := mnemo.Start(context.Background(), "subject-id", "subject-client", map[string]string{
"username": "johnsnow@gmail.com",
"first_name": "John",
"last_name": "Snow",
})
if err != nil {
// ...
}
fmt.Println(ses.AccessToken)
}
Storage Engine
Goal is to support multiple storage's, like PostgreSQL, Redis or MongoDB. Nevertheless currently supported is only PostgreSQL.
Remote Procedure Call API
For communication, Mnemosyne is exposing RPC API that uses protocol buffers, Google’s mature open source mechanism for serializing structured data.
- Create
- Get
- List
- Exists
- Abandon
- SetData
- Delete
Installation
Mnemosyne can be installed in one way, from source.
Or can be used as a container using docker image.
From source
To install from source both go tools and glide is required.
$ go get -d github.com/piotrkowalczuk/mnemosyne/...
$ cd $GOPATH/src/github.com/piotrkowalczuk/mnemosyne
$ make
Configuration
mnemosyned accepts command line arguments to control its behavior. Possible options are is listed below.
Name |
Flag |
Default |
Type |
host |
-host |
127.0.0.1 |
string |
port |
-port |
8080 |
int |
time to live |
-ttl |
24m |
duration |
time to clear |
-ttc |
1m |
duration |
logger format |
-log.format |
json |
enum(json, humane, logfmt) |
logger adapter |
-log.adapter |
stdout |
enum(stdout) |
monitoring |
-monitoring |
false |
boolean |
storage |
-storage |
postgres |
enum(postgres) |
postgres address |
-postgres.address |
postgres://postgres:postgres@postgres/postgres?sslmode=disable |
string |
tls |
-tls |
false |
boolean |
tls certificate file |
-tls.cert |
|
string |
tls key file |
-tls.key |
|
string |
Running
As we know, mnemosyne can be configured in many ways. For the beginning we can start simple:
$ mnemosyned postgres.address="postgres://localhost/test?sslmode=disable"
Mnemosyne will automatically create all required tables/indexes for specified database.
Contribution
TODO
- Client library
- Engines
- PostgreSQL
- Get
- List
- Exists
- Create
- Abandon
- SetData
- Delete
- Setup
- TearDown
- RAM
- Redis