mirror of https://gitee.com/bigwinds/arangodb
Foxx: Pulling some stuff out of the Foxx Controller
This commit is contained in:
parent
d1f7d25aa8
commit
34cade4344
|
@ -38,7 +38,82 @@ var Controller,
|
||||||
internal = require("org/arangodb/foxx/internals"),
|
internal = require("org/arangodb/foxx/internals"),
|
||||||
defaultsFor = {},
|
defaultsFor = {},
|
||||||
createStandardLoginHandler,
|
createStandardLoginHandler,
|
||||||
createStandardLogoutHandler;
|
createStandardLogoutHandler,
|
||||||
|
createAuthenticationMiddleware,
|
||||||
|
createSessionUpdateMiddleware,
|
||||||
|
checkAuthenticationOptions,
|
||||||
|
createAuthObject;
|
||||||
|
|
||||||
|
createAuthenticationMiddleware = function (auth, applicationContext) {
|
||||||
|
'use strict';
|
||||||
|
var foxxAuthentication = require("org/arangodb/foxx/authentication");
|
||||||
|
|
||||||
|
return function (req, res) {
|
||||||
|
var users = new foxxAuthentication.Users(applicationContext),
|
||||||
|
authResult = auth.authenticate(req);
|
||||||
|
|
||||||
|
if (authResult.errorNum === require("internal").errors.ERROR_NO_ERROR) {
|
||||||
|
req.currentSession = authResult.session;
|
||||||
|
req.user = users.get(authResult.session.identifier);
|
||||||
|
} else {
|
||||||
|
req.currentSession = null;
|
||||||
|
req.user = null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
createSessionUpdateMiddleware = function () {
|
||||||
|
'use strict';
|
||||||
|
return function (req, res) {
|
||||||
|
var session = req.currentSession;
|
||||||
|
|
||||||
|
if (is.existy(session)) {
|
||||||
|
session.update();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
createAuthObject = function (applicationContext, opts) {
|
||||||
|
'use strict';
|
||||||
|
var foxxAuthentication = require("org/arangodb/foxx/authentication"),
|
||||||
|
sessions,
|
||||||
|
cookieAuth,
|
||||||
|
auth,
|
||||||
|
options = opts || {};
|
||||||
|
|
||||||
|
checkAuthenticationOptions(options);
|
||||||
|
|
||||||
|
sessions = new foxxAuthentication.Sessions(applicationContext, {
|
||||||
|
lifetime: options.sessionLifetime
|
||||||
|
});
|
||||||
|
|
||||||
|
cookieAuth = new foxxAuthentication.CookieAuthentication(applicationContext, {
|
||||||
|
lifetime: options.cookieLifetime,
|
||||||
|
name: options.cookieName
|
||||||
|
});
|
||||||
|
|
||||||
|
auth = new foxxAuthentication.Authentication(applicationContext, sessions, cookieAuth);
|
||||||
|
|
||||||
|
return auth;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
checkAuthenticationOptions = function (options) {
|
||||||
|
'use strict';
|
||||||
|
if (options.type !== "cookie") {
|
||||||
|
throw new Error("Currently only the following auth types are supported: cookie");
|
||||||
|
}
|
||||||
|
if (is.falsy(options.cookieLifetime)) {
|
||||||
|
throw new Error("Please provide the cookieLifetime");
|
||||||
|
}
|
||||||
|
if (is.falsy(options.cookieName)) {
|
||||||
|
throw new Error("Please provide the cookieName");
|
||||||
|
}
|
||||||
|
if (is.falsy(options.sessionLifetime)) {
|
||||||
|
throw new Error("Please provide the sessionLifetime");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
defaultsFor.login = {
|
defaultsFor.login = {
|
||||||
usernameField: "username",
|
usernameField: "username",
|
||||||
|
@ -61,8 +136,10 @@ defaultsFor.login = {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
createStandardLoginHandler = function (auth, users, options) {
|
createStandardLoginHandler = function (auth, users, opts) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
var options = _.defaults(opts || {}, defaultsFor.login);
|
||||||
|
|
||||||
return function (req, res) {
|
return function (req, res) {
|
||||||
var username = req.body()[options.usernameField],
|
var username = req.body()[options.usernameField],
|
||||||
password = req.body()[options.passwordField];
|
password = req.body()[options.passwordField];
|
||||||
|
@ -94,8 +171,10 @@ defaultsFor.logout = {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
createStandardLogoutHandler = function (auth, options) {
|
createStandardLogoutHandler = function (auth, opts) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
var options = _.defaults(opts || {}, defaultsFor.logout);
|
||||||
|
|
||||||
return function (req, res) {
|
return function (req, res) {
|
||||||
if (is.existy(req.currentSession)) {
|
if (is.existy(req.currentSession)) {
|
||||||
auth.endSession(req, res, req.currentSession._key);
|
auth.endSession(req, res, req.currentSession._key);
|
||||||
|
@ -516,57 +595,9 @@ extend(Controller.prototype, {
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
activateAuthentication: function (opts) {
|
activateAuthentication: function (opts) {
|
||||||
'use strict';
|
'use strict';
|
||||||
var foxxAuthentication = require("org/arangodb/foxx/authentication"),
|
this.auth = createAuthObject(this.applicationContext, opts);
|
||||||
sessions,
|
this.before("/*", createAuthenticationMiddleware(this.auth, this.applicationContext));
|
||||||
cookieAuth,
|
this.after("/*", createSessionUpdateMiddleware());
|
||||||
app = this,
|
|
||||||
applicationContext = this.applicationContext,
|
|
||||||
options = opts || {};
|
|
||||||
|
|
||||||
if (options.type !== "cookie") {
|
|
||||||
throw new Error("Currently only the following auth types are supported: cookie");
|
|
||||||
}
|
|
||||||
if (is.falsy(options.cookieLifetime)) {
|
|
||||||
throw new Error("Please provide the cookieLifetime");
|
|
||||||
}
|
|
||||||
if (is.falsy(options.cookieName)) {
|
|
||||||
throw new Error("Please provide the cookieName");
|
|
||||||
}
|
|
||||||
if (is.falsy(options.sessionLifetime)) {
|
|
||||||
throw new Error("Please provide the sessionLifetime");
|
|
||||||
}
|
|
||||||
|
|
||||||
sessions = new foxxAuthentication.Sessions(this.applicationContext, {
|
|
||||||
lifetime: options.sessionLifetime
|
|
||||||
});
|
|
||||||
|
|
||||||
cookieAuth = new foxxAuthentication.CookieAuthentication(this.applicationContext, {
|
|
||||||
lifetime: options.cookieLifetime,
|
|
||||||
name: options.cookieName
|
|
||||||
});
|
|
||||||
|
|
||||||
this.auth = new foxxAuthentication.Authentication(this.applicationContext, sessions, cookieAuth);
|
|
||||||
|
|
||||||
this.before("/*", function (req, res) {
|
|
||||||
var users = new foxxAuthentication.Users(applicationContext),
|
|
||||||
authResult = app.auth.authenticate(req);
|
|
||||||
|
|
||||||
if (authResult.errorNum === require("internal").errors.ERROR_NO_ERROR) {
|
|
||||||
req.currentSession = authResult.session;
|
|
||||||
req.user = users.get(authResult.session.identifier);
|
|
||||||
} else {
|
|
||||||
req.currentSession = null;
|
|
||||||
req.user = null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
this.after("/*", function (req, res) {
|
|
||||||
var session = req.currentSession;
|
|
||||||
|
|
||||||
if (is.existy(session)) {
|
|
||||||
session.update();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -602,11 +633,7 @@ extend(Controller.prototype, {
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
login: function (route, opts) {
|
login: function (route, opts) {
|
||||||
'use strict';
|
'use strict';
|
||||||
this.post(route, createStandardLoginHandler(
|
this.post(route, createStandardLoginHandler(this.getAuth(), this.getUsers(), opts));
|
||||||
this.getAuth(),
|
|
||||||
this.getUsers(),
|
|
||||||
_.defaults(opts || {}, defaultsFor.login)
|
|
||||||
));
|
|
||||||
},
|
},
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -640,10 +667,7 @@ extend(Controller.prototype, {
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
logout: function (route, opts) {
|
logout: function (route, opts) {
|
||||||
'use strict';
|
'use strict';
|
||||||
this.post(route, createStandardLogoutHandler(
|
this.post(route, createStandardLogoutHandler(this.getAuth(), opts));
|
||||||
this.getAuth(),
|
|
||||||
_.defaults(opts || {}, defaultsFor.logout)
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue