From 0900e15d3f97d8a118a3d297f7566a8fca7b1def Mon Sep 17 00:00:00 2001
From: Joze RIHTARSIC <joze.rihtarsic@ext.ec.europa.eu>
Date: Fri, 27 Sep 2019 20:34:37 +0200
Subject: [PATCH] Add oracle docker files

---
 .../weblogic-oracle/docker-compose.yml        | 27 ++++++++
 .../properties/db-scripts/01_create_user.sql  | 10 +++
 .../properties/weblogic/security.properties   |  4 ++
 .../compose/weblogic-oracle/runCompose.sh     | 63 +++++++++++++++++++
 .../weblogic-oracle/stopClearCompose.sh       | 23 +++++++
 .../oracle/oracle-db-11.2.0.2/Dockerfile.xe   |  1 +
 smp-docker/images/tomcat-mysql/Dockerfile     |  3 +
 .../images/weblogic-12.2.1.3-smp/Dockerfile   | 12 +++-
 .../container-scripts/deploySMPToDomain.sh    | 13 ++--
 .../smp/data/ui/enums/SMPPropertyEnum.java    |  2 +-
 .../oracle-4.1_integration_test_data.sql      |  7 ++-
 11 files changed, 151 insertions(+), 14 deletions(-)
 create mode 100644 smp-docker/compose/weblogic-oracle/docker-compose.yml
 create mode 100644 smp-docker/compose/weblogic-oracle/properties/db-scripts/01_create_user.sql
 create mode 100644 smp-docker/compose/weblogic-oracle/properties/weblogic/security.properties
 create mode 100755 smp-docker/compose/weblogic-oracle/runCompose.sh
 create mode 100755 smp-docker/compose/weblogic-oracle/stopClearCompose.sh

