@t2ee/cookieman
Version:
t2ee cookie middleware
50 lines (47 loc) • 1.79 kB
text/typescript
import CookieStore from './CookieStore';
import Cookie from './Cookie';
import * as Redis from 'redis';
export default class MemoryStore implements CookieStore {
private redis: Redis.RedisClient;
constructor(uri: string, private prefix: string) {
this.redis = Redis.createClient(uri);
}
async get(key: string): Promise<Cookie> {
return new Promise<Cookie>((resolve, reject) => {
this.redis.get(this.prefix + key, (err, result) => {
if (err) return reject(err);
const cookie = new Cookie();
const data = JSON.parse(result)
if (!data) return resolve(cookie);
cookie.key = data.key;
cookie.expires = new Date(data.expires);
cookie.data = data.data;
cookie.path = data.path;
cookie.domain = data.domain;
cookie.secure = data.secure ? true : false;
cookie.httpOnly = data.httpOnly ? true : false;
resolve(cookie);
});
});
}
async set(cookie: Cookie): Promise<void> {
return new Promise<void>((resolve, reject) => {
this.redis.setex(
this.prefix + cookie.key,
Math.round((cookie.expires.getTime() - Date.now()) / 1000),
JSON.stringify(cookie),
err => {
if (err) return reject(err);
resolve();
});
});
}
async remove(cookie: Cookie): Promise<void> {
return new Promise<void>((resolve, reject) => {
this.redis.del(this.prefix + cookie.key, err => {
if (err) return reject(err);
resolve();
});
});
}
}