Merge branch 'newAPPM' into 'master'

Add new entgra app manager module and remove wso2 app manager module.

Closes #104

See merge request entgra/product-iots!39
merge-requests/41/head
Milan Perera 5 years ago
commit 5fc168df94

@ -11,7 +11,7 @@ It also offers a complete and secure enterprise mobility management (EMM/MDM) so
Entgra IoT Server comes with advanced analytics, enabling users to analyze speed, proximity, and geo-fencing information of devices including details of those in motion and stationary state.
Find the online documentation at :
https://entgra-documentation.gitlab.io/v3.7.0
https://entgra-documentation.gitlab.io/v3.8.0
### Key Features of Entgra IoT Server
@ -53,11 +53,11 @@ https://entgra-documentation.gitlab.io/v3.7.0
* Support for SCEP protocol (encryption and authenticity)
### How to Run
* Extract the downloaded entgraiot-3.7.0.zip file; this will create a folder named entgraiot-3.7.0.
* Extract the downloaded entgraiot-3.8.0.zip file; this will create a folder named entgraiot-3.8.0.
* IoT Server comes with three runnable components namely broker, core, and analytics. Start these components in following order by executing the following scripts:
* entgraiot-3.7.0/bin/broker.sh [.bat]
* entgraiot-3.7.0/bin/iot-server.sh [.bat]
* entgraiot-3.7.0/bin/analytics.sh [.bat]
* entgraiot-3.8.0/bin/broker.sh [.bat]
* entgraiot-3.8.0/bin/iot-server.sh [.bat]
* entgraiot-3.8.0/bin/analytics.sh [.bat]
### How to Contribute

@ -562,76 +562,76 @@
<property name="db.dir" value="target/wso2carbon-core-${carbon.kernel.version}/repository/database" />
<property name="userid" value="wso2carbon" />
<property name="password" value="wso2carbon" />
<property name="dbURL" value="jdbc:h2:file:${basedir}/${db.dir}/WSO2APPM_DB;DB_CLOSE_ON_EXIT=FALSE" />
<property name="dbURL" value="jdbc:h2:file:${basedir}/${db.dir}/WSO2DM_APPM_DB;DB_CLOSE_ON_EXIT=FALSE" />
<sql driver="org.h2.Driver" url="${dbURL}" userid="${userid}" password="${password}" autocommit="true" onerror="continue">
<classpath refid="maven.dependency.classpath" />
<classpath refid="maven.compile.classpath" />
<classpath refid="maven.runtime.classpath" />
<fileset file="${basedir}/../p2-profile/iot-core-profile/target/wso2carbon-core-${carbon.kernel.version}/dbscripts/appmgt/h2.sql" />
<fileset file="${basedir}/../p2-profile/iot-core-profile/target/wso2carbon-core-${carbon.kernel.version}/dbscripts/cdm/application-mgt/h2.sql" />
</sql>
<echo message="##################### END ####################" />
</tasks>
</configuration>
</execution>
<execution>
<!-- Creating JAGH2 schema -->
<id>create-JAGH2-schema</id>
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo message="########### Create JAGH2 Schema ###########" />
<property name="db.dir" value="target/wso2carbon-core-${carbon.kernel.version}/repository/database" />
<property name="userid" value="wso2carbon" />
<property name="password" value="wso2carbon" />
<property name="dbURL" value="jdbc:h2:file:${basedir}/${db.dir}/ES_STORAGE;DB_CLOSE_ON_EXIT=FALSE;LOCK_TIMEOUT=60000" />
<!--<property name="dbURL" value="jdbc:h2:file:${basedir}/${db.dir}/WSO2DM_DB;DB_CLOSE_ON_EXIT=FALSE" />-->
<sql driver="org.h2.Driver" url="${dbURL}" userid="${userid}" password="${password}" autocommit="true" onerror="continue">
<classpath refid="maven.dependency.classpath" />
<classpath refid="maven.compile.classpath" />
<classpath refid="maven.runtime.classpath" />
<fileset file="${basedir}/../p2-profile/iot-core-profile/target/wso2carbon-core-${carbon.kernel.version}/dbscripts/storage/h2/h2.sql" />
</sql>
<echo message="##################### END ####################" />
</tasks>
</configuration>
</execution>
<execution>
<!-- Creating Social DB schema -->
<id>create-social-db-schema</id>
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo message="########### Create Social Plugin H2 Schema ###########" />
<property name="db.dir" value="target/wso2carbon-core-${carbon.kernel.version}/repository/database" />
<property name="userid" value="wso2carbon" />
<property name="password" value="wso2carbon" />
<property name="dbURL" value="jdbc:h2:file:${basedir}/${db.dir}/WSO2_SOCIAL_DB;DB_CLOSE_ON_EXIT=FALSE" />
<sql driver="org.h2.Driver" url="${dbURL}" userid="${userid}" password="${password}" autocommit="true" onerror="continue">
<classpath refid="maven.dependency.classpath" />
<classpath refid="maven.compile.classpath" />
<classpath refid="maven.runtime.classpath" />
<fileset file="${basedir}/../p2-profile/iot-core-profile/target/wso2carbon-core-${carbon.kernel.version}/dbscripts/social/h2/resource.sql" />
</sql>
<echo message="##################### END ####################" />
</tasks>
</configuration>
</execution>
<!--<execution>-->
<!--&lt;!&ndash; Creating JAGH2 schema &ndash;&gt;-->
<!--<id>create-JAGH2-schema</id>-->
<!--<phase>package</phase>-->
<!--<goals>-->
<!--<goal>run</goal>-->
<!--</goals>-->
<!--<configuration>-->
<!--<tasks>-->
<!--<echo message="########### Create JAGH2 Schema ###########" />-->
<!--<property name="db.dir" value="target/wso2carbon-core-${carbon.kernel.version}/repository/database" />-->
<!--<property name="userid" value="wso2carbon" />-->
<!--<property name="password" value="wso2carbon" />-->
<!--<property name="dbURL" value="jdbc:h2:file:${basedir}/${db.dir}/ES_STORAGE;DB_CLOSE_ON_EXIT=FALSE;LOCK_TIMEOUT=60000" />-->
<!--&lt;!&ndash;<property name="dbURL" value="jdbc:h2:file:${basedir}/${db.dir}/WSO2DM_DB;DB_CLOSE_ON_EXIT=FALSE" />&ndash;&gt;-->
<!--<sql driver="org.h2.Driver" url="${dbURL}" userid="${userid}" password="${password}" autocommit="true" onerror="continue">-->
<!--<classpath refid="maven.dependency.classpath" />-->
<!--<classpath refid="maven.compile.classpath" />-->
<!--<classpath refid="maven.runtime.classpath" />-->
<!--<fileset file="${basedir}/../p2-profile/iot-core-profile/target/wso2carbon-core-${carbon.kernel.version}/dbscripts/storage/h2/h2.sql" />-->
<!--</sql>-->
<!--<echo message="##################### END ####################" />-->
<!--</tasks>-->
<!--</configuration>-->
<!--</execution>-->
<!--<execution>-->
<!--&lt;!&ndash; Creating Social DB schema &ndash;&gt;-->
<!--<id>create-social-db-schema</id>-->
<!--<phase>package</phase>-->
<!--<goals>-->
<!--<goal>run</goal>-->
<!--</goals>-->
<!--<configuration>-->
<!--<tasks>-->
<!--<echo message="########### Create Social Plugin H2 Schema ###########" />-->
<!--<property name="db.dir" value="target/wso2carbon-core-${carbon.kernel.version}/repository/database" />-->
<!--<property name="userid" value="wso2carbon" />-->
<!--<property name="password" value="wso2carbon" />-->
<!--<property name="dbURL" value="jdbc:h2:file:${basedir}/${db.dir}/WSO2_SOCIAL_DB;DB_CLOSE_ON_EXIT=FALSE" />-->
<!--<sql driver="org.h2.Driver" url="${dbURL}" userid="${userid}" password="${password}" autocommit="true" onerror="continue">-->
<!--<classpath refid="maven.dependency.classpath" />-->
<!--<classpath refid="maven.compile.classpath" />-->
<!--<classpath refid="maven.runtime.classpath" />-->
<!--<fileset file="${basedir}/../p2-profile/iot-core-profile/target/wso2carbon-core-${carbon.kernel.version}/dbscripts/social/h2/resource.sql" />-->
<!--</sql>-->
<!--<echo message="##################### END ####################" />-->
<!--</tasks>-->
<!--</configuration>-->
<!--</execution>-->
<execution>
<!-- Creating Android Mobile Plugin Management schema -->
<id>create-mobile-android-plugin-mgt-schema</id>

@ -27,7 +27,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.wso2.iot.analytics.devicemgt-plugins</groupId>
<artifactId>analytics-devicetype-feature-installation</artifactId>
<version>3.7.0-SNAPSHOT</version>
<version>4.0.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Install Virtual Fire Alarm, Raspberry Pi, Arduino, Android Sense Device Types - Analytics</name>
<url>http://wso2.org</url>

