Merge branch 'master' of https://github.com/wso2/product-iots into remote-control

application-manager-new
warunalakshitha 8 years ago
commit 8513714247

@ -13,7 +13,7 @@ WSO2 IoT Server is a complete solution that enables device manufacturers and ent
It also offers a complete and secure enterprise mobility management (EMM/MDM) solution that aims to address mobile computing challenges faced by enterprises today. Supporting iOS, Android, and Windows devices, it helps organizations deal with both corporate owned, personally enabled (COPE) and employee-owned devices with the bring your own device (BYOD) concept.
WSO2 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.
WSO2 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 :
http://docs.wso2.com/iot-server.
@ -27,11 +27,11 @@ http://docs.wso2.com/iot-server.
* Share device operations/data with other users
* Distribute and manage applications/firmware of devices
* Edge computing powered by the WSO2 Complex Event Processor (CEP) streaming engine (Siddhi - https://github.com/wso2/siddhi)
* Out of the Box support for some known device types such as Raspberry Pi, Arduino Uno,...etc
* Out of the Box support for some known device types such as Raspberry Pi, Arduino Uno etc.
* Supports mobile platforms such as Android, Windows, and iOS.
#### Mobile Device and App Management
* Implement self-service device enrollment and management for iOS, Android and Windows devices
* Implement self-service device enrollment and management for iOS, Android, and Windows devices
* Provide policy-driven device and profile management for security, data, and device features
* Enable compliance monitoring for applied policies on devices and role-based access control
* Provision/de-provision apps to multiple enrolled devices per user and to enrolled devices based on roles
@ -58,16 +58,16 @@ http://docs.wso2.com/iot-server.
* Support for SCEP protocol (encryption and authenticity)
### How to Run
* Extract the downloaded wso2iot-3.0.0.zip file; this will create a folder named wso2iot-3.0.0.
* IoT Server comes with three runnable components namely broker, analytics and core. Start these components in following order by executing wso2server.sh [.bat]
* wso2iot-3.0.0/broker/bin
* wso2iot-3.0.0/core/bin
* wso2iot-3.0.0/analytics/bin
* Extract the downloaded wso2iot-3.1.0.zip file; this will create a folder named wso2iot-3.1.0.
* IoT Server comes with three runnable components namely broker, core, and analytics. Start these components in following order by executing by executing the following scripts:
* wso2iot-3.1.0//bin/broker.sh [.bat]
* wso2iot-3.1.0/bin/iot-server.sh [.bat]
* wso2iot-3.1.0/bin/analytics.sh [.bat]
### How to Contribute
* WSO2 IoT Server code is hosted in [GitHub](https://github.com/wso2/product-iots).
* Please report issues at [IoTS JIRA](https://wso2.org/jira/browse/IOTS) and Send your pull requests to [development branch](https://github.com/wso2/product-iots).
* Please report issues at [IoT Server Git Issues](https://github.com/wso2/product-iots/issues) and Send your pull requests to [development branch](https://github.com/wso2/product-iots).
### Contact us

@ -217,7 +217,7 @@ if "%profileSet%" == "false" (
set profile=-Dprofile=analytics-default
)
set CMD_LINE_ARGS=-Xbootclasspath/a:%CARBON_XBOOTCLASSPATH% -Xms256m -Xmx2048m -XX:MaxPermSize=256m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath="%CARBON_HOME%\repository\logs\heap-dump.hprof" -Dcom.sun.management.jmxremote -classpath %CARBON_CLASSPATH% %JAVA_OPTS% -Djava.endorsed.dirs=%JAVA_ENDORSED% -Dcarbon.registry.root=/ -Dcarbon.home="%CARBON_HOME%" -Dwso2.server.standalone=true -Djava.command="%JAVA_HOME%\bin\java" -Djava.opts="%JAVA_OPTS%" -Djava.io.tmpdir="%CARBON_HOME%\tmp" -Dcatalina.base="%CARBON_HOME%\..\lib\tomcat" -Dwso2.carbon.xml=%CARBON_HOME%\conf\carbon.xml -Dwso2.registry.xml="%CARBON_HOME%\conf\registry.xml" -Dwso2.user.mgt.xml="%CARBON_HOME%\conf\user-mgt.xml" -Dwso2.transports.xml="%CARBON_HOME%\conf\mgt-transports.xml" -Djava.util.logging.config.file="%CARBON_HOME%\conf\etc\logging-bridge.properties" -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Dcarbon.config.dir.path="%CARBON_HOME%\conf" -Dcomponents.repo="%CARBON_HOME%\..\components\plugins" -Dcarbon.config.dir.path="%CARBON_HOME%\conf" -Dcarbon.components.dir.path="%CARBON_HOME%\..\components" -Dcarbon.extensions.dir.path="%CARBON_HOME%\..\..\extensions" -Dcarbon.dropins.dir.path="%CARBON_HOME%\..\..\dropins" -Dcarbon.external.lib.dir.path="%CARBON_HOME%\..\..\lib" -Dcarbon.patches.dir.path="%CARBON_HOME%\..\..\patches" -Dcarbon.servicepacks.dir.path="%CARBON_HOME%\..\..\servicepacks" -Dcarbon.internal.lib.dir.path="%CARBON_HOME%\..\lib" -Dconf.location="%CARBON_HOME%\conf" -Dcom.atomikos.icatch.file="%CARBON_HOME%\..\lib\transactions.properties" -Dcom.atomikos.icatch.hide_init_file_path="true" -Dorg.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false -Dorg.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER=true -Dcom.sun.jndi.ldap.connect.pool.authentication=simple -Dcom.sun.jndi.ldap.connect.pool.timeout=3000 -Dorg.terracotta.quartz.skipUpdateCheck=true -Dcarbon.classpath=%CARBON_CLASSPATH% -Dmqtt.broker.host="localhost" -Dmqtt.broker.port="1886" -Diot.keymanager.host="localhost" -Diot.keymanager.https.port="9443" -Diot.gateway.host="localhost" -Diot.gateway.https.port="8243" -Dorg.apache.cxf.io.CachedOutputStream.Threshold=104857600 -Dfile.encoding=UTF8 -Dcarbon.das.c5.enabled=true -Dlogger.server.name="IoT-Analytics" %profile%
set CMD_LINE_ARGS=-Xbootclasspath/a:%CARBON_XBOOTCLASSPATH% -Xms256m -Xmx2048m -XX:MaxPermSize=256m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath="%CARBON_HOME%\repository\logs\heap-dump.hprof" -Dcom.sun.management.jmxremote -classpath %CARBON_CLASSPATH% %JAVA_OPTS% -Djava.endorsed.dirs=%JAVA_ENDORSED% -Dcarbon.registry.root=/ -Dcarbon.home="%CARBON_HOME%" -Dwso2.server.standalone=true -Djava.command="%JAVA_HOME%\bin\java" -Djava.opts="%JAVA_OPTS%" -Djava.io.tmpdir="%CARBON_HOME%\tmp" -Dcatalina.base="%CARBON_HOME%\..\lib\tomcat" -Dwso2.carbon.xml=%CARBON_HOME%\conf\carbon.xml -Dwso2.registry.xml="%CARBON_HOME%\conf\registry.xml" -Dwso2.user.mgt.xml="%CARBON_HOME%\conf\user-mgt.xml" -Dwso2.transports.xml="%CARBON_HOME%\conf\mgt-transports.xml" -Djava.util.logging.config.file="%CARBON_HOME%\conf\etc\logging-bridge.properties" -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Dcarbon.config.dir.path="%CARBON_HOME%\conf" -Dcomponents.repo="%CARBON_HOME%\..\components\plugins" -Dcarbon.config.dir.path="%CARBON_HOME%\conf" -Dcarbon.components.dir.path="%CARBON_HOME%\..\components" -Dcarbon.extensions.dir.path="%CARBON_HOME%\..\..\extensions" -Dcarbon.dropins.dir.path="%CARBON_HOME%\..\..\dropins" -Dcarbon.external.lib.dir.path="%CARBON_HOME%\..\..\lib" -Dcarbon.patches.dir.path="%CARBON_HOME%\..\..\patches" -Dcarbon.servicepacks.dir.path="%CARBON_HOME%\..\..\servicepacks" -Dcarbon.internal.lib.dir.path="%CARBON_HOME%\..\lib" -Dconf.location="%CARBON_HOME%\conf" -Dcom.atomikos.icatch.file="%CARBON_HOME%\..\lib\transactions.properties" -Dcom.atomikos.icatch.hide_init_file_path="true" -Dorg.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false -Dorg.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER=true -Dcom.sun.jndi.ldap.connect.pool.authentication=simple -Dcom.sun.jndi.ldap.connect.pool.timeout=3000 -Dorg.terracotta.quartz.skipUpdateCheck=true -Dcarbon.classpath=%CARBON_CLASSPATH% -Dmqtt.broker.host="localhost" -Dmqtt.broker.port="1886" -Diot.keymanager.host="localhost" -Diot.keymanager.https.port="9443" -Diot.gateway.host="localhost" -Diot.gateway.https.port="8243" -Dorg.apache.cxf.io.CachedOutputStream.Threshold=104857600 -Dorg.wso2.ignoreHostnameVerification=true -Dfile.encoding=UTF8 -Dcarbon.das.c5.enabled=true -Dlogger.server.name="IoT-Analytics" %profile%
:runJava
echo JAVA_HOME environment variable is set to %JAVA_HOME%

@ -354,6 +354,7 @@ do
-Dcom.sun.jndi.ldap.connect.pool.timeout=3000 \
-Dorg.terracotta.quartz.skipUpdateCheck=true \
-Djava.security.egd=file:/dev/./urandom \
-Dorg.wso2.ignoreHostnameVerification=true \
-Dfile.encoding=UTF8 \
-Djava.net.preferIPv4Stack=true \
-Dcom.ibm.cacheLocalHost=true \

@ -29,7 +29,7 @@
<artifactId>analytics-devicetype-feature-installation</artifactId>
<version>3.1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Install Virtual Fire Alarm, Raspberry Pi, Ardino Device Types - Analytics</name>
<name>Install Virtual Fire Alarm, Raspberry Pi, Arduino Device Types - Analytics</name>
<url>http://wso2.org</url>

@ -72,6 +72,7 @@
<exclude>**/registry.xml</exclude>
<exclude>**/client-truststore.jks</exclude>
<exclude>**/wso2carbon.jks</exclude>
<exclude>**/wso2carbon.jks</exclude>
<exclude>**/WSO2AM_DB.h2.db</exclude>
<exclude>**/WSO2DM_DB.h2.db</exclude>
<exclude>**/lib/httpmime*</exclude>
@ -253,6 +254,7 @@
<exclude>**/web-apps/**</exclude>
<exclude>**/appm-tenant-conf.xml</exclude>
<exclude>**/client-truststore.jks</exclude>
<exclude>**/wso2carbon.jks</exclude>
</excludes>
</fileSet>
@ -326,6 +328,7 @@
</outputDirectory>
<excludes>
<exclude>**/client-truststore.jks</exclude>
<exclude>**/wso2carbon.jks</exclude>
</excludes>
</fileSet>
@ -695,6 +698,7 @@
<exclude>**/release-notes.html</exclude>
<exclude>**/webapp-mode/WEB-INF/web.xml</exclude>
<exclude>**/repository/resources/security/client-truststore.jks</exclude>
<exclude>**/repository/resources/security/wso2carbon.jks</exclude>
</excludes>
</fileSet>
@ -896,6 +900,13 @@
<outputDirectory>${pom.artifactId}-${pom.version}/wso2/analytics/repository/resources</outputDirectory>
</fileSet>
<fileSet>
<directory>
../p2-profile/analytics-profile/target/wso2carbon-core-${carbon.kernel.version}/dbscripts
</directory>
<outputDirectory>${pom.artifactId}-${pom.version}/wso2/analytics/dbscripts</outputDirectory>
</fileSet>
<fileSet>
<directory>
src/analytics/resources/allthemes
@ -978,6 +989,7 @@
<exclude>**/release-notes.html</exclude>
<exclude>**/dbscripts</exclude>
<exclude>**/repository/resources/security/client-truststore.jks</exclude>
<exclude>**/repository/resources/security/wso2carbon.jks</exclude>
</excludes>
</fileSet>
@ -1267,6 +1279,14 @@
<destName>README.txt</destName>
<fileMode>644</fileMode>
</file>
<file>
<source>../p2-profile/iot-core-profile/target/wso2carbon-core-${carbon.kernel.version}/bin/README.txt</source>
<outputDirectory>${pom.artifactId}-${pom.version}/bin</outputDirectory>
<filtered>true</filtered>
<fileMode>644</fileMode>
</file>
<file>
<source>src/core/LICENSE.txt</source>
<outputDirectory>${pom.artifactId}-${pom.version}</outputDirectory>
@ -1607,6 +1627,16 @@
</outputDirectory>
<fileMode>755</fileMode>
</file>
<!-- copying server scripts -->
<file>
<source>../scripts/change-ip.sh</source>
<outputDirectory>
${pom.artifactId}-${pom.version}/scripts
</outputDirectory>
<fileMode>755</fileMode>
</file>
<file>
<source>
../p2-profile/iot-core-profile/target/wso2carbon-core-${carbon.kernel.version}/repository/conf/governance.xml
@ -1959,6 +1989,21 @@
<outputDirectory>${pom.artifactId}-${pom.version}/wso2/broker/repository/resources/security</outputDirectory>
<fileMode>644</fileMode>
</file>
<file>
<source>src/core/resources/security/wso2carbon.jks</source>
<outputDirectory>${pom.artifactId}-${pom.version}/repository/resources/security</outputDirectory>
<fileMode>644</fileMode>
</file>
<file>
<source>src/core/resources/security/wso2carbon.jks</source>
<outputDirectory>${pom.artifactId}-${pom.version}/wso2/analytics/repository/resources/security</outputDirectory>
<fileMode>644</fileMode>
</file>
<file>
<source>src/core/resources/security/wso2carbon.jks</source>
<outputDirectory>${pom.artifactId}-${pom.version}/wso2/broker/repository/resources/security</outputDirectory>
<fileMode>644</fileMode>
</file>
<!--End-->
</files>
</assembly>

@ -18,7 +18,7 @@
product.name=WSO2 IoT Server
product.key=IoT
product.version=3.1.0-SNAPSHOT
product.version=3.1.0
product.doc.version=310
carbon.version=4.4.16

@ -179,7 +179,7 @@ if "%profileSet%" == "false" (
set profile=-Dprofile=broker-default
)
set CMD_LINE_ARGS=-Xbootclasspath/a:%CARBON_XBOOTCLASSPATH% -Xms1024m -Xmx2048m -XX:MaxPermSize=256m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath="%CARBON_HOME%\repository\logs\heap-dump.hprof" -Dcom.sun.management.jmxremote -classpath %CARBON_CLASSPATH% %JAVA_OPTS% -Djava.endorsed.dirs=%JAVA_ENDORSED% -DandesConfig=broker.xml -Dcarbon.registry.root=/ -Dcarbon.home="%CARBON_HOME%" -Dwso2.server.standalone=true -Djava.command="%JAVA_HOME%\bin\java" -Djava.opts="%JAVA_OPTS%" -Djava.io.tmpdir="%CARBON_HOME%\tmp" -Dcatalina.base="%CARBON_HOME%\..\lib\tomcat" -Dwso2.carbon.xml=%CARBON_HOME%\conf\carbon.xml -Dwso2.registry.xml="%CARBON_HOME%\conf\registry.xml" -Dwso2.user.mgt.xml="%CARBON_HOME%\conf\user-mgt.xml" -Dwso2.transports.xml="%CARBON_HOME%\conf\mgt-transports.xml" -Djava.util.logging.config.file="%CARBON_HOME%\conf\log4j.properties" -Dcarbon.config.dir.path="%CARBON_HOME%\conf" -Dcarbon.logs.path="%CARBON_HOME%\repository\logs" -Dcomponents.repo="%CARBON_HOME%\..\components\plugins" -Dcarbon.config.dir.path="%CARBON_HOME%\conf" -Dcarbon.components.dir.path="%CARBON_HOME%\..\components" -Dcarbon.extensions.dir.path="%CARBON_HOME%\..\..\extensions" -Dcarbon.dropins.dir.path="%CARBON_HOME%\..\..\dropins" -Dcarbon.external.lib.dir.path="%CARBON_HOME%\..\..\lib" -Dcarbon.patches.dir.path="%CARBON_HOME%\..\..\patches" -Dcarbon.servicepacks.dir.path="%CARBON_HOME%\..\..\servicepacks" -Dcarbon.internal.lib.dir.path="%CARBON_HOME%\..\lib" -Dconf.location="%CARBON_HOME%\conf" -Dcom.atomikos.icatch.file="%CARBON_HOME%\..\lib\transactions.properties" -Dcom.atomikos.icatch.hide_init_file_path="true" -Dorg.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false -Dorg.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER=true -Dcom.sun.jndi.ldap.connect.pool.authentication=simple -Dcom.sun.jndi.ldap.connect.pool.timeout=3000 -Dorg.terracotta.quartz.skipUpdateCheck=true -Dcarbon.classpath=%CARBON_CLASSPATH% -Dfile.encoding=UTF8 -Dlogger.server.name="IOT-Broker" -Dqpid.conf="\conf\advanced" %profile%
set CMD_LINE_ARGS=-Xbootclasspath/a:%CARBON_XBOOTCLASSPATH% -Xms1024m -Xmx2048m -XX:MaxPermSize=256m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath="%CARBON_HOME%\repository\logs\heap-dump.hprof" -Dcom.sun.management.jmxremote -classpath %CARBON_CLASSPATH% %JAVA_OPTS% -Djava.endorsed.dirs=%JAVA_ENDORSED% -DandesConfig=broker.xml -Dcarbon.registry.root=/ -Dcarbon.home="%CARBON_HOME%" -Dwso2.server.standalone=true -Djava.command="%JAVA_HOME%\bin\java" -Djava.opts="%JAVA_OPTS%" -Djava.io.tmpdir="%CARBON_HOME%\tmp" -Dcatalina.base="%CARBON_HOME%\..\lib\tomcat" -Dwso2.carbon.xml=%CARBON_HOME%\conf\carbon.xml -Dwso2.registry.xml="%CARBON_HOME%\conf\registry.xml" -Dwso2.user.mgt.xml="%CARBON_HOME%\conf\user-mgt.xml" -Dwso2.transports.xml="%CARBON_HOME%\conf\mgt-transports.xml" -Djava.util.logging.config.file="%CARBON_HOME%\conf\log4j.properties" -Dcarbon.config.dir.path="%CARBON_HOME%\conf" -Dcarbon.logs.path="%CARBON_HOME%\repository\logs" -Dcomponents.repo="%CARBON_HOME%\..\components\plugins" -Dcarbon.config.dir.path="%CARBON_HOME%\conf" -Dcarbon.components.dir.path="%CARBON_HOME%\..\components" -Dcarbon.extensions.dir.path="%CARBON_HOME%\..\..\extensions" -Dcarbon.dropins.dir.path="%CARBON_HOME%\..\..\dropins" -Dcarbon.external.lib.dir.path="%CARBON_HOME%\..\..\lib" -Dcarbon.patches.dir.path="%CARBON_HOME%\..\..\patches" -Dcarbon.servicepacks.dir.path="%CARBON_HOME%\..\..\servicepacks" -Dcarbon.internal.lib.dir.path="%CARBON_HOME%\..\lib" -Dconf.location="%CARBON_HOME%\conf" -Dcom.atomikos.icatch.file="%CARBON_HOME%\..\lib\transactions.properties" -Dcom.atomikos.icatch.hide_init_file_path="true" -Dorg.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false -Dorg.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER=true -Dcom.sun.jndi.ldap.connect.pool.authentication=simple -Dcom.sun.jndi.ldap.connect.pool.timeout=3000 -Dorg.terracotta.quartz.skipUpdateCheck=true -Dcarbon.classpath=%CARBON_CLASSPATH% -Dorg.wso2.ignoreHostnameVerification=true -Dfile.encoding=UTF8 -Dlogger.server.name="IOT-Broker" -Dqpid.conf="\conf\advanced" %profile%
:runJava
echo JAVA_HOME environment variable is set to %JAVA_HOME%

@ -330,6 +330,7 @@ do
-Dorg.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER=true \
-Dcom.sun.jndi.ldap.connect.pool.authentication=simple \
-Dcom.sun.jndi.ldap.connect.pool.timeout=3000 \
-Dorg.wso2.ignoreHostnameVerification=true \
-Dorg.terracotta.quartz.skipUpdateCheck=true \
-Djava.security.egd=file:/dev/./urandom \
-Dfile.encoding=UTF8 \

File diff suppressed because it is too large Load Diff

@ -28,21 +28,13 @@ Running the IoT server
password : admin
5. Navigate to https://localhost:9443/api-store to see the available device APIs. You can subscribe to these APIs with the default application (or by creating a new application).
In the API Store, go to my subscriptions and locate the client ID and secret, which can be used to invoke these APIs.
Running other runtimes individually (Analytics, Broker)
========================================================
1. Extract wso2iot-@product.version@.zip and go to the extracted directory.
2. Go to wso2iot-@product.version@/wso2 directory.
3. Go to appropriate runtime directory (analytics/broker) /bin.
4. Execute wso2server.sh or wso2server.bat.
3. Access the url related to the required runtime. (For example, use https://localhost:9445/carbon for the analytics runtime.)
Running all runtimes (IoT, Analytics, Broker)
==================================================================
1. Extract wso2iot-@product.version@.zip and go to the extracted directory/bin.
2. Run start-all.sh or start-all.bat.
2. Run broker.sh (or broker.bat), then the iot-server.sh (iot-server.bat) and finally analytics.sh (or analytics.bat).
3. Access appropriate url for the related runtime. (For example, use https://localhost:9443/devicemgt for the IoT Server runtime)
@ -191,4 +183,4 @@ We are committed to ensuring that your enterprise middleware deployment is compl
For additional support information please refer to http://wso2.com/support/
---------------------------------------------------------------------------
(c) Copyright 2017 WSO2 Inc.
(c) Copyright 2017 WSO2 Inc.

@ -154,6 +154,7 @@ rem ----------------- Execute The Requested Command ----------------------------
cd %CARBON_HOME%
rem ------------------ Remove tmp folder on startup -----------------------------
IF NOT EXIST %CARBON_HOME%\tmp mkdir %CARBON_HOME%\tmp\work
set TMP_DIR=%CARBON_HOME%\tmp
cd "%TMP_DIR%"
del *.* /s /q > nul

@ -109,10 +109,6 @@ goto :eof
mkdir %DIR%..\repository\deployment\server\webapps
for /R %DIR%..\repository\deployment\server\tempwebapp %%f in (*.war) do copy %%f %DIR%..\repository\deployment\server\webapps\
IF EXIST %DIR%..\repository\deployment\server\tempwebapp @RD /S /Q %DIR%..\repository\deployment\server\tempwebapp
IF EXIST %DIR%start-all.bat del %DIR%start-all.bat
IF EXIST %DIR%start-all.sh del %DIR%start-all.sh
IF EXIST %DIR%stop-all.bat del %DIR%stop-all.bat
IF EXIST %DIR%stop-all.sh del %DIR%stop-all.sh
call :RENAME_DIST
echo Key Manager profile created successfully in %TEMPDIR%\%DISTRIBUTION%%PROFILE%.
goto Exit
@ -145,10 +141,6 @@ goto :eof
mkdir %DIR%..\repository\deployment\server\jaggeryapps
mkdir %DIR%..\repository\deployment\server\axis2services
IF EXIST %DIR%..\conf\identity\sso-idp-config.xml del %DIR%..\conf\identity\sso-idp-config.xml
IF EXIST %DIR%start-all.bat del %DIR%start-all.bat
IF EXIST %DIR%start-all.sh del %DIR%start-all.sh
IF EXIST %DIR%stop-all.bat del %DIR%stop-all.bat
IF EXIST %DIR%stop-all.sh del %DIR%stop-all.sh
call :RENAME_DIST
echo Device Backend profile created successfully in %TEMPDIR%\%DISTRIBUTION%%PROFILE%.
goto Exit
@ -189,10 +181,6 @@ goto :eof
for /R %DIR%..\repository\deployment\server\tempwebapp %%f in (*.war) do copy %%f %DIR%..\repository\deployment\server\webapps\
IF EXIST %DIR%..\conf\identity\sso-idp-config.xml del %DIR%..\conf\identity\sso-idp-config.xml
IF EXIST %DIR%..\repository\deployment\server\tempwebapp @RD /S /Q %DIR%..\repository\deployment\server\tempwebapp
IF EXIST %DIR%start-all.bat del %DIR%start-all.bat
IF EXIST %DIR%start-all.sh del %DIR%start-all.sh
IF EXIST %DIR%stop-all.bat del %DIR%stop-all.bat
IF EXIST %DIR%stop-all.sh del %DIR%stop-all.sh
call :RENAME_DIST
echo Device Manager profile created successfully in %TEMPDIR%\%DISTRIBUTION%%PROFILE%.
goto Exit
@ -272,10 +260,6 @@ goto :eof
IF EXIST %DIR%chpasswd.sh del %DIR%chpasswd.sh
IF EXIST %DIR%ciphertool.bat del %DIR%ciphertool.bat
IF EXIST %DIR%ciphertool.sh del %DIR%ciphertool.sh
IF EXIST %DIR%start-all.bat del %DIR%start-all.bat
IF EXIST %DIR%start-all.sh del %DIR%start-all.sh
IF EXIST %DIR%stop-all.bat del %DIR%stop-all.bat
IF EXIST %DIR%stop-all.sh del %DIR%stop-all.sh
goto :eof
:Remove_JARS

@ -1,78 +0,0 @@
@echo off
REM ---------------------------------------------------------------------------
REM Copyright 2017 WSO2, Inc. http://www.wso2.org
REM
REM Licensed under the Apache License, Version 2.0 (the "License");
REM you may not use this file except in compliance with the License.
REM You may obtain a copy of the License at
REM
REM http://www.apache.org/licenses/LICENSE-2.0
REM
REM Unless required by applicable law or agreed to in writing, software
REM distributed under the License is distributed on an "AS IS" BASIS,
REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
REM See the License for the specific language governing permissions and
REM limitations under the License.
rem ---------------------------------------------------------------------------
rem Main Script for WSO2 Carbon
rem
rem Environment Variable Prequisites
rem
rem CARBON_HOME Home of CARBON installation. If not set I will try
rem to figure it out.
rem
rem JAVA_HOME Must point at your Java Development Kit installation.
rem
rem JAVA_OPTS (Optional) Java runtime options used when the commands
rem is executed.
rem ---------------------------------------------------------------------------
rem --------- NOTE: This is an edited wso2server.sh script to facilitate
rem spark environment variables for WSO2DAS!
rem ----- if JAVA_HOME is not set we're not happy ------------------------------
:checkJava
if "%JAVA_HOME%" == "" goto noJavaHome
if not exist "%JAVA_HOME%\bin\java.exe" goto noJavaHome
goto checkServer
:noJavaHome
echo "You must set the JAVA_HOME variable before running CARBON."
goto end
rem ----- Only set CARBON_HOME if not already set ----------------------------
:checkServer
rem %~sdp0 is expanded pathname of the current script under NT with spaces in the path removed
set CARBON_HOME=%~sdp0..
echo "%CARBON_HOME%\bin\version.txt"
SET curDrive=%cd:~0,1%
SET wsasDrive=%CARBON_HOME:~0,1%
if not "%curDrive%" == "%wsasDrive%" %wsasDrive%:
rem find CARBON_HOME if it does not exist due to either an invalid value passed
rem by the user or the %0 problem on Windows 9x
if not exist "%CARBON_HOME%\bin\version.txt" goto noServerHome
goto startServers
:noServerHome
echo CARBON_HOME is set incorrectly or CARBON could not be located. Please set CARBON_HOME.
echo %CARBON_HOME%
goto end
:startServers
start %CARBON_HOME%\wso2\broker\bin\wso2server.bat --run -Dprofile="broker-default"
timeout /T 10
start %CARBON_HOME%\bin\iot-server.bat --run
timeout /T 10
start %CARBON_HOME%\wso2\analytics\bin\wso2server.bat --run -Dprofile="analytics-default"
:end
goto endlocal
:endlocal
:END

@ -1,86 +0,0 @@
#!/bin/sh
#start-all.sh
# ----------------------------------------------------------------------------
# Copyright 2016 WSO2, Inc. http://www.wso2.org
#
# 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.
cygwin=false;
darwin=false;
os400=false;
mingw=false;
case "`uname`" in
CYGWIN*) cygwin=true;;
MINGW*) mingw=true;;
OS400*) os400=true;;
Darwin*) darwin=true
if [ -z "$JAVA_VERSION" ] ; then
JAVA_VERSION="CurrentJDK"
else
echo "Using Java version: $JAVA_VERSION"
fi
if [ -z "$JAVA_HOME" ] ; then
JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/${JAVA_VERSION}/Home
fi
;;
esac
# resolve links - $0 may be a softlink
PRG="$0"
while [ -h "$PRG" ]; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '.*/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`/"$link"
fi
done
# Get standard environment variables
PRGDIR=`dirname "$PRG"`
# Only set CARBON_HOME if not already set
[ -z "$CARBON_HOME" ] && CARBON_HOME=`cd "$PRGDIR/.." ; pwd`
###########################################################################
NAME=start-all
# Daemon name, where is the actual executable
IOT_INIT_SCRIPT="$CARBON_HOME/bin/iot-server.sh"
ANALYTICS_INIT_SCRIPT="$CARBON_HOME/wso2/analytics/bin/wso2server.sh"
BROKER_INIT_SCRIPT="$CARBON_HOME/wso2/broker/bin/wso2server.sh"
# If the daemon is not there, then exit.
if [ ! -z "$*" ]; then
exit;
else
trap "sh $CARBON_HOME/bin/stop-all.sh; exit;" INT TERM
fi
sh $BROKER_INIT_SCRIPT -Dprofile="broker-default" $* &
sleep 10
sh $IOT_INIT_SCRIPT $* &
sleep 10
sh $ANALYTICS_INIT_SCRIPT -Dprofile="analytics-default" $* &
if [ ! -z "$*" ]; then
exit;
else
trap "sh $CARBON_HOME/bin/stop-all.sh; exit;" INT TERM
while :
do
sleep 60
done
fi

@ -1,48 +0,0 @@
#!/bin/sh
#stop-all.sh
# ----------------------------------------------------------------------------
# Copyright 2016 WSO2, Inc. http://www.wso2.org
#
# 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.
PRG="$0"
while [ -h "$PRG" ]; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '.*/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`/"$link"
fi
done
# Get standard environment variables
PRGDIR=`dirname "$PRG"`
# Only set CARBON_HOME if not already set
[ -z "$CARBON_HOME" ] && CARBON_HOME=`cd "$PRGDIR/.." ; pwd`
###########################################################################
NAME=stop-all
# Daemon name, where is the actual executables
IOT_INIT_SCRIPT="$CARBON_HOME/bin/iot-server.sh"
ANALYTICS_INIT_SCRIPT="$CARBON_HOME/wso2/analytics/bin/wso2server.sh"
MB_INIT_SCRIPT="$CARBON_HOME/wso2/broker/bin/wso2server.sh"
sh $ANALYTICS_INIT_SCRIPT stop
sh $IOT_INIT_SCRIPT stop
sh $MB_INIT_SCRIPT stop
exit

@ -36,7 +36,7 @@
</ProvisioningConnectorConfigs>
<!--<DefaultProvisioningConnectorConfig></DefaultProvisioningConnectorConfig>-->
<ClaimConfig></ClaimConfig>
<Certificate>MIIDSTCCAjGgAwIBAgIERUubMzANBgkqhkiG9w0BAQsFADBVMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxDTALBgNVBAoTBFdTTzIxEjAQBgNVBAMTCWxvY2FsaG9zdDAeFw0xNzAzMjEwOTEzMDdaFw0xNzA2MTkwOTEzMDdaMFUxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzENMAsGA1UEChMEV1NPMjESMBAGA1UEAxMJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu8lfLCQV2hbiz8OGA8baKI1E1cgE/QLKefa4Od2G2KextaAwSESr5ICakVX8w6tU5+IhKYQQKt9U3/U0ae9tXf04g6iWh0dRllsr9mOgjSZxQK09/ygUsFH8syL5aD3heRUYzJWZ/KOsd57BXuI2QZnuEjN0g0+5jNvnswfwD/tM01totaJpI3xN+2JZsaBRCc0G5yA/pdW83Aa4IE30EL57wkK7u8YDl3UTcmi+HO74XQmK1VEqSnA+/mFo3M16cRlm2PTZ2Z1E5gd4j+5sV1P5v63uqyFniEU0zPXforBb06pgSBoIRQBintSSDyEmyuVzW0pc2eYC5Dhfgk337QIDAQABoyEwHzAdBgNVHQ4EFgQU4lneZCvKn04NH5DtJItdRXdXankwDQYJKoZIhvcNAQELBQADggEBAEnCNr0JEcAxtF/ypwGgFu1rYOv3i02PB4jDWbFj8s58l1zF1tMr480khVX4d3AmLjsUpvV+Jg83JFIk1rJFLEb48EFv0nJ/G7pTQrCypNKozyuyLzx5UvKNFBMmnGvkHVqt6j4MSiOjnRdlo7ofDluA/umSkSf/VmsOIZ+5610pCJpahnPUkb8GYK0HcwNV2NLU/0X4nSjKjGwWYv0tX8XW8RwJKb/r0GDehA8PESi76XOVrpXSjP9WPK8XaK//8B0SH3hm0xpzmSQYgtkNQwP2MqBe/ZEUuKxrn3pP6oxo9RxeSIQ8dTLiBA/mcsBmAlpQPPi0LqqDKpkyHt8Ar2w=</Certificate>
<Certificate>MIIDSTCCAjGgAwIBAgIEAoLQ/TANBgkqhkiG9w0BAQsFADBVMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxDTALBgNVBAoTBFdTTzIxEjAQBgNVBAMTCWxvY2FsaG9zdDAeFw0xNzA3MTkwNjUyNTFaFw0yNzA3MTcwNjUyNTFaMFUxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzENMAsGA1UEChMEV1NPMjESMBAGA1UEAxMJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAluZFdW1ynitztkWLC6xKegbRWxky+5P0p4ShYEOkHs30QI2VCuR6Qo4Bz5rTgLBrky03W1GAVrZxuvKRGj9V9+PmjdGtau4CTXu9pLLcqnruaczoSdvBYA3lS9a7zgFU0+s6kMl2EhB+rk7gXluEep7lIOenzfl2f6IoTKa2fVgVd3YKiSGsyL4tztS70vmmX121qm0sTJdKWP4HxXyqK9neolXI9fYyHOYILVNZ69z/73OOVhkh/mvTmWZLM7GM6sApmyLX6OXUp8z0pkY+vT/9+zRxxQs7GurC4/C1nK3rI/0ySUgGEafO1atNjYmlFN+M3tZX6nEcA6g94IavyQIDAQABoyEwHzAdBgNVHQ4EFgQUtS8kIYxQ8UVvVrZSdgyide9OHxUwDQYJKoZIhvcNAQELBQADggEBABfk5mqsVUrpFCYTZZhOxTRRpGXqoW1G05bOxHxs42Paxw8rAJ06Pty9jqM1CgRPpqvZa2lPQBQqZrHkdDE06q4NG0DqMH8NT+tNkXBe9YTre3EJCSfsvswtLVDZ7GDvTHKojJjQvdVCzRj6XH5Truwefb4BJz9APtnlyJIvjHk1hdozqyOniVZd0QOxLAbcdt946chNdQvCm6aUOputp8Xogr0KBnEy3U8es2cAfNZaEkPU8Va5bU6Xjny8zGQnXCXxPKp7sMpgO93nPBt/liX1qfyXM7xEotWoxmm6HZx8oWQ8U5aiXjZ5RKDWCCq4ZuXl6wVsUz1iE61suO5yWi8=</Certificate>
<PermissionAndRoleConfig></PermissionAndRoleConfig>
<JustInTimeProvisioningConfig></JustInTimeProvisioningConfig>
</IdentityProvider>

@ -1,244 +1,63 @@
Release Notes - WSO2 IOT Server - Version 3.0.0
<!DOCTYPE html>
<html>
<body>
<a href="http://wso2.com/products/iot-server/">
<img src="http://b.content.wso2.com/sites/all/common/images/product-logos/IoT-server.svg" alt="WSO2 IoT Server" />
</a><p></p>
<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 - WSO2 IoT Server Version 3.1.0</h1>
<h2>We are pleased to announce WSO2 IoT Server 3.1.0.</h2>
<p>WSO2 IoT Server is one of the most adaptive Apache licensed open source IoT platforms available today. It provides best of breed technologies for device manufacturers to develop connected products as well as rich integration and smart analytics capabilities for system integrators to adopt devices into systems they build. </p>
<p>These capabilities involve device management, smart analytics, API and app management for devices, transport extensions for MQTT, XMPP and many more.</p>
<h4>What's new in WSO2 IoTS 3.1.0</h4>
<h2> Bug
</h2>
<ul>
<li>[<a href='https://wso2.org/jira/browse/IOTS-181'>IOTS-181</a>] - The Graphs are rendered incorrectly
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-182'>IOTS-182</a>] - The units are missing from Y axis
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-222'>IOTS-222</a>] - INSTALL.txt needs to be updated
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-262'>IOTS-262</a>] - APIThrottleHandler Unable to find throttling info continuously printed.
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-4'>IOTS-4</a>] - Fresh Pack - Table Not Found: X1234_DeviceGRAVITYSummaryData
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-115'>IOTS-115</a>] - Edit Role: The domain name can be typed
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-116'>IOTS-116</a>] - Edit Role: The user is unable to change name
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-119'>IOTS-119</a>] - When existing role name is used to create a role no validation message is shown
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-128'>IOTS-128</a>] - Previously selected permission tree is shown for another admin user
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-138'>IOTS-138</a>] - Remove the admin-device-access role permission
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-144'>IOTS-144</a>] - Operations Log: the data doesn&#39;t load
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-170'>IOTS-170</a>] - Proper validation is not fired when an invalid domain is used to login
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-179'>IOTS-179</a>] - Users who register from APIM Store can login to IOTS and enroll devices
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-190'>IOTS-190</a>] - Multi Tenancy: error 500 loads on logging for the first time.
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-198'>IOTS-198</a>] - wso2.anonymous.user in API-Store does not have permission to access custom device types API
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-202'>IOTS-202</a>] - OAuth2BasedMQTTAuthenticator errors thrown if server is bounced while MQTT clients are publishing
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-226'>IOTS-226</a>] - MqttException thrown when a device is pushing erroneous events
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-227'>IOTS-227</a>] - When a device is publishing erroneous events at a high rate over MQTT other device events are dropped
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-244'>IOTS-244</a>] - MQTT clients can authenticate/authorize using tokens generated with credentials not belonging to them
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-255'>IOTS-255</a>] - [External APIM] https-ep in deviceConfig.properties is not populated with APIM details
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-256'>IOTS-256</a>] - Errors thrown at HTTP Gateway profile startup
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-257'>IOTS-257</a>] - transports not bound for HTTP Gateway profile node
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-259'>IOTS-259</a>] - ERROR - js {} thrown from devicemgt
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-260'>IOTS-260</a>] - Error loading properties from a file printed due to missing properties files
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-269'>IOTS-269</a>] - [Intermittent] Force shutdown fails with errors
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-270'>IOTS-270</a>] - Arduino device type control events are lost if the server is restarted
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-274'>IOTS-274</a>] - [IOT] /oauth2/token cannot be called directly
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-277'>IOTS-277</a>] - Accessing swagger definition failed with CNF
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-315'>IOTS-315</a>] - Missing the start-all.bat and stop-all.bat files
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-339'>IOTS-339</a>] - Error occurred while registering device management plugin &#39;android&#39;
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-369'>IOTS-369</a>] - Add missing grant types in identity.xml
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-378'>IOTS-378</a>] - Windows Device location is not showing in Device view page
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-391'>IOTS-391</a>] - Notification Pane position issue
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-18'>IOTS-18</a>] - Need to add refresh token generation in Android Sense agent.
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-103'>IOTS-103</a>] - Grouping: need a mechanisam to add devices to a group from the grouping page
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-108'>IOTS-108</a>] - When user shares device policies fails with 401
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-118'>IOTS-118</a>] - Change Role permissions: Selecting the rights need to be synced correctly
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-120'>IOTS-120</a>] - Last name should allow space in-between when creating / editing the name
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-151'>IOTS-151</a>] - Server startup fails when configured to use Oracle
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-168'>IOTS-168</a>] - A role with permission assigned to a user is not functioning
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-173'>IOTS-173</a>] - Same device can be added multiple times to the same group
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-178'>IOTS-178</a>] - User cannot login to APIM store with IOT credentials
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-183'>IOTS-183</a>] - Some buttons are not visible
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-193'>IOTS-193</a>] - Policies: User is unable to add a policy
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-200'>IOTS-200</a>] - IllegalTransactionStateException when trying to add a new policy
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-204'>IOTS-204</a>] - Duplicate log4j.properties file in CARBON_HOME/repository
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-212'>IOTS-212</a>] - [External APIM] NPE thrown when downloading virtual fire alarm, rasp pi and arduino agents
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-218'>IOTS-218</a>] - Group: when a device is removed from the group the device is completely removed from the devices list
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-232'>IOTS-232</a>] - Multi Tenancy: error 500 loads when user access the system
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-236'>IOTS-236</a>] - Sharing a group fails silently if there is group with the same name and no roles are selected
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-239'>IOTS-239</a>] - SSO failing due to getting the access token from APIM
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-254'>IOTS-254</a>] - samples-deployer build fails with missing dependency
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-263'>IOTS-263</a>] - [UI] Same device can be added to a group multiple times
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-344'>IOTS-344</a>] - Need to remove Android IOT gadget from IoT Core Dashboard
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-346'>IOTS-346</a>] - Cannot view devices when registered as a new user
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-356'>IOTS-356</a>] - When UI is configured to use Gateway, Cannot Login
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-365'>IOTS-365</a>] - Make Policy Management to be part of device management
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-366'>IOTS-366</a>] - Dynamic values for push notification needs to have default values
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-137'>IOTS-137</a>] - -Detup fails, logging exceptions
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-151'>IOTS-151</a>] - Server startup fails when configured to use Oracle
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-160'>IOTS-160</a>] - Although two roles are shown in roles section several roles are shown when assigning to users
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-172'>IOTS-172</a>] - The db scripts are not executed with -Dsetup
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-176'>IOTS-176</a>] - Creating a New Device Type - device-deployer build failed
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-177'>IOTS-177</a>] - Device types fail to register to IOTS when configured with Oracle db
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-184'>IOTS-184</a>] - Windows startup error on hadoop
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-195'>IOTS-195</a>] - Single sign-on(SSO) cannot enable Between devicemgt and DS
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-201'>IOTS-201</a>] - DashboardDeployer Gadget directory copying to Wrong path
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-316'>IOTS-316</a>] - Publisher and store apps are not working
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-319'>IOTS-319</a>] - Implement enrolment functionality for AndroidSens
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-325'>IOTS-325</a>] - Unable to delete policies associated with a group
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-330'>IOTS-330</a>] - Policy not added for Virtual firealarm
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-332'>IOTS-332</a>] - Devices listing page doesn&#39;t honor analyticsEnabled and groupingEnabled configs
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-333'>IOTS-333</a>] - Devices listing page doesn&#39;t honor analyticsEnabled and groupingEnabled configs
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-335'>IOTS-335</a>] - View Dashboard Permissions missing in the role permission tree
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-337'>IOTS-337</a>] - Permissions (except device-mgt permissions) added through carbon console gets removed when adding permissions through deviceMgt UI
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-340'>IOTS-340</a>] - NPE for username thrown on Broker
</li>
</ul>
<h2> Task
</h2>
<ul>
<li>[<a href='https://wso2.org/jira/browse/IOTS-292'>IOTS-292</a>] - Migrating to synapse gateway
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-381'>IOTS-381</a>] - device type listing fails when only windows and android features are installed
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-363'>IOTS-363</a>] - Windows and IOS enrollment related UI page Logos (Wso2 EMM) should be changed into wso2 IOT
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-307'>IOTS-307</a>] - Stabilize Android Sense + Integrating with new dashboard
</li>
</ul>
<h2> Improvement
</h2>
<ul>
<li>[<a href='https://wso2.org/jira/browse/IOTS-145'>IOTS-145</a>] - Remove the second confirmation message to remove a user or role
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-282'>IOTS-282</a>] - Distributed setup - device-key-manager node gives 405 when try to access /devicemgt
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-370'>IOTS-370</a>] - Move adapter configs as global configs
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-374'>IOTS-374</a>] - Updating font wso2 to newest version
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-379'>IOTS-379</a>] - Modal markup fixes
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-382'>IOTS-382</a>] - Windows 10 Reboot operation support
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-383'>IOTS-383</a>] - Modal opening for multiple times
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-390'>IOTS-390</a>] - Missing action buttons on details views
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-392'>IOTS-392</a>] - Inconsistent notification pane messege
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-394'>IOTS-394</a>] - Data table selection issue
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-397'>IOTS-397</a>] - Advance Search for devices view
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-171'>IOTS-171</a>] - Register User Form: username message
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-187'>IOTS-187</a>] - The UI for Role creation should have an option for the user to tick if he wants to have the group name prefix added
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-271'>IOTS-271</a>] - Viewing Group Details
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-273'>IOTS-273</a>] - about.html is for UES
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-283'>IOTS-283</a>] - Distributed Setup - mqtt profile - Class not found error
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-306'>IOTS-306</a>] - Refactoring permission to scope mapping
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-348'>IOTS-348</a>] - OOTB H2 needs to be shared with DAS and Core
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-351'>IOTS-351</a>] - Windows 10 Device Location support
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-352'>IOTS-352</a>] - CDMF Android agent must use the new gateway DCR endpoints
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-362'>IOTS-362</a>] - UI configurations need to refactor
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-368'>IOTS-368</a>] - Federated login page should be compatible with Windows 10 Laptop
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-334'>IOTS-334</a>] - Add three buttons to improve device enrollment screens
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-336'>IOTS-336</a>] - The UI to download the Android Agent uses the old EMM UI
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-338'>IOTS-338</a>] - Windows 10 MDM support
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-341'>IOTS-341</a>] - Re-word message when selecting roles for group sharing
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-342'>IOTS-342</a>] - Re-word the message for adding users to the role when sharing a group with users
</li>
</ul>
<h2> Sub-task
</h2>
<ul>
<li>[<a href='https://wso2.org/jira/browse/IOTS-354'>IOTS-354</a>] - Test Android with Gateway
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-355'>IOTS-355</a>] - Test Windows with Gateway
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-359'>IOTS-359</a>] - Re-Enable Integration tests for the new IOT pack.
</li>
<li>[<a href='https://wso2.org/jira/browse/IOTS-360'>IOTS-360</a>] - Modify the existing tests and make them working for the current IOT pack.
</li>
</ul>
<li>A complete API-driven device type definition eliminating the necessity to create deployable plugins</li>
<li>Support for location based services such as Geofencing and alerting as a reusable functionality</li>
<li>A redesigned device overview page for better user experience</li>
<li>Improved product profiles for scalable deployment</li>
<li>Performance enhancements</li>
<li>Enhancements to prebuilt agents</li>
</ul>
<h4>Documentation</h4>
Documentations: <a href='https://docs.wso2.com/display/IoTS310/WSO2+IoT+Server+Documentation'> WSO2 IoT Server Documentation</a>
<h4>Known Issues</h4>
The known set of issues this version can be found <a href='https://github.com/wso2/product-iots/issues?q=is%3Aopen+is%3Aissue+label%3A3.1.0-RC1'> here.</a>
<h3>Engaging with Community</h3>
<h4>Mailing Lists</h4>
<p>Join our mailing list and correspondence with the developers directly.</p>
<p>Developer list: <a href="mailto:dev@wso2.org">dev@wso2.org</a> | <a href="mailto:dev-request@wso2.org?subject=subscribe">Subscribe</a> | <a href="http://mail.wso2.org/mailarchive/dev/">Mail Archive</a></p>
<h4>Reporting Issues</h4>
<p>We encourage you to report issues, documentation faults and feature requests regarding WSO2 IoT Server through <a href="https://github.com/wso2/product-iots/issues">WSO2 IoT GIT Issues</a>.</p>
<h4>Discussion Forums</h4>
<p>We encourage you to use <a href="http://stackoverflow.com/questions/tagged/wso2iots%20or%20wso2emm%20or%20wso2iot%20or%20wso2-emm">stackoverflow</a> to engage with developers as well as other users.</p>
<p>For more information about WSO2 IoT Server, please see <a href="http://wso2.com/products/iot-server">http://wso2.com/products/iot-server</a> or visit the <a href="http://wso2.com/library/">WSO2 Oxygen Tank</a> developer portal for additional resources.</p>
<p>Thank you for your interest in WSO2 IoT Server.</p>
<p><strong><em>The WSO2 IoT Server Team</em></strong></p>
</body>
</html>

@ -154,6 +154,7 @@ rem ----------------- Execute The Requested Command ----------------------------
cd %CARBON_HOME%
rem ------------------ Remove tmp folder on startup -----------------------------
IF NOT EXIST %CARBON_HOME%\tmp mkdir %CARBON_HOME%\tmp\work
set TMP_DIR=%CARBON_HOME%\tmp
cd "%TMP_DIR%"
del *.* /s /q > nul

@ -154,6 +154,7 @@ rem ----------------- Execute The Requested Command ----------------------------
cd %CARBON_HOME%
rem ------------------ Remove tmp folder on startup -----------------------------
IF NOT EXIST %CARBON_HOME%\tmp mkdir %CARBON_HOME%\tmp\work
set TMP_DIR=%CARBON_HOME%\tmp
cd "%TMP_DIR%"
del *.* /s /q > nul

@ -154,6 +154,7 @@ rem ----------------- Execute The Requested Command ----------------------------
cd %CARBON_HOME%
rem ------------------ Remove tmp folder on startup -----------------------------
IF NOT EXIST %CARBON_HOME%\tmp mkdir %CARBON_HOME%\tmp\work
set TMP_DIR=%CARBON_HOME%\tmp
cd "%TMP_DIR%"
del *.* /s /q > nul

@ -86,8 +86,8 @@ public class MobileQSGTestCase extends TestBase {
Constants.APPLICATION_JSON, accessTokenString);
HttpResponse response = appManagerRestClient.get(Constants.QSGManagement.GET_MOBILE_APPS_ENDPONT);
Assert.assertEquals(response.getResponseCode(), HttpStatus.SC_OK);
Assert.assertTrue(response.getData().contains("NFC"),
"NFC app addition through script is not successful");
Assert.assertTrue(response.getData().contains("WSO2Con-Android"),
"Con-App-Android addition through script is not successful");
}
@Test(description = "This test case tests the policy creation through qsg script", dependsOnMethods = {"executeQSGScript"})

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="2.9" jmeter="3.0 r1743807">
<jmeterTestPlan version="1.2" properties="3.1" jmeter="3.1 r1770033">
<hashTree>
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="App Manager Test Plan" enabled="true">
<stringProp name="TestPlan.comments"></stringProp>
@ -1752,6 +1752,580 @@ vars.put(&quot;encoded&quot;, encoded);</stringProp>
</HeaderManager>
<hashTree/>
</hashTree>
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Upload a mobile app" enabled="true">
<elementProp name="HTTPsampler.Files" elementType="HTTPFileArgs">
<collectionProp name="HTTPFileArgs.files">
<elementProp name="${script-path}test.apk" elementType="HTTPFileArg">
<stringProp name="File.path">${script-path}test.apk</stringProp>
<stringProp name="File.paramname">file</stringProp>
<stringProp name="File.mimetype">application/vnd.android.package-archive,.apk</stringProp>
</elementProp>
</collectionProp>
</elementProp>
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
<collectionProp name="Arguments.arguments"/>
</elementProp>
<stringProp name="HTTPSampler.domain">${server}</stringProp>
<stringProp name="HTTPSampler.port">${port}</stringProp>
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
<stringProp name="HTTPSampler.response_timeout"></stringProp>
<stringProp name="HTTPSampler.protocol">https</stringProp>
<stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp>
<stringProp name="HTTPSampler.path">publisher/api/mobileapp/upload</stringProp>
<stringProp name="HTTPSampler.method">POST</stringProp>
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
<boolProp name="HTTPSampler.DO_MULTIPART_POST">true</boolProp>
<boolProp name="HTTPSampler.monitor">false</boolProp>
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
</HTTPSamplerProxy>
<hashTree>
<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
<collectionProp name="HeaderManager.headers">
<elementProp name="" elementType="Header">
<stringProp name="Header.name">X-CSRF-Token</stringProp>
<stringProp name="Header.value">${X-CSRF-Token}</stringProp>
</elementProp>
<elementProp name="" elementType="Header">
<stringProp name="Header.name">X-Requested-With</stringProp>
<stringProp name="Header.value">XmlHttpRequest</stringProp>
</elementProp>
</collectionProp>
</HeaderManager>
<hashTree/>
<RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Regular Expression Extractor" enabled="true">
<stringProp name="RegexExtractor.useHeaders">false</stringProp>
<stringProp name="RegexExtractor.refname">response</stringProp>
<stringProp name="RegexExtractor.regex">(?s)(^.*)</stringProp>
<stringProp name="RegexExtractor.template">$1$</stringProp>
<stringProp name="RegexExtractor.default"></stringProp>
<stringProp name="RegexExtractor.match_number">1</stringProp>
</RegexExtractor>
<hashTree/>
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
<collectionProp name="Asserion.test_strings">
<stringProp name="1289597910">&quot;package&quot; : &quot;com.apkpure.aegon&quot;, &quot;version&quot; : &quot;1.1.10&quot;</stringProp>
</collectionProp>
<stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
<boolProp name="Assertion.assume_success">false</boolProp>
<intProp name="Assertion.test_type">16</intProp>
</ResponseAssertion>
<hashTree/>
</hashTree>
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Add a mobile app with role restriction" enabled="true">
<elementProp name="HTTPsampler.Files" elementType="HTTPFileArgs">
<collectionProp name="HTTPFileArgs.files">
<elementProp name="${script-path}image.png" elementType="HTTPFileArg">
<stringProp name="File.path">${script-path}image.png</stringProp>
<stringProp name="File.paramname">bannerFile</stringProp>
<stringProp name="File.mimetype">image/png</stringProp>
</elementProp>
<elementProp name="${script-path}image.png" elementType="HTTPFileArg">
<stringProp name="File.path">${script-path}image.png</stringProp>
<stringProp name="File.paramname">screenshot1File</stringProp>
<stringProp name="File.mimetype">image/png</stringProp>
</elementProp>
<elementProp name="${script-path}image.png" elementType="HTTPFileArg">
<stringProp name="File.path">${script-path}image.png</stringProp>
<stringProp name="File.paramname">iconFile</stringProp>
<stringProp name="File.mimetype">image/png</stringProp>
</elementProp>
</collectionProp>
</elementProp>
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
<collectionProp name="Arguments.arguments">
<elementProp name="appmeta" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">true</boolProp>
<stringProp name="Argument.value">${response}</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
<stringProp name="Argument.name">appmeta</stringProp>
</elementProp>
<elementProp name="provider" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">false</boolProp>
<stringProp name="Argument.value">1WSO2Mobile</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
<stringProp name="Argument.name">provider</stringProp>
</elementProp>
<elementProp name="markettype" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">false</boolProp>
<stringProp name="Argument.value">enterprise</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
<stringProp name="Argument.name">markettype</stringProp>
</elementProp>
<elementProp name="platform" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">false</boolProp>
<stringProp name="Argument.value">android</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
<stringProp name="Argument.name">platform</stringProp>
</elementProp>
<elementProp name="name" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">false</boolProp>
<stringProp name="Argument.value">${mobile-app}</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
<stringProp name="Argument.name">name</stringProp>
</elementProp>
<elementProp name="displayName" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">false</boolProp>
<stringProp name="Argument.value">${mobile-app}</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
<stringProp name="Argument.name">displayName</stringProp>
</elementProp>
<elementProp name="description" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">false</boolProp>
<stringProp name="Argument.value">${mobile-app}</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
<stringProp name="Argument.name">description</stringProp>
</elementProp>
<elementProp name="version" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">false</boolProp>
<stringProp name="Argument.value">1.1.10</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
<stringProp name="Argument.name">version</stringProp>
</elementProp>
<elementProp name="category" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">false</boolProp>
<stringProp name="Argument.value">business</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
<stringProp name="Argument.name">category</stringProp>
</elementProp>
<elementProp name="mobileapp" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">false</boolProp>
<stringProp name="Argument.value">mobileapp</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
<stringProp name="Argument.name">mobileapp</stringProp>
</elementProp>
<elementProp name="visibility" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">true</boolProp>
<stringProp name="Argument.value">admin</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
<stringProp name="Argument.name">visibility</stringProp>
</elementProp>
</collectionProp>
</elementProp>
<stringProp name="HTTPSampler.domain">${server}</stringProp>
<stringProp name="HTTPSampler.port">${port}</stringProp>
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
<stringProp name="HTTPSampler.response_timeout"></stringProp>
<stringProp name="HTTPSampler.protocol">https</stringProp>
<stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp>
<stringProp name="HTTPSampler.path">publisher/api/asset/mobileapp</stringProp>
<stringProp name="HTTPSampler.method">POST</stringProp>
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
<boolProp name="HTTPSampler.DO_MULTIPART_POST">true</boolProp>
<boolProp name="HTTPSampler.monitor">false</boolProp>
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
</HTTPSamplerProxy>
<hashTree>
<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
<collectionProp name="HeaderManager.headers">
<elementProp name="" elementType="Header">
<stringProp name="Header.name">X-CSRF-Token</stringProp>
<stringProp name="Header.value">${X-CSRF-Token}</stringProp>
</elementProp>
<elementProp name="" elementType="Header">
<stringProp name="Header.name">X-Requested-With</stringProp>
<stringProp name="Header.value">XmlHttpRequest</stringProp>
</elementProp>
</collectionProp>
</HeaderManager>
<hashTree/>
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
<collectionProp name="Asserion.test_strings">
<stringProp name="-1042603845">&quot;ok&quot; : &quot;true&quot;, &quot;message&quot; : &quot;Asset created.&quot;</stringProp>
</collectionProp>
<stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
<boolProp name="Assertion.assume_success">false</boolProp>
<intProp name="Assertion.test_type">16</intProp>
</ResponseAssertion>
<hashTree/>
<RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Regular Expression Extractor" enabled="true">
<stringProp name="RegexExtractor.useHeaders">false</stringProp>
<stringProp name="RegexExtractor.refname">id</stringProp>
<stringProp name="RegexExtractor.regex">&quot;id&quot; : &quot;(.*)&quot;</stringProp>
<stringProp name="RegexExtractor.template">$1$</stringProp>
<stringProp name="RegexExtractor.default"></stringProp>
<stringProp name="RegexExtractor.match_number"></stringProp>
</RegexExtractor>
<hashTree/>
</hashTree>
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Check whether role restriction exists" enabled="true">
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
<collectionProp name="Arguments.arguments"/>
</elementProp>
<stringProp name="HTTPSampler.domain">${server}</stringProp>
<stringProp name="HTTPSampler.port">${port}</stringProp>
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
<stringProp name="HTTPSampler.response_timeout"></stringProp>
<stringProp name="HTTPSampler.protocol">https</stringProp>
<stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp>
<stringProp name="HTTPSampler.path">publisher/api/asset/mobileapp/${id}</stringProp>
<stringProp name="HTTPSampler.method">GET</stringProp>
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
<boolProp name="HTTPSampler.DO_MULTIPART_POST">true</boolProp>
<boolProp name="HTTPSampler.monitor">false</boolProp>
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
</HTTPSamplerProxy>
<hashTree>
<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
<collectionProp name="HeaderManager.headers">
<elementProp name="" elementType="Header">
<stringProp name="Header.name">X-CSRF-Token</stringProp>
<stringProp name="Header.value">${X-CSRF-Token}</stringProp>
</elementProp>
<elementProp name="" elementType="Header">
<stringProp name="Header.name">X-Requested-With</stringProp>
<stringProp name="Header.value">XmlHttpRequest</stringProp>
</elementProp>
</collectionProp>
</HeaderManager>
<hashTree/>
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
<collectionProp name="Asserion.test_strings">
<stringProp name="-1653359365">&quot;overview_visibility&quot; : &quot;admin&quot;</stringProp>
</collectionProp>
<stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
<boolProp name="Assertion.assume_success">false</boolProp>
<intProp name="Assertion.test_type">2</intProp>
</ResponseAssertion>
<hashTree/>
</hashTree>
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Delete the mobile app with role restriction" enabled="true">
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
<collectionProp name="Arguments.arguments"/>
</elementProp>
<stringProp name="HTTPSampler.domain">${server}</stringProp>
<stringProp name="HTTPSampler.port">${port}</stringProp>
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
<stringProp name="HTTPSampler.response_timeout"></stringProp>
<stringProp name="HTTPSampler.protocol">https</stringProp>
<stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp>
<stringProp name="HTTPSampler.path">publisher/api/mobile/delete/${id}</stringProp>
<stringProp name="HTTPSampler.method">DELETE</stringProp>
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
<boolProp name="HTTPSampler.DO_MULTIPART_POST">true</boolProp>
<boolProp name="HTTPSampler.monitor">false</boolProp>
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
</HTTPSamplerProxy>
<hashTree>
<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
<collectionProp name="HeaderManager.headers">
<elementProp name="" elementType="Header">
<stringProp name="Header.name">X-CSRF-Token</stringProp>
<stringProp name="Header.value">${X-CSRF-Token}</stringProp>
</elementProp>
<elementProp name="" elementType="Header">
<stringProp name="Header.name">X-Requested-With</stringProp>
<stringProp name="Header.value">XmlHttpRequest</stringProp>
</elementProp>
</collectionProp>
</HeaderManager>
<hashTree/>
</hashTree>
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Upload a mobile app" enabled="true">
<elementProp name="HTTPsampler.Files" elementType="HTTPFileArgs">
<collectionProp name="HTTPFileArgs.files">
<elementProp name="${script-path}test.apk" elementType="HTTPFileArg">
<stringProp name="File.path">${script-path}test.apk</stringProp>
<stringProp name="File.paramname">file</stringProp>
<stringProp name="File.mimetype">application/vnd.android.package-archive,.apk</stringProp>
</elementProp>
</collectionProp>
</elementProp>
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
<collectionProp name="Arguments.arguments"/>
</elementProp>
<stringProp name="HTTPSampler.domain">${server}</stringProp>
<stringProp name="HTTPSampler.port">${port}</stringProp>
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
<stringProp name="HTTPSampler.response_timeout"></stringProp>
<stringProp name="HTTPSampler.protocol">https</stringProp>
<stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp>
<stringProp name="HTTPSampler.path">publisher/api/mobileapp/upload</stringProp>
<stringProp name="HTTPSampler.method">POST</stringProp>
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
<boolProp name="HTTPSampler.DO_MULTIPART_POST">true</boolProp>
<boolProp name="HTTPSampler.monitor">false</boolProp>
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
</HTTPSamplerProxy>
<hashTree>
<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
<collectionProp name="HeaderManager.headers">
<elementProp name="" elementType="Header">
<stringProp name="Header.name">X-CSRF-Token</stringProp>
<stringProp name="Header.value">${X-CSRF-Token}</stringProp>
</elementProp>
<elementProp name="" elementType="Header">
<stringProp name="Header.name">X-Requested-With</stringProp>
<stringProp name="Header.value">XmlHttpRequest</stringProp>
</elementProp>
</collectionProp>
</HeaderManager>
<hashTree/>
<RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Regular Expression Extractor" enabled="true">
<stringProp name="RegexExtractor.useHeaders">false</stringProp>
<stringProp name="RegexExtractor.refname">response</stringProp>
<stringProp name="RegexExtractor.regex">(?s)(^.*)</stringProp>
<stringProp name="RegexExtractor.template">$1$</stringProp>
<stringProp name="RegexExtractor.default"></stringProp>
<stringProp name="RegexExtractor.match_number">1</stringProp>
</RegexExtractor>
<hashTree/>
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
<collectionProp name="Asserion.test_strings">
<stringProp name="1289597910">&quot;package&quot; : &quot;com.apkpure.aegon&quot;, &quot;version&quot; : &quot;1.1.10&quot;</stringProp>
</collectionProp>
<stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
<boolProp name="Assertion.assume_success">false</boolProp>
<intProp name="Assertion.test_type">16</intProp>
</ResponseAssertion>
<hashTree/>
</hashTree>
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Add a mobile app without role restriction" enabled="true">
<elementProp name="HTTPsampler.Files" elementType="HTTPFileArgs">
<collectionProp name="HTTPFileArgs.files">
<elementProp name="${script-path}image.png" elementType="HTTPFileArg">
<stringProp name="File.path">${script-path}image.png</stringProp>
<stringProp name="File.paramname">bannerFile</stringProp>
<stringProp name="File.mimetype">image/png</stringProp>
</elementProp>
<elementProp name="${script-path}image.png" elementType="HTTPFileArg">
<stringProp name="File.path">${script-path}image.png</stringProp>
<stringProp name="File.paramname">screenshot1File</stringProp>
<stringProp name="File.mimetype">image/png</stringProp>
</elementProp>
<elementProp name="${script-path}image.png" elementType="HTTPFileArg">
<stringProp name="File.path">${script-path}image.png</stringProp>
<stringProp name="File.paramname">iconFile</stringProp>
<stringProp name="File.mimetype">image/png</stringProp>
</elementProp>
</collectionProp>
</elementProp>
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
<collectionProp name="Arguments.arguments">
<elementProp name="appmeta" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">true</boolProp>
<stringProp name="Argument.value">${response}</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
<stringProp name="Argument.name">appmeta</stringProp>
</elementProp>
<elementProp name="provider" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">false</boolProp>
<stringProp name="Argument.value">1WSO2Mobile</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
<stringProp name="Argument.name">provider</stringProp>
</elementProp>
<elementProp name="markettype" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">false</boolProp>
<stringProp name="Argument.value">enterprise</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
<stringProp name="Argument.name">markettype</stringProp>
</elementProp>
<elementProp name="platform" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">false</boolProp>
<stringProp name="Argument.value">android</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
<stringProp name="Argument.name">platform</stringProp>
</elementProp>
<elementProp name="name" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">false</boolProp>
<stringProp name="Argument.value">${mobile-app}</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
<stringProp name="Argument.name">name</stringProp>
</elementProp>
<elementProp name="displayName" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">false</boolProp>
<stringProp name="Argument.value">${mobile-app}</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
<stringProp name="Argument.name">displayName</stringProp>
</elementProp>
<elementProp name="description" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">false</boolProp>
<stringProp name="Argument.value">${mobile-app}</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
<stringProp name="Argument.name">description</stringProp>
</elementProp>
<elementProp name="version" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">false</boolProp>
<stringProp name="Argument.value">1.1.10</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
<stringProp name="Argument.name">version</stringProp>
</elementProp>
<elementProp name="category" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">false</boolProp>
<stringProp name="Argument.value">business</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
<stringProp name="Argument.name">category</stringProp>
</elementProp>
<elementProp name="mobileapp" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">false</boolProp>
<stringProp name="Argument.value">mobileapp</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
<stringProp name="Argument.name">mobileapp</stringProp>
</elementProp>
<elementProp name="visibility" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">true</boolProp>
<stringProp name="Argument.value"></stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
<stringProp name="Argument.name">visibility</stringProp>
</elementProp>
</collectionProp>
</elementProp>
<stringProp name="HTTPSampler.domain">${server}</stringProp>
<stringProp name="HTTPSampler.port">${port}</stringProp>
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
<stringProp name="HTTPSampler.response_timeout"></stringProp>
<stringProp name="HTTPSampler.protocol">https</stringProp>
<stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp>
<stringProp name="HTTPSampler.path">publisher/api/asset/mobileapp</stringProp>
<stringProp name="HTTPSampler.method">POST</stringProp>
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
<boolProp name="HTTPSampler.DO_MULTIPART_POST">true</boolProp>
<boolProp name="HTTPSampler.monitor">false</boolProp>
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
</HTTPSamplerProxy>
<hashTree>
<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
<collectionProp name="HeaderManager.headers">
<elementProp name="" elementType="Header">
<stringProp name="Header.name">X-CSRF-Token</stringProp>
<stringProp name="Header.value">${X-CSRF-Token}</stringProp>
</elementProp>
<elementProp name="" elementType="Header">
<stringProp name="Header.name">X-Requested-With</stringProp>
<stringProp name="Header.value">XmlHttpRequest</stringProp>
</elementProp>
</collectionProp>
</HeaderManager>
<hashTree/>
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
<collectionProp name="Asserion.test_strings">
<stringProp name="-1042603845">&quot;ok&quot; : &quot;true&quot;, &quot;message&quot; : &quot;Asset created.&quot;</stringProp>
</collectionProp>
<stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
<boolProp name="Assertion.assume_success">false</boolProp>
<intProp name="Assertion.test_type">16</intProp>
</ResponseAssertion>
<hashTree/>
<RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Regular Expression Extractor" enabled="true">
<stringProp name="RegexExtractor.useHeaders">false</stringProp>
<stringProp name="RegexExtractor.refname">id</stringProp>
<stringProp name="RegexExtractor.regex">&quot;id&quot; : &quot;(.*)&quot;</stringProp>
<stringProp name="RegexExtractor.template">$1$</stringProp>
<stringProp name="RegexExtractor.default"></stringProp>
<stringProp name="RegexExtractor.match_number"></stringProp>
</RegexExtractor>
<hashTree/>
</hashTree>
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Check whether role restriction exists" enabled="true">
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
<collectionProp name="Arguments.arguments"/>
</elementProp>
<stringProp name="HTTPSampler.domain">${server}</stringProp>
<stringProp name="HTTPSampler.port">${port}</stringProp>
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
<stringProp name="HTTPSampler.response_timeout"></stringProp>
<stringProp name="HTTPSampler.protocol">https</stringProp>
<stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp>
<stringProp name="HTTPSampler.path">publisher/api/asset/mobileapp/${id}</stringProp>
<stringProp name="HTTPSampler.method">GET</stringProp>
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
<boolProp name="HTTPSampler.DO_MULTIPART_POST">true</boolProp>
<boolProp name="HTTPSampler.monitor">false</boolProp>
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
</HTTPSamplerProxy>
<hashTree>
<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
<collectionProp name="HeaderManager.headers">
<elementProp name="" elementType="Header">
<stringProp name="Header.name">X-CSRF-Token</stringProp>
<stringProp name="Header.value">${X-CSRF-Token}</stringProp>
</elementProp>
<elementProp name="" elementType="Header">
<stringProp name="Header.name">X-Requested-With</stringProp>
<stringProp name="Header.value">XmlHttpRequest</stringProp>
</elementProp>
</collectionProp>
</HeaderManager>
<hashTree/>
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
<collectionProp name="Asserion.test_strings">
<stringProp name="-1653359365">&quot;overview_visibility&quot; : &quot;admin&quot;</stringProp>
</collectionProp>
<stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
<boolProp name="Assertion.assume_success">false</boolProp>
<intProp name="Assertion.test_type">6</intProp>
</ResponseAssertion>
<hashTree/>
</hashTree>
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Delete the mobile app without role restriction" enabled="true">
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
<collectionProp name="Arguments.arguments"/>
</elementProp>
<stringProp name="HTTPSampler.domain">${server}</stringProp>
<stringProp name="HTTPSampler.port">${port}</stringProp>
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
<stringProp name="HTTPSampler.response_timeout"></stringProp>
<stringProp name="HTTPSampler.protocol">https</stringProp>
<stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp>
<stringProp name="HTTPSampler.path">publisher/api/mobile/delete/${id}</stringProp>
<stringProp name="HTTPSampler.method">DELETE</stringProp>
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
<boolProp name="HTTPSampler.DO_MULTIPART_POST">true</boolProp>
<boolProp name="HTTPSampler.monitor">false</boolProp>
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
</HTTPSamplerProxy>
<hashTree>
<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
<collectionProp name="HeaderManager.headers">
<elementProp name="" elementType="Header">
<stringProp name="Header.name">X-CSRF-Token</stringProp>
<stringProp name="Header.value">${X-CSRF-Token}</stringProp>
</elementProp>
<elementProp name="" elementType="Header">
<stringProp name="Header.name">X-Requested-With</stringProp>
<stringProp name="Header.value">XmlHttpRequest</stringProp>
</elementProp>
</collectionProp>
</HeaderManager>
<hashTree/>
</hashTree>
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Log out from publisher" enabled="true">
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
<collectionProp name="Arguments.arguments"/>

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="2.8" jmeter="2.13 r1665067">
<jmeterTestPlan version="1.2" properties="2.9" jmeter="3.0 r1743807">
<hashTree>
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Android Device Management API" enabled="true">
<stringProp name="TestPlan.comments"></stringProp>
@ -4454,7 +4454,7 @@ GEL4ZNjZ+jnwSkzwBU5vh/QS&quot;,&#xd;
</HeaderManager>
<hashTree/>
</hashTree>
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Operation Completed Response for Request Info" enabled="true">
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Operation Completed Response for Request Info" enabled="false">
<boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
<elementProp name="HTTPsampler.Arguments" elementType="Arguments">
<collectionProp name="Arguments.arguments">
@ -8660,7 +8660,7 @@ GEL4ZNjZ+jnwSkzwBU5vh/QS&quot;,&#xd;
</HeaderManager>
<hashTree/>
</hashTree>
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Operation Completed Response for Request Info" enabled="true">
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Operation Completed Response for Request Info" enabled="false">
<boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
<elementProp name="HTTPsampler.Arguments" elementType="Arguments">
<collectionProp name="Arguments.arguments">

@ -0,0 +1,551 @@
#!/bin/bash
echo ""
echo "----------------------------------------"
echo "WSO2 IoT Server IP configuration tool"
echo "----------------------------------------"
##################################### IP configs related to broker ####################################
echo ""
echo ">>> Step 1: Change current IP address of the IoT Core"
echo ""
echo "Please enter the IoT Core IP that you need to replace (if you are trying out IoT server for the first time this will be localhost)"
read val1;
while [[ -z $val1 ]]; do #if $val1 is a zero length String
echo "Please enter the IoT Core IP that you need to replace (if you are trying out IoT server for the first time this will be localhost)"
read val1;
done
echo ""
echo "Please enter your current IP"
read val2;
while [[ -z $val2 ]]; do #if $val2 is a zero length String
echo "Please enter your current IP"
read val2;
done
echo "--------------------------------------"
echo "All your " + $val1 + " IP's are replaced with " +$val2 ;
echo "--------------------------------------"
replaceText='s/localhost/'$val1'/g'
echo "Changing <IoT_HOME>/conf/carbon.xml"
sed -i '' -e 's#\(<HostName>\)'$val1'\(</HostName>\)#\1'$val2'\2#g' ../conf/carbon.xml
sed -i '' -e 's#\(<MgtHostName>\)'$val1'\(</MgtHostName>\)#\1'$val2'\2#g' ../conf/carbon.xml
echo "Completed!!"
#--------------------
echo "Changing <IoT_HOME>/conf/app-manager.xml"
sed -i '' -e 's#\(<IdentityProviderUrl>\)https\:\/\/'$val1'\:\${mgt\.transport\.https\.port}\/samlsso\(</IdentityProviderUrl>\)#\1'https://$val2:9443/samlsso'\2#g' ../conf/app-manager.xml
echo "Completed!!"
#--------------------
echo "Changing <IoT_HOME>/conf/identity/sso-idp-config.xml"
sed -i '' -e 's/'$val1'/'$val2'/g' ../conf/identity/sso-idp-config.xml
echo "Completed!!"
#--------------------
echo "Changing <IoT_HOME>/conf/iot-api-config.xml"
sed -i '' -e 's/'$val1'/'$val2'/g' ../conf/iot-api-config.xml
echo "Completed!!"
#--------------------
echo "Changing <IoT_HOME>/repository/deployment/server/jaggeryapps/devicemgt/app/conf/app-conf.json"
sed -i -e 's/"identityProvider.*/\"identityProviderUrl\"\ :\ "https\:\/\/'$val2':9443\/samlsso\"\,/' ../repository/deployment/server/jaggeryapps/devicemgt/app/conf/app-conf.json
sed -i -e 's/"acs.*/\"acs\"\ :\ "https\:\/\/'$val2':9443\/devicemgt\/uuf\/sso\/acs\"\,/' ../repository/deployment/server/jaggeryapps/devicemgt/app/conf/app-conf.json
echo "Completed!!"
#--------------------
echo "Changing <IoT_HOME>/repository/deployment/server/jaggeryapps/api-store/site/conf/site.json"
sed -i -e 's/"identityProvider.*/\"identityProviderUrl\"\ :\ "https\:\/\/'$val2':9443\/samlsso\"\,/' ../repository/deployment/server/jaggeryapps/api-store/site/conf/site.json
echo "Completed!!"
#--------------------
echo "Changing <IoT_HOME>/repository/deployment/server/jaggeryapps/portal/configs/designer.json"
sed -i -e 's/"acs.*/\"acs\"\ :\ "https\:\/\/'$val2':9443\/portal\/acs\"\,/' ../repository/deployment/server/jaggeryapps/portal/configs/designer.json
echo "Completed!!"
#--------------------
echo "Changing <IoT_HOME>/conf/api-manager.xml"
if grep -q '<!-- Server URL of the API key manager -->' ../conf/api-manager.xml;
then
echo 'found'
sed -i -e 's|<!-- Server URL of the API key manager -->||' ../conf/api-manager.xml
fi
if grep -q '<ServerURL>https:\/\/\${carbon.local.ip}:\${mgt.transport.https.port}\${carbon.context}services\/<\/ServerURL>' ../conf/api-manager.xml;
then
echo 'found'
sed -i -e 's/<ServerURL>https:\/\/\${carbon.local.ip}:\${mgt.transport.https.port}\${carbon.context}services\/<\/ServerURL>//' ../conf/api-manager.xml
fi
if grep -q '<ServerURL>https:\/\/'$val2':\${mgt.transport.https.port}\${carbon.context}services\/<\/ServerURL>' ../conf/api-manager.xml;
then
echo 'found'
sed -i -e 's/<ServerURL>https:\/\/'$val2':\${mgt.transport.https.port}\${carbon.context}services\/<\/ServerURL>//' ../conf/api-manager.xml
fi
sed -i '' -e 's/<APIKeyValidator>/<APIKeyValidator><!-- Server URL of the API key manager --><ServerURL>https:\/\/'$val2'\:\$\{mgt\.transport\.https\.port\}\$\{carbon\.context\}services\/<\/ServerURL>/g' ../conf/api-manager.xml
echo "Completed!!"
#--------------------
if grep -q '<RevokeAPIURL>https:\/\/localhost:\${https.nio.port}\/revoke<\/RevokeAPIURL>' ../conf/api-manager.xml;
then
sed -i -e 's|<RevokeAPIURL>https:\/\/localhost:\${https.nio.port}\/revoke<\/RevokeAPIURL>|<RevokeAPIURL>https:\/\/'$val2':\${https.nio.port}\/revoke<\/RevokeAPIURL>|' ../conf/api-manager.xml
fi
if grep -q '<RevokeAPIURL>https:\/\/'$val1':\${https.nio.port}\/revoke<\/RevokeAPIURL>' ../conf/api-manager.xml;
then
sed -i -e 's|<RevokeAPIURL>https:\/\/'$val1':\${https.nio.port}\/revoke<\/RevokeAPIURL>|<RevokeAPIURL>https:\/\/'$val2':\${https.nio.port}\/revoke<\/RevokeAPIURL>|' ../conf/api-manager.xml
fi
#--------------------
echo "Changing <IoT_HOME>/conf/etc/webapp-publisher-config.xml"
sed -i '' -e 's#\(<EnabledUpdateApi>\)false\(</EnabledUpdateApi>\)#\1'true'\2#g' ../conf/etc/webapp-publisher-config.xml
echo "Completed!!"
#--------------------
echo "Changing <IoT_HOME>/bin/iot-server.sh"
sed -i -e 's/-Diot.core.host.*/-Diot.core.host="'$val2'" \\/' ../bin/iot-server.sh
sed -i -e 's/-Diot.keymanager.host.*/-Diot.keymanager.host="'$val2'" \\/' ../bin/iot-server.sh
sed -i -e 's/-Diot.gateway.host.*/-Diot.gateway.host="'$val2'" \\/' ../bin/iot-server.sh
echo "Completed!!"
#----------------------
echo ""
echo "Changing hostURL of <IoT_HOME>/wso2/broker/conf/broker.xml"
if grep -q '<property name="hostURL">https://'$val1':9443/services/OAuth2TokenValidationService</property>' ../wso2/broker/conf/broker.xml;
then
echo "found"
sed -i -e 's|<property name="hostURL">https:\/\/'$val1':9443\/services\/OAuth2TokenValidationService</\property>|<property name="hostURL">https:\/\/'$val2':9443\/services\/OAuth2TokenValidationService</\property>|' ../wso2/broker/conf/broker.xml
echo "Completed!!"
fi
#------------------------
echo ""
echo "Changing tokenEndpoint of <IoT_HOME>/wso2/broker/conf/broker.xml"
if grep -q '<property name="tokenEndpoint">https:\/\/'$val1':8243</\property>' ../wso2/broker/conf/broker.xml;
then
echo "found"
sed -i -e 's|<property name="tokenEndpoint">https:\/\/'$val1':8243</\property>|<property name="tokenEndpoint">https:\/\/'$val2':8243</\property>|' ../wso2/broker/conf/broker.xml
echo "Completed!!"
fi
#--------------------------
echo ""
echo "Changing deviceMgtServerUrl of <IoT_HOME>/wso2/broker/conf/broker.xml"
if grep -q '<property name="deviceMgtServerUrl">https:\/\/'$val1':8243</\property>' ../wso2/broker/conf/broker.xml;
then
echo "found"
sed -i -e 's|<property name="deviceMgtServerUrl">https:\/\/'$val1':8243</\property>|<property name="deviceMgtServerUrl">https:\/\/'$val2':8243</\property>|' ../wso2/broker/conf/broker.xml
echo "Completed!!"
fi
#--------------------
echo "Changing <IoT_HOME>/wso2/analytics/bin/wso2server.sh"
sed -i -e 's/-Diot.keymanager.host.*/-Diot.keymanager.host="'$val2'" \\/' ../wso2/analytics/bin/wso2server.sh
sed -i -e 's/-Diot.gateway.host.*/-Diot.gateway.host="'$val2'" \\/' ../wso2/analytics/bin/wso2server.sh
echo "Completed!!"
#--------------------
echo "Changing <IoT_HOME>/wso2/analytics/repository/deployment/server/jaggeryapps/portal/configs/designer.json"
sed -i -e 's/"identityProviderURL.*/\"identityProviderURL\"\:\"https\:\/\/'$val2':9443\/samlsso\"\,/' ../wso2/analytics/repository/deployment/server/jaggeryapps/portal/configs/designer.json
sed -i -e 's/"dynamicClientAppRegistrationServiceURL.*/\"dynamicClientAppRegistrationServiceURL\"\:\"https\:\/\/'$val2':9443\/dynamic-client-web\/register\"\,/' ../wso2/analytics/repository/deployment/server/jaggeryapps/portal/configs/designer.json
sed -i -e 's/"apiManagerClientAppRegistrationServiceURL.*/\"apiManagerClientAppRegistrationServiceURL\"\:\"https\:\/\/'$val2':9443\/api-application-registration\/register\/tenants\"\,/' ../wso2/analytics/repository/deployment/server/jaggeryapps/portal/configs/designer.json
sed -i -e 's/"tokenServiceURL.*/\"tokenServiceURL\"\: \"https\:\/\/'$val2':9443\/oauth2\/token\"/' ../wso2/analytics/repository/deployment/server/jaggeryapps/portal/configs/designer.json
sed -i -e 's/"hostname.*/\"hostname\"\: \"'$val2'\"\,/' ../wso2/analytics/repository/deployment/server/jaggeryapps/portal/configs/designer.json
echo "Completed!!"
##################################### IP configs related to broker ####################################
echo ""
echo ""
echo ">>> Step 2: Change current IP address of the IoT Broker"
echo "-------------------------------------------------------"
echo ""
echo "Please enter the IoT Broker IP that you need to replace (if you are trying out IoT server for the first time this will be localhost)"
read val3;
while [[ -z $val3 ]]; do #if $val1 is a zero length String
echo "Please enter the IoT Broker IP that you need to replace (if you are trying out IoT server for the first time this will be localhost)"
read val3;
done
echo ""
echo "Please enter your current IP"
read val4;
while [[ -z $val4 ]]; do #if $val2 is a zero length String
echo "Please enter your current IP"
read val4;
done
echo ""
echo "--------------------------------------"
echo "All your " + $val3 + " IP's are replaced with " +$val4 ;
echo "--------------------------------------"
#--------------------
echo "Changing <IoT_HOME>/wso2/analytics/bin/wso2server.sh"
sed -i -e 's/-Dmqtt.broker.host.*/-Dmqtt.broker.host="'$val4'" \\/' ../wso2/analytics/bin/wso2server.sh
echo "Completed!!"
#--------------------
echo "Changing <IoT_HOME>/bin/iot-server.sh"
sed -i -e 's/-Dmqtt.broker.host.*/-Dmqtt.broker.host="'$val4'" \\/' ../bin/iot-server.sh
echo "Completed!!"
##################################### IP configs related to analytics ####################################
echo ""
echo ""
echo ">>> Step 3: Change current IP address of the IoT Analytics"
echo "-------------------------------------------------------"
echo ""
echo "Please enter the IoT Analytics IP that you need to replace (if you are trying out IoT server for the first time
this will be localhost)"
read val5;
while [[ -z $val5 ]]; do #if $val1 is a zero length String
echo "Please enter the IoT Analytics IP that you need to replace (if you are trying out IoT server for the first time this will be localhost)"
read val5;
done
echo ""
echo "Please enter your current IP"
read val6;
while [[ -z $val6 ]]; do #if $val2 is a zero length String
echo "Please enter your current IP"
read val6;
done
echo ""
echo "--------------------------------------"
echo "All your " + $val5 + " IP's are replaced with " +$val6 ;
echo "--------------------------------------"
#--------------------
echo "Changing <IoT_HOME>/bin/iot-server.sh"
sed -i -e 's/-Diot.analytics.host.*/-Diot.analytics.host="'$val6'" \\/' ../bin/iot-server.sh
echo "Completed!!"
echo "Changing <IoT_HOME>/wso2/analytics/repository/deployment/server/jaggeryapps/portal/configs/designer.json"
sed -i -e 's/"acs.*/\"acs\"\:\"https\:\/\/'$val6':9445\/portal\/acs\"\,/' ../wso2/analytics/repository/deployment/server/jaggeryapps/portal/configs/designer.json
sed -i -e 's/"callbackUrl.*/\"callbackUrl\"\:\"https\:\/\/'$val6':9445\/portal\"\,/' ../wso2/analytics/repository/deployment/server/jaggeryapps/portal/configs/designer.json
echo "Completed!!"
echo ""
echo "--------------------------------------------"
echo "Generating SSL certificates for the profiles"
echo "--------------------------------------------"
echo ""
B_SUBJ=''
C_SUBJ=''
A_SUBJ=''
SERVER_ADDRESS=''
slash='/'
equal='='
buildSubject(){
if [ $1 = "CN" ]; then
echo "Please provide Common Name "
read val
while [[ -z $val ]]; do #if $val is a zero length String
echo "Common name(your server IP/hostname) cannot be null. Please enter the Common name."
read val;
done
if [ -n $val ]; then #This is true if $val is not empty (If $val is not a non zero length String)
if [ $3 = "C" ]; then
C_SUBJ="$C_SUBJ$slash$1$equal$val"
return
elif [ $3 = "B" ]; then
B_SUBJ="$B_SUBJ$slash$1$equal$val"
return
else
A_SUBJ="$A_SUBJ$slash$1$equal$val"
SERVER_ADDRESS=$val
return
fi
fi
fi
echo "Please provide "$2". Press Enter to skip."
read val;
if [ ! -z $val ]; then #If $val is not a zero length String; This is same as if[ -n $val]; then
if [ $3 = "C" ]; then
C_SUBJ="$C_SUBJ$slash$1$equal$val"
return
elif [ $3 = "B" ]; then
B_SUBJ="$B_SUBJ$slash$1$equal$val"
return
else
A_SUBJ="$A_SUBJ$slash$1$equal$val"
return
fi
fi
}
mkdir tmp
echo ''
echo '=======Enter Values for IoT Core SSL Certificate======='
buildSubject 'C' 'Country' 'C'
buildSubject 'ST' 'State' 'C'
buildSubject 'L' 'Location' 'C'
buildSubject 'O' 'Organization' 'C'
buildSubject 'OU' 'Organizational Unit' 'C'
buildSubject 'emailAddress' 'Email Address' 'C'
buildSubject 'CN' 'Common Name' 'C'
echo ""
echo 'Provided IoT Core SSL Subject : ' $C_SUBJ
echo 'If you have a different IoT Core Keystore password please enter it here. Press Enter to use the default password.'
read -s password
if [ ! -z $password ]; then
SSL_PASS=$password
else
SSL_PASS="wso2carbon"
fi
echo ""
echo "Generating SSL Certificate for IoT Core"
openssl genrsa -out ./tmp/c.key 4096
openssl req -new -key ./tmp/c.key -out ./tmp/c.csr -subj $C_SUBJ
openssl x509 -req -days 730 -in ./tmp/c.csr -signkey ./tmp/c.key -set_serial 044324884 -out ./tmp/c.crt
echo "Export to PKCS12"
openssl pkcs12 -export -out ./tmp/CKEYSTORE.p12 -inkey ./tmp/c.key -in ./tmp/c.crt -name "wso2carbon" -password pass:$SSL_PASS
echo "Export PKCS12 to JKS"
keytool -importkeystore -srckeystore ./tmp/CKEYSTORE.p12 -srcstoretype PKCS12 -destkeystore ../repository/resources/security/wso2carbon.jks -deststorepass wso2carbon -srcstorepass wso2carbon -noprompt
keytool -importkeystore -srckeystore ./tmp/CKEYSTORE.p12 -srcstoretype PKCS12 -destkeystore ../repository/resources/security/client-truststore.jks -deststorepass wso2carbon -srcstorepass wso2carbon -noprompt
##################
echo ""
echo 'Use same values for IoT Broker SSL Cerificate? (Y/N)'
response=''
read response
if [ $response = "y" -o $response = "Y" ]; then
B_SUBJ=$C_SUBJ
else
echo ''
echo '=======Enter Values for IoT Broker SSL Certificate======='
buildSubject 'C' 'Country' 'B'
buildSubject 'ST' 'State' 'B'
buildSubject 'L' 'Location' 'B'
buildSubject 'O' 'Organization' 'B'
buildSubject 'OU' 'Organizational Unit' 'B'
buildSubject 'emailAddress' 'Email Address' 'B'
buildSubject 'CN' 'Common Name' 'B'
fi
echo ""
echo 'Provided IoT Broker SSL Subject : ' $B_SUBJ
echo 'If you have a different IoT Broker Keystore password please enter it here. Press Enter to use the default password.'
read -s password
if [ ! -z $password ]; then
SSL_PASS=$password
else
SSL_PASS="wso2carbon"
fi
echo ""
echo "Generating SSL Certificate for IoT Broker"
openssl genrsa -out ./tmp/b.key 4096
openssl req -new -key ./tmp/b.key -out ./tmp/b.csr -subj $B_SUBJ
openssl x509 -req -days 730 -in ./tmp/b.csr -signkey ./tmp/b.key -set_serial 044324885 -out ./tmp/b.crt
echo "Export to PKCS12"
openssl pkcs12 -export -out ./tmp/BKEYSTORE.p12 -inkey ./tmp/b.key -in ./tmp/b.crt -name "wso2carbon" -password pass:$SSL_PASS
echo "Export PKCS12 to JKS"
keytool -importkeystore -srckeystore ./tmp/BKEYSTORE.p12 -srcstoretype PKCS12 -destkeystore ../wso2/broker/repository/resources/security/wso2carbon.jks -deststorepass wso2carbon -srcstorepass wso2carbon -noprompt
keytool -importkeystore -srckeystore ./tmp/BKEYSTORE.p12 -srcstoretype PKCS12 -destkeystore ../wso2/broker/repository/resources/security/client-truststore.jks -deststorepass wso2carbon -srcstorepass wso2carbon -noprompt
######################
echo ""
echo 'Use same values for IoT Analytics SSL Cerificate? (Y/N)'
response=''
read response
if [ $response = "y" -o $response = "Y" ]; then
A_SUBJ=$C_SUBJ
else
echo ''
echo '=======Enter Values for IoT Analytics SSL Certificate======='
buildSubject 'C' 'Country' 'A'
buildSubject 'ST' 'State' 'A'
buildSubject 'L' 'Location' 'A'
buildSubject 'O' 'Organization' 'A'
buildSubject 'OU' 'Organizational Unit' 'A'
buildSubject 'emailAddress' 'Email Address' 'A'
buildSubject 'CN' 'Common Name' 'A'
fi
echo ""
echo 'Provided IoT Analytics SSL Subject : ' $A_SUBJ
echo 'If you have a different IoT Analytics Keystore password please enter it here. Press Enter to use the default password.'
read -s password
if [ ! -z $password ]; then
SSL_PASS=$password
else
SSL_PASS="wso2carbon"
fi
echo ""
echo "Generating SSL Certificate for IoT Analytics"
openssl genrsa -out ./tmp/a.key 4096
openssl req -new -key ./tmp/a.key -out ./tmp/a.csr -subj $A_SUBJ
openssl x509 -req -days 730 -in ./tmp/a.csr -signkey ./tmp/a.key -set_serial 044324886 -out ./tmp/a.crt
echo "Export to PKCS12"
openssl pkcs12 -export -out ./tmp/AKEYSTORE.p12 -inkey ./tmp/a.key -in ./tmp/a.crt -name "wso2carbon" -password pass:$SSL_PASS
echo "Export PKCS12 to JKS"
keytool -importkeystore -srckeystore ./tmp/AKEYSTORE.p12 -srcstoretype PKCS12 -destkeystore ../wso2/analytics/repository/resources/security/wso2carbon.jks -deststorepass wso2carbon -srcstorepass wso2carbon -noprompt
keytool -importkeystore -srckeystore ./tmp/AKEYSTORE.p12 -srcstoretype PKCS12 -destkeystore ../wso2/analytics/repository/resources/security/client-truststore.jks -deststorepass wso2carbon -srcstorepass wso2carbon -noprompt
#########################
# If importing certificate exist in the client trust stores delete the existing certificate
echo ""
echo "Deleting existing certificates in client trust stores"
if keytool -list -storepass wso2carbon -alias wso2broker -keystore ../repository/resources/security/client-truststore.jks >/dev/null; then
echo "Deleting wso2broker public cert in core client truststore"
keytool -delete -alias wso2broker -keystore ../repository/resources/security/client-truststore.jks -storepass wso2carbon
fi
if keytool -list -storepass wso2carbon -alias wso2analytics -keystore ../repository/resources/security/client-truststore.jks >/dev/null; then
echo "Deleting wso2analytics public cert in core client truststore"
keytool -delete -alias wso2analytics -keystore ../repository/resources/security/client-truststore.jks -storepass wso2carbon
fi
if keytool -list -storepass wso2carbon -alias wso2iotcore -keystore ../wso2/broker/repository/resources/security/client-truststore.jks >/dev/null; then
echo "Deleting wso2iotcore public cert in broker client truststore"
keytool -delete -alias wso2iotcore -keystore ../wso2/broker/repository/resources/security/client-truststore.jks -storepass wso2carbon
fi
if keytool -list -storepass wso2carbon -alias wso2analytics -keystore ../wso2/broker/repository/resources/security/client-truststore.jks >/dev/null; then
echo "Deleting wso2analytics public cert in broker client truststore"
keytool -delete -alias wso2analytics -keystore ../wso2/broker/repository/resources/security/client-truststore.jks -storepass wso2carbon
fi
if keytool -list -storepass wso2carbon -alias wso2iotcore -keystore ../wso2/analytics/repository/resources/security/client-truststore.jks >/dev/null; then
echo "Deleting wso2iotcore public cert in analytics client truststore"
keytool -delete -alias wso2iotcore -keystore ../wso2/analytics/repository/resources/security/client-truststore.jks -storepass wso2carbon
fi
if keytool -list -storepass wso2carbon -alias wso2broker -keystore ../wso2/analytics/repository/resources/security/client-truststore.jks >/dev/null; then
echo "Deleting wso2broker public cert in analytics client truststore"
keytool -delete -alias wso2broker -keystore ../wso2/analytics/repository/resources/security/client-truststore.jks -storepass wso2carbon
fi
if keytool -list -storepass wso2carbon -alias wso2carbonjwt -keystore ../repository/resources/security/client-truststore.jks >/dev/null; then
echo "Deleting JWT public cert in client truststore"
keytool -delete -alias wso2carbonjwt -keystore ../repository/resources/security/client-truststore.jks -storepass wso2carbon
fi
#########################
# copying certificates to client trust stores
echo ""
echo "Copying certificates to client trust stores"
# copying broker and analytics certificates to IoT core client trust store
keytool -import -alias wso2broker -file ./tmp/b.crt -keystore ../repository/resources/security/client-truststore.jks -storepass wso2carbon -noprompt
keytool -import -alias wso2analytics -file ./tmp/a.crt -keystore ../repository/resources/security/client-truststore.jks -storepass wso2carbon -noprompt
# copying core and analytics certificates to IoT broker client trust store
keytool -import -alias wso2iotcore -file ./tmp/c.crt -keystore ../wso2/broker/repository/resources/security/client-truststore.jks -storepass wso2carbon -noprompt
keytool -import -alias wso2analytics -file ./tmp/a.crt -keystore ../wso2/broker/repository/resources/security/client-truststore.jks -storepass wso2carbon -noprompt
# copying core and broker certificates to IoT analytics client trust store
keytool -import -alias wso2iotcore -file ./tmp/c.crt -keystore ../wso2/analytics/repository/resources/security/client-truststore.jks -storepass wso2carbon -noprompt
keytool -import -alias wso2broker -file ./tmp/b.crt -keystore ../wso2/analytics/repository/resources/security/client-truststore.jks -storepass wso2carbon -noprompt
echo ""
echo "Generating JWT keystore"
echo "-------------------------"
echo ""
echo "Please enter your gateway IP"
echo "(If you are going to run IoT server on a single machine, use IoT core IP)"
read val10;
while [[ -z $val10 ]]; do #if $val2 is a zero length String
echo "Please enter your current IP"
read val10;
done
JWT_SUBJ="CN=$val10,OU=IOT,O=WSO2,L=Colombo,S=Western,C=LK"
echo ""
echo 'Provided Subject for JWT : ' $JWT_SUBJ
keytool -genkey -alias wso2carbon -keyalg RSA -keysize 2048 -keystore ../repository/resources/security/wso2carbonjwt.jks -dname $JWT_SUBJ -storepass wso2carbon -keypass wso2carbon
cp -R ../repository/resources/security/wso2carbonjwt.jks ../wso2/analytics/repository/resources/security/
echo ""
echo "Changing <IoT_HOME>/conf/etc/jwt.properties"
sed -i -e 's/#KeyStore=.*/KeyStore=repository\/resources\/security\/wso2carbonjwt.jks/' ../conf/etc/jwt.properties
sed -i -e 's/#KeyStorePassword=.*/KeyStorePassword=wso2carbon/' ../conf/etc/jwt.properties
sed -i -e 's/#PrivateKeyAlias=.*/PrivateKeyAlias=wso2carbon/' ../conf/etc/jwt.properties
sed -i -e 's/#PrivateKeyPassword=.*/PrivateKeyPassword=wso2carbon/' ../conf/etc/jwt.properties
sed -i -e 's/default-jwt-client=.*/default-jwt-client=false/' ../conf/etc/jwt.properties
echo ""
echo "Changing <IoT_HOME>/wso2/analytics/conf/etc/jwt.properties"
sed -i -e 's/#KeyStore=.*/KeyStore=repository\/resources\/security\/wso2carbonjwt.jks/' ../wso2/analytics/conf/etc/jwt.properties
sed -i -e 's/#KeyStorePassword=.*/KeyStorePassword=wso2carbon/' ../wso2/analytics/conf/etc/jwt.properties
sed -i -e 's/#PrivateKeyAlias=.*/PrivateKeyAlias=wso2carbon/' ../wso2/analytics/conf/etc/jwt.properties
sed -i -e 's/#PrivateKeyPassword=.*/PrivateKeyPassword=wso2carbon/' ../wso2/analytics/conf/etc/jwt.properties
sed -i -e 's/default-jwt-client=.*/default-jwt-client=false/' ../wso2/analytics/conf/etc/jwt.properties
ehco ""
echo "Setting up the public certificate for the default idp"
if hash tac; then
VAR=$(keytool -exportcert -alias wso2carbon -keystore ../repository/resources/security/wso2carbonjwt.jks -rfc -storepass wso2carbon | tail -n +2 | tac | tail -n +2 | tac | tr -cd "[:print:]");
else
VAR=$(keytool -exportcert -alias wso2carbon -keystore ../repository/resources/security/wso2carbonjwt.jks -rfc -storepass wso2carbon | tail -n +2 | tail -r | tail -n +2 | tail -r | tr -cd "[:print:]"); fi
echo ""
echo "Printing certificate"
echo "-----------------------"
echo $VAR
sed -i '' -e 's#<Certificate>.*#<Certificate>'"$VAR"'</Certificate>#g' ../conf/identity/identity-providers/iot_default.xml
echo ""
if [ -e "../conf/identity/identity-providers/iot_default.xml-e" ]; then
echo "IDP temp file exists, hence removing"
rm -f ../conf/identity/identity-providers/iot_default.xml-e
fi
echo ""
echo "Storing JWT public cert in client truststore"
keytool -exportcert -alias wso2carbon -keystore ../repository/resources/security/wso2carbonjwt.jks -rfc -storepass wso2carbon -file ./tmp/jwtcert
keytool -importcert -alias wso2carbonjwt -keystore ../repository/resources/security/client-truststore.jks -storepass wso2carbon -file ./tmp/jwtcert -noprompt
sed -i -e 's/<Parameter Name="wso2.org\/products\/iot">.*/<Parameter Name="wso2.org\/products\/iot">wso2carbonjwt<\/Parameter>/' ../conf/etc/webapp-authenticator-config.xml
echo ""
echo "Configuration Completed!!!"

