This is a fairly simple addition of a Redis-backed TokenPersistence. When GithubConstellation is initialized, it will create a FsTokenPersistence or a RedisTokenPersistence based on configuration. Have added tests of the Redis backend as an integration test, and ensured the server starts up correctly when a `REDIS_URL` is configured. Ref: #1848
46 lines
884 B
JavaScript
46 lines
884 B
JavaScript
'use strict'
|
|
|
|
const fsos = require('fsos')
|
|
const githubAuth = require('./github-auth')
|
|
const TokenPersistence = require('./token-persistence')
|
|
|
|
class FsTokenPersistence extends TokenPersistence {
|
|
constructor({ path }) {
|
|
super()
|
|
this.path = path
|
|
}
|
|
|
|
async initialize() {
|
|
let contents
|
|
try {
|
|
contents = await fsos.get(this.path)
|
|
} catch (e) {
|
|
if (e.code === 'ENOENT') {
|
|
contents = '[]'
|
|
} else {
|
|
throw e
|
|
}
|
|
}
|
|
|
|
const tokens = JSON.parse(contents)
|
|
tokens.forEach(tokenString => {
|
|
githubAuth.addGithubToken(tokenString)
|
|
})
|
|
}
|
|
|
|
async save() {
|
|
const tokens = githubAuth.getAllTokenIds()
|
|
await fsos.set(this.path, JSON.stringify(tokens))
|
|
}
|
|
|
|
async onTokenAdded(token) {
|
|
await this.save()
|
|
}
|
|
|
|
async onTokenRemoved(token) {
|
|
await this.save()
|
|
}
|
|
}
|
|
|
|
module.exports = FsTokenPersistence
|