@ -388,36 +388,36 @@
</fileSet>
<!-- Copying APP Manager Publisher and Store Jaggery apps -->
<fileSet>
<directory>
../p2-profile/iot-core-profile/target/wso2carbon-core-${carbon.kernel.version}/wso2/deployment/server/jaggeryapps/publisher/
</directory>
<outputDirectory>${pom.artifactId}-${pom.version}/repository/deployment/server/jaggeryapps/publisher
</outputDirectory>
<excludes>
<exclude>publisherLogo/**</exclude>
<exclude>publisherTheme/**</exclude>
<exclude>publisherSite/**</exclude>
<exclude>footer/**</exclude>
<exclude>localstyles.css</exclude>
<exclude>**/jaggery.conf</exclude>
</excludes>
</fileSet>
<fileSet>
<directory>
../p2-profile/iot-core-profile/target/wso2carbon-core-${carbon.kernel.version}/wso2/deployment/server/jaggeryapps/store/
</directory>
<outputDirectory>${pom.artifactId}-${pom.version}/repository/deployment/server/jaggeryapps/store
</outputDirectory>
<excludes>
<exclude>storeLogo/**</exclude>
<exclude>storeSite/**</exclude>
<exclude>base-page/**</exclude>
<exclude>login/**</exclude>
<exclude>styles-layout.css</exclude>
<exclude>**/jaggery.conf</exclude>
</excludes>
</fileSet>
<!--<fileSet>-->
<!--<directory>-->
<!--../p2-profile/iot-core-profile/target/wso2carbon-core-${carbon.kernel.version}/wso2/deployment/server/jaggeryapps/publisher/-->
<!--</directory>-->
<!--<outputDirectory>${pom.artifactId}-${pom.version}/repository/deployment/server/jaggeryapps/publisher-->
<!--</outputDirectory>-->
<!--<excludes>-->
<!--<exclude>publisherLogo/**</exclude>-->
<!--<exclude>publisherTheme/**</exclude>-->
<!--<exclude>publisherSite/**</exclude>-->
<!--<exclude>footer/**</exclude>-->
<!--<exclude>localstyles.css</exclude>-->
<!--<exclude>**/jaggery.conf</exclude>-->
<!--</excludes>-->
<!--</fileSet>-->
<!--<fileSet>-->
<!--<directory>-->
<!--../p2-profile/iot-core-profile/target/wso2carbon-core-${carbon.kernel.version}/wso2/deployment/server/jaggeryapps/store/-->
<!--</directory>-->
<!--<outputDirectory>${pom.artifactId}-${pom.version}/repository/deployment/server/jaggeryapps/store-->
<!--</outputDirectory>-->
<!--<excludes>-->
<!--<exclude>storeLogo/**</exclude>-->
<!--<exclude>storeSite/**</exclude>-->
<!--<exclude>base-page/**</exclude>-->
<!--<exclude>login/**</exclude>-->
<!--<exclude>styles-layout.css</exclude>-->
<!--<exclude>**/jaggery.conf</exclude>-->
<!--</excludes>-->
<!--</fileSet>-->
<!-- Copying API Manager Store Jaggery app -->
<fileSet>
@ -437,16 +437,16 @@
</excludes>
</fileSet>
<fileSet>
<directory>
../p2-profile/iot-core-profile/target/wso2carbon-core-${carbon.kernel.version}/wso2/deployment/server/jaggeryapps/social/
</directory>
<outputDirectory>${pom.artifactId}-${pom.version}/repository/deployment/server/jaggeryapps/social
</outputDirectory>
<excludes>
<exclude>**/jaggery.conf</exclude>
</excludes>
</fileSet>
<!-- <fileSet>-->
<!-- <directory>-->
<!-- ../p2-profile/iot-core-profile/target/wso2carbon-core-${carbon.kernel.version}/wso2/deployment/server/jaggeryapps/social/-->
<!-- </directory>-->
<!-- <outputDirectory>${pom.artifactId}-${pom.version}/repository/deployment/server/jaggeryapps/social-->
<!-- </outputDirectory>-->
<!-- <excludes>-->
<!-- <exclude>**/jaggery.conf</exclude>-->
<!-- </excludes>-->
<!-- </fileSet>-->
<!-- Copying Android Mutual SSL Synapse files -->
<fileSet>
@ -1373,12 +1373,6 @@
<outputDirectory>${pom.artifactId}-${pom.version}/repository/database/</outputDirectory>
<fileMode>644</fileMode>
</file>
<file>
<source>src/core/conf/app-manager.xml</source>
<outputDirectory>${pom.artifactId}-${pom.version}/conf</outputDirectory>
<filtered>true</filtered>
<fileMode>644</fileMode>
</file>
<file>
<source>src/core/resources/appm-tenant-conf.xml</source>
<outputDirectory>${pom.artifactId}-${pom.version}/repository/resources</outputDirectory>
@ -1419,10 +1413,10 @@
<!-- Copying H2 database related files corresponding to default App management repository schema -->
<file>
<source>
target/wso2carbon-core-${carbon.kernel.version}/repository/database/WSO2APPM_DB.h2.db
target/wso2carbon-core-${carbon.kernel.version}/repository/database/WSO2DM_APPM_DB.h2.db
</source>
<outputDirectory>${pom.artifactId}-${pom.version}/repository/database</outputDirectory>
<destName>WSO2APPM_DB.h2.db</destName>
<destName>WSO2DM_APPM_DB.h2.db</destName>
<fileMode>644</fileMode>
</file>
<!-- Copying H2 database related files corresponding to default Device management repository schema -->
@ -1586,13 +1580,13 @@
</outputDirectory>
<fileMode>755</fileMode>
</file>
<file>
<source>src/core/jaggeryapps/publisher/jaggery.conf</source>
<outputDirectory>
${pom.artifactId}-${pom.version}/repository/deployment/server/jaggeryapps/publisher/
</outputDirectory>
<fileMode>755</fileMode>
</file>
<!--<file>-->
<!--<source>src/core/jaggeryapps/publisher/jaggery.conf</source>-->
<!--<outputDirectory>-->
<!--${pom.artifactId}-${pom.version}/repository/deployment/server/jaggeryapps/publisher/-->
<!--</outputDirectory>-->
<!--<fileMode>755</fileMode>-->
<!--</file>-->
<file>
<source>src/core/jaggeryapps/privacy-policies/jaggery.conf</source>
@ -1602,20 +1596,20 @@
<fileMode>755</fileMode>
</file>
<file>
<source>src/core/jaggeryapps/social/jaggery.conf</source>
<outputDirectory>
${pom.artifactId}-${pom.version}/repository/deployment/server/jaggeryapps/social/
</outputDirectory>
<fileMode>755</fileMode>
</file>
<file>
<source>src/core/jaggeryapps/store/jaggery.conf</source>
<outputDirectory>
${pom.artifactId}-${pom.version}/repository/deployment/server/jaggeryapps/store/
</outputDirectory>
<fileMode>755</fileMode>
</file>
<!-- <file>-->
<!-- <source>src/core/jaggeryapps/social/jaggery.conf</source>-->
<!-- <outputDirectory>-->
<!-- ${pom.artifactId}-${pom.version}/repository/deployment/server/jaggeryapps/social/-->
<!-- </outputDirectory>-->
<!-- <fileMode>755</fileMode>-->
<!-- </file>-->
<!--<file>-->
<!--<source>src/core/jaggeryapps/store/jaggery.conf</source>-->
<!--<outputDirectory>-->
<!--${pom.artifactId}-${pom.version}/repository/deployment/server/jaggeryapps/store/-->
<!--</outputDirectory>-->
<!--<fileMode>755</fileMode>-->
<!--</file>-->
<file>
<source>
src/core/cloud/portal/common.css
@ -1680,14 +1674,14 @@
${pom.artifactId}-${pom.version}/conf/
</outputDirectory>
</file>
<file>
<source>
../p2-profile/iot-core-profile/target/wso2carbon-core-${carbon.kernel.version}/repository/conf/social.xml
</source>
<outputDirectory>
${pom.artifactId}-${pom.version}/conf/
</outputDirectory>
</file>
<!--<file>-->
<!--<source>-->
<!--../p2-profile/iot-core-profile/target/wso2carbon-core-${carbon.kernel.version}/repository/conf/social.xml-->
<!--</source>-->
<!--<outputDirectory>-->
<!--${pom.artifactId}-${pom.version}/conf/-->
<!--</outputDirectory>-->
<!--</file>-->
<file>
<source>
../p2-profile/iot-core-profile/target/wso2carbon-core-${carbon.kernel.version}/repository/conf/identity/entitlement.properties
@ -1696,14 +1690,14 @@
${pom.artifactId}-${pom.version}/conf/identity
</outputDirectory>
</file>
<file>
<source>
../p2-profile/iot-core-profile/target/wso2carbon-core-${carbon.kernel.version}/wso2/resources/lifecycles/MobileAppLifeCycle.xml
</source>
<outputDirectory>
${pom.artifactId}-${pom.version}/repository/resources/lifecycles
</outputDirectory>
</file>
<!--<file>-->
<!--<source>-->
<!--../p2-profile/iot-core-profile/target/wso2carbon-core-${carbon.kernel.version}/wso2/resources/lifecycles/MobileAppLifeCycle.xml-->
<!--</source>-->
<!--<outputDirectory>-->
<!--${pom.artifactId}-${pom.version}/repository/resources/lifecycles-->
<!--</outputDirectory>-->
<!--</file>-->
<file>
<source>src/core/samples/connectedcup-samples-deployer.xml</source>
<outputDirectory>${pom.artifactId}-${pom.version}/samples/</outputDirectory>

