AppController.js
Summary
Contains AppController class.
This is part of Troika.ASP Framework - web development MVC framework for ASP 3.0.
Please visit www.troika-asp.com for more details.
Version: $Revision: 1.3 $
Author: Pavel Chuchev pav@troika-asp.com
|
Class Summary
|
| AppController |
This is AppController class which implements Application Controller pattern for Command management. |
function AppController(config, environment) {
this.handleRequest = function (requestCxt) {
var result = new ResponseContext();
var session = environment.session;
var auth = authenticate(environment, requestCxt);
if (auth.proceed) {
var cmdMap = config.cmdMaps[requestCxt.action];
if (cmdMap.validate) {
var errors = requestCxt.validate();
if (!errors.isEmpty()) {
result.forward = new Forward(cmdMap.input.redirect, cmdMap.input.path);
result.errors = errors;
return result;
}
}
var cmd = eval("new " + cmdMap.type + "()");
cmd.init(config);
result = cmd.execute(environment, requestCxt);
}
else {
session.put("nextPageForward", auth.returnPath);
result.forward = new Forward(true, auth.loginFormPath);
}
if (result) {
result.models.put("sessionId", session.getId());
result.models.put("userId", session.get("user.id"));
result.models.put("userName", session.get("user.name"));
result.models.put("securityRole", auth.securityRole);
}
return result;
};
function authenticate(environment, requestCxt) {
var result = {
proceed : true};
var session = environment.session;
var securityRole = getSecurityRole(session);
result.securityRole = securityRole;
var securityConstraints = config.securityConstraints;
if (securityConstraints) {
for (var i = 0; i < securityConstraints.length; i++) {
var constraint = securityConstraints[i];
var urlPatterns = constraint.urlPatterns;
for (var j = 0; j < urlPatterns.length; j++) {
var urlPattern = urlPatterns[j];
var requestCtxXpath = urlPattern.requestCtxXpath;
var matchPattern = urlPattern.matchPattern;
var parser = new XPathParser(undefined, requestCxt.toXML());
var node = parser.apply(requestCtxXpath);
if (node(0) && node(0).text.match(matchPattern)) {
if (!constraint.authenticate.contains(securityRole)) {
result.proceed = false;
result.returnPath = urlPattern.returnPath;
result.loginFormPath = constraint.loginFormPath;
}
return result;
}
}
}
}
return result;
}
function getSecurityRole(session) {
var result = session.get("security.role");
if (!result) {
result = "guest";
}
return result;
}
}
www.troika-asp.com
Documentation generated on Sun Jun 15 17:59:32 2008