diff --git a/modules/distribution/src/api-resources/api_templates/default_api_template.xml b/modules/distribution/src/api-resources/api_templates/default_api_template.xml
index 8cbb8f05..91a8b59f 100644
--- a/modules/distribution/src/api-resources/api_templates/default_api_template.xml
+++ b/modules/distribution/src/api-resources/api_templates/default_api_template.xml
@@ -1,79 +1,72 @@
- #foreach($resource in $resources)
-
-
-
-
-
-
-
-
-
-
-
- 500
- Status report
- Internal Server Error
- Faulty invoking through default API
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #if( $transport == "https" )
-
- #else
-
- #end
+
+
+
+
+
+
+
+
+
+
+
+ 500
+ Status report
+ Internal Server Error
+ Faulty invoking through default API
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #if( $transport == "https" )
+
+ #else
+
+ #end
-
-
- #if( $transport == "https" )
-
- #else
-
- #end
-
- 60000
- fault
-
-
- 1.0
-
-
- 0
- 0
-
-
-
-
-
-
-
-
-
-
+
+
+ #if( $transport == "https" )
+
+ #else
+
+ #end
+
+ 60000
+ fault
+
+
+ 1.0
+
+
+ 0
+ 0
+
+
+
+
+
+
+
+
+
+
- #end ## end of resource iterator
-
-
-
+
+
+
diff --git a/modules/distribution/src/api-resources/api_templates/prototype_template.xml b/modules/distribution/src/api-resources/api_templates/prototype_template.xml
index 05ffc526..c3687d36 100644
--- a/modules/distribution/src/api-resources/api_templates/prototype_template.xml
+++ b/modules/distribution/src/api-resources/api_templates/prototype_template.xml
@@ -18,63 +18,63 @@
##################### Define the macros ######################
-#macro ( print_if_exist $field $default)
+ #macro ( print_if_exist $field $default)
#if($field && "$field" !="")
- $field
+ $field
#else
- $default
+ $default
+ #end
#end
-#end
-#macro ( print_string_if_exist $field $default)
+ #macro ( print_string_if_exist $field $default)
#if($field && "$field" !="")
- "$field"
+ "$field"
#else
- "$default"
+ "$default"
+ #end
#end
-#end
-#macro ( print_if_exist_only $tagname $field)
+ #macro ( print_if_exist_only $tagname $field)
#if($field && "$field" !="")
- <$tagname>$field$tagname>
+<$tagname>$field$tagname>
#else
- ## print nothing.
+ ## print nothing.
+ #end
#end
-#end
-#macro ( print_list $tagname $list)
+ #macro ( print_list $tagname $list)
#if($list && "$list" !="" && $list.size() > 0)
- <$tagname>
- #foreach($item in $list)
- $item #if( $foreach.hasNext ), #end
- #end
- $tagname>
+<$tagname>
+ #foreach($item in $list)
+ $item #if( $foreach.hasNext ), #end
+ #end
+ $tagname>
#else
- ## print nothing.
+ ## print nothing.
+ #end
#end
-#end
-#macro ( timeout $config)
- #if( $config.get("actionSelect") == "neverTimeout" )
+ #macro ( timeout $config)
+ #if( $config.get("actionSelect") == "neverTimeout" )
## print nothing.
- #elseif($config.get("actionDuration")|| $config.get("actionSelect"))
-
- #print_if_exist_only("duration" $config.get("actionDuration"))
- #print_if_exist_only("responseAction" $config.get("actionSelect"))
-
- #end
-
- #print_list( "errorCodes" $config.get("suspendErrorCode"))
- #print_if_exist_only("initialDuration" $config.get("suspendDuration"))
- #print_if_exist_only("maximumDuration" $config.get("suspendMaxDuration"))
- #print_if_exist( $config.get("factor") 1.0)
-
-
- #print_list("errorCodes" $config.get("retryErroCode"))
- #print_if_exist( $config.get("retryTimeOut") 0)
- #print_if_exist( $config.get("retryDelay") 0)
-
-#end
+ #elseif($config.get("actionDuration")|| $config.get("actionSelect"))
+
+#print_if_exist_only("duration" $config.get("actionDuration"))
+#print_if_exist_only("responseAction" $config.get("actionSelect"))
+
+ #end
+
+#print_list( "errorCodes" $config.get("suspendErrorCode"))
+#print_if_exist_only("initialDuration" $config.get("suspendDuration"))
+#print_if_exist_only("maximumDuration" $config.get("suspendMaxDuration"))
+#print_if_exist( $config.get("factor") 1.0)
+
+
+#print_list("errorCodes" $config.get("retryErroCode"))
+#print_if_exist( $config.get("retryTimeOut") 0)
+#print_if_exist( $config.get("retryDelay") 0)
+
+ #end
#macro ( http_endpoint $name $ep )
@@ -182,62 +182,62 @@
#if($apiIsBlocked)
## if API is blocked send the API Block message
-
-
-
-
- 700700
- API blocked
- This API has been blocked temporarily. Please try again later or contact the system administrators.
-
-
-
-
-
-
-
-
-
+
+
+
+
+ 700700
+ API blocked
+ This API has been blocked temporarily. Please try again later or contact the system administrators.
+
+
+
+
+
+
+
+
+
-#else
-## api not blocked
-#set ($resourceNo = 0)
-#foreach($resource in $resources)
+ #else
+ ## api not blocked
+ #set ($resourceNo = 0)
+ #foreach($resource in $resources)
+ #if($resource.getUriTemplate().contains("{") ||
+ ($resource.getUriTemplate().contains("*") && !$resource.getUriTemplate().endsWith("/*")))
+ uri-template="$util.escapeXml($resource.getUriTemplate())"
+ #else
+ url-mapping="$resource.getUriTemplate()"
+ #end
+ methods="$resource.getMethodsAsString()" faultSequence=#print_string_if_exist($faultSequence "fault")>
- #if(!$resource.getMediationScript().equalsIgnoreCase("null"))
-
-
-
-
-
-
-
-
-
- #else
-
- #end
- #if($resource.getMethodsAsString().contains("GET")||$resource.getMethodsAsString().contains("DELETE"))
-
- #end
-
+
+
+
+
+
+
+
+
+
+#else
+
+#end
+#if($resource.getMethodsAsString().contains("GET")||$resource.getMethodsAsString().contains("DELETE"))
+
+#end
+
-
+
-
+
#set ($resourceNo = $resourceNo + 1)
#end ## end of resource iterator
## print the handlers
@@ -254,9 +254,9 @@ methods="$resource.getMethodsAsString()" faultSequence=#print_string_if_exist($f
#end
-#end
-#if($apiStatus == 'PROTOTYPED')
-#end
-#end
-## end of apiIsBlocked check
-
+ #end
+ #if($apiStatus == 'PROTOTYPED')
+ #end
+ #end
+ ## end of apiIsBlocked check
+
diff --git a/modules/distribution/src/api-resources/api_templates/velocity_template.xml b/modules/distribution/src/api-resources/api_templates/velocity_template.xml
index c484f5f2..49411d26 100644
--- a/modules/distribution/src/api-resources/api_templates/velocity_template.xml
+++ b/modules/distribution/src/api-resources/api_templates/velocity_template.xml
@@ -81,12 +81,28 @@
#timeout( $ep.get('config') )
- #if($destinationBasedStatsEnabled)
+
#end
+
+ #macro ( address_endpoint $name $ep )
+
+#set( $advance_ep = $ep.get("config") )
+
+#timeout( $ep.get('config') )
+
+
#end
+
#macro ( draw_endpoint $type $endpoint_config )
#set( $endpointClass = $endpoint_config.get("endpoint_type") )
@@ -110,16 +126,16 @@
-
-
+
+
-
-
-
-
-
+
+
+
+
+
@@ -130,8 +146,8 @@
-
-
+
+
#else
@@ -157,9 +173,7 @@
>
#timeout( $endpoints.get('config') )
-#if($destinationBasedStatsEnabled)
-#end
#elseif ($endpointClass == "wsdl")
@@ -172,18 +186,24 @@
#timeout()
#end
- #if($destinationBasedStatsEnabled)
- #end
#elseif ($endpointClass == "failover")
#set( $failover_endpoints = $endpoint_config.get("${type}_failovers"))
+ #if($endpoints.get("endpoint_type") == "address")
+ #address_endpoint("${ep_name}_0" $endpoints)
+ #else
#http_endpoint("${ep_name}_0" $endpoints)
+ #end
#set( $i = 1)
#foreach($endpoint in $failover_endpoints)
+ #if($endpoint.get("endpoint_type") == "address")
+ #address_endpoint("${ep_name}_$i" $endpoint)
+ #else
#http_endpoint("${ep_name}_$i" $endpoint)
+ #end
#set( $i = $i + 1)
#end
@@ -203,29 +223,22 @@
#end>
#set( $i = 0)
#foreach($endpoint in $endpoints)
+ #if($endpoint.get("endpoint_type") == "address")
+ #address_endpoint("${ep_name}_$i" $endpoint)
+ #else
#http_endpoint("${ep_name}_$i" $endpoint)
+ #end
#set( $i = $i + 1)
#end
-#elseif ($endpointClass == "default")
+ #elseif ($endpointClass == "default")
-
-
+
+
#end
- #if($destinationBasedStatsEnabled)
-
-
-
-
-
-
-
-
-
- #end
#end
######################## End of Macros ######################################
@@ -266,17 +279,14 @@
#end
methods="$resource.getMethodsAsString()" faultSequence=#print_string_if_exist($faultSequence "fault")>
-## check and set jwt
-#if($jwtIsEnabled && ($apiStatus != 'PROTOTYPED'))
-
-#end
+
## check and set response caching
#if($responseCacheEnabled)
#end
-
+
############## define the filter based on environment type production only, sandbox only , hybrid ############
#if(($environmentType == 'sandbox') || ($environmentType =='hybrid' && !$endpoint_config.get("production_endpoints") ))
@@ -288,7 +298,6 @@
#end
-
#if(($environmentType == 'sandbox') || ($environmentType =='hybrid' && ! $endpoint_config.get("production_endpoints") ))
#draw_endpoint( "sandbox" $endpoint_config )
#else
@@ -329,6 +338,7 @@
#end
+
## check and set response caching
#if($responseCacheEnabled)
@@ -342,7 +352,6 @@
#if($handlers.size() > 0)
#foreach($handler in $handlers)
-#if($handler.className != 'org.wso2.carbon.apimgt.usage.publisher.APIMgtUsageHandler')
#if($handler.hasProperties())
#set ($map = $handler.getProperties() )
@@ -352,16 +361,15 @@
#end
#end
-#end
#end
#end
#if($apiStatus == 'PROTOTYPED')
#end
## end of apiIsBlocked check
-
-
-
-
-
+
+
+
+
+
diff --git a/modules/distribution/src/assembly/bin.xml b/modules/distribution/src/assembly/bin.xml
index 65c34dbf..862b70b0 100644
--- a/modules/distribution/src/assembly/bin.xml
+++ b/modules/distribution/src/assembly/bin.xml
@@ -464,8 +464,6 @@
base-page/**
login/**
styles-layout.css
- modules/manager/manager.jag
- jagg/jagg.jag
@@ -677,19 +675,7 @@
${pom.artifactId}-${pom.version}/bin
755
-
-
-
- ${pom.artifactId}-${pom.version}/repository/deployment/server/jaggeryapps/api-store/jagg
-
- 755
-
-
-
- ${pom.artifactId}-${pom.version}/repository/deployment/server/jaggeryapps/api-store/modules/manager
-
- 755
-
+
diff --git a/modules/distribution/src/repository/conf/api-manager.xml b/modules/distribution/src/repository/conf/api-manager.xml
index 5192aa4f..2c47adb8 100755
--- a/modules/distribution/src/repository/conf/api-manager.xml
+++ b/modules/distribution/src/repository/conf/api-manager.xml
@@ -1,247 +1,181 @@
-
-
+
jdbc/WSO2AM_DB
- None
+ Synapse
+ By default secure vault is disabled.-->
false
-
-
-
-
-
-
+
+
+
+ https://localhost:${mgt.transport.https.port}${carbon.context}services/
+
+ ${admin.username}
+
+ ${admin.password}
+
+ false
+
-
-
+ true
+
+ X-JWT-Assertion
- JDBC driver for the database.
- -->
-
+
+
-
-
-
- https://${carbon.local.ip}:${mgt.transport.https.port}${carbon.context}/services/
-
- admin
-
- admin
-
+
+ http://wso2.org/claims
-
-
-
- X-JWT-Assertion
-
-
-
+
+ SHA256withRSA
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
+
-
+
-
+ An API deployed on a 'production' type gateway will only support production keys
+ An API deployed on a 'sandbox' type gateway will only support sandbox keys
+ An API deployed on a 'hybrid' type gateway will support both production and sandbox keys. -->
+
+
Production and Sandbox
-
- https://${carbon.local.ip}:${mgt.transport.https.port}${carbon.context}/services/
-
- admin
-
- admin
-
+ This is a hybrid gateway that handles both production and sandbox token traffic.
+
+ https://localhost:${mgt.transport.https.port}${carbon.context}services/
+
+ ${admin.username}
+
+ ${admin.password}
+
http://${carbon.local.ip}:${http.nio.port},https://${carbon.local.ip}:${https.nio.port}
-
-
- true
-
-
- true
-
-
- referer
-
-
- false
+
+
+ true
+
+ true
+
+ false
+
+ false
+
+
+
+
+
+
+
-
-
-
+
+
false
-
+
+ {tcp://localhost:7612}
+
+
+ ${admin.username}
+
+ ${admin.password}
+
+
+ org.wso2.carbon.apimgt.usage.client.impl.APIUsageStatisticsRdbmsClientImpl
+
+
+ https://localhost:9444
+ ${admin.username}
+ ${admin.password}
+
+
+ false
+
+
org.wso2.carbon.apimgt.usage.publisher.APIMgtUsageDataBridgeDataPublisher
-
- 7612
-
-
- tcp://localhost:7612/
-
-
- admin
-
-
- admin
-
-
-
-
-
-
+
+ false
+
org.wso2.apimgt.statistics.request
- 1.0.0
+ 1.1.0
org.wso2.apimgt.statistics.response
- 1.0.0
+ 1.1.0
org.wso2.apimgt.statistics.fault
1.0.0
-
- org_wso2_apimgt_statistics_destination
- 1.0.0
- bam-profile
-
org.wso2.apimgt.statistics.throttle
1.0.0
@@ -250,224 +184,168 @@
org.wso2.apimgt.statistics.workflow
1.0.0
+
+ org.wso2.apimgt.statistics.execution.time
+ 1.0.0
+
+
+ org.wso2.analytics.apim.alertStakeholderInfo
+ 1.0.0
+
-
+
+
-
- https://${carbon.local.ip}:${mgt.transport.https.port}${carbon.context}/services/
-
-
- admin
-
-
- admin
-
- false
-
-
-
- false
-
-
-
- ThriftClient
- 10397
+
+ https://localhost:${mgt.transport.https.port}${carbon.context}services/
+
+
+ ${admin.username}
+
+ ${admin.password}
+
+
+ WSClient
10000
- 10397
-
- true
-
-
- am_application_scope
-
-
+
+
+ false
+ localhost
+
+
+
+
org.wso2.carbon.apimgt.keymgt.handlers.DefaultKeyValidationHandler
-
-
-
-
-
-
-
- /oauth2/token
-
-
- https://${carbon.local.ip}:${https.nio.port}/revoke
-
-
- false
-
-
- org.wso2.carbon.apimgt.impl.AMDefaultKeyManagerImpl
+
+
-
+
+
+
+
+ am_application_scope
+
+
+
+ /oauth2/token
+
+ https://localhost:${https.nio.port}/revoke
+
+ false
+
+
+
-
+
true
-
-
-
- true
-
-
- subscriber
-
-
-
+
+
true
false
- https://${carbon.local.ip}:${mgt.transport.https.port}/store
-
- false
-
+ https://localhost:${mgt.transport.https.port}${carbon.context}services/
+
+ ${admin.username}
- -->
+
+ ${admin.password}
+
+ false
+
false
+
+
-
+
true
-
+
true
-
-
-
-
- false
-
+
+
false
- https://${carbon.local.ip}:${mgt.transport.https.port}/publisher
-
+ https://localhost:${mgt.transport.https.port}/publisher
+
+
+
-
+
-
+
-
-
-
+
false
-
+
/resource
@@ -478,56 +356,188 @@
Any
-
-
+
+
-
-
-
-
-
-
-
+
-
-
+
true
-
- https://localhost:9443,http://localhost:9763
+
+ *
-
- authorization,Access-Control-Allow-Origin,Content-Type
+
+ GET,PUT,POST,DELETE,PATCH,OPTIONS
+
+ authorization,Access-Control-Allow-Origin,Content-Type,SOAPAction
+
+
+
+ false
+
-
-
\ No newline at end of file
+ You can enable this and set preferable Logger name. -->
+
+
+
+
+
+
+ /api/am/publisher/{version}/swagger.json
+ GET,HEAD
+
+
+ /api/am/store/{version}/swagger.json
+ GET,HEAD
+
+
+ /api/am/admin/{version}/swagger.json
+ GET,HEAD
+
+
+ /api/am/store/{version}/apis
+ GET,HEAD
+
+
+ /api/am/store/{version}/apis/{apiId}
+ GET,HEAD
+
+
+ /api/am/store/{version}/apis/{apiId}/swagger
+ GET,HEAD
+
+
+ /api/am/store/{version}/apis/{apiId}/documents
+ GET,HEAD
+
+
+ /api/am/store/{version}/apis/{apiId}/documents/{documentId}
+ GET,HEAD
+
+
+ /api/am/store/{version}/apis/{apiId}/documents/{documentId}/content
+ GET,HEAD
+
+
+ /api/am/store/{version}/apis/{apiId}/thumbnail
+ GET,HEAD
+
+
+ /api/am/store/{version}/tags
+ GET,HEAD
+
+
+ /api/am/store/{version}/tiers/{tierLevel}
+ GET,HEAD
+
+
+ /api/am/store/{version}/tiers/{tierLevel}/{tierName}
+ GET,HEAD
+
+
+
+
+ false
+
+ false
+ Binary
+ tcp://${carbon.local.ip}:${receiver.url.port}
+ ssl://${carbon.local.ip}:${auth.url.port}
+ ${admin.username}
+ ${admin.password}
+
+ 1000
+ 200
+
+
+ 200
+ 1000
+ 200
+
+
+
+ https://localhost:${mgt.transport.https.port}${carbon.context}services/
+ ${admin.username}
+ ${admin.password}
+
+
+ false
+
+
+
+ false
+ tcp://${carbon.local.ip}:${jms.port}
+ ${admin.username}
+ ${admin.password}
+ throttleData
+
+
+ TopicConnectionFactory
+ topic
+ org.wso2.andes.jndi.PropertiesFileInitialContextFactory
+ amqp://${jms.username}:${jms.password}@clientid/carbon?brokerlist='${jms.url}'
+
+
+ 20
+ 100
+ 1000
+ 10
+
+
+
+ org.wso2.andes.jndi.PropertiesFileInitialContextFactory
+ repository/conf/jndi.properties
+ topic
+ throttleData
+ allow
+ TopicConnectionFactory
+
+
+ true
+ false
+ false
+ false
+
+
+
diff --git a/modules/distribution/src/repository/conf/cdm-config.xml b/modules/distribution/src/repository/conf/cdm-config.xml
index 1e833eef..85998819 100644
--- a/modules/distribution/src/repository/conf/cdm-config.xml
+++ b/modules/distribution/src/repository/conf/cdm-config.xml
@@ -43,7 +43,7 @@
20
- true
+ false
600000
org.wso2.carbon.device.mgt.core.task.impl.DeviceDetailsRetrieverTask
diff --git a/modules/distribution/src/repository/conf/etc/webapp-publisher-config.xml b/modules/distribution/src/repository/conf/etc/webapp-publisher-config.xml
index 15fce63f..3ba039f2 100644
--- a/modules/distribution/src/repository/conf/etc/webapp-publisher-config.xml
+++ b/modules/distribution/src/repository/conf/etc/webapp-publisher-config.xml
@@ -24,10 +24,14 @@
- https://localhost:9443
+ https://localhost:${carbon.https.port}
true
+
+
+ true
+
default
diff --git a/modules/distribution/src/repository/conf/identity/identity.xml b/modules/distribution/src/repository/conf/identity/identity.xml
index f7a1383c..f4930e5a 100644
--- a/modules/distribution/src/repository/conf/identity/identity.xml
+++ b/modules/distribution/src/repository/conf/identity/identity.xml
@@ -128,9 +128,10 @@
authorization_code
org.wso2.carbon.identity.oauth2.token.handlers.grant.AuthorizationCodeGrantHandler
+
password
- org.wso2.carbon.apimgt.keymgt.handlers.ExtendedPasswordGrantHandler
+ org.wso2.carbon.device.mgt.oauth.extensions.handlers.grant.ExtendedPasswordGrantHandler
refresh_token
diff --git a/modules/distribution/src/repository/database/WSO2MobileDM_DB.h2.db b/modules/distribution/src/repository/database/WSO2MobileDM_DB.h2.db
deleted file mode 100644
index 45be40b9..00000000
Binary files a/modules/distribution/src/repository/database/WSO2MobileDM_DB.h2.db and /dev/null differ
diff --git a/modules/distribution/src/repository/jaggeryapps/api-store/jagg.jag b/modules/distribution/src/repository/jaggeryapps/api-store/jagg.jag
deleted file mode 100644
index c1068ed4..00000000
--- a/modules/distribution/src/repository/jaggeryapps/api-store/jagg.jag
+++ /dev/null
@@ -1,897 +0,0 @@
-<%
-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;
- };
-
- var getTenantURLPrefix = function(tail) {
- if (!tail) {
- tail = "";
- }
- if( site.reverseProxy.tenantHeader == null ||
- request.getHeader(site.reverseProxy.tenantHeader) == null){
- if(getTenantDomain() != null){
- return tail + "tenant=" + getTenantDomain();
- }
- }
- return "";
- }
-
- // 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 = '';
- insertData(this, template, "header", "css", key, css);
- };
-
- var addHeaderCSSCode = function (template, key, css) {
- css = '';
- insertData(this, template, "header", "css", key, css);
- };
-
- var addHeaderJS = function (template, key, js) {
- js = '\n';
- insertData(this, template, "header", "js", key, js);
- };
-
- var addHeaderJSCode = function (template, key, js) {
- js = '';
- 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 = '';
- insertData(this, template, "footer", "css", key, css);
- };
-
- var addFooterCSSCode = function (template, key, css) {
- css = '';
- insertData(this, template, "footer", "css", key, css);
- };
-
- var addFooterJS = function (template, key, js) {
- js = '\t\n';
- insertData(this, template, "footer", "js", key, js);
- };
-
- var addFooterJSCode = function (template, key, js) {
- js = '';
- 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,
- getTenantURLPrefix:getTenantURLPrefix
- };
-
-}());
-%>
diff --git a/modules/distribution/src/repository/jaggeryapps/api-store/manager.jag b/modules/distribution/src/repository/jaggeryapps/api-store/manager.jag
deleted file mode 100644
index 318c1550..00000000
--- a/modules/distribution/src/repository/jaggeryapps/api-store/manager.jag
+++ /dev/null
@@ -1,168 +0,0 @@
-<%
-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);
-}
-
-%>
diff --git a/modules/distribution/src/repository/modules/encode/module.xml b/modules/distribution/src/repository/modules/encode/module.xml
old mode 100644
new mode 100755
diff --git a/modules/distribution/src/repository/modules/lifecycle/module.xml b/modules/distribution/src/repository/modules/lifecycle/module.xml
new file mode 100755
index 00000000..e063a048
--- /dev/null
+++ b/modules/distribution/src/repository/modules/lifecycle/module.xml
@@ -0,0 +1,10 @@
+
+
+
+
diff --git a/modules/distribution/src/repository/modules/lifecycle/scripts/api/api.js b/modules/distribution/src/repository/modules/lifecycle/scripts/api/api.js
new file mode 100755
index 00000000..4cd81d5e
--- /dev/null
+++ b/modules/distribution/src/repository/modules/lifecycle/scripts/api/api.js
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) WSO2 Inc. (http://wso2.com) All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * The api namespace exposes methods to retrieve information individual states of the lifecycles
+ * deployed to the Governance Registry
+ * @namespace
+ * @example
+ * var api = require('lifecycle').api;
+ * var superTenantId=-1234;
+ *
+ * api.getLifecycleList(superTenantId);
+ * @requires store
+ * @requires event
+ * @requires utils
+ * @requires Packages.org.wso2.carbon.governance.lcm.util.CommonUtil
+ */
+var api = {};
+(function (api, core) {
+ var log = new Log('lifecycle');
+
+ /**
+ * Represents a class which models a lifecycle
+ * @constructor
+ * @param {Object} definiton The JSON definition of a lifecycle
+ * @memberOf api
+ */
+ function Lifecycle(definiton) {
+ this.definition = definiton;
+ }
+
+ /**
+ * Returns the JSON definition for the lifecycle managed by the instance
+ * @return {Object} Lifecycle definition
+ */
+ Lifecycle.prototype.getDefinition = function () {
+ return this.definition;
+ };
+
+ /**
+ * Returns the name of the lifecycle
+ * @return {String} The name of the lifecycle
+ */
+ Lifecycle.prototype.getName = function () {
+ if (!this.definition.name) {
+ throw 'Unable to locate name attribute in the lifecycle definition ';
+ }
+ return this.definition.name;
+ };
+
+
+ /**
+ * Returns an instance of the Lifecycle class
+ * @example
+ * var lc = api.getLifecycle('SimpleLifeCycle',-1234);
+ * lc.nextStates('initial');
+ * @param {String} lifecycleName The name of the lifecycle
+ * @param {Number} tenantDomain The tenant ID
+ * @return {Object} An instance of the Lifecycle class
+ * @throws Unable to locate lifecycle without a tenant ID
+ */
+ api.getLifecycle = function (tenantDomain, APIProvider) {
+ if (!tenantDomain) {
+ throw 'Unable to locate lifecycle without a tenantDomain';
+ }
+ var lcJSON = core.getJSONDef(tenantDomain,APIProvider);
+
+ if (!lcJSON) {
+ log.warn('Unable to locate lifecycle for the tenant: ' + tenantDomain);
+ return null; //TODO: This should throw an exception
+ }
+ return new Lifecycle(lcJSON);
+ };
+
+
+}(api, core));
diff --git a/modules/distribution/src/repository/modules/lifecycle/scripts/core/core.js b/modules/distribution/src/repository/modules/lifecycle/scripts/core/core.js
new file mode 100755
index 00000000..bf224cba
--- /dev/null
+++ b/modules/distribution/src/repository/modules/lifecycle/scripts/core/core.js
@@ -0,0 +1,158 @@
+
+/*
+ * Copyright (c) WSO2 Inc. (http://wso2.com) All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * The core namespace contains methods that load the lifecycle definitions from the registry
+ * @namespace
+ * @example
+ * var core = require('lifecycle').core;
+ * core.init(); //Should only be called once in the lifecycle of an app.Ideally in an init script
+ * @requires store
+ * @requires event
+ * @requires utils
+ * @requires Packages.org.wso2.carbon.governance.lcm.util.CommonUtil
+ */
+var core = {};
+(function(core) {
+ var CommonUtil = Packages.org.wso2.carbon.governance.lcm.util.CommonUtil;
+ var LC_MAP = 'lc.map';
+ var EMPTY = '';
+ var log = new Log('lifecycle');
+ var addRawLifecycle = function(lifecycleName, content, tenantId) {
+ var lcMap = core.configs(tenantId);
+ if (!lcMap.raw) {
+ lcMap.raw = {};
+ }
+ lcMap.raw[lifecycleName] = new String(content);
+ };
+ var addJsonLifecycle = function(lifecycleName, definition, tenantId) {
+ var lcMap = core.configs(tenantId);
+ if (!lcMap.json) {
+ lcMap.json = {};
+ }
+ lcMap.json[lifecycleName] = definition;
+ };
+
+ /**
+ * Converts array references to properties.The JSON conversion produces some properties which need to be accessed
+ * using array indexes.
+ * @param {Object} obj Unaltered JSON object
+ * @return {Object} JSON object with resolved array references
+ */
+ var transformJSONLifecycle = function(obj) {
+ obj.configuration = obj.configuration[0];
+ obj.configuration.lifecycle = obj.configuration.lifecycle[0];
+ obj.configuration.lifecycle.scxml = obj.configuration.lifecycle.scxml[0];
+ var states = obj.configuration.lifecycle.scxml.state;
+ var stateObj = {};
+ var state;
+ for (var index = 0; index < states.length; index++) {
+ state = states[index];
+ stateObj[state.id.toLowerCase()] = state;
+ if (stateObj[state.id.toLowerCase()].datamodel) {
+ stateObj[state.id.toLowerCase()].datamodel = stateObj[state.id.toLowerCase()].datamodel[0];
+ }
+ }
+ obj.configuration.lifecycle.scxml.state = stateObj;
+ return obj;
+ };
+ /*
+ Creates an xml file from the contents of an Rxt file
+ @rxtFile: An rxt file
+ @return: An xml file
+ */
+ var createXml = function(content) {
+ var fixedContent = content.replace('', EMPTY).replace('', EMPTY);
+ return new XML(fixedContent);
+ };
+ var parseLifeycle = function(content) {
+ var ref = require('utils').xml;
+ var obj = ref.convertE4XtoJSON(createXml(content));
+ return obj;
+ };
+ var loadLifecycles = function(tenantDomain,APIProvider) {
+
+ //Obtain the definition
+ content = APIProvider.getLifecycleConfiguration(tenantDomain);
+ //Store the raw lifecycle
+ addRawLifecycle("APILifeCycle", content, tenantDomain);
+ //Parse the raw lifecycle definition into a json
+ var jsonLifecycle = parseLifeycle(new String(content));
+ //Correct any array references
+ jsonLifecycle = transformJSONLifecycle(jsonLifecycle);
+ //Store the json lifecycle definition
+ addJsonLifecycle("APILifeCycle", jsonLifecycle, tenantDomain);
+ if(log.isDebugEnabled()){
+ log.debug('Found lifecycle: ' + jsonLifecycle.name + ' tenant: ' + tenantDomain);
+ }
+
+ };
+ var init = function(tenantDomain,APIProvider) {
+ loadLifecycles(tenantDomain,APIProvider);
+ };
+ core.force = function(tenantDomain,APIProvider) {
+ init(tenantDomain,APIProvider);
+ };
+
+ /**
+ * Returns the lifecycle map which is stored in the application context
+ * The map is maintained on a per user basis
+ * @param {Number} tenantId The tenant ID
+ * @return {Object} The lifecycle map
+ */
+ core.configs = function(tenantDomain) {
+ var lcMap = application.get(LC_MAP);
+ if (!lcMap) {
+ log.debug('Creating lcMap in the application context');
+ lcMap = {};
+ application.put(LC_MAP, lcMap);
+ }
+ if (!lcMap[tenantDomain]) {
+ log.debug('Creating lcMap for the tenant: ' + tenantDomain + ' in application context');
+ lcMap[tenantDomain] = {};
+ }
+ return lcMap[tenantDomain];
+ };
+
+ /**
+ * Returns the JSON definition of the provided lifecycle for the given tenant
+ * @param {Number} tenantDomain The tenant Domain
+ * @return {Object} The JSON definitin of the lifecycle
+ * @throws There is no lifcycle information for the tenant
+ * @throws There is no json lifecycle information for the lifecycle of the tenant
+ */
+ core.getJSONDef = function(tenantDomain,APIProvider) {
+ var lifecycleName='APILifeCycle';
+ var lcMap = core.configs(tenantDomain);
+ if (!lcMap) {
+ throw 'There is no lifecycle information for the tenant: ' + tenantDomain;
+ }
+ //if (!lcMap.json) {
+ // throw 'There is no json lifecycle information for the lifecycle of tenant: ' + tenantDomain;
+ //}
+ if (!lcMap.json) {
+ core.force(tenantDomain,APIProvider);
+ lcMap = core.configs(tenantDomain);
+ if (!lcMap.json[lifecycleName]){
+ throw 'There is no lifecycle information for ';
+ }
+ }
+ return lcMap.json[lifecycleName];
+ };
+
+
+}(core));
diff --git a/modules/distribution/src/repository/modules/sso/module.xml b/modules/distribution/src/repository/modules/sso/module.xml
old mode 100644
new mode 100755
diff --git a/modules/distribution/src/repository/modules/sso/scripts/sso.client.js b/modules/distribution/src/repository/modules/sso/scripts/sso.client.js
index 272f0897..27327a95 100644
--- a/modules/distribution/src/repository/modules/sso/scripts/sso.client.js
+++ b/modules/distribution/src/repository/modules/sso/scripts/sso.client.js
@@ -26,123 +26,123 @@ var client = {};
(function (client) {
- var Util = Packages.org.jaggeryjs.modules.sso.common.util.Util,
- carbon = require('carbon'),
- log = new Log();
-
- /**
- * obtains an encoded saml response and return a decoded/unmarshalled saml obj
- * @param samlResp
- * @return {*}
- */
- client.getSamlObject = function (samlResp) {
- var decodedResp = Util.decode(samlResp);
- return Util.unmarshall(decodedResp);
- };
-
- /**
- * validating the signature of the response saml object
- */
- client.validateSignature = function (samlObj, config) {
- var tDomain = Util.getDomainName(samlObj);
- var tId = carbon.server.tenantId({domain: tDomain});
-
- return Util.validateSignature(samlObj,
- config.KEY_STORE_NAME, config.KEY_STORE_PASSWORD, config.IDP_ALIAS, tId, tDomain);
- };
-
- /**
- * Checking if the request is a logout call
- */
- client.isLogoutRequest = function (samlObj) {
- return samlObj instanceof Packages.org.opensaml.saml2.core.LogoutRequest;
- };
-
- /**
- * Checking if the request is a logout call
- */
- client.isLogoutResponse = function (samlObj) {
- return samlObj instanceof Packages.org.opensaml.saml2.core.LogoutResponse;
- };
-
- /**
- * getting url encoded saml authentication request
- * @param issuerId
- */
- client.getEncodedSAMLAuthRequest = function (issuerId) {
- return Util.encode(
- Util.marshall(
- new Packages.org.jaggeryjs.modules.sso.common.builders.AuthReqBuilder().buildAuthenticationRequest(issuerId)
- ));
- };
-
- /**
- * get url encoded saml logout request
- */
- client.getEncodedSAMLLogoutRequest = function (user, sessionIndex, issuerId) {
- return Util.encode(
- Util.marshall(
- new Packages.org.jaggeryjs.modules.sso.common.builders.LogoutRequestBuilder().buildLogoutRequest(user, sessionIndex,
- Packages.org.jaggeryjs.modules.sso.common.constants.SSOConstants.LOGOUT_USER,
- issuerId)));
- };
-
- /**
- * Reads the returning SAML login response and populates a session info object
- */
- client.decodeSAMLLoginResponse = function (samlObj, samlResp, sessionId) {
- var samlSessionObj = {
- // sessionId, loggedInUser, sessionIndex, samlToken
- };
-
- if (samlObj instanceof Packages.org.opensaml.saml2.core.Response) {
-
- var assertions = samlObj.getAssertions();
-
- // extract the session index
- if (assertions != null && assertions.size() > 0) {
- var authenticationStatements = assertions.get(0).getAuthnStatements();
- var authnStatement = authenticationStatements.get(0);
- if (authnStatement != null) {
- if (authnStatement.getSessionIndex() != null) {
- samlSessionObj.sessionIndex = authnStatement.getSessionIndex();
- }
- }
- }
-
- // extract the username
- if (assertions != null && assertions.size() > 0) {
- var subject = assertions.get(0).getSubject();
- if (subject != null) {
- if (subject.getNameID() != null) {
- samlSessionObj.loggedInUser = subject.getNameID().getValue();
- }
- }
- }
- samlSessionObj.sessionId = sessionId;
- samlSessionObj.samlToken = samlResp;
- }
-
- return samlSessionObj;
- };
-
- /**
- * This method is to get the session index when a single logout happens
- * The IDP sends a logout request to the ACS with the session index, so that
- * the app can invalidate the associated HTTP Session
- */
- client.decodeSAMLLogoutRequest = function (samlObj) {
- var sessionIndex = null;
-
- if (samlObj instanceof org.opensaml.saml2.core.LogoutRequest) {
- var sessionIndexes = samlObj.getSessionIndexes();
- if (sessionIndexes != null && sessionIndexes.size() > 0) {
- sessionIndex = sessionIndexes.get(0).getSessionIndex();
- }
- }
-
- return sessionIndex;
-
- };
+ var Util = Packages.org.jaggeryjs.modules.sso.common.util.Util,
+ carbon = require('carbon'),
+ log = new Log();
+
+ /**
+ * obtains an encoded saml response and return a decoded/unmarshalled saml obj
+ * @param samlResp
+ * @return {*}
+ */
+ client.getSamlObject = function (samlResp) {
+ var decodedResp = Util.decode(samlResp);
+ return Util.unmarshall(decodedResp);
+ };
+
+ /**
+ * validating the signature of the response saml object
+ */
+ client.validateSignature = function (samlObj, config) {
+ var tDomain = Util.getDomainName(samlObj);
+ var tId = carbon.server.tenantId({domain: tDomain});
+
+ return Util.validateSignature(samlObj,
+ config.KEY_STORE_NAME, config.KEY_STORE_PASSWORD, config.IDP_ALIAS, tId, tDomain);
+ };
+
+ /**
+ * Checking if the request is a logout call
+ */
+ client.isLogoutRequest = function (samlObj) {
+ return samlObj instanceof Packages.org.opensaml.saml2.core.LogoutRequest;
+ };
+
+ /**
+ * Checking if the request is a logout call
+ */
+ client.isLogoutResponse = function (samlObj) {
+ return samlObj instanceof Packages.org.opensaml.saml2.core.LogoutResponse;
+ };
+
+ /**
+ * getting url encoded saml authentication request
+ * @param issuerId
+ */
+ client.getEncodedSAMLAuthRequest = function (issuerId) {
+ return Util.encode(
+ Util.marshall(
+ new Packages.org.jaggeryjs.modules.sso.common.builders.AuthReqBuilder().buildAuthenticationRequest(issuerId)
+ ));
+ };
+
+ /**
+ * get url encoded saml logout request
+ */
+ client.getEncodedSAMLLogoutRequest = function (user, sessionIndex, issuerId) {
+ return Util.encode(
+ Util.marshall(
+ new Packages.org.jaggeryjs.modules.sso.common.builders.LogoutRequestBuilder().buildLogoutRequest(user, sessionIndex,
+ Packages.org.jaggeryjs.modules.sso.common.constants.SSOConstants.LOGOUT_USER,
+ issuerId)));
+ };
+
+ /**
+ * Reads the returning SAML login response and populates a session info object
+ */
+ client.decodeSAMLLoginResponse = function (samlObj, samlResp, sessionId) {
+ var samlSessionObj = {
+ // sessionId, loggedInUser, sessionIndex, samlToken
+ };
+
+ if (samlObj instanceof Packages.org.opensaml.saml2.core.Response) {
+
+ var assertions = samlObj.getAssertions();
+
+ // extract the session index
+ if (assertions != null && assertions.size() > 0) {
+ var authenticationStatements = assertions.get(0).getAuthnStatements();
+ var authnStatement = authenticationStatements.get(0);
+ if (authnStatement != null) {
+ if (authnStatement.getSessionIndex() != null) {
+ samlSessionObj.sessionIndex = authnStatement.getSessionIndex();
+ }
+ }
+ }
+
+ // extract the username
+ if (assertions != null && assertions.size() > 0) {
+ var subject = assertions.get(0).getSubject();
+ if (subject != null) {
+ if (subject.getNameID() != null) {
+ samlSessionObj.loggedInUser = subject.getNameID().getValue();
+ }
+ }
+ }
+ samlSessionObj.sessionId = sessionId;
+ samlSessionObj.samlToken = samlResp;
+ }
+
+ return samlSessionObj;
+ };
+
+ /**
+ * This method is to get the session index when a single logout happens
+ * The IDP sends a logout request to the ACS with the session index, so that
+ * the app can invalidate the associated HTTP Session
+ */
+ client.decodeSAMLLogoutRequest = function (samlObj) {
+ var sessionIndex = null;
+
+ if (samlObj instanceof org.opensaml.saml2.core.LogoutRequest) {
+ var sessionIndexes = samlObj.getSessionIndexes();
+ if (sessionIndexes != null && sessionIndexes.size() > 0) {
+ sessionIndex = sessionIndexes.get(0).getSessionIndex();
+ }
+ }
+
+ return sessionIndex;
+
+ };
}(client));
\ No newline at end of file
diff --git a/modules/distribution/src/repository/modules/tenantmanager/module.xml b/modules/distribution/src/repository/modules/tenantmanager/module.xml
old mode 100644
new mode 100755
diff --git a/modules/distribution/src/repository/modules/utils/module.xml b/modules/distribution/src/repository/modules/utils/module.xml
new file mode 100755
index 00000000..98050dee
--- /dev/null
+++ b/modules/distribution/src/repository/modules/utils/module.xml
@@ -0,0 +1,6 @@
+
+
+
diff --git a/modules/distribution/src/repository/modules/utils/scripts/xml/xml.js b/modules/distribution/src/repository/modules/utils/scripts/xml/xml.js
new file mode 100755
index 00000000..7caefe9d
--- /dev/null
+++ b/modules/distribution/src/repository/modules/utils/scripts/xml/xml.js
@@ -0,0 +1,138 @@
+/*
+ * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * WSO2 Inc. licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+var xml = {};
+
+(function () {
+
+ var log=new Log('util.xml')
+
+ /*
+ The method is used to create a JSON object using
+ an xml object.
+ @xmlElement: An xml element object to be processed
+ @return: A pseudo object containing the properties of the
+ xml element.
+ */
+ var createJSONObject = function (xmlElement) {
+
+ var pseudo = {};
+
+ //Extract all attributes
+ var attributes = xmlElement.@*;
+
+ //Fill the pseudo object with the attributes of the element
+ for (var attributeKey in attributes) {
+ var attribute = attributes[attributeKey];
+ pseudo[attribute.localName()] = attribute.toString();
+ }
+
+ return pseudo;
+ };
+
+ /*
+ The function converts an E4X Xml object to a JSON object
+ This function has been adapted from the work of Oleg Podsechin available at
+ https://gist.github.com/olegp/642667
+ It uses a slightly modified version of his algorithm , therefore
+ all credit should be attributed to Oleg Podsechin.
+ IMPORTANT:
+ 1. It does not create a 1..1 mapping due to the differences
+ between Xml and JSON.It is IMPORTANT that you verify the structure
+ of the object generated before using it.
+ 2. The input xml object must not contain the xml header information
+ This is a known bug 336551 (Mozilla Developer Network)
+ Source: https://developer.mozilla.org/en/docs/E4X
+ Please remove the header prior to sending the xml object for processing.
+ @root: A starting element in an E4X Xml object
+ @return: A JSON object mirroring the provided Xml object
+ */
+ var recursiveConvertE4XtoJSON = function (root) {
+
+ log.debug('Root: ' + root.localName());
+
+ //Obtain child nodes
+ var children = root.*;
+
+ //The number of children
+ var numChildren = children.length();
+
+ //No children
+ if (numChildren == 0) {
+
+ //Extract contents
+ return createJSONObject(root);
+ }
+ else {
+
+ //Create an empty object
+ var rootObject = createJSONObject(root);
+
+ //Could be multiple children
+ for (var childElementKey in children) {
+
+ var child = children[childElementKey];
+
+ log.debug('Examining child: ' + child.localName());
+
+ //If the child just contains a single value then stop
+ if (child.localName() == undefined) {
+
+ log.debug('Child is undefined: ' + child.toString());
+
+ //Change the object to just a key value pair
+ rootObject[root.localName()] = child.toString();
+ return rootObject;
+ }
+
+ //Make a recursive call to construct the child element
+ var createdObject = recursiveConvertE4XtoJSON(child);
+
+ log.debug('Converted object: ' + stringify(createdObject));
+
+ //Check if the root object has the property
+ if (rootObject.hasOwnProperty(child.localName())) {
+
+ log.debug('key: ' + child.localName() + ' already present.');
+ rootObject[child.localName()].push(createdObject);
+ }
+ else {
+
+ log.debug('key: ' + child.localName() + ' not present.');
+ rootObject[child.localName()] = [];
+ rootObject[child.localName()].push(createdObject);
+
+ }
+ }
+
+ log.debug('root: ' + root.localName());
+
+ return rootObject;
+ }
+ };
+
+ /**
+ * The function is used to convert an E4X xml to JSON
+ * @param root
+ */
+ xml.convertE4XtoJSON = function (root) {
+ return recursiveConvertE4XtoJSON(root);
+ };
+
+
+}());