@ -18,7 +18,7 @@
product.name=Entgra IoT Server
product.key=IoT
product.version=3.7.0-SNAPSHOT
product.version=4.0.0-SNAPSHOT
product.doc.version=360
carbon.version=4.4.26

@ -193,6 +193,6 @@ goto end
:invalidUsage
echo Usage: carbondump.bat [-carbonHome path] [-pid of the carbon instance]
echo e.g. carbondump.bat -carbonHome C:\user\wso2carbon-3.7.0\ -pid 5151
echo e.g. carbondump.bat -carbonHome C:\user\wso2carbon-4.0.0\ -pid 5151
:END

@ -1,494 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<AppManager>
<!--
JNDI name of the data source to be used by the app management components such as store, publisher, gateway
This data source should be defined in the master-datasources.xml file in conf/datasources directory.
-->
<DataSourceName>jdbc/WSO2APPM_DB</DataSourceName>
<DataSources>
<Storage>jdbc/ES_Storage</Storage>
</DataSources>
<APPStoreConfiguration>
<!--
This parameter specifies whether to display multiple versions of same
APP or only showing the latest version of an APP.
-->
<DisplayMultipleVersions>true</DisplayMultipleVersions>
</APPStoreConfiguration>
<!--subscription configuration is used by gateway,store,publisher-->
<SubscriptionConfiguration>
<EnableSelfSubscription>false</EnableSelfSubscription>
<EnableEnterpriseSubscription>false</EnableEnterpriseSubscription>
</SubscriptionConfiguration>
<!-- The authorization manager configuration to be used by store / publisher components -->
<AuthManager>
<!--
Server URL of the Authentication service
-->
<ServerURL>https://localhost:${mgt.transport.https.port}/services/</ServerURL>
<!--
Admin username for the Authentication manager.
-->
<Username>admin</Username>
<!--
Admin password for the Authentication manager.
-->
<Password>admin</Password>
</AuthManager>
<!-- The configuration for app discovery service -->
<DiscoveryConfiguration>
<!--
Configures the discovery handlers.
Discovery handlers are the ones connecting remote servers and discover the applications
-->
<DiscoveryHandlers>
<!-- List of discovery handlers. name is the key being used. Class is the handler class -->
<Handler name="WSO2-AS" class="org.wso2.carbon.appmgt.impl.discovery.Wso2AppServerDiscoveryHandler" />
</DiscoveryHandlers>
</DiscoveryConfiguration>
<!--
Configuration parameters for security handlers of the relevant proxy web apps.
-->
<AppConsumerAuthConfiguration>
<!-- Timeout (in seconds) for the gateway session cache. -->
<SessionTimeout>1800</SessionTimeout>
<!--
Enable/Disable JWT generation. Default is false.
-->
<EnableTokenGeneration>true</EnableTokenGeneration>
<!--
This parameter specifies which implementation should be used for generating the Token.
JWTGenerator is the default implementation provided.
-->
<TokenGeneratorImpl>org.wso2.carbon.appmgt.impl.token.JWTGenerator</TokenGeneratorImpl>
<!--
Name of the HTTP header which contains the JWT to be sent to the web app, from the gateway.
-->
<SecurityContextHeader>X-JWT-Assertion</SecurityContextHeader>
<!--
Fully qualified name of the class that will retrieve additional user claims to be appended to the JWT.
If not specified no claims will be appended.
The DefaultClaimsRetriever class adds user claims from the default carbon user store.
-->
<ClaimsRetrieverImplClass>org.wso2.carbon.appmgt.impl.token.DefaultClaimsRetriever</ClaimsRetrieverImplClass>
<!--
The dialectURI under which the claimURIs that need to be appended to the JWT are defined.
Not used with custom ClaimsRetriever implementations.
The same value is used in the keys for appending the default properties to the JWT.
-->
<ConsumerDialectURI>http://wso2.org/claims</ConsumerDialectURI>
<!--
Signature algorithm for signing the JWT. Accepts "SHA256withRSA" or "NONE".
To disable signing explicitly specify "NONE".
-->
<SignatureAlgorithm>SHA256withRSA</SignatureAlgorithm>
<!--
By default all claim values of default claim dialect uri which mapped to the user profile get added to the JWT token.
By setting "AddClaimsSelectively" attribute to true, publisher can select only required claim attributes to each App and include into JWT token.
-->
<AddClaimsSelectively>false</AddClaimsSelectively>
<!--
Add SAML response as transport header in outgoing message.
-->
<AddSAMLResponseHeaderToOutMessage>false</AddSAMLResponseHeaderToOutMessage>
</AppConsumerAuthConfiguration>
<APIGateway>
<!-- The environments to which an API will be published -->
<Environments>
<!-- TODO : Get rid of gateway type -->
<Environment type="hybrid">
<Name>Gateway Endpoint</Name>
<!--
Server URL of the API gateway.
-->
<ServerURL>https://${carbon.local.ip}:${mgt.transport.https.port}/services/</ServerURL>
<!--
Admin username for the API gateway.
-->
<Username>admin</Username>
<!--
Admin password for the API gateway.
-->
<Password>admin</Password>
<!--
Endpoint URLs for the APIs hosted in this API gateway.
-->
<GatewayEndpoint>http://${carbon.local.ip}:${http.nio.port},https://${carbon.local.ip}:${https.nio.port}</GatewayEndpoint>
</Environment>
</Environments>
</APIGateway>
<!--
API usage tracker configuration used by the DAS data publisher and
Google Analytics publisher in API gateway.
-->
<Analytics>
<!--
This data source is used to write/read UI Activity changes (eg: App Hit count)
to seperate database. When using DAS to analyze the changes it needs to configure this data source appropriately.
-->
<UIActivityPublishDataSourceName>jdbc/WSO2APPM_DB</UIActivityPublishDataSourceName>
<!--
Enable UI Activity Data publish to DAS
-->
<UIActivityDASPublishEnabled>false</UIActivityDASPublishEnabled>
<!--
Enable/Disable the API usage tracker.
-->
<Enabled>false</Enabled>
<!--
API Usage Data Publisher.
-->
<PublisherClass>org.wso2.carbon.appmgt.usage.publisher.APIMgtUsageDataBridgeDataPublisher</PublisherClass>
<!--
App usage data retrieval client implementation class.
-->
<StatisticClientProvider>org.wso2.carbon.appmgt.usage.client.impl.AppUsageStatisticsRdbmsClient</StatisticClientProvider>
<!--
Thrift port of the remote DAS server.
-->
<ThriftPort>7612</ThriftPort>
<!--
Server URL of the remote DAS/CEP server used to collect statistics.
Must be specified in protocol://hostname:port/ format.
An event can also be published to multiple Receiver Groups each having 1 or more receivers.
Receiver Groups are delimited by curly braces whereas receivers are delimited by commas.
e.g. - Multiple Receivers within a single group
tcp://localhost:7612/,tcp://localhost:7613/,tcp://localhost:7614/
e.g. - Multiple Receiver Groups with two receivers each
{tcp://localhost:7612/,tcp://localhost:7613},{tcp://localhost:7712/,tcp://localhost:7713/}
-->
<DASServerURL>tcp://localhost:7612</DASServerURL>
<!--
Administrator username to login to the remote DAS server.
-->
<DASUsername>admin</DASUsername>
<!--
Administrator password to login to the remote DAS server.
-->
<DASPassword>admin</DASPassword>
<DASEventStreams>
<RequestStreamName>org.wso2.appmgt.statistics.request</RequestStreamName>
<RequestStreamVersion>1.0.0</RequestStreamVersion>
<ResponseStreamName>org.wso2.appmgt.statistics.response</ResponseStreamName>
<ResponseStreamVersion>1.0.0</ResponseStreamVersion>
<FaultStreamName>org.wso2.appmgt.statistics.fault</FaultStreamName>
<FaultStreamVersion>1.0.0</FaultStreamVersion>
<CacheStatStreamName>org.wso2.appmgt.statistics.cache</CacheStatStreamName>
<CacheStatStreamVersion>1.0.0</CacheStatStreamVersion>
<!-- Used when publishing AppManager UI activities to DAS -->
<UIActivityStreamName>org.wso2.appmgt.bam.uiactivitypublish</UIActivityStreamName>
<UIActivityStreamVersion>1.1.0</UIActivityStreamVersion>
</DASEventStreams>
<!--
JNDI name of the data source to be used for getting DAS statistics.
This data source should be defined in the master-datasources.xml file in conf/datasources directory.
-->
<!--DataSourceName>jdbc/WSO2AM_STATS_DB</DataSourceName-->
<!--
Google Analytics publisher configuration.
Create Google Analytics account and obtain a tracking ID.
Refer http://support.google.com/analytics/bin/answer.py?hl=en&answer=1009694
-->
<GoogleAnalyticsTracking>
<!--
Enable/Disable Google Analytics Tracking
-->
<Enabled>false</Enabled>
<!--
Google Analytics Tracking ID
-->
<TrackingID>UA-XXXXXXXX-X</TrackingID>
</GoogleAnalyticsTracking>
</Analytics>
<!--
Settings related to managing API access tiers.
-->
<TierManagement>
<!--
Enable the providers to expose their APIs over the special 'Unlimited' tier which
basically disables tier based throttling for the specified APIs.
-->
<EnableUnlimitedTier>true</EnableUnlimitedTier>
</TierManagement>
<!--Configuration to enable/disable sending CORS headers in the Gateway response
and define the Access-Control-Allow-Origin header value.-->
<CORSConfiguration>
<!--Configuration to enable/disable sending CORS headers from the Gateway-->
<Enabled>true</Enabled>
<!--
The value of the Access-Control-Allow-Origin header.
Default values are API Store addresses, which is needed for swagger to function.
-->
<Access-Control-Allow-Origin>https://localhost:9443,http://localhost:9763</Access-Control-Allow-Origin>
<!--Configure Access-Control-Allow-Headers-->
<Access-Control-Allow-Headers>authorization,Access-Control-Allow-Origin,Content-Type</Access-Control-Allow-Headers>
<!--Configure Access-Control-Allow-Methods-->
<Access-Control-Allow-Methods>GET,POST,PUT,DELETE,OPTIONS</Access-Control-Allow-Methods>
</CORSConfiguration>
<!--
AppManager uses SAML SSO as default authentication mechanism for the web apps.
Following configuration defines the configurations of the IDP which is used as the SSO provider.
-->
<SSOConfiguration>
<!--Is service providers are created for skip-gateway enabled apps -->
<CreateServiceProviderForSkipGatewayApps>false</CreateServiceProviderForSkipGatewayApps>
<!-- URL of the IDP use for SSO -->
<IdentityProviderUrl>https://localhost:${mgt.transport.https.port}/samlsso</IdentityProviderUrl>
<!-- Postfix of the ACS URL -->
<ACSURLPostfix>appm/acs</ACSURLPostfix>
<!-- Enable SAML Response Signing when adding Service Provider and validate response signature in gateway.
If you are switching from false to true, then already created services providers should be updated manully to have response signing true.
-->
<EnableResponseSigning>true</EnableResponseSigning>
<!-- Enable SAML Assertion Signing when adding Service Provider and validate assertion signature in gateway.
If you are switching from false to true, then already created services providers should be updated manully to have assertion signing true.
-->
<EnableAssertionSigning>true</EnableAssertionSigning>
<!-- Validates Assertion expiry time of SAML Response -->
<ValidateAssertionExpiry>true</ValidateAssertionExpiry>
<!-- Timestamp skew applied to SAML Response Validity period. Default set to 5min -->
<SAMLResponseValidityTimeStampSkew>300</SAMLResponseValidityTimeStampSkew>
<!-- This alias is used to validate the signature of the responses form the IDP -->
<ResponseSigningKeyAlias>wso2carbon</ResponseSigningKeyAlias>
<Configurators>
<Configurator>
<name>wso2is</name>
<version>5.0.0</version>
<providerClass>org.wso2.carbon.appmgt.impl.idp.sso.configurator.IS500SAMLSSOConfigurator</providerClass>
<parameters>
<providerURL>https://${carbon.local.ip}:${mgt.transport.https.port}</providerURL>
<username>admin</username>
<password>admin</password>
</parameters>
</Configurator>
</Configurators>
</SSOConfiguration>
<!--
Entitlement service is used to manage entitlement policies and evaluate them upon accessing apps.
-->
<EntitlementServiceConfiguration>
<Parameters>
<ServerUrl>https://${carbon.local.ip}:${mgt.transport.https.port}</ServerUrl>
<Username>admin</Username>
<Password>admin</Password>
</Parameters>
</EntitlementServiceConfiguration>
<!-- Configuration to handle Mobile apps and MDM. -->
<MobileAppsConfiguration>
<MDMConfig>
<!--
Enables the catalog mode of the Mobile App Store. If you change the value of this to true,
the Mobile App Store acts as a catalog, which allows you to view apps. However, it doesn't
allow you to perform any operations on the apps
-->
<Config name="IsCatalog">false</Config>
<!-- Enables app to download direcly to the mobile device from the App Manager without MDM -->
<Config name="EnableDirectDownload">false</Config>
<!-- Enables WSO2 AppM to communicate with the active MDM for performing operations on the mobile apps. -->
<Config name="EnableMDMOperations">true</Config>
<!--
Name of the MDM, which is currently active. You need to define the MDM within the <MDMProperties> element.
For information on defining a MDM to integrate it with WSO2 AppM, see Integrating a Mobile Device Manager
-->
<Config name="ActiveMDM">WSO2MDM_INTERNAL</Config>
<!-- Ability for users to self-unsubscribe from mobile apps -->
<Config name="EnableSelfUnsubscription">false</Config>
<!-- Ability for users to subscribe to mobile apps using mobile devices -->
<Config name="EnableSubscriptionFromDevices">true</Config>
<!-- Enables the sample devices for testing purposes -->
<Config name="EnableSampleDevices">false</Config>
<!--
Host of the installation URL of the mobile app, which is sent to the MDM:
e.g. %http%, %https%, or a custom host URL
-->
<Config name="AppDownloadURLHost">%http%</Config>
<!-- Path of the Property List file generated using the PLIST template for iOS apps. -->
<Config name="IosPlistPath">publisher/api/mobileapp/getplist</Config>
<!-- Ability to enable the enterprise-wide operations on mobile apps -->
<Config name="EnterpriseOperations_Enabled">true</Config>
<!-- The user role, which has the privileges to perform enterprise-wide operations on mobile apps. -->
<Config name="EnterpriseOperations_AuthorizedRole">Internal/store-admin</Config>
</MDMConfig>
<!-- The properties of the MDMs you need to connect with WSO2 AppM. For information on defining a MDM to integrate it with WSO2 AppM -->
<MDMProperties>
<!--
MDM running on separate JVM. Calls MDM methods via secured REST API. Use this when run Store/Publisher/MDM
in deployed in separate JVMs. This will be the most suitable active MDM when deployed on production environment.
-->
<MDM name="WSO2MDM_EXTERNAL_REST" bundle="org.wso2.carbon.appmgt.mdm.restconnector">
<Property name="ImageURL">/store/extensions/assets/mobileapp/resources/models/%s.png</Property>
<Property name="ServerURL">https://localhost:9443</Property>
<Property name="TokenApiURL">https://localhost:9443/oauth2</Property>
<property name="Username">admin</property>
<property name="Password">admin</property>
<property name="TokenRefreshTimeOffset">100</property>
</MDM>
<!-- Old EMM, Calls EMM using REST API -->
<MDM name="WSO2EMM" bundle="org.wso2.carbon.appmgt.mdm.wso2emm">
<Property name="ServerURL">https://localhost:9443</Property>
<Property name="ImageURL">https://localhost:9443/emm/assets/wso2mobile/img/models/%s.png</Property>
<Property name="AuthUser">admin</Property>
<Property name="AuthPass">admin</Property>
</MDM>
<!--
Internal MDM which dispatches the MDM calls as Java/OSGI calls. Use this when run Store/Publisher/MDM
in on single JVM.
-->
<MDM name="WSO2MDM_INTERNAL" bundle="org.wso2.carbon.appmgt.mdm.osgiconnector">
<Property name="ImageURL">/store/extensions/assets/mobileapp/resources/models/%s.png</Property>
</MDM>
<!-- Please uncommnent the following block and define the name in ActiveMDM to activate this MDM -->
<!--
<MDM name="WSO2MDM" bundle="org.wso2.carbon.appmgt.mdm.othermdm">
<Property name="serverUrl">https://localhost:9454</Property>
</MDM>
-->
</MDMProperties>
<BinaryFileStorage>
<FilePreciseLocation>repository/resources/mobileapps/</FilePreciseLocation>
<FileAPILocation>/api/mobileapp/getfile/</FileAPILocation>
</BinaryFileStorage>
</MobileAppsConfiguration>
<BinaryFileStorage>
<AbsoluteLocation>${carbon.home}/repository/resources/mobileapps/</AbsoluteLocation>
</BinaryFileStorage>
<!-- Configuration to secure mobile app services.-->
<ServicesAPI>
<AuthorizedRole>admin</AuthorizedRole>
</ServicesAPI>
<!--These types in the configuration provides a list of enabled types in the APP Manager.
If web app is commented, it will be hidden from APP Manager. These type values can be read as artifact types in RXT template -->
<EnabledAssetTypeList>
<Type>mobileapp</Type>
</EnabledAssetTypeList>
<RESTAPI>
<!--Configure publisher and store REST API context path-->
<PublisherAPIContextPath>/api/appm/publisher/v1.1</PublisherAPIContextPath>
<StoreAPIContextPath>/api/appm/store/v1.1</StoreAPIContextPath>
<!--Configure white-listed URIs of REST API. Accessing white-listed URIs does not require credentials (does not require Authorization header). -->
<WhiteListedURIs>
<WhiteListedURI>
<URI>/api/appm/store/{version}/apps/mobile/binaries/one-time/{uuid}</URI>
<HTTPMethods>GET,HEAD</HTTPMethods>
</WhiteListedURI>
<WhiteListedURI>
<URI>/api/appm/store/{version}/apps/static-contents/{fileName}</URI>
<HTTPMethods>GET,HEAD</HTTPMethods>
</WhiteListedURI>
<WhiteListedURI>
<URI>/api/appm/store/{version}/apps/mobile/plist/{appId}/{uuid}</URI>
<HTTPMethods>GET,HEAD</HTTPMethods>
</WhiteListedURI>
</WhiteListedURIs>
</RESTAPI>
</AppManager>

@ -43,26 +43,27 @@
</definition>
</datasource>
<datasource>
<name>WSO2APPM_DB</name>
<description>The datasource used for App Manager database</description>
<jndiConfig>
<name>jdbc/WSO2APPM_DB</name>
</jndiConfig>
<definition type="RDBMS">
<configuration>
<url>jdbc:h2:repository/database/WSO2APPM_DB;DB_CLOSE_ON_EXIT=FALSE</url>
<username>wso2carbon</username>
<password>wso2carbon</password>
<driverClassName>org.h2.Driver</driverClassName>
<maxActive>50</maxActive>
<maxWait>60000</maxWait>
<testOnBorrow>true</testOnBorrow>
<validationQuery>SELECT 1</validationQuery>
<validationInterval>30000</validationInterval>
</configuration>
</definition>
</datasource>
<!-- todo remove-->
<!-- <datasource>-->
<!-- <name>WSO2APPM_DB</name>-->
<!-- <description>The datasource used for App Manager database</description>-->
<!-- <jndiConfig>-->
<!-- <name>jdbc/WSO2APPM_DB</name>-->
<!-- </jndiConfig>-->
<!-- <definition type="RDBMS">-->
<!-- <configuration>-->
<!-- <url>jdbc:h2:repository/database/WSO2APPM_DB;DB_CLOSE_ON_EXIT=FALSE</url>-->
<!-- <username>wso2carbon</username>-->
<!-- <password>wso2carbon</password>-->
<!-- <driverClassName>org.h2.Driver</driverClassName>-->
<!-- <maxActive>50</maxActive>-->
<!-- <maxWait>60000</maxWait>-->
<!-- <testOnBorrow>true</testOnBorrow>-->
<!-- <validationQuery>SELECT 1</validationQuery>-->
<!-- <validationInterval>30000</validationInterval>-->
<!-- </configuration>-->
<!-- </definition>-->
<!-- </datasource>-->
<datasource>
<name>WSO2AM_DB</name>
@ -123,25 +124,26 @@
</configuration>
</definition>
</datasource>
<datasource>
<name>WSO2_SOCIAL_DB</name>
<description>The datasource used for Store social database</description>
<jndiConfig>
<name>jdbc/WSO2_SOCIAL_DB</name>
</jndiConfig>
<definition type="RDBMS">
<configuration>
<url>jdbc:h2:repository/database/WSO2_SOCIAL_DB;DB_CLOSE_ON_EXIT=FALSE</url>
<username>wso2carbon</username>
<password>wso2carbon</password>
<driverClassName>org.h2.Driver</driverClassName>
<maxActive>50</maxActive>
<maxWait>60000</maxWait>
<testOnBorrow>true</testOnBorrow>
<validationQuery>SELECT 1</validationQuery>
<validationInterval>30000</validationInterval>
</configuration>
</definition>
</datasource>
<!-- todo remove-->
<!-- <datasource>-->
<!-- <name>WSO2_SOCIAL_DB</name>-->
<!-- <description>The datasource used for Store social database</description>-->
<!-- <jndiConfig>-->
<!-- <name>jdbc/WSO2_SOCIAL_DB</name>-->
<!-- </jndiConfig>-->
<!-- <definition type="RDBMS">-->
<!-- <configuration>-->
<!-- <url>jdbc:h2:repository/database/WSO2_SOCIAL_DB;DB_CLOSE_ON_EXIT=FALSE</url>-->
<!-- <username>wso2carbon</username>-->
<!-- <password>wso2carbon</password>-->
<!-- <driverClassName>org.h2.Driver</driverClassName>-->
<!-- <maxActive>50</maxActive>-->
<!-- <maxWait>60000</maxWait>-->
<!-- <testOnBorrow>true</testOnBorrow>-->
<!-- <validationQuery>SELECT 1</validationQuery>-->
<!-- <validationInterval>30000</validationInterval>-->
<!-- </configuration>-->
<!-- </definition>-->
<!-- </datasource>-->
</datasources>
</datasources-configuration>

@ -8,14 +8,14 @@
<a href='https://opensource.org/licenses/Apache-2.0'><img src='https://img.shields.io/badge/License-Apache%202.0-blue.svg'></a><br/>
<h1>Release Note - Entgra IoT Server Version 3.7.0</h1>
<h1>Release Note - Entgra IoT Server Version 3.8.0</h1>
<h2>We are pleased to announce Entgra IoT Server 3.7.0.</h2>
<h2>We are pleased to announce Entgra IoT Server 3.8.0.</h2>
<p>Entgra IoT Server is the successor of WSO2 IoT server and includes capability to manage mobile devices(MDM), manage applications(MAM) and IoT devices in a single environment. It provides best of breed technologies for device manufacturers to develop connected smart products as well as anyone looking for a well established EMM solution to manage devices in their organisations. Entgra IoTs 3.7.0 pays special focus to Kiosk devices and many other EMM improvements.
<p>Entgra IoT Server is the successor of WSO2 IoT server and includes capability to manage mobile devices(MDM), manage applications(MAM) and IoT devices in a single environment. It provides best of breed technologies for device manufacturers to develop connected smart products as well as anyone looking for a well established EMM solution to manage devices in their organisations. Entgra IoTs 3.8.0 pays special focus to Kiosk devices and many other EMM improvements.
</p>
<h4>What's new in Entgra IoTS 3.7.0</h4>
<h4>What's new in Entgra IoTS 3.8.0</h4>
<ul>
<li>New operation to add Android/iOS application configuration</li>
@ -45,11 +45,11 @@
<h4>Documentation</h4>
Documentations: <a href='https://entgra-documentation.gitlab.io/v3.7.0/'> Entgra IoT Server Documentation</a>
Documentations: <a href='https://entgra-documentation.gitlab.io/v3.8.0/'> Entgra IoT Server Documentation</a>
<h4>Known Issues</h4>
The known set of issues this version can be found <a href='https://gitlab.com/entgra/product-iots/issues?scope=all&utf8=✓&state=opened&milestone_title=IoT%203.7.0-GA'> here.</a>
The known set of issues this version can be found <a href='https://gitlab.com/entgra/product-iots/issues?scope=all&utf8=✓&state=opened&milestone_title=IoT%203.8.0-GA'> here.</a>
<h3>Engaging with Community</h3>

@ -27,7 +27,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.wso2.iot.devicemgt-plugins</groupId>
<artifactId>iot-devicetype-feature-installation</artifactId>
<version>3.7.0-SNAPSHOT</version>
<version>4.0.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Install Virtual Fire Alarm, Raspberry Pi, Arduino, Android Sense Device Types - IoT Core</name>
<url>http://wso2.org</url>

@ -154,6 +154,9 @@
<featureArtifactDef>
org.wso2.carbon.devicemgt:org.wso2.carbon.email.sender.feature:${carbon.device.mgt.version}
</featureArtifactDef>
<featureArtifactDef>
io.entgra.devicemgt:io.entgra.ui.request.interceptor.feature:${carbon.device.mgt.version}
</featureArtifactDef>
<featureArtifactDef>
org.wso2.carbon.devicemgt:org.wso2.carbon.device.mgt.extensions.device.type.deployer.feature:${carbon.device.mgt.version}
</featureArtifactDef>
@ -451,49 +454,67 @@
</featureArtifactDef>
<!-- Mobile Device Management Features -->
<featureArtifactDef>
org.wso2.carbon.devicemgt-plugins:org.wso2.carbon.appmgt.mdm.osgiconnector.feature:${carbon.device.mgt.plugin.version}
</featureArtifactDef>
<featureArtifactDef>
org.wso2.carbon.devicemgt-plugins:org.wso2.carbon.appmgt.mdm.restconnector.feature:${carbon.device.mgt.plugin.version}
</featureArtifactDef>
<!--<featureArtifactDef>-->
<!--org.wso2.carbon.devicemgt-plugins:org.wso2.carbon.appmgt.mdm.osgiconnector.feature:${carbon.device.mgt.plugin.version}-->
<!--</featureArtifactDef>-->
<!--<featureArtifactDef>-->
<!--org.wso2.carbon.devicemgt-plugins:org.wso2.carbon.appmgt.mdm.restconnector.feature:${carbon.device.mgt.plugin.version}-->
<!--</featureArtifactDef>-->
<!-- Mobile Device Management Features END -->
<!-- APPM Features -->
<!--<featureArtifactDef>-->
<!--org.wso2.carbon.appmgt:org.wso2.carbon.appmgt.core.feature:${appmgt.feature.version}-->
<!--</featureArtifactDef>-->
<!--<featureArtifactDef>-->
<!--org.wso2.carbon.appmgt:org.wso2.carbon.appmgt.mdm.wso2emm.feature:${appmgt.feature.version}-->
<!--</featureArtifactDef>-->
<!--<featureArtifactDef>-->
<!--org.wso2.carbon.appmgt:org.wso2.carbon.appmgt.mobile.feature:${appmgt.feature.version}-->
<!--</featureArtifactDef>-->
<!--<featureArtifactDef>-->
<!--org.wso2.carbon.appmgt:org.wso2.carbon.appmgt.publisher.feature:${appmgt.feature.version}-->
<!--</featureArtifactDef>-->
<!--<featureArtifactDef>-->
<!--org.wso2.carbon.appmgt:org.wso2.carbon.appmgt.services.api.feature:${appmgt.feature.version}-->
<!--</featureArtifactDef>-->
<!--<featureArtifactDef>-->
<!--org.wso2.carbon.store:org.wso2.store.feature:${carbon.store.version}-->
<!--</featureArtifactDef>-->
<!--<featureArtifactDef>-->
<!--org.wso2.carbon.appmgt:org.wso2.carbon.appmgt.store.feature:${appmgt.feature.version}-->
<!--</featureArtifactDef>-->
<!--<featureArtifactDef>-->
<!--org.wso2.carbon.store:org.wso2.carbon.social.feature:${carbon.store.version}-->
<!--</featureArtifactDef>-->
<!--<featureArtifactDef>-->
<!--org.wso2.carbon.appmgt:org.wso2.carbon.appmgt.oauth.feature:${appmgt.feature.version}-->
<!--</featureArtifactDef>-->
<!--<featureArtifactDef>-->
<!--org.wso2.carbon.appmgt:org.wso2.carbon.appmgt.rest.api.store.feature:${appmgt.feature.version}-->
<!--</featureArtifactDef>-->
<!--<featureArtifactDef>-->
<!--org.wso2.carbon.appmgt:org.wso2.carbon.appmgt.rest.api.publisher.feature:${appmgt.feature.version}-->
<!--</featureArtifactDef>-->
<!-- APPM Features END -->
<!-- New App Manager Features-->
<featureArtifactDef>
org.wso2.carbon.appmgt:org.wso2.carbon.appmgt.core.feature:${appmgt.feature.version}
</featureArtifactDef>
<featureArtifactDef>
org.wso2.carbon.appmgt:org.wso2.carbon.appmgt.mdm.wso2emm.feature:${appmgt.feature.version}
</featureArtifactDef>
<featureArtifactDef>
org.wso2.carbon.appmgt:org.wso2.carbon.appmgt.mobile.feature:${appmgt.feature.version}
</featureArtifactDef>
<featureArtifactDef>
org.wso2.carbon.appmgt:org.wso2.carbon.appmgt.publisher.feature:${appmgt.feature.version}
</featureArtifactDef>
<featureArtifactDef>
org.wso2.carbon.appmgt:org.wso2.carbon.appmgt.services.api.feature:${appmgt.feature.version}
</featureArtifactDef>
<featureArtifactDef>
org.wso2.carbon.store:org.wso2.store.feature:${carbon.store.version}
</featureArtifactDef>
<featureArtifactDef>
org.wso2.carbon.appmgt:org.wso2.carbon.appmgt.store.feature:${appmgt.feature.version}
</featureArtifactDef>
<featureArtifactDef>
org.wso2.carbon.store:org.wso2.carbon.social.feature:${carbon.store.version}
org.wso2.carbon.devicemgt:org.wso2.carbon.device.application.mgt.api.feature:${carbon.device.mgt.version}
</featureArtifactDef>
<featureArtifactDef>
org.wso2.carbon.appmgt:org.wso2.carbon.appmgt.oauth.feature:${appmgt.feature.version}
org.wso2.carbon.devicemgt:org.wso2.carbon.device.application.mgt.publisher.ui.feature:${carbon.device.mgt.version}
</featureArtifactDef>
<featureArtifactDef>
org.wso2.carbon.appmgt:org.wso2.carbon.appmgt.rest.api.store.feature:${appmgt.feature.version}
org.wso2.carbon.devicemgt:org.wso2.carbon.device.application.mgt.server.feature:${carbon.device.mgt.version}
</featureArtifactDef>
<featureArtifactDef>
org.wso2.carbon.appmgt:org.wso2.carbon.appmgt.rest.api.publisher.feature:${appmgt.feature.version}
org.wso2.carbon.devicemgt:org.wso2.carbon.device.application.mgt.store.ui.feature:${carbon.device.mgt.version}
</featureArtifactDef>
<!-- APPM Features END -->
<!-- End of New App Manager Features-->
<!-- Dashboards Features -->
<featureArtifactDef>
@ -909,62 +930,86 @@
</feature>
<!-- End of IoTServer Features -->
<!-- Mobile Features -->
<feature>
<id>org.wso2.carbon.appmgt.mdm.osgiconnector.feature.group</id>
<version>${carbon.device.mgt.plugin.version}</version>
</feature>
<feature>
<id>org.wso2.carbon.appmgt.mdm.restconnector.feature.group</id>
<version>${carbon.device.mgt.plugin.version}</version>
</feature>
<!--<feature>-->
<!--<id>org.wso2.carbon.appmgt.mdm.osgiconnector.feature.group</id>-->
<!--<version>${carbon.device.mgt.plugin.version}</version>-->
<!--</feature>-->
<!--<feature>-->
<!--<id>org.wso2.carbon.appmgt.mdm.restconnector.feature.group</id>-->
<!--<version>${carbon.device.mgt.plugin.version}</version>-->
<!--</feature>-->
<!-- End of Mobile Features -->
<!-- App management features-->
<!--<feature>-->
<!--<id>org.wso2.carbon.appmgt.core.feature.group</id>-->
<!--<version>${appmgt.feature.version}</version>-->
<!--</feature>-->
<!--<feature>-->
<!--<id>org.wso2.carbon.appmgt.mdm.wso2emm.feature.group</id>-->
<!--<version>${appmgt.feature.version}</version>-->
<!--</feature>-->
<!--<feature>-->
<!--<id>org.wso2.carbon.appmgt.mobile.feature.group</id>-->
<!--<version>${appmgt.feature.version}</version>-->
<!--</feature>-->
<!--<feature>-->
<!--<id>org.wso2.carbon.appmgt.publisher.feature.group</id>-->
<!--<version>${appmgt.feature.version}</version>-->
<!--</feature>-->
<!--<feature>-->
<!--<id>org.wso2.carbon.appmgt.services.api.feature.group</id>-->
<!--<version>${appmgt.feature.version}</version>-->
<!--</feature>-->
<!--<feature>-->
<!--<id>org.wso2.carbon.store.feature.group</id>-->
<!--<version>${carbon.store.version}</version>-->
<!--</feature>-->
<!--<feature>-->
<!--<id>org.wso2.carbon.appmgt.store.feature.group</id>-->
<!--<version>${appmgt.feature.version}</version>-->
<!--</feature>-->
<!--<feature>-->
<!--<id>org.wso2.carbon.social.feature.group</id>-->
<!--<version>${carbon.store.version}</version>-->
<!--</feature>-->
<!--<feature>-->
<!--<id>org.wso2.carbon.appmgt.rest.api.store.feature.group</id>-->
<!--<version>${appmgt.feature.version}</version>-->
<!--</feature>-->
<!--<feature>-->
<!--<id>org.wso2.carbon.appmgt.rest.api.publisher.feature.group</id>-->
<!--<version>${appmgt.feature.version}</version>-->
<!--</feature>-->
<!--<feature>-->
<!--<id>org.wso2.carbon.appmgt.oauth.feature.group</id>-->
<!--<version>${appmgt.feature.version}</version>-->
<!--</feature>-->
<!-- End of app management features-->
<!-- New App Manager Features-->
<feature>
<id>org.wso2.carbon.appmgt.core.feature.group</id>
<version>${appmgt.feature.version}</version>
</feature>
<feature>
<id>org.wso2.carbon.appmgt.mdm.wso2emm.feature.group</id>
<version>${appmgt.feature.version}</version>
</feature>
<feature>
<id>org.wso2.carbon.appmgt.mobile.feature.group</id>
<version>${appmgt.feature.version}</version>
</feature>
<feature>
<id>org.wso2.carbon.appmgt.publisher.feature.group</id>
<version>${appmgt.feature.version}</version>
</feature>
<feature>
<id>org.wso2.carbon.appmgt.services.api.feature.group</id>
<version>${appmgt.feature.version}</version>
</feature>
<feature>
<id>org.wso2.carbon.store.feature.group</id>
<version>${carbon.store.version}</version>
</feature>
<feature>
<id>org.wso2.carbon.appmgt.store.feature.group</id>
<version>${appmgt.feature.version}</version>
</feature>
<feature>
<id>org.wso2.carbon.social.feature.group</id>
<version>${carbon.store.version}</version>
<id>org.wso2.carbon.device.application.mgt.api.feature.group</id>
<version>${carbon.device.mgt.version}</version>
</feature>
<feature>
<id>org.wso2.carbon.appmgt.rest.api.store.feature.group</id>
<version>${appmgt.feature.version}</version>
<id>org.wso2.carbon.device.application.mgt.publisher.ui.feature.group</id>
<version>${carbon.device.mgt.version}</version>
</feature>
<feature>
<id>org.wso2.carbon.appmgt.rest.api.publisher.feature.group</id>
<version>${appmgt.feature.version}</version>
<id>org.wso2.carbon.device.application.mgt.server.feature.group</id>
<version>${carbon.device.mgt.version}</version>
</feature>
<feature>
<id>org.wso2.carbon.appmgt.oauth.feature.group</id>
<version>${appmgt.feature.version}</version>
<id>org.wso2.carbon.device.application.mgt.store.ui.feature.group</id>
<version>${carbon.device.mgt.version}</version>
</feature>
<!-- End of app management features-->
<!-- End of New App Manager Features-->
<!-- Device Management Features -->
<feature>
@ -991,6 +1036,10 @@
<id>org.wso2.carbon.email.sender.feature.group</id>
<version>${carbon.device.mgt.version}</version>
</feature>
<feature>
<id>io.entgra.ui.request.interceptor.feature.group</id>
<version>${carbon.device.mgt.version}</version>
</feature>
<feature>
<id>org.wso2.carbon.certificate.mgt.server.feature.group</id>
<version>${carbon.device.mgt.version}</version>
@ -1989,44 +2038,18 @@
<version>${project.version}</version>
</feature>
<!-- End of IoTServer Features -->
<!-- App management features-->
<feature>
<id>org.wso2.carbon.appmgt.core.feature.group</id>
<version>${appmgt.feature.version}</version>
</feature>
<feature>
<id>org.wso2.carbon.appmgt.mdm.wso2emm.feature.group</id>
<version>${appmgt.feature.version}</version>
</feature>
<feature>
<id>org.wso2.carbon.appmgt.mobile.feature.group</id>
<version>${appmgt.feature.version}</version>
</feature>
<feature>
<id>org.wso2.carbon.appmgt.services.api.feature.group</id>
<version>${appmgt.feature.version}</version>
</feature>
<feature>
<id>org.wso2.carbon.appmgt.mdm.osgiconnector.feature.group</id>
<version>${carbon.device.mgt.plugin.version}</version>
</feature>
<feature>
<id>org.wso2.carbon.appmgt.mdm.restconnector.feature.group</id>
<version>${carbon.device.mgt.plugin.version}</version>
</feature>
<feature>
<id>org.wso2.carbon.appmgt.rest.api.store.feature.group</id>
<version>${appmgt.feature.version}</version>
</feature>
<feature>
<id>org.wso2.carbon.appmgt.rest.api.publisher.feature.group</id>
<version>${appmgt.feature.version}</version>
<id>org.wso2.carbon.device.application.mgt.api.feature.group</id>
<version>${carbon.device.mgt.version}</version>
</feature>
<feature>
<id>org.wso2.carbon.appmgt.oauth.feature.group</id>
<version>${appmgt.feature.version}</version>
<id>org.wso2.carbon.device.application.mgt.server.feature.group</id>
<version>${carbon.device.mgt.version}</version>
</feature>
<!-- End of app management features-->
<!-- End of New App Manager Features-->
<!-- Dashboard Features -->
<feature>
@ -2073,6 +2096,10 @@
<id>org.wso2.carbon.email.sender.feature.group</id>
<version>${carbon.device.mgt.version}</version>
</feature>
<feature>
<id>io.entgra.ui.request.interceptor.feature.group</id>
<version>${carbon.device.mgt.version}</version>
</feature>
<feature>
<id>org.wso2.carbon.certificate.mgt.api.feature.group</id>
<version>${carbon.device.mgt.version}</version>
@ -2260,10 +2287,10 @@
<id>org.wso2.carbon.service.mgt.server.feature.group</id>
<version>${carbon.deployment.version}</version>
</feature>
<feature>
<id>org.wso2.carbon.social.feature.group</id>
<version>${carbon.store.version}</version>
</feature>
<!--<feature>-->
<!--<id>org.wso2.carbon.social.feature.group</id>-->
<!--<version>${carbon.store.version}</version>-->
<!--</feature>-->
<feature>
<id>org.wso2.carbon.registry.core.feature.group</id>
<version>${carbon.registry.version}</version>
@ -2639,49 +2666,64 @@
<id>org.wso2.iot.core.styles.feature.group</id>
<version>${project.version}</version>
</feature>
<!-- End of IoTServer Features -->
<!-- App management features-->
<feature>
<id>org.wso2.carbon.appmgt.core.feature.group</id>
<version>${appmgt.feature.version}</version>
</feature>
<feature>
<id>org.wso2.carbon.appmgt.mdm.wso2emm.feature.group</id>
<version>${appmgt.feature.version}</version>
</feature>
<feature>
<id>org.wso2.carbon.appmgt.mobile.feature.group</id>
<version>${appmgt.feature.version}</version>
</feature>
<feature>
<id>org.wso2.carbon.appmgt.publisher.feature.group</id>
<version>${appmgt.feature.version}</version>
</feature>
<feature>
<id>org.wso2.carbon.appmgt.services.api.feature.group</id>
<version>${appmgt.feature.version}</version>
</feature>
<feature>
<id>org.wso2.carbon.store.feature.group</id>
<version>${carbon.store.version}</version>
</feature>
<feature>
<id>org.wso2.carbon.appmgt.store.feature.group</id>
<version>${appmgt.feature.version}</version>
</feature>
<feature>
<id>org.wso2.carbon.social.feature.group</id>
<version>${carbon.store.version}</version>
</feature>
<!-- New App Manager Features-->
<feature>
<id>org.wso2.carbon.appmgt.mdm.osgiconnector.feature.group</id>
<version>${carbon.device.mgt.plugin.version}</version>
<id>org.wso2.carbon.device.application.mgt.api.feature.group</id>
<version>${carbon.device.mgt.version}</version>
</feature>
<feature>
<id>org.wso2.carbon.appmgt.mdm.restconnector.feature.group</id>
<version>${carbon.device.mgt.plugin.version}</version>
<id>org.wso2.carbon.device.application.mgt.server.feature.group</id>
<version>${carbon.device.mgt.version}</version>
</feature>
<!-- End of New App Manager Features-->
<!-- End of IoTServer Features -->
<!-- App management features-->
<!--<feature>-->
<!--<id>org.wso2.carbon.appmgt.core.feature.group</id>-->
<!--<version>${appmgt.feature.version}</version>-->
<!--</feature>-->
<!--<feature>-->
<!--<id>org.wso2.carbon.appmgt.mdm.wso2emm.feature.group</id>-->
<!--<version>${appmgt.feature.version}</version>-->
<!--</feature>-->
<!--<feature>-->
<!--<id>org.wso2.carbon.appmgt.mobile.feature.group</id>-->
<!--<version>${appmgt.feature.version}</version>-->
<!--</feature>-->
<!--<feature>-->
<!--<id>org.wso2.carbon.appmgt.publisher.feature.group</id>-->
<!--<version>${appmgt.feature.version}</version>-->
<!--</feature>-->
<!--<feature>-->
<!--<id>org.wso2.carbon.appmgt.services.api.feature.group</id>-->
<!--<version>${appmgt.feature.version}</version>-->
<!--</feature>-->
<!--<feature>-->
<!--<id>org.wso2.carbon.store.feature.group</id>-->
<!--<version>${carbon.store.version}</version>-->
<!--</feature>-->
<!--<feature>-->
<!--<id>org.wso2.carbon.appmgt.store.feature.group</id>-->
<!--<version>${appmgt.feature.version}</version>-->
<!--</feature>-->
<!--<feature>-->
<!--<id>org.wso2.carbon.social.feature.group</id>-->
<!--<version>${carbon.store.version}</version>-->
<!--</feature>-->
<!--<feature>-->
<!--<id>org.wso2.carbon.appmgt.mdm.osgiconnector.feature.group</id>-->
<!--<version>${carbon.device.mgt.plugin.version}</version>-->
<!--</feature>-->
<!--<feature>-->
<!--<id>org.wso2.carbon.appmgt.mdm.restconnector.feature.group</id>-->
<!--<version>${carbon.device.mgt.plugin.version}</version>-->
<!--</feature>-->
<!-- End of app management features-->
<feature>
@ -2714,6 +2756,10 @@
<id>org.wso2.carbon.email.sender.feature.group</id>
<version>${carbon.device.mgt.version}</version>
</feature>
<feature>
<id>io.entgra.ui.request.interceptor.feature.group</id>
<version>${carbon.device.mgt.version}</version>
</feature>
<feature>
<id>org.wso2.carbon.certificate.mgt.server.feature.group</id>
<version>${carbon.device.mgt.version}</version>

@ -1,5 +1,5 @@
WSO2 IoTs 3.7.0 QSG Setup Guide
WSO2 IoTs 3.8.0 QSG Setup Guide
---------------------------------
1. Start the WSO2 IoTS server

@ -1,194 +0,0 @@
/*
* Copyright (c) 2017, 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.
*/
package org.wso2.mdm.qsg;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import org.wso2.mdm.qsg.dto.EMMQSGConfig;
import org.wso2.mdm.qsg.dto.HTTPResponse;
import org.wso2.mdm.qsg.dto.MobileApplication;
import org.wso2.mdm.qsg.utils.Constants;
import org.wso2.mdm.qsg.utils.HTTPInvoker;
import org.wso2.mdm.qsg.utils.QSGUtils;
import java.io.File;
import java.util.HashMap;
/**
* This class holds the app-mgt related operations.
*/
public class AppOperations {
private static String appmPublisherMobileBinariesUrl = "/api/appm/publisher/v1.1/apps/mobile/binaries";
private static String appmPublisherResourcesUrl = "/api/appm/publisher/v1.1/apps/static-contents?appType=mobileapp";
private static String appmPublisherAppsUrl = "/api/appm/publisher/v1.1/apps/mobileapp";
public static MobileApplication uploadApplication(String platform, String appName, String appContentType) {
String appUploadEndpoint = EMMQSGConfig.getInstance().getEmmHost() + appmPublisherMobileBinariesUrl;
String filePath = "apps" + File.separator + platform + File.separator + appName;
HTTPResponse httpResponse = HTTPInvoker.uploadFile(appUploadEndpoint, filePath, appContentType);
if (Constants.HTTPStatus.OK == httpResponse.getResponseCode()) {
JSONObject appMeta = null;
MobileApplication application = new MobileApplication();
try {
appMeta = (JSONObject) new JSONParser().parse(httpResponse.getResponse());
application.setPackageId((String) appMeta.get("package"));
application.setAppId(QSGUtils.getResourceId((String) appMeta.get("path")));
application.setVersion((String) appMeta.get("version"));
application.setPlatform(platform);
} catch (ParseException e) {
e.printStackTrace();
}
return application;
}
return null;
}
public static MobileApplication getPublicApplication(String packageId, String version, String platform) {
MobileApplication application = new MobileApplication();
application.setVersion(version);
application.setPackageId(packageId);
application.setPlatform(platform);
return application;
}
private static String uploadAsset(String path) {
String resUploadEndpoint = EMMQSGConfig.getInstance().getEmmHost() + appmPublisherResourcesUrl;
HTTPResponse httpResponse = HTTPInvoker.uploadFile(resUploadEndpoint, path, "image/jpeg");
if (Constants.HTTPStatus.OK == httpResponse.getResponseCode()) {
JSONObject resp = null;
try {
resp = (JSONObject) new JSONParser().parse(httpResponse.getResponse());
return (String) resp.get("id");
} catch (ParseException e) {
e.printStackTrace();
}
}
return null;
}
public static MobileApplication uploadAssets(String platform, MobileApplication application) {
String assetDir = "apps" + File.separator + platform + File.separator + "images";
//Upload the icon file
String imgFile = assetDir + File.separator + "icon.jpg";
String uploadPath = uploadAsset(imgFile);
if (uploadPath != null && !uploadPath.isEmpty()) {
application.setIcon(uploadPath);
} else {
System.out.println("Unable to upload the app icon file.");
return null;
}
//Upload the banner file
imgFile = assetDir + File.separator + "banner.jpg";
uploadPath = uploadAsset(imgFile);
if (uploadPath != null && !uploadPath.isEmpty()) {
application.setBanner(uploadPath);
} else {
System.out.println("Unable to upload the app banner file.");
return null;
}
//Upload the screenshot1 file
imgFile = assetDir + File.separator + "screen1.jpg";
uploadPath = uploadAsset(imgFile);
if (uploadPath != null && !uploadPath.isEmpty()) {
application.setScreenshot1(uploadPath);
} else {
System.out.println("Unable to upload the app screenshot1 file.");
return null;
}
//Upload the screenshot2 file
imgFile = assetDir + File.separator + "screen2.jpg";
uploadPath = uploadAsset(imgFile);
if (uploadPath != null && !uploadPath.isEmpty()) {
application.setScreenshot2(uploadPath);
} else {
System.out.println("Unable to upload the app screenshot2 file.");
return null;
}
//Upload the screenshot3 file
imgFile = assetDir + File.separator + "screen3.jpg";
uploadPath = uploadAsset(imgFile);
if (uploadPath != null && !uploadPath.isEmpty()) {
application.setScreenshot3(uploadPath);
} else {
System.out.println("Unable to upload the app screenshot3 file.");
return null;
}
return application;
}
public static boolean addApplication(String name, MobileApplication mblApp, boolean isEnterpriseApp) {
HashMap<String, String> headers = new HashMap<String, String>();
String appEndpoint = EMMQSGConfig.getInstance().getEmmHost() + appmPublisherAppsUrl;
//Set the application payload
JSONObject application = new JSONObject();
application.put("name", name);
application.put("description", "Sample application");
application.put("type", "enterprise");
//Set appMeta data
JSONObject appMeta = new JSONObject();
appMeta.put("package", mblApp.getPackageId());
appMeta.put("version", mblApp.getVersion());
if (isEnterpriseApp) {
application.put("marketType", "enterprise");
appMeta.put("path", mblApp.getAppId());
} else {
application.put("marketType", "public");
}
application.put("provider", "admin");
application.put("displayName", name);
application.put("category", "Business");
application.put("thumbnailUrl", mblApp.getIcon());
application.put("version", mblApp.getVersion());
application.put("banner", mblApp.getBanner());
application.put("platform", mblApp.getPlatform());
application.put("appType", mblApp.getPlatform());
//application.put("appUrL", mblApp.getAppId());
application.put("mediaType", "application/vnd.wso2-mobileapp+xml");
//Set screenshots
JSONArray screenshots = new JSONArray();
screenshots.add(mblApp.getScreenshot1());
screenshots.add(mblApp.getScreenshot2());
screenshots.add(mblApp.getScreenshot3());
application.put("appmeta", appMeta);
application.put("screenshots", screenshots);
//Set the headers
headers.put(Constants.Header.CONTENT_TYPE, Constants.ContentType.APPLICATION_JSON);
HTTPResponse
httpResponse =
HTTPInvoker.sendHTTPPostWithOAuthSecurity(appEndpoint, application.toJSONString(), headers);
if (Constants.HTTPStatus.OK == httpResponse.getResponseCode()) {
return true;
}
return false;
}
}

@ -113,59 +113,6 @@ public class QSGExecutor {
System.exit(0);
}
System.out.println("Upload the android application ");
//Upload the android application
MobileApplication application = AppOperations.uploadApplication(Constants.DeviceType.ANDROID, "con-app.apk",
"application/vnd.android.package-archive");
if (application == null) {
System.out.println("Unable to upload the sample android application. Terminating the IoTS QSG now.");
System.exit(0);
}
//Upload the assets
application = AppOperations.uploadAssets(Constants.DeviceType.ANDROID, application);
if (application == null) {
System.out.println(
"Unable to upload the assets for sample android application. Terminating the IoTS QSG now.");
System.exit(0);
}
System.out.println("Create the android application ");
//Create application entry in publisher
status = AppOperations.addApplication("WSO2Con-Android", application, true);
if (!status) {
System.out.println("Unable to create the android mobile application. Terminating the IoTS QSG now.");
System.exit(0);
}
System.out.println("Upload the iOS application ");
//Add the iOS policy
status = PolicyOperations.createPasscodePolicy("ios-passcode-policy1", Constants.DeviceType.IOS);
if (!status) {
System.out.println("Unable to create the ios passcode policy. Terminating the IoTS QSG now.");
System.exit(0);
}
//Upload the ios application
MobileApplication iOSApplication = AppOperations.uploadApplication(Constants.DeviceType.IOS, "PNDemo.ipa","application/octet-stream");
iOSApplication.setVersion("1.0.0");
//Upload the assets
iOSApplication = AppOperations.uploadAssets(Constants.DeviceType.IOS, iOSApplication);
if (iOSApplication == null) {
System.out.println(
"Unable to upload the assets for sample iOS application. Terminating the IoTS QSG now.");
System.exit(0);
}
System.out.println("Create the iOS application ");
//Create application entry in publisher
status = AppOperations.addApplication("WSO2Con-iOS", iOSApplication, true);
if (!status) {
System.out.println("Unable to create the iOS mobile application. Terminating the IoTS QSG now.");
System.exit(0);
}
System.out.println("Exit");
}
}