diff --git a/smp-docker/compose/weblogic-oracle/docker-compose.yml b/smp-docker/compose/weblogic-oracle/docker-compose.yml
new file mode 100644
index 000000000..022144f60
--- /dev/null
+++ b/smp-docker/compose/weblogic-oracle/docker-compose.yml
@@ -0,0 +1,27 @@
+version: "3.0"
+services:
+  database:
+    image: oracle/database:11.2.0.2-xe
+    container_name: smp_oracle_db
+    volumes:
+      - ./properties/db-scripts:/u01/app/oracle/scripts/setup  # init script.
+      - shared-status-folder:/u01/status/
+    ports:
+      - 1721:1521
+    shm_size: '1gb'
+  weblogic:
+    depends_on:
+      - database
+#    command: [bash, -c, "for i in `seq 10`; do timeout 1  bash -c '</dev/tcp/database/1521'; if [ $$? -eq 0 ] ; then break;fi;sleep 1;  done;"]
+    command: [bash, -c, "for i in `seq 150`; do timeout 1  bash -c 'echo \" $$(ls /u01/status/)\"'; if [ -f '/u01/status/database.log' ] && [ \"$$( cat /u01/status/database.log )\" == 'DATABASE IS READY TO USE!' ] ; then break;fi; echo \"$$i. Wait for database!\"; sleep 2;  done;   /u01/oracle/startAdminServer.sh"]
+    image:  weblogic_smp
+    container_name: wls-smp   
+    hostname: wlsadmin
+    volumes:
+      - ./properties/weblogic:/u01/oracle/properties
+      - shared-status-folder:/u01/status/
+    ports:
+      - 7901:7001
+volumes:
+   shared-status-folder:
+
diff --git a/smp-docker/compose/weblogic-oracle/properties/db-scripts/01_create_user.sql b/smp-docker/compose/weblogic-oracle/properties/db-scripts/01_create_user.sql
new file mode 100644
index 000000000..13d1bd2e4
--- /dev/null
+++ b/smp-docker/compose/weblogic-oracle/properties/db-scripts/01_create_user.sql
@@ -0,0 +1,10 @@
+create tablespace smp_tblspace datafile 'smp_tblspace.dat'  size 10M autoextend on;
+create temporary tablespace smp_tblspace_temp tempfile 'smp_tblspace_temp.dat' size 5M autoextend on;
+
+create user smp identified by test default tablespace smp_tblspace temporary tablespace smp_tblspace_temp;
+
+grant create session to smp;
+grant create sequence to smp;
+grant create table to smp;
+grant unlimited tablespace to smp;
+exit;
diff --git a/smp-docker/compose/weblogic-oracle/properties/weblogic/security.properties b/smp-docker/compose/weblogic-oracle/properties/weblogic/security.properties
new file mode 100644
index 000000000..80e8e77e7
--- /dev/null
+++ b/smp-docker/compose/weblogic-oracle/properties/weblogic/security.properties
@@ -0,0 +1,4 @@
+username=weblogic
+password=Weblogic1
+JAVA_OPTIONS=-Dweblogic.StdoutDebugEnabled=false
+
diff --git a/smp-docker/compose/weblogic-oracle/runCompose.sh b/smp-docker/compose/weblogic-oracle/runCompose.sh
new file mode 100755
index 000000000..b4741fe42
--- /dev/null
+++ b/smp-docker/compose/weblogic-oracle/runCompose.sh
@@ -0,0 +1,63 @@
+#!/bin/bash
+
+WORKING_DIR="$(dirname $0)"
+SMP_INIT_DATABASE="../../../smp-webapp/src/main/smp-setup/database-scripts/oracle10g.ddl"
+SMP_INIT_DATABASE_DATA="../../../smp-webapp/src/main/smp-setup/database-scripts/oracle10g-data.sql"
+# soap ui data
+PREFIX="smp-wls-orcl"
+
+
+
+echo "Working Directory: ${WORKING_DIR}"
+cd "$WORKING_DIR"
+# clear volume and containers - to run  restart from strach 
+
+
+# READ argumnets 
+while getopts i: option
+do
+  case "${option}"
+  in
+    i) SMP_INIT_DATABASE_DATA=${OPTARG};;
+  esac
+done
+
+
+# create  database init script from 
+echo "CONNECT smp/test@//localhost:1521/xe;" > ./properties/db-scripts/02_oracle10g.sql
+cat  "${SMP_INIT_DATABASE}" >> ./properties/db-scripts/02_oracle10g.sql
+
+
+
+# copy init database data for  SMP    
+if [ ! -f "${SMP_INIT_DATABASE_DATA}" ]
+  then
+  echo "SMP sql init data '${SMP_INIT_DATABASE_DATA} not found!!"
+  exit 1;
+else
+  # copy artefact to docker build folder
+  echo "CONNECT smp/test@//localhost:1521/xe;" > ./properties/db-scripts/03_oracle10g-data.sql
+  cat  "${SMP_INIT_DATABASE_DATA}" >> ./properties/db-scripts/03_oracle10g-data.sql
+fi
+
+
+
+
+function clearOldContainers {
+  echo "Clear containers and volumes"
+  docker-compose -p "${PREFIX}" rm -s -f -v
+  docker volume rm "${PREFIX}_shared-status-folder"
+}
+
+
+#
+# Always delete shared-status-folder else weblogic will start to quick!
+# because statuses are sync over shared-status-folder folders and it could contain status from previous run.
+
+clearOldContainers
+# start 
+docker-compose -p ${PREFIX} up -d --force-recreate
+
+# wait until service is up
+for i in `seq 100`; do timeout 1  bash -c ' curl --head --silent --fail http://localhost:7901/smp/'; if [ $? -eq 0  ] ; then break;fi; echo "$i. Wait for weblogic to start!";  sleep 5;  done;
+
diff --git a/smp-docker/compose/weblogic-oracle/stopClearCompose.sh b/smp-docker/compose/weblogic-oracle/stopClearCompose.sh
new file mode 100755
index 000000000..d54c2ad37
--- /dev/null
+++ b/smp-docker/compose/weblogic-oracle/stopClearCompose.sh
@@ -0,0 +1,23 @@
+#!/bin/bash
+
+WORKING_DIR="$(dirname $0)"
+echo "Working Directory: ${WORKING_DIR}"
+cd "$WORKING_DIR"
+
+PREFIX="smp-wls-orcl"
+
+# clear volume and containers - to run  restart from strach 
+
+
+
+function clearOldContainers {
+  echo "Clear containers and volumes"
+  docker-compose -p "${PREFIX}" rm -s -f -v
+  docker volume rm "${PREFIX}_shared-status-folder"
+
+}
+
+
+# stop and clear  
+clearOldContainers
+
diff --git a/smp-docker/images/oracle/oracle-db-11.2.0.2/Dockerfile.xe b/smp-docker/images/oracle/oracle-db-11.2.0.2/Dockerfile.xe
index b7748a7fe..cdc6aea32 100644
--- a/smp-docker/images/oracle/oracle-db-11.2.0.2/Dockerfile.xe
+++ b/smp-docker/images/oracle/oracle-db-11.2.0.2/Dockerfile.xe
@@ -46,6 +46,7 @@ ENV ORACLE_BASE=/u01/app/oracle \
 
 # Use second ENV so that variable get substituted
 ENV PATH=$ORACLE_HOME/bin:$PATH