@ -116,7 +116,7 @@ public class QSGExecutor {
System.out.println("Upload the android application ");
//Upload the android application
MobileApplication application = AppOperations.uploadApplication(Constants.DeviceType.ANDROID, "nfc-app.apk",
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.");
@ -132,7 +132,7 @@ public class QSGExecutor {
System.out.println("Create the android application ");
//Create application entry in publisher
status = AppOperations.addApplication("NFC", application, true);
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);
@ -160,7 +160,7 @@ public class QSGExecutor {
System.out.println("Create the iOS application ");
//Create application entry in publisher
status = AppOperations.addApplication("WSO2Con", iOSApplication, true);
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);

@ -1512,19 +1512,19 @@
<carbon.multitenancy.version>4.6.1</carbon.multitenancy.version>
<!-- Carbon Registry -->
<carbon.registry.version>4.6.5</carbon.registry.version>
<carbon.registry.version>4.6.8</carbon.registry.version>
<!-- Carbon Governance -->
<carbon.governance.version>4.7.0</carbon.governance.version>
<carbon.governance.version>4.7.8</carbon.governance.version>
<!-- Carbon Device Management -->
<carbon.device.mgt.version>3.0.37</carbon.device.mgt.version>
<carbon.device.mgt.version>3.0.57</carbon.device.mgt.version>
<carbon.device.mgt.version.range>[3.0.0, 4.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.0.34</carbon.device.mgt.plugin.version>
<carbon.device.mgt.plugin.version>4.0.47</carbon.device.mgt.plugin.version>
<!-- API Management -->
<carbon.api.mgt.version>6.1.95</carbon.api.mgt.version>
@ -1629,7 +1629,7 @@
<caramel.version>1.0.1</caramel.version>
<!-- App manager version-->
<appmgt.feature.version>1.2.33</appmgt.feature.version>
<appmgt.feature.version>1.2.35</appmgt.feature.version>
<!-- Carbon Store version-->
<carbon.store.version>1.5.1</carbon.store.version>
@ -1638,7 +1638,7 @@
<carbon.um.ws.version>5.1.4</carbon.um.ws.version>
<!-- Cipher tool version-->
<cipher.tool.version>1.0.0-wso2v4</cipher.tool.version>
<cipher.tool.version>1.0.0-wso2v5</cipher.tool.version>
<!--XMPP/MQTT Version-->
<smack.wso2.version>3.0.4.wso2v1</smack.wso2.version>

Loading…
Cancel
Save