diff --git a/bin/start-server.js b/bin/start-server.js index 61eb47e..eb040d1 100755 --- a/bin/start-server.js +++ b/bin/start-server.js @@ -10,6 +10,8 @@ var parseArgs = require('minimist'), defaultRootDirectory = process.cwd(), isMain = !module.parent, baseURL = "file://" + path.resolve(path.join(__dirname, "..")); +const util = require('util'); +const winston = require('winston'); if (isMain) { var args = parseArgs(process.argv.slice(2)); @@ -29,6 +31,8 @@ if (isMain) { function setupSystem() { + setupLogger(); + var livelySystem = lively.modules.getSystem("lively-for-auth-server", {baseURL}); lively.modules.changeSystem(livelySystem, true); var registry = livelySystem["__lively.modules__packageRegistry"] = new lvm.PackageRegistry(livelySystem); @@ -40,3 +44,19 @@ function setupSystem() { registry.devPackageDirs = process.env.FLATN_DEV_PACKAGE_DIRS.split(":").map(ea => lively.resources.resource(`file://${ea}`)); return registry.update(); } + +function formatArgs(args){ + return [util.format.apply(util.format, Array.prototype.slice.call(args))]; +} + +function setupLogger() { + let logger = new winston.Logger(); + logger.add(winston.transports.Console, {colorize: true, timestamp: true}); + console.livelyLogger = logger; + console.log = function() { logger.info.apply(logger, formatArgs(arguments)); }; + console.info = function() { logger.info.apply(logger, formatArgs(arguments)); }; + console.warn = function() { logger.warn.apply(logger, formatArgs(arguments)); }; + console.error = function() { logger.error.apply(logger, formatArgs(arguments)); }; + console.debug = function() { logger.debug.apply(logger, formatArgs(arguments)); }; + return logger; +} diff --git a/package.json b/package.json index f6ad43b..68d3460 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,8 @@ "minimist": "^0.0.8", "lively.modules": "^0.8.18", "lively.storage": "*", - "systemjs": "^0.19" + "systemjs": "^0.19", + "winston": "^2.3.1" }, "devDependencies": { "babel-core": "^6.16.0", diff --git a/server/http-handler.js b/server/http-handler.js index b94a17e..fa37502 100644 --- a/server/http-handler.js +++ b/server/http-handler.js @@ -121,10 +121,25 @@ let routes = [ user = await userDB.getUserNamed(decoded.name); if (!user) return fail(`no user ${data.name}`); - try { user.modify(data.changes); } - catch (err) { return fail(`User change failure: `, err.message, true); } + try { + user.modify(data.changes); + } catch (err) { + return fail(`User change failure: `, err.message, true); + } + user.storeIntoDB(userDB); + + success({status: 'modification successful', token: user.token}); + } + }, + + { + path: "/clear-cache", + methods: ["POST"], + handle: async (server, req, res, next, success, fail) => { + let userDB = UserDB.ensureDB(server.options.userdb, {}); + userDB.clearCache(); - success({status: "modification successful", token: user.token}); + success({status: 'cache cleared'}); } } diff --git a/server/user-db.js b/server/user-db.js index 8564f71..bfaacf6 100644 --- a/server/user-db.js +++ b/server/user-db.js @@ -49,7 +49,11 @@ export default class UserDB { this.userCache.set(user.name, user); return user; } - + + clearCache() { + this.userCache = new Map(); + } + destroy() { this.constructor.cached.delete(this.path); return this.db.destroy();