+ENV NLS_LANG=AMERICAN_AMERICA.AL32UTF8
 
 # Copy binaries
 # -------------
diff --git a/smp-docker/images/tomcat-mysql/Dockerfile b/smp-docker/images/tomcat-mysql/Dockerfile
index 53f31b3cb..040cc48cf 100755
--- a/smp-docker/images/tomcat-mysql/Dockerfile
+++ b/smp-docker/images/tomcat-mysql/Dockerfile
@@ -44,6 +44,9 @@ RUN apt-get update \
      && echo "\nAdd init parameters" >>  $SMP_HOME/apache-tomcat-$TOMCAT_VERSION/smp/conf/smp.config.properties   \
     && echo "\nauthentication.blueCoat.enabled=true" >>  $SMP_HOME/apache-tomcat-$TOMCAT_VERSION/smp/conf/smp.config.properties   
 
+
+RUN curl -o /tmp/org.jacoco.agent.jar  https://repo1.maven.org/maven2/org/jacoco/org.jacoco.agent/0.8.4/org.jacoco.agent-0.8.4-runtime.jar    
+
 # copy application to image 
 ADD ./artefacts /tmp/artefacts
 
diff --git a/smp-docker/images/weblogic-12.2.1.3-smp/Dockerfile b/smp-docker/images/weblogic-12.2.1.3-smp/Dockerfile
index 7e227cf68..b480d24e3 100644
--- a/smp-docker/images/weblogic-12.2.1.3-smp/Dockerfile
+++ b/smp-docker/images/weblogic-12.2.1.3-smp/Dockerfile
@@ -12,7 +12,7 @@
 # HOW TO BUILD THIS IMAGE
 # -----------------------
 # Run:
-#      $ docker build -t weblogic-sml .
+#      $ docker build -t weblogic-smp .
 # 
 # Pull base image
 # ---------------
@@ -21,6 +21,10 @@ FROM oracle/12213-domain-home-in-image
 # Define variable
 ARG SMP_VERSION
 ENV APP_VERSION=$SMP_VERSION
+ENV LC_ALL=en_US.UTF-8
+ENV LANG="en_US.UTF-8"
+ENV LANGUAGE="en_US"
+
 
 
 
