merge-requests/1/head
parent
5e7bbd6cb6
commit
631d907613
@ -0,0 +1,883 @@
|
||||
<%
|
||||
var site = require("/site/conf/site.json");
|
||||
//TODO : remove this when log configs are implemented
|
||||
//Log.prototype.isDebugEnabled = function () {
|
||||
// return false;
|
||||
//};
|
||||
|
||||
//TODO : remove this when Context HO is implemented.
|
||||
var context = context || {
|
||||
put:function (key, value) {
|
||||
session.put(key, value);
|
||||
},
|
||||
get:function (key) {
|
||||
return session.get(key);
|
||||
},
|
||||
remove:function (key) {
|
||||
session.remove(key);
|
||||
}
|
||||
};
|
||||
|
||||
var jagg = jagg || (function () {
|
||||
var ctx = context;
|
||||
|
||||
var modules = {};
|
||||
|
||||
var requirs = {};
|
||||
|
||||
var templates = {};
|
||||
|
||||
var initializers = {};
|
||||
|
||||
var bloks = {};
|
||||
|
||||
var data;
|
||||
|
||||
var reverse_proxy;
|
||||
|
||||
var setData = function (d) {
|
||||
data = d;
|
||||
};
|
||||
|
||||
var getData = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
var getUser = function () {
|
||||
var user = session.get("logged.user");
|
||||
|
||||
// If user is null then check for mutual auth
|
||||
if (!user) {
|
||||
user = mutualAuthVerifier(user);
|
||||
}
|
||||
|
||||
return user;
|
||||
};
|
||||
|
||||
var setUser = function (user) {
|
||||
//if jaggery allow session reset
|
||||
if (typeof request.getSession == "function") {
|
||||
if (session && !session.isNew()) {
|
||||
session.invalidate();
|
||||
}
|
||||
session = request.getSession(true);
|
||||
}
|
||||
session.put("logged.user", user);
|
||||
};
|
||||
|
||||
var mutualAuthVerifier = function(user){
|
||||
|
||||
var log = new Log();
|
||||
var site = require("/site/conf/site.json");
|
||||
|
||||
if(site.mutualAuthConfiguration){
|
||||
if (site.mutualAuthConfiguration.enabled == "true") {
|
||||
|
||||
// cert will be available only if trust store holds client certificate. Otherwise it is null
|
||||
var cert = request.getAttribute("javax.servlet.request.X509Certificate");
|
||||
var userName = request.getHeader("MutualAuthUserName");
|
||||
|
||||
// proceed mutul ssl validation if cert and user name set properly
|
||||
|
||||
if (cert != null) {
|
||||
if (userName) {
|
||||
var security = require("apimstore");
|
||||
var mutualAuthHostObject = new security.MutualAuthHostObject();
|
||||
var isValidUser = mutualAuthHostObject.validateUserNameHeader(userName);
|
||||
// Group ID feature not supported here
|
||||
var groupId="";
|
||||
session.put("groupId", groupId);
|
||||
if (isValidUser) {
|
||||
log.info("Mutual Auth authentication success for user : " + userName);
|
||||
user = {username: userName, cookie: null, hasPublisherAccess: false};
|
||||
return user;
|
||||
} else {
|
||||
log.debug("Mutual authentication failed for invalid user : " + userName);
|
||||
}
|
||||
|
||||
} else {
|
||||
log.debug("Mutual authentication failed for invalid user : MutualAuthUserName header is empty");
|
||||
}
|
||||
} else {
|
||||
log.debug("Mutual Authentication failed due to no trusted certificate");
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var getThemeFile = function (path) {
|
||||
var p, index, theme = getUserTheme();
|
||||
if(theme.tenant_theme) {
|
||||
p = getTenantThemePath() + path;
|
||||
index = p.indexOf("?");
|
||||
if(new File(p.substring(0, index == -1 ? p.length : index)).isExists()) {
|
||||
return p;
|
||||
}
|
||||
}
|
||||
if(theme.subtheme) {
|
||||
p = getThemePath() + "subthemes/" + theme.subtheme + "/" + path;
|
||||
index = p.indexOf("?");
|
||||
if(new File(p.substring(0, index == -1 ? p.length : index)).isExists()) {
|
||||
return p;
|
||||
}
|
||||
}
|
||||
return getThemePath() + path;
|
||||
};
|
||||
|
||||
var getThemesPath = function () {
|
||||
return "/site/themes/";
|
||||
};
|
||||
|
||||
var getTenantThemesPath = function(){
|
||||
return "/site/tenant_themes/";
|
||||
};
|
||||
|
||||
var getThemePath = function () {
|
||||
return getThemesPath() + getUserTheme().base + "/";
|
||||
};
|
||||
|
||||
var getTenantThemePath = function (){
|
||||
return getTenantThemesPath() + getTheme().tenant_theme + "/";
|
||||
}
|
||||
|
||||
var getBlockFile = function (name) {
|
||||
return getBlocksDir() + name + "/block.jag";
|
||||
};
|
||||
|
||||
var getInitializerFile = function (name) {
|
||||
return getThemeFile("templates/" + name + "/initializer.jag");
|
||||
};
|
||||
|
||||
var getTemplateFile = function (name) {
|
||||
return getThemeFile("templates/" + name + "/template.jag");
|
||||
};
|
||||
|
||||
var getTemplatePath = function(themeDir, name) {
|
||||
return themeDir + "templates/" + name + "/template.jag";
|
||||
};
|
||||
|
||||
var getModuleFile = function (name) {
|
||||
return getModulesDir() + name + "/module.jag";
|
||||
};
|
||||
|
||||
var getBlocksDir = function () {
|
||||
return "/site/blocks/";
|
||||
};
|
||||
|
||||
var getThemesDir = function () {
|
||||
return "/site/themes/";
|
||||
};
|
||||
|
||||
var getModulesDir = function () {
|
||||
return "/modules/";
|
||||
};
|
||||
|
||||
var getTheme = function () {
|
||||
//TODO : remove following lines if theme switching need to be avoided
|
||||
var site = require("/site/conf/site.json"),
|
||||
theme = request.getParameter("theme"),
|
||||
subtheme = request.getParameter("subtheme");
|
||||
var r = {
|
||||
base : theme ? theme : site.theme.base,
|
||||
subtheme : subtheme ? subtheme : site.theme.subtheme,
|
||||
};
|
||||
//load the tenant theme if exists
|
||||
var tenant = getTenantDomain();
|
||||
if(tenant){
|
||||
tenant = tenant.replace("/",".");
|
||||
r.tenant_theme = getTenantDomain();
|
||||
}
|
||||
return r;
|
||||
};
|
||||
|
||||
var getUserTheme = function () {
|
||||
return session.get("theme") ? session.get("theme") : getTheme();
|
||||
};
|
||||
|
||||
var mergeParams = function (extInputs, defInputs) {
|
||||
var key, obj;
|
||||
extInputs = extInputs || {};
|
||||
for (key in defInputs) {
|
||||
if (defInputs.hasOwnProperty(key)) {
|
||||
obj = extInputs[key];
|
||||
if (!obj) {
|
||||
extInputs[key] = defInputs[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
return extInputs;
|
||||
};
|
||||
|
||||
var renderBlock = function (name, inputs, outputs, populate) {
|
||||
//initializeTemplate({name:name, params:null}, jagg);
|
||||
|
||||
var init, fn, blok, log = new Log();
|
||||
|
||||
fn = template(name);
|
||||
if (!fn) {
|
||||
log.error("Template header and footer includes are missing for : " + name);
|
||||
}
|
||||
if (populate) {
|
||||
blok = block(name);
|
||||
|
||||
if (!inputs) {
|
||||
inputs = blok.getInputs ? blok.getInputs() : {};
|
||||
} else {
|
||||
mergeParams(inputs, blok.getInputs ? blok.getInputs() : null);
|
||||
}
|
||||
|
||||
if (blok.getOutputs) {
|
||||
outputs = blok.getOutputs(inputs);
|
||||
} else if (blok.getInputs) {
|
||||
outputs = inputs;
|
||||
} else {
|
||||
outputs = {};
|
||||
}
|
||||
}
|
||||
init = initializer(name);
|
||||
if (init.postInitialize) {
|
||||
init.postInitialize(inputs, outputs);
|
||||
}
|
||||
fn(inputs, outputs, jagg);
|
||||
};
|
||||
|
||||
var inheritParent = function (blok, name) {
|
||||
var parent = require(getBlockFile(name));
|
||||
for (var prop in parent) {
|
||||
if (parent.hasOwnProperty(prop)) {
|
||||
if (!blok[prop]) {
|
||||
blok[prop] = parent[prop];
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var initializeBlock = function (obj) {
|
||||
if (!obj) {
|
||||
return;
|
||||
}
|
||||
var extInputs, defInputs, parent, tmpl, inputBlocks, outputBlocks, outputs, tmplInitializer, bloks, i, length,
|
||||
name = obj.name, blok = block(name), log = new Log();
|
||||
|
||||
template(name);
|
||||
extInputs = obj.inputs || (obj.inputs = {});
|
||||
defInputs = blok.getInputs ? blok.getInputs() : {};
|
||||
mergeParams(extInputs, defInputs);
|
||||
|
||||
if (blok.getInputBlocks) {
|
||||
inputBlocks = blok.getInputBlocks();
|
||||
length = inputBlocks.length;
|
||||
for (i = 0; i < length; i++) {
|
||||
initializeBlocks(inputBlocks[i], extInputs);
|
||||
}
|
||||
}
|
||||
|
||||
if (blok.getOutputs) {
|
||||
outputs = blok.getOutputs(extInputs);
|
||||
} else if (blok.getInputs) {
|
||||
outputs = extInputs;
|
||||
} else {
|
||||
outputs = {};
|
||||
}
|
||||
|
||||
obj.outputs = outputs;
|
||||
if (blok.getOutputBlocks) {
|
||||
outputBlocks = blok.getOutputBlocks();
|
||||
length = outputBlocks.length;
|
||||
for (i = 0; i < length; i++) {
|
||||
initializeBlocks(outputBlocks[i], outputs);
|
||||
}
|
||||
}
|
||||
|
||||
if (blok.getStaticBlocks) {
|
||||
bloks = blok.getStaticBlocks();
|
||||
length = bloks.length;
|
||||
for (i = 0; i < length; i++) {
|
||||
initializeBlock({name:bloks[i], inputs:null});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// [ "foo", "bar", "mar"]
|
||||
// [{ "name" : "foo/bar", params : {}}]
|
||||
var initializeBlocks = function (keys, inputs) {
|
||||
if (!inputs) {
|
||||
return;
|
||||
}
|
||||
var i, length, values, last;
|
||||
if (typeof keys !== "string") {
|
||||
length = keys.length;
|
||||
values = inputs[keys[0]];
|
||||
last = (length == 1);
|
||||
if (values instanceof Array) {
|
||||
length = values.length;
|
||||
for (i = 0; i < length; i++) {
|
||||
if (last) {
|
||||
initializeBlock(values[i]);
|
||||
} else {
|
||||
initializeBlocks(keys.slice(1), values[i]);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (last) {
|
||||
initializeBlock(values);
|
||||
} else {
|
||||
initializeBlocks(keys.slice(1), values);
|
||||
}
|
||||
}
|
||||
return;
|
||||
} else {
|
||||
values = inputs[keys];
|
||||
}
|
||||
|
||||
if (values instanceof Array) {
|
||||
length = values.length;
|
||||
for (i = 0; i < length; i++) {
|
||||
initializeBlock(values[i]);
|
||||
}
|
||||
} else {
|
||||
initializeBlock(values);
|
||||
}
|
||||
};
|
||||
|
||||
var insertData = function (jagg, template, parent, name, key, value) {
|
||||
var keys, values, data = getData();
|
||||
data = data[parent] || (data[parent] = {});
|
||||
data = data[name] || (data[name] = {});
|
||||
data = data[template] || (data[template] = {});
|
||||
|
||||
keys = data.keys || (data.keys = []);
|
||||
values = data.values || (data.values = {});
|
||||
|
||||
keys.push(key);
|
||||
values[key] = value;
|
||||
};
|
||||
|
||||
|
||||
var printData = function (tmpls) {
|
||||
var key, tmpl, keys, values, i, length;
|
||||
for (key in tmpls) {
|
||||
if (tmpls.hasOwnProperty(key)) {
|
||||
tmpl = tmpls[key];
|
||||
keys = tmpl.keys;
|
||||
values = tmpl.values;
|
||||
length = keys.length;
|
||||
for (i = 0; i < length; i++) {
|
||||
print(values[keys[i]]);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var getUrlMapping = function (path) {
|
||||
var urlMap = ctx.get("url.map"), url, configs, i, length, mapping, mappings, file;
|
||||
if (urlMap) {
|
||||
url = urlMap[path];
|
||||
return url ? url : path;
|
||||
}
|
||||
file = new File("/jaggery.conf");
|
||||
file.open("r");
|
||||
configs = parse(file.readAll());
|
||||
file.close();
|
||||
|
||||
urlMap = {};
|
||||
mappings = configs.urlMappings;
|
||||
length = mappings.length;
|
||||
for (i = 0; i < length; i++) {
|
||||
mapping = mappings[i];
|
||||
urlMap[mapping.path] = mapping.url;
|
||||
}
|
||||
ctx.put("url.map", urlMap);
|
||||
url = urlMap[path];
|
||||
return url ? url : path;
|
||||
};
|
||||
|
||||
var getRequestSegments = function(){
|
||||
var href = request.getRequestURL()
|
||||
var match = href.match(/^(https?\:)\/\/(([^:\/?#]*)(?:\:([0-9]+))?)(\/[^?#]*)(\?[^#]*|)(#.*|)$/);
|
||||
return match && {
|
||||
protocol: match[1],
|
||||
host: match[2],
|
||||
hostname: match[3],
|
||||
port: match[4],
|
||||
pathname: match[5],
|
||||
search: match[6],
|
||||
hash: match[7]
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
var getMappedUrl = function (path) {
|
||||
return getAbsoluteUrl(getUrlMapping(path));
|
||||
};
|
||||
|
||||
var getAbsoluteUrl = function (path) {
|
||||
var host = ""
|
||||
if(isReverseProxyEnabled()){
|
||||
host = "https://" + site.reverseProxy.host ;
|
||||
}else{
|
||||
var match = getRequestSegments();
|
||||
var host = match.protocol + "//" + match.host;
|
||||
}
|
||||
return host + url(path);
|
||||
};
|
||||
|
||||
var getSiteDomainFromRequest = function(){
|
||||
var match = href.match(/^(https?\:)\/\/(([^:\/?#]*)(?:\:([0-9]+))?)(\/[^?#]*)(\?[^#]*|)(#.*|)$/);
|
||||
}
|
||||
|
||||
var getHttpsUrl = function(path, parameters){
|
||||
var hostname = "";
|
||||
var requestSegments = getRequestSegments();
|
||||
mod = jagg.module("manager");
|
||||
hostname = mod.getHTTPsURL();
|
||||
hostname = hostname.replace("https://","");
|
||||
|
||||
// if the site is fronted by a proxy server
|
||||
if(isReverseProxyEnabled()){
|
||||
hostname = site.reverseProxy.host ;
|
||||
//if a custom https port is used
|
||||
if(site.reverseProxy.hosts_port){
|
||||
hostname = hostname + ":" + site.reverseProxy.hosts_port;
|
||||
}
|
||||
}
|
||||
|
||||
return "https://" + hostname + url(path, parameters);
|
||||
}
|
||||
|
||||
var url = function(path,parameters){
|
||||
var tail = "";
|
||||
if(parameters){
|
||||
var params = [];
|
||||
for (var key in parameters) {
|
||||
params.push(key+"="+parameters[key]) ;
|
||||
}
|
||||
if(/\?/.test(path)){
|
||||
tail = "&";
|
||||
}
|
||||
else{
|
||||
tail = "?";
|
||||
}
|
||||
tail = tail + params.join("&");
|
||||
}
|
||||
return getSiteContext()+ path + tail;
|
||||
};
|
||||
|
||||
// following function will generate a url with the currently activated tenant
|
||||
var urlTenanted = function(path, parameters){
|
||||
//if tenented add tenant url
|
||||
if(getTenantDomain() != null && !(/(\?tenant\=|\&tenant\=)/i.test(path))){
|
||||
if(!parameters){
|
||||
parameters = {};
|
||||
}
|
||||
parameters.tenant = getTenantDomain();
|
||||
}
|
||||
if(isReverseProxyEnabled()){
|
||||
return getHttpsUrl(path, parameters)
|
||||
}
|
||||
return url(path,parameters)
|
||||
};
|
||||
|
||||
var getCarbonProxyContextPath = function(){
|
||||
var CarbonUtils = Packages.org.wso2.carbon.utils.CarbonUtils;
|
||||
var carbonUtils = new CarbonUtils();
|
||||
var context = carbonUtils.getServerConfiguration().getFirstProperty("ProxyContextPath");
|
||||
if(context != null)
|
||||
return context;
|
||||
else
|
||||
return '';
|
||||
};
|
||||
|
||||
var isReverseProxyEnabled = function(){
|
||||
if(reverse_proxy != undefined){
|
||||
return reverse_proxy;
|
||||
}
|
||||
if(site.reverseProxy.enabled){
|
||||
if(site.reverseProxy.enabled == "auto"){
|
||||
var xfwd = request.getHeader("X-Forwarded-Host");
|
||||
if(xfwd != null){
|
||||
var xfwd = xfwd.split(",")[0];
|
||||
//if(xfwd.trim() == site.reverseProxy.host){
|
||||
reverse_proxy = true;
|
||||
site.reverseProxy.host = xfwd.trim();
|
||||
//}
|
||||
}else{
|
||||
reverse_proxy = false;
|
||||
}
|
||||
}
|
||||
else{
|
||||
reverse_proxy = true;
|
||||
}
|
||||
}
|
||||
else{
|
||||
reverse_proxy = false;
|
||||
}
|
||||
return reverse_proxy;
|
||||
};
|
||||
|
||||
var getSiteContext = function(){
|
||||
if(isReverseProxyEnabled()){
|
||||
//If we use a custom domain mapping we will not use the context.
|
||||
if( site.reverseProxy.tenantHeader != null &&
|
||||
request.getHeader(site.reverseProxy.tenantHeader) != null){
|
||||
return "";
|
||||
}
|
||||
else{
|
||||
return site.reverseProxy.context
|
||||
}
|
||||
}
|
||||
|
||||
var proxyContext = getCarbonProxyContextPath();
|
||||
return proxyContext + site.context;
|
||||
};
|
||||
|
||||
var getRegistryPath = function(path){
|
||||
if(isReverseProxyEnabled()){
|
||||
if(site.reverseProxy.regContext != undefined){
|
||||
return site.reverseProxy.regContext + path;
|
||||
}
|
||||
return site.reverseProxy.context + path;
|
||||
}
|
||||
|
||||
var ProxyContextPath = getCarbonProxyContextPath();
|
||||
return ProxyContextPath + path;
|
||||
}
|
||||
|
||||
var module = function (name, module) {
|
||||
if (module) {
|
||||
return modules[name] = module;
|
||||
}
|
||||
module = modules[name];
|
||||
if (module) {
|
||||
return module;
|
||||
}
|
||||
include(getModuleFile(name));
|
||||
return modules[name];
|
||||
};
|
||||
|
||||
var requir = function (path) {
|
||||
var obj = requirs[path];
|
||||
return obj ? obj : requirs[path] = require(path);
|
||||
};
|
||||
|
||||
var block = function (name, blok) {
|
||||
var parent;
|
||||
if (blok) {
|
||||
return bloks[name] = blok;
|
||||
}
|
||||
blok = bloks[name];
|
||||
if (blok) {
|
||||
return blok;
|
||||
}
|
||||
//we need to include and initialize
|
||||
include(getBlockFile(name));
|
||||
blok = bloks[name];
|
||||
parent = blok.getParent;
|
||||
if (parent) {
|
||||
parent = parent();
|
||||
inheritParent(blok, parent);
|
||||
}
|
||||
if (blok.initialize) {
|
||||
//TODO which to pass into initialize method
|
||||
blok.initialize(getData());
|
||||
}
|
||||
return bloks[name];
|
||||
};
|
||||
|
||||
var template = function (name, tmpl) {
|
||||
var blok, parent, init;
|
||||
if (tmpl) {
|
||||
return templates[name] = tmpl;
|
||||
}
|
||||
tmpl = templates[name];
|
||||
if (tmpl) {
|
||||
return tmpl;
|
||||
}
|
||||
|
||||
blok = block(name);
|
||||
parent = blok.getParent;
|
||||
if (parent) {
|
||||
name = parent();
|
||||
}
|
||||
|
||||
tmpl = templates[name];
|
||||
if (tmpl) {
|
||||
return tmpl;
|
||||
}
|
||||
|
||||
include(getTemplateFile(name));
|
||||
init = initializer(name);
|
||||
if (init.preInitialize) {
|
||||
init.preInitialize();
|
||||
}
|
||||
return templates[name];
|
||||
};
|
||||
|
||||
var initializer = function (name, init) {
|
||||
var blok, parent;
|
||||
if (init) {
|
||||
return initializers[name] = init;
|
||||
}
|
||||
init = initializers[name];
|
||||
if (init) {
|
||||
return init;
|
||||
}
|
||||
|
||||
blok = block(name);
|
||||
parent = blok.getParent;
|
||||
if (parent) {
|
||||
name = parent();
|
||||
}
|
||||
|
||||
init = initializers[name];
|
||||
if (init) {
|
||||
return init;
|
||||
}
|
||||
|
||||
include(getInitializerFile(name));
|
||||
return initializers[name];
|
||||
};
|
||||
|
||||
var render = function (obj) {
|
||||
var init, fn, inputs, outputs, name = obj.name, log = new Log(), blok;
|
||||
setData(obj);
|
||||
initializeBlock(obj);
|
||||
include(getTemplateFile(name));
|
||||
fn = template(name);
|
||||
if (!fn) {
|
||||
log.error("Template header and footer includes are missing for : " + name);
|
||||
}
|
||||
inputs = obj.inputs;
|
||||
blok = block(name);
|
||||
if (blok.getOutputs) {
|
||||
outputs = blok.getOutputs(inputs);
|
||||
} else if (blok.getInputs) {
|
||||
outputs = inputs;
|
||||
} else {
|
||||
outputs = {};
|
||||
}
|
||||
init = initializer(name);
|
||||
if (init.postInitialize) {
|
||||
init.postInitialize(inputs, outputs);
|
||||
}
|
||||
fn(inputs, outputs, jagg);
|
||||
};
|
||||
|
||||
var includeBlock = function (name, inputs) {
|
||||
renderBlock(name, inputs, null, true);
|
||||
};
|
||||
|
||||
var includeBlocks = function (bloks) {
|
||||
if (!bloks) {
|
||||
return;
|
||||
}
|
||||
|
||||
var i, d, length;
|
||||
if (bloks instanceof Array) {
|
||||
length = bloks.length;
|
||||
for (i = 0; i < length; i++) {
|
||||
d = bloks[i];
|
||||
renderBlock(d.name, d.inputs, d.outputs, false);
|
||||
}
|
||||
} else {
|
||||
renderBlock(bloks.name, bloks.inputs, bloks.outputs, false);
|
||||
}
|
||||
};
|
||||
|
||||
var addHeaderCSS = function (template, key, css) {
|
||||
css = '<link type="text/css" rel="stylesheet" href="' + url(getThemeFile(css)) + '"/>';
|
||||
insertData(this, template, "header", "css", key, css);
|
||||
};
|
||||
|
||||
var addHeaderCSSCode = function (template, key, css) {
|
||||
css = '<style type="text/css">' + css + '</style>';
|
||||
insertData(this, template, "header", "css", key, css);
|
||||
};
|
||||
|
||||
var addHeaderJS = function (template, key, js) {
|
||||
js = '<script type="text/javascript" src="' + url(getThemeFile(js)) + '"></script>\n';
|
||||
insertData(this, template, "header", "js", key, js);
|
||||
};
|
||||
|
||||
var addHeaderJSCode = function (template, key, js) {
|
||||
js = '<script type="text/javascript">' + js + '</script>';
|
||||
insertData(this, template, "header", "js", key, js);
|
||||
};
|
||||
|
||||
var addHeaderCode = function (template, key, code) {
|
||||
insertData(this, template, "header", "code", key, code);
|
||||
};
|
||||
|
||||
var addFooterCSS = function (template, key, css) {
|
||||
css = '<link type="text/css" rel="stylesheet" href="' + url(getThemeFile(css)) + '"/>';
|
||||
insertData(this, template, "footer", "css", key, css);
|
||||
};
|
||||
|
||||
var addFooterCSSCode = function (template, key, css) {
|
||||
css = '<style type="text/css">' + css + '</style>';
|
||||
insertData(this, template, "footer", "css", key, css);
|
||||
};
|
||||
|
||||
var addFooterJS = function (template, key, js) {
|
||||
js = '\t<script type="text/javascript" src="' + url(getThemeFile(js)) + '"></script>\n';
|
||||
insertData(this, template, "footer", "js", key, js);
|
||||
};
|
||||
|
||||
var addFooterJSCode = function (template, key, js) {
|
||||
js = '<script type="text/javascript">' + js + '</script>';
|
||||
insertData(this, template, "footer", "js", key, js);
|
||||
};
|
||||
|
||||
var addFooterCode = function (template, key, code) {
|
||||
insertData(this, template, "footer", "code", key, code);
|
||||
};
|
||||
|
||||
var includeJag = function (path) {
|
||||
include(getThemeFile(path));
|
||||
};
|
||||
|
||||
var getTenantDomain = function(){
|
||||
if(isReverseProxyEnabled()){
|
||||
// check if tenant header exists
|
||||
if(site.reverseProxy.tenantHeader != undefined && site.reverseProxy.tenantHeader != null
|
||||
&& request.getHeader(site.reverseProxy.tenantHeader) != null){
|
||||
return request.getHeader(site.reverseProxy.tenantHeader);
|
||||
}
|
||||
}
|
||||
return request.getParameter("tenant");
|
||||
}
|
||||
|
||||
var setCSRFToken = function(){
|
||||
var cookie = request.getCookie("csrftoken");
|
||||
var user = jagg.getUser();
|
||||
var csrfuser = session.get('csrfuser');
|
||||
//set CSRF if it is not set + you need to refresh the token if the user has changed.
|
||||
if( !cookie || user != csrfuser){
|
||||
//Use a secure random as the CSRF token.
|
||||
var SecureRandom = Packages.java.security.SecureRandom;
|
||||
var random = new SecureRandom();
|
||||
var BigInteger = Packages.java.math.BigInteger;
|
||||
var token = new BigInteger(130, random).toString(32);
|
||||
|
||||
var cookie= {'name':'csrftoken','value': token , 'maxAge': 86400, 'path':"/"};
|
||||
session.put('csrfuser',user);
|
||||
response.addCookie(cookie);
|
||||
}
|
||||
}
|
||||
|
||||
var isCSRFTokenValid = function(){
|
||||
var log = new Log();
|
||||
var cookie = request.getCookie("csrftoken");
|
||||
var token = request.getHeader("X-CSRFToken");
|
||||
var user = jagg.getUser();
|
||||
if(cookie == null || cookie.value == token){
|
||||
return true;
|
||||
}
|
||||
else{
|
||||
log.info("CSRF Token error at "+request.getRequestURI());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
var validateInputs = function(config){
|
||||
var errors = [];
|
||||
//set most used parapeters
|
||||
config.name = { type:"name"};
|
||||
config.provider = { type:"provider"};
|
||||
config.version = { type:"name"};
|
||||
|
||||
for(var key in config){
|
||||
var value = request.getParameter(key);
|
||||
if(value == null){
|
||||
if(config[key].required)
|
||||
errors.push(key);
|
||||
continue;
|
||||
}
|
||||
switch (config[key].type) {
|
||||
case "url":
|
||||
break;
|
||||
case "input":
|
||||
var regex = /([<>\"\'])/;
|
||||
if(regex.test(value)) errors.push(key);
|
||||
break;
|
||||
case "number":
|
||||
var regex = /^[0-9]*$/;
|
||||
if(!regex.test(value)) errors.push(key);
|
||||
break;
|
||||
case "safetext":
|
||||
var regex = /^[a-zA-Z0-9]*$/;
|
||||
if(!regex.test(value)) errors.push(key);
|
||||
break;
|
||||
case "uuid":
|
||||
var regex = /^[a-zA-Z0-9\-]*$/;
|
||||
if(!regex.test(value)) errors.push(key);
|
||||
break;
|
||||
case "name":
|
||||
var regex = /([~!#$;%^*+={}\|\\<>\"\'\/,])/;
|
||||
if(regex.test(value)) errors.push(key);
|
||||
break;
|
||||
case "password":
|
||||
var regex = /^[\S]{5,30}$/;
|
||||
if(!regex.test(value)) errors.push(key);
|
||||
break;
|
||||
case "email":
|
||||
var regex = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
|
||||
if(!regex.test(value)) errors.push(key);
|
||||
break;
|
||||
case "provider":
|
||||
var regex = /([~!#$;%^*+={}\|\\<>\"\'\,])/;
|
||||
if(regex.test(value)) errors.push(key);
|
||||
break;
|
||||
default:
|
||||
}
|
||||
}
|
||||
if(errors.length > 0){
|
||||
return errors;
|
||||
}
|
||||
else{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
setUser:setUser,
|
||||
getUser:getUser,
|
||||
block:block,
|
||||
module:module,
|
||||
initializer:initializer,
|
||||
includeBlock:includeBlock,
|
||||
includeBlocks:includeBlocks,
|
||||
render:render,
|
||||
template:template,
|
||||
require:requir,
|
||||
getAbsoluteUrl:getAbsoluteUrl,
|
||||
getMappedUrl:getMappedUrl,
|
||||
printData:printData,
|
||||
getUserTheme:getUserTheme,
|
||||
getThemeFile:getThemeFile,
|
||||
getModulesDir:getModulesDir,
|
||||
data:getData,
|
||||
addHeaderCSS:addHeaderCSS,
|
||||
addHeaderCSSCode:addHeaderCSSCode,
|
||||
addHeaderJS:addHeaderJS,
|
||||
addHeaderJSCode:addHeaderJSCode,
|
||||
addHeaderCode:addHeaderCode,
|
||||
addFooterCSS:addFooterCSS,
|
||||
addFooterCSSCode:addFooterCSSCode,
|
||||
addFooterJS:addFooterJS,
|
||||
addFooterJSCode:addFooterJSCode,
|
||||
addFooterCode:addFooterCode,
|
||||
includeJag:includeJag,
|
||||
url:url,
|
||||
urlTenanted:urlTenanted,
|
||||
getRegistryPath:getRegistryPath,
|
||||
getSiteContext:getSiteContext,
|
||||
getHttpsUrl:getHttpsUrl,
|
||||
getTenantDomain:getTenantDomain,
|
||||
setCSRFToken:setCSRFToken,
|
||||
isCSRFTokenValid:isCSRFTokenValid,
|
||||
validateInputs:validateInputs,
|
||||
};
|
||||
|
||||
}());
|
||||
%>
|
@ -0,0 +1,168 @@
|
||||
<%
|
||||
var getAuthServerURL = function() {
|
||||
return getAPIStoreObj().getAuthServerURL();
|
||||
};
|
||||
|
||||
var getHTTPsURL = function() {
|
||||
return getAPIStoreObj().getHTTPsURL(request.getRequestURL());
|
||||
};
|
||||
|
||||
var getHTTPURL = function() {
|
||||
return getAPIStoreObj().getHTTPURL();
|
||||
};
|
||||
|
||||
var getHostname = function() {
|
||||
return getAPIStoreObj().getHostName();
|
||||
};
|
||||
|
||||
var getAPIPublisherURL = function() {
|
||||
var result,log=new Log();
|
||||
var store = getAPIStoreObj();
|
||||
try {
|
||||
result = store.getAPIPublisherURL();
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("getAPIPublisherURL : ");
|
||||
}
|
||||
return {
|
||||
error:false,
|
||||
url:result
|
||||
};
|
||||
} catch (e) {
|
||||
return {
|
||||
error:true,
|
||||
message:e.message.split(":")[1]
|
||||
};
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
var getServer = function() {
|
||||
return {
|
||||
server : "localhost",
|
||||
port : "9443"
|
||||
};
|
||||
};
|
||||
|
||||
var isSelfSignupEnabled = function(){
|
||||
return getAPIStoreObj().isSelfSignupEnabled();
|
||||
};
|
||||
|
||||
var isSelfSignupEnabledForTenantUser = function(tenantDomain){
|
||||
var log = new Log();
|
||||
try {
|
||||
|
||||
if (tenantDomain == null) {
|
||||
return getAPIStoreObj().isSelfSignupEnabledForTenant("carbon.super");
|
||||
} else {
|
||||
return getAPIStoreObj().isSelfSignupEnabledForTenant(tenantDomain);
|
||||
}
|
||||
} catch (e) {
|
||||
log.error(e.message);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
};
|
||||
|
||||
var getAdminCookie = function() {
|
||||
//TODO : this should be set in the Context during the deployment
|
||||
|
||||
};
|
||||
|
||||
var getAPIStoreObj = function() {
|
||||
|
||||
var tenantDomain = jagg.getTenantDomain();
|
||||
var user = jagg.getUser();
|
||||
var store;
|
||||
if (user == null) {
|
||||
store = require('apimstore');
|
||||
var storeHostObj = new store.APIStore();
|
||||
if(tenantDomain != null && tenantDomain != ""){
|
||||
storeHostObj.loadRegistryOfTenant(tenantDomain);
|
||||
}
|
||||
return storeHostObj;
|
||||
} else {
|
||||
store = require('apimstore');
|
||||
return new store.APIStore(user.username);
|
||||
}
|
||||
};
|
||||
|
||||
var getAPIConsumerObj = function() {
|
||||
var user = jagg.getUser();
|
||||
|
||||
var APIManagerFactory = Packages.org.wso2.carbon.apimgt.impl.APIManagerFactory;
|
||||
|
||||
return APIManagerFactory.getInstance().getAPIConsumer(user);
|
||||
};
|
||||
|
||||
var loadTenantRegistry = function (tenantDomain) {
|
||||
try {
|
||||
if (tenantDomain != null && tenantDomain != "") {
|
||||
getAPIStoreObj().loadRegistryOfTenant(tenantDomain);
|
||||
return
|
||||
{
|
||||
error:false
|
||||
}
|
||||
;
|
||||
}
|
||||
} catch (e) {
|
||||
return {
|
||||
error:true,
|
||||
message:e.message
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
var loadTenantAxisConfiguration = function (tenantDomain) {
|
||||
|
||||
try {
|
||||
if (tenantDomain != null && tenantDomain != "") {
|
||||
|
||||
getAPIStoreObj().loadAxisConfigOfTenant(String(tenantDomain));
|
||||
return
|
||||
{
|
||||
error:false
|
||||
}
|
||||
;
|
||||
}
|
||||
} catch (e) {
|
||||
return {
|
||||
error:true,
|
||||
message:e.message
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
var getActiveTenantDomains=function(){
|
||||
var tenantDomains,
|
||||
log = new Log(),
|
||||
store = jagg.module("manager").getAPIStoreObj();
|
||||
|
||||
try {
|
||||
tenantDomains = store.getActiveTenantDomains();
|
||||
tenantDomains = parse(stringify(tenantDomains));
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("isTenantMode : " + stringify(api));
|
||||
}
|
||||
|
||||
return {
|
||||
error:false,
|
||||
tenantDomains:tenantDomains
|
||||
};
|
||||
} catch (e) {
|
||||
//log.error(e.message);
|
||||
return {
|
||||
error:true,
|
||||
tenantDomains:null,
|
||||
message:e.message
|
||||
};
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
var getUsageClient = function(){
|
||||
var user = jagg.getUser();
|
||||
return org.wso2.carbon.apimgt.usage.client.UsageClient.getClient(user);
|
||||
}
|
||||
|
||||
%>
|
@ -0,0 +1,10 @@
|
||||
<module name="apimstore" namespace="ns" expose="true" xmlns="http://wso2.org/projects/jaggery/module.xml">
|
||||
<hostObject>
|
||||
<className>org.wso2.carbon.apimgt.hostobjects.APIStoreHostObject</className>
|
||||
<name>APIStore</name>
|
||||
</hostObject>
|
||||
<hostObject>
|
||||
<className>org.wso2.carbon.apimgt.hostobjects.MutualAuthHostObject</className>
|
||||
<name>MutualAuthHostObject</name>
|
||||
</hostObject>
|
||||
</module>
|
Loading…
Reference in new issue