@ -42,7 +42,7 @@
<module>modules/cxf-filters</module>
<module>modules/p2-profile</module>
<module>modules/distribution</module>
<module>modules/integration</module>
<!--<module>modules/integration</module>-->
</modules>
<dependencyManagement>
@ -1269,7 +1269,7 @@
<!-- Dependencies for login ui -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<artifactId>javax.servlet-api</artifactId>
<version>${servlet-api.version}</version>
</dependency>
<dependency>
@ -1528,14 +1528,15 @@
<carbon.governance.version>4.7.23</carbon.governance.version>
<!-- Carbon Device Management-->
<carbon.device.mgt.version>3.2.15</carbon.device.mgt.version>
<carbon.device.mgt.version.range>[3.1.0, 4.0.0)</carbon.device.mgt.version.range>
<carbon.device.mgt.version>4.1.0</carbon.device.mgt.version>
<carbon.device.mgt.version.range>[4.0.0, 5.0.0)</carbon.device.mgt.version.range>
<!-- IOT Device Management -->
<product.iot.version>${project.version}</product.iot.version>
<!-- Carbon Device Management Plugins-->
<carbon.device.mgt.plugin.version>4.2.13</carbon.device.mgt.plugin.version>
<carbon.device.mgt.plugin.version>5.0.0</carbon.device.mgt.plugin.version>
<!-- API Management -->
<carbon.api.mgt.version>6.2.201</carbon.api.mgt.version>
@ -1556,7 +1557,7 @@
<orbit.tomcat.version>7.0.85.wso2v1</orbit.tomcat.version>
<orbit.tomcat.jdbc.pooling.version>7.0.34.wso2v2</orbit.tomcat.jdbc.pooling.version>
<orbit.version.tomcat-servlet-api>7.0.85.wso2v1</orbit.version.tomcat-servlet-api>
<servlet-api.version>2.4</servlet-api.version>
<servlet-api.version>4.0.1</servlet-api.version>
<!-- Rampart -->
<rampart.version>1.6.1-wso2v12</rampart.version>
@ -1639,9 +1640,6 @@
<!-- Caramel version-->
<caramel.version>1.0.1</caramel.version>
<!-- App manager version-->
<appmgt.feature.version>1.5.7</appmgt.feature.version>
<!-- Carbon Store version-->
<carbon.store.version>1.5.1</carbon.store.version>

Loading…
Cancel
Save