@@ -29,7 +33,11 @@ COPY container-scripts/* /u01/oracle/
 COPY smp.war /u01/oracle/
 
 RUN /u01/oracle/deploySMPToDomain.sh && \
-    wlst -loadProperties /u01/oracle/datasource.properties.oracle /u01/oracle/ds-deploy.py 
+     wlst -loadProperties /u01/oracle/datasource.properties.oracle /u01/oracle/ds-deploy.py \
+     # set enforce-valid-basic-auth-credentials false to allow basic authentication for rest services
+     && sed -i -e "s/<\/security-configuration>/  <enforce-valid-basic-auth-credentials>false<\/enforce-valid-basic-auth-credentials>\n<\/security-configuration>/g" "/u01/oracle/user_projects/domains/domain1/config/config.xml"  
     
+
+
 # Define default command to start bash.
 CMD ["startAdminServer.sh"]
diff --git a/smp-docker/images/weblogic-12.2.1.3-smp/container-scripts/deploySMPToDomain.sh b/smp-docker/images/weblogic-12.2.1.3-smp/container-scripts/deploySMPToDomain.sh
index 02c87b20b..61fa1b4a7 100755
--- a/smp-docker/images/weblogic-12.2.1.3-smp/container-scripts/deploySMPToDomain.sh
+++ b/smp-docker/images/weblogic-12.2.1.3-smp/container-scripts/deploySMPToDomain.sh
@@ -1,6 +1,4 @@
 #!/bin/bash
-#
-
 
 #Define DOMAIN_HOME
 echo "Domain Home is: " $DOMAIN_HOME
@@ -10,19 +8,18 @@ if [ ! -d "$DOMAIN_HOME/classes" ]; then
   mkdir -p "$DOMAIN_HOME/classes";
 fi
 
-if [ ! -d "$DOMAIN_HOME/bdmsl" ]; then
-  mkdir -p "$DOMAIN_HOME/bdmsl";
-fi
-
-
 # create smp property file
-echo "hibernate.dialect=org.hibernate.dialect.Oracle10gDialect" >> "$DOMAIN_HOME/classes/smp.config.properties"
+echo "hibernate.dialect=org.hibernate.dialect.Oracle10gDialect" > "$DOMAIN_HOME/classes/smp.config.properties"
 echo "datasource.jndi=jdbc/cipaeDeliveryDs" >> "$DOMAIN_HOME/classes/smp.config.properties"
+echo "authentication.blueCoat.enabled=true" >> "$DOMAIN_HOME/classes/smp.config.properties"
 echo "log.folder=./logs/" >> "$DOMAIN_HOME/classes/smp.config.properties"
+
 # create weblogic classpath to classes folder
 echo "export CLASSPATH=\${CLASSPATH}:\${DOMAIN_HOME}/classes" >> "$DOMAIN_HOME/bin/setDomainEnv.sh"
 
 
+cp /u01/oracle/smp.war "$DOMAIN_HOME/"
+
 
 # Deploy Application
 wlst.sh -skipWLSModuleScanning /u01/oracle/smp-app-deploy.py
diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/ui/enums/SMPPropertyEnum.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/ui/enums/SMPPropertyEnum.java
index 7170c837e..f4243875d 100644
--- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/ui/enums/SMPPropertyEnum.java
+++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/ui/enums/SMPPropertyEnum.java
@@ -14,7 +14,7 @@ public enum SMPPropertyEnum {
 
     PARTC_SCH_REGEXP ("identifiersBehaviour.ParticipantIdentifierScheme.validationRegex","^((?!^.{26})([a-z0-9]+-[a-z0-9]+-[a-z0-9]+)|urn:oasis:names:tc:ebcore:partyid-type:(iso6523:|unregistered:).+)","Participant Identifier Schema of each PUT ServiceGroup request is validated against this schema.", false, false , SMPPropertyTypeEnum.REGEXP),
     PARTC_SCH_REGEXP_MSG ("identifiersBehaviour.ParticipantIdentifierScheme.validationRegexMessage",
-            "Participant scheme must start with:urn:oasis:names:tc:ebcore:partyid-type:(iso6523:|unregistered:) OR must be up to 25 characters long. The Scheme Identifier MUST take the form [domain]-[identifierArea]-[identifierType] (ex.: 'busdox-actorid-upis') and may only contain the following characters: [a-z0-9]+-[a-z0-9]+-[a-z0-9]+. ", "Error message for UI",false, false , SMPPropertyTypeEnum.STRING),
+            "Participant scheme must start with:urn:oasis:names:tc:ebcore:partyid-type:(iso6523:|unregistered:) OR must be up to 25 characters long with form [domain]-[identifierArea]-[identifierType] (ex.: 'busdox-actorid-upis') and may only contain the following characters: [a-z0-9].", "Error message for UI",false, false , SMPPropertyTypeEnum.STRING),
 
     CS_PARTICIPANTS("identifiersBehaviour.caseSensitive.ParticipantIdentifierSchemes","casesensitive-participant-scheme1|casesensitive-participant-scheme2","Specifies schemes of participant identifiers that must be considered CASE-SENSITIVE.", false, false , SMPPropertyTypeEnum.LIST_STRING),
     CS_DOCUMENTS("identifiersBehaviour.caseSensitive.DocumentIdentifierSchemes","casesensitive-doc-scheme1|casesensitive-doc-scheme2","Specifies schemes of document identifiers that must be considered CASE-SENSITIVE.", false, false , SMPPropertyTypeEnum.LIST_STRING),
diff --git a/smp-soapui-tests/groovy/oracle-4.1_integration_test_data.sql b/smp-soapui-tests/groovy/oracle-4.1_integration_test_data.sql
index 8cdb53367..cb6eeefcf 100644
--- a/smp-soapui-tests/groovy/oracle-4.1_integration_test_data.sql
+++ b/smp-soapui-tests/groovy/oracle-4.1_integration_test_data.sql
@@ -27,7 +27,7 @@ set define off;
 
 insert into SMP_USER (ID, USERNAME, PASSWORD, ROLE, ACTIVE, CREATED_ON, LAST_UPDATED_ON) values (SMP_USER_SEQ.nextval, 'peppol_user', '$2a$10$.pqNZZ4fRDdNbLhNlnEYg.1/d4yAGpLDgeXpJFI0sw7.WtyKphFzu', 'SMP_ADMIN', 1, sysdate, sysdate);
 insert into SMP_USER (ID, USERNAME, PASSWORD, ROLE, ACTIVE, CREATED_ON, LAST_UPDATED_ON) values (SMP_USER_SEQ.nextval, 'the_admin', '', 'SMP_ADMIN', 1, sysdate, sysdate);
-insert into SMP_USER (ID, USERNAME, PASSWORD, ROLE, ACTIVE, CREATED_ON, LAST_UPDATED_ON) values (SMP_USER_SEQ.nextval, 'AdminSMP1TEST', '$2a$06$u6Hym7Zrbsf4gEIeAsJRceK.Kg7tei3kDypwucQQdky0lXOLCkrCO', 'SERVICE_GROUP_ADMIN', 1, sysdate, sysdate);
+insert into SMP_USER (ID, USERNAME, PASSWORD, ROLE, ACTIVE, CREATED_ON, LAST_UPDATED_ON) values (SMP_USER_SEQ.nextval, 'AdminSMP1TEST', '$2a$06$u6Hym7Zrbsf4gEIeAsJRceK.Kg7tei3kDypwucQQdky0lXOLCkrCO', 'SMP_ADMIN', 1, sysdate, sysdate);
 insert into SMP_USER (ID, USERNAME, PASSWORD, ROLE, ACTIVE, CREATED_ON, LAST_UPDATED_ON) values (SMP_USER_SEQ.nextval, 'AdminSMP2TEST', '$2a$10$h8Q3Kjbs6ZrGkU6ditjNueINlJOMDJ/g/OKiqFZy32WmdhLjV5TAi', 'SMP_ADMIN', 1, sysdate, sysdate);
 insert into SMP_USER (ID, USERNAME, PASSWORD, ROLE, ACTIVE, CREATED_ON, LAST_UPDATED_ON) values (SMP_USER_SEQ.nextval, 'test', '', 'SMP_ADMIN', 1, sysdate, sysdate);
 insert into SMP_USER (ID, USERNAME, PASSWORD, ROLE, ACTIVE, CREATED_ON, LAST_UPDATED_ON) values (SMP_USER_SEQ.nextval, 'test1', '$2a$06$toKXJgjqQINZdjQqSao3NeWz2n1S64PFPhVU1e8gIHh4xdbwzy1Uy', 'SMP_ADMIN', 1, sysdate, sysdate);
@@ -40,8 +40,9 @@ insert into SMP_USER (ID, USERNAME, PASSWORD, ROLE, ACTIVE, CREATED_ON, LAST_UPD
 insert into SMP_CERTIFICATE (ID, CERTIFICATE_ID, VALID_FROM, VALID_TO, CREATED_ON, LAST_UPDATED_ON) values (SMP_USER_SEQ.CURRVAL, 'CN=EHEALTH_SMP_EC,O=European Commission,C=BE:f71ee8b11cb3b787', null,null, sysdate, sysdate);
 
 
-insert into SMP_USER (ID, USERNAME, PASSWORD, ROLE, ACTIVE, CREATED_ON, LAST_UPDATED_ON) values (SMP_USER_SEQ.nextval, 'EHEALTH_ż_ẞ_Ẅ_,O', '', 'SMP_ADMIN', 1, sysdate, sysdate);
-insert into SMP_CERTIFICATE (ID, CERTIFICATE_ID, VALID_FROM, VALID_TO, CREATED_ON, LAST_UPDATED_ON) values (SMP_USER_SEQ.CURRVAL, 'CN=EHEALTH_z_ẞ_W_,O=European_z_ẞ_W_Commission:f71ee8b11cb3b787', null,null, sysdate, sysdate);
+insert into SMP_USER (ID, USERNAME, PASSWORD, ROLE, ACTIVE, CREATED_ON, LAST_UPDATED_ON) values (SMP_USER_SEQ.nextval, 'EHEALTH_z_ẞ_W_,O', '', 'SMP_ADMIN', 1, sysdate, sysdate);
+insert into SMP_CERTIFICATE (ID, CERTIFICATE_ID, VALID_FROM, VALID_TO, CREATED_ON, LAST_UPDATED_ON) values (SMP_USER_SEQ.CURRVAL, 'CN=EHEALTH_z_ẞ_W_,O=European_z_ẞ_W_Commission,C=BE:f71ee8b11cb3b787', null,null,sysdate, sysdate);
+
 
 insert into SMP_USER (ID, USERNAME, PASSWORD, ROLE, ACTIVE, CREATED_ON, LAST_UPDATED_ON) values (SMP_USER_SEQ.nextval, 'EHEALTH_SMP_1000000007-1', '', 'SMP_ADMIN', 1, sysdate, sysdate);
 insert into SMP_CERTIFICATE (ID, CERTIFICATE_ID, VALID_FROM, VALID_TO, CREATED_ON, LAST_UPDATED_ON) values (SMP_USER_SEQ.CURRVAL, 'CN=EHEALTH_SMP_1000000007,O=DG-DIGIT,C=BE:000000000123ABCD', null,null, sysdate, sysdate);
-- 
GitLab