diff --git a/.dockerignore b/.dockerignore
deleted file mode 100644
index 3cf5f0e..0000000
--- a/.dockerignore
+++ /dev/null
@@ -1,3 +0,0 @@
-demo
-.git
-tests
diff --git a/Dockerfile b/Dockerfile
deleted file mode 100644
index 1de18f0..0000000
--- a/Dockerfile
+++ /dev/null
@@ -1,91 +0,0 @@
-#
-# Building assumes midpoint-dist.tar.gz is present in the current directory.
-#
-
-FROM i2incommon/shibboleth_sp:3.4.1_06122023_rocky8_multiarch
-
-MAINTAINER info@evolveum.com
-
-RUN rpm --import https://yum.corretto.aws/corretto.key
-RUN curl -L -o /etc/yum.repos.d/corretto.repo https://yum.corretto.aws/corretto.repo
-RUN yum -y update
-RUN yum -y install \
- java-17-amazon-corretto-devel \
- cronie \
- supervisor \
- libcurl-minimal \
- && yum clean -y all
-
-RUN cd /etc/httpd/conf.d/ \
- && rm -f autoindex.conf ssl.conf userdir.conf welcome.conf
-
-COPY container_files/supervisor/supervisord.conf /etc/supervisor/supervisord.conf
-COPY container_files/httpd/conf/* /etc/httpd/conf.d/
-COPY container_files/usr-local-bin/* /usr/local/bin/
-COPY container_files/opt-tier/* /opt/tier/
-
-RUN chmod 755 /opt/tier/setenv.sh \
- && chmod 755 /usr/local/bin/sendtierbeacon.sh \
- && chmod 755 /usr/local/bin/setup-cron.sh \
- && chmod 755 /usr/local/bin/setup-timezone.sh \
- && chmod 755 /usr/local/bin/start-midpoint.sh \
- && chmod 755 /usr/local/bin/start-httpd.sh \
- && chmod 755 /usr/local/bin/startup.sh \
- && chmod 755 /usr/local/bin/healthcheck.sh
-
-RUN cp /dev/null /etc/httpd/conf.d/ssl.conf \
- && mkdir /etc/httpd/conf.d/vhosts \
- && rm /etc/httpd/conf.d/shib.conf \
- && sed -i 's/LogFormat "/LogFormat "httpd;access_log;%{ENV}e;%{USERTOKEN}e;/g' /etc/httpd/conf/httpd.conf \
- && echo -e "\nErrorLogFormat \"httpd;error_log;%{ENV}e;%{USERTOKEN}e;[%{u}t] [%-m:%l] [pid %P:tid %T] %7F: %E: [client\ %a] %M% ,\ referer\ %{Referer}i\"" >> /etc/httpd/conf/httpd.conf \
- && sed -i 's/CustomLog "logs\/access_log"/CustomLog "\/tmp\/loghttpd"/g' /etc/httpd/conf/httpd.conf \
- && sed -i 's/ErrorLog "logs\/error_log"/ErrorLog "\/tmp\/loghttpd"/g' /etc/httpd/conf/httpd.conf \
- && echo -e "\nPassEnv ENV" >> /etc/httpd/conf/httpd.conf \
- && echo -e "\nPassEnv USERTOKEN" >> /etc/httpd/conf/httpd.conf
-
-# Build arguments
-
-ARG MP_DIST_FILE=midpoint-dist.tar.gz
-
-ENV MP_DIR /opt/midpoint
-
-RUN mkdir -p ${MP_DIR}/var
-
-COPY ${MP_DIST_FILE} ${MP_DIR}
-COPY container_files/mp-dir/ ${MP_DIR}/
-
-RUN echo 'Extracting midPoint archive...' \
- && tar xzf ${MP_DIR}/${MP_DIST_FILE} -C ${MP_DIR} --strip-components=1
-
-# Disabled because of wider compatibility issues (e.g. AWS)
-# TODO: consider all the consequences
-#VOLUME ${MP_DIR}/var
-
-# Logging parameters
-
-ENV ENV demo
-ENV USERTOKEN ""
-
-# Other parameters
-
-ENV MP_MEM_MAX 2048m
-ENV MP_MEM_INIT 1024m
-ENV TIMEZONE UTC
-ENV TIER_RELEASE not-released-yet
-ENV TIER_MAINTAINER tier
-
-# TIER Beacon Opt-out
-# Completely uncomment the following ENV line to prevent the containers from sending analytics information to Internet2.
-# With the default/release configuration, it will only send product (Shibb/Grouper/COmanage/midPoint) and version (4.0, etc)
-# once daily between midnight and 4am. There is no configuration or private information collected or sent.
-# This data helps with the scaling and funding of TIER. Please do not disable it if you find the TIER tools useful.
-# To keep it commented, keep multiple comments on the following line (to prevent other scripts from processing it).
-##### ENV TIER_BEACON_OPT_OUT true
-
-# requires MP_VERSION and TIER_xyz variables so we have to execute it here
-
-RUN /opt/tier/setenv.sh
-
-HEALTHCHECK --interval=1m --timeout=30s --start-period=2m CMD /usr/local/bin/healthcheck.sh
-
-CMD ["/usr/local/bin/startup.sh"]
diff --git a/Jenkinsfile b/Jenkinsfile
deleted file mode 100644
index 9d5e4bf..0000000
--- a/Jenkinsfile
+++ /dev/null
@@ -1,122 +0,0 @@
-pipeline {
- agent any
- environment {
- maintainer = "t"
- imagename = 'm'
- tag = 'l'
- }
- stages {
- stage ('Setting build context') {
- steps {
- script {
- maintainer = maintain()
- imagename = imagename()
- tag = tag()
- if (!imagename) {
- echo "You must define imagename in common.bash"
- currentBuild.result = 'FAILURE'
- }
- sh 'mkdir -p bin'
- sh 'mkdir -p tmp'
- dir ('tmp') {
- git([ url: "https://github.internet2.edu/docker/util.git", credentialsId: "jenkins-github-access-token" ])
- sh 'ls -l'
- sh 'ls -lR ../bin'
- sh 'rm -r ../bin/windows || true'
- sh 'mv bin/* ../bin/.'
- }
- // Build and test scripts expect that 'tag' is present in common.bash. This is necessary for both Jenkins and standalone testing.
- // We don't care if there are more 'tag' assignments there. The latest one wins.
- sh "echo >> common.bash ; echo \"tag=\\\"${tag}\\\"\" >> common.bash ; echo common.bash ; cat common.bash"
- }
- }
- }
- stage ('Build') {
- steps {
- script {
- try {
- // using custom ./build.sh instead of bin/rebuild.sh because the bin/ version does not support building specific tag yet
- sh './build.sh -r 2>&1 | tee -a debug ; test ${PIPESTATUS[0]} -eq 0'
- } catch (error) {
- def error_details = readFile('./debug')
- def message = "BUILD ERROR: There was a problem building ${imagename}:${tag}. \n\n ${error_details}"
- sh "rm -f ./debug"
- handleError(message)
- }
- }
- }
- }
- stage ('Test') {
- steps {
- script {
- try {
- sh 'echo Docker containers before root tests ; docker ps -a' // temporary
- sh 'bin/test.sh 2>&1 | tee debug ; test ${PIPESTATUS[0]} -eq 0'
- sh 'echo Docker containers before compositions tests ; docker ps -a' // temporary
-
- sh '(cd demo/simple ; bats tests ) 2>&1 | tee -a debug ; test ${PIPESTATUS[0]} -eq 0'
- sh '(cd demo/shibboleth ; bats tests ) 2>&1 | tee -a debug ; test ${PIPESTATUS[0]} -eq 0'
- sh '(cd demo/grouper ; bats tests ) 2>&1 | tee -a debug ; test ${PIPESTATUS[0]} -eq 0'
- } catch (error) {
- def error_details = readFile('./debug')
- def message = "BUILD ERROR: There was a problem testing ${imagename}:${tag}. \n\n ${error_details}"
- sh "rm -f ./debug"
- handleError(message)
- }
- }
- }
- }
- stage ('Push') {
- steps {
- script {
- docker.withRegistry('https://registry.hub.docker.com/', "dockerhub-tier") {
- def baseImg = docker.image("$maintainer/$imagename:$tag")
- baseImg.push("$tag")
-
- if (env.BRANCH_NAME == "master") {
- baseImg.push("latest")
- }
- }
- }
- }
- }
- stage ('Notify') {
- steps {
- echo "$maintainer"
- slackSend color: 'good', message: "$maintainer/$imagename:$tag pushed to DockerHub"
- }
- }
- }
- post {
- always {
- echo 'Done Building.'
- }
- failure {
- // slackSend color: 'good', message: "Build failed"
- handleError("BUILD ERROR: There was a problem building ${maintainer}/${imagename}:${tag}.")
- }
- }
-}
-
-
-def maintain() {
- def matcher = readFile('common.bash') =~ 'maintainer="(.+)"'
- matcher ? matcher[0][1] : 'tier'
-}
-
-def imagename() {
- def matcher = readFile('common.bash') =~ 'imagename="(.+)"'
- matcher ? matcher[0][1] : null
-}
-
-def tag() {
- def matcher = readFile('common.bash') =~ 'tag="(.+)"'
- matcher ? matcher[0][1] : latest
-}
-
-def handleError(String message) {
- echo "${message}"
- currentBuild.setResult("FAILED")
- slackSend color: 'danger', message: "${message}"
- sh 'exit 1'
-}
diff --git a/README.md b/README.md
index 144ec64..657fa3c 100644
--- a/README.md
+++ b/README.md
@@ -1,27 +1,5 @@
-[![Build Status](https://jenkins.testbed.tier.internet2.edu/buildStatus/icon?job=docker/midPoint_container/3.9)](https://jenkins.testbed.tier.internet2.edu/buildStatus/icon?job=docker/midPoint_container/3.9)
+This repository contains demos for midPoint in InCommon Trusted Access Platform.
-This repository contains sources for TIER-supported [midPoint](http://midpoint.evolveum.com) image.
-
-The image contains the midPoint application along with some TIER-specific components: Apache reverse proxy with optional Shibboleth filter and TIER Beacon.
-
-# Supported tags
-- latest
-- midPoint version-specific branches, e.g. 3.9, 3.9.1, 4.0, etc.
-
-# Content
-- the root directory contains build instructions for the `midpoint` image
-- `demo` directory contains a couple of demonstration scenarios:
- - `simple` to show simple composition of midPoint with the repository,
- - `shibboleth` to show integration with Shibboleth IdP,
- - `postgresql` to show how to use alternative dockerized repository,
- - `extrepo` to show how to use external repository,
- - `grouper` to demonstrate more complex deployment of midPoint in a sample university environment, featuring midPoint along with Grouper, LDAP directory, RabbitMQ, Shibboleth IdP, source and target systems.
-
-# Build instructions
-```
-$ ./build.sh
-```
-You can then continue with one of demo compositions.
# Documentation
Please see the [Getting Started with midPoint](https://spaces.at.internet2.edu/x/fBbtBw) wiki page.
diff --git a/build.sh b/build.sh
deleted file mode 100755
index d7951c6..0000000
--- a/build.sh
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/bin/bash
-
-cd "$(dirname "$0")"
-source common.bash
-
-SKIP_DOWNLOAD=0
-REFRESH=""
-while getopts "nhr?" opt; do
- case $opt in
- n)
- SKIP_DOWNLOAD=1
- ;;
- r)
- result=$(docker ps -a | grep $maintainer/$imagename:$tag)
- if [ ! -z "$result" ]; then
- echo "Cleaning up $maintainer/$imagename:$tag..."
- docker rm -f $(docker ps -a | grep $maintainer/$imagename:$tag | awk '{print $1}')
- docker rmi -f $maintainer/$imagename:$tag
- echo "Done"
- fi
- REFRESH="--no-cache --pull"
- echo "Using 'refresh' mode: $REFRESH"
- ;;
- h | ?)
- echo "Options: -n skip download"
- echo " -r refresh mode: uses --no-cache --pull and removes container and image before build"
- exit 0
- ;;
- *)
- echo "Unknown option: $opt"
- exit 1
- ;;
- esac
-done
-if [ "$SKIP_DOWNLOAD" = "0" ]; then ./download-midpoint.sh || exit 1; fi
-docker build $REFRESH --tag $maintainer/$imagename:$tag --build-arg maintainer=$maintainer --build-arg imagename=$imagename . || exit 1
-echo "---------------------------------------------------------------------------------------"
-echo "The midPoint containers were successfully built. To start them, execute the following:"
-echo ""
-echo "(for simple demo)"
-echo ""
-echo "$ cd" $(pwd)/demo/simple
-echo "$ docker-compose up"
-echo ""
-echo "(for Grouper integration demo)"
-echo ""
-echo "$ cd" $(pwd)/demo/grouper
-echo "$ docker-compose up --build"
diff --git a/common.bash b/common.bash
deleted file mode 100644
index 08d7cd7..0000000
--- a/common.bash
+++ /dev/null
@@ -1,3 +0,0 @@
-maintainer="i2incommon"
-imagename="midpoint"
-tag="4.8.2"
diff --git a/container_files/httpd/conf/midpoint.conf b/container_files/httpd/conf/midpoint.conf
deleted file mode 100644
index 656489c..0000000
--- a/container_files/httpd/conf/midpoint.conf
+++ /dev/null
@@ -1,6 +0,0 @@
-
-Timeout 2400
-ProxyTimeout 2400
-ProxyBadHeader Ignore
-
-ProxyPass /midpoint ajp://localhost:9090/midpoint secret=s3cr3t timeout=2400 retry=0
diff --git a/container_files/httpd/conf/midpoint.conf.auth.internal b/container_files/httpd/conf/midpoint.conf.auth.internal
deleted file mode 100644
index 57a9992..0000000
--- a/container_files/httpd/conf/midpoint.conf.auth.internal
+++ /dev/null
@@ -1,6 +0,0 @@
-
-Timeout 2400
-ProxyTimeout 2400
-ProxyBadHeader Ignore
-
-ProxyPass /midpoint ajp://localhost:9090/midpoint secret=s3cr3t timeout=2400 retry=0
diff --git a/container_files/httpd/conf/ssl-enable.conf b/container_files/httpd/conf/ssl-enable.conf
deleted file mode 100644
index a756e78..0000000
--- a/container_files/httpd/conf/ssl-enable.conf
+++ /dev/null
@@ -1,30 +0,0 @@
-# modern configuration, tweak to your needs
-SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
-SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
-SSLHonorCipherOrder on
-SSLCompression off
-
-# OCSP Stapling, only in httpd 2.3.3 and later
-SSLUseStapling on
-SSLStaplingResponderTimeout 5
-SSLStaplingReturnResponderErrors off
-SSLStaplingCache shmcb:/var/run/ocsp(128000)
-
-Listen 443 https
-
- RewriteEngine on
- RewriteRule "^/$" "/midpoint/" [R]
-
-
- SSLEngine on
- SSLCertificateChainFile /etc/pki/tls/certs/cachain.pem
-
- SSLCertificateFile /etc/pki/tls/certs/host-cert.pem
-
- SSLCertificateKeyFile /etc/pki/tls/private/host-key.pem
-
- # HSTS (mod_headers is required) (15768000 seconds = 6 months)
- Header always set Strict-Transport-Security "max-age=15768000"
-
- IncludeOptional conf.d/vhosts/*.conf
-
diff --git a/container_files/mp-dir/active-spring-profiles b/container_files/mp-dir/active-spring-profiles
deleted file mode 100755
index 40058e6..0000000
--- a/container_files/mp-dir/active-spring-profiles
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/bash
-
-case $AUTHENTICATION in
- shibboleth)
- echo "default,sso"
- ;;
- internal)
- echo "default"
- ;;
- *)
- echo "default"
-esac
-
diff --git a/container_files/mp-dir/repository-url b/container_files/mp-dir/repository-url
deleted file mode 100755
index 6977cbf..0000000
--- a/container_files/mp-dir/repository-url
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/bin/bash
-
-function resolvePort() {
- if [[ $REPO_PORT == "default" ]]; then
- case $REPO_DATABASE_TYPE in
- mariadb)
- echo 3306
- ;;
- mysql)
- echo 3306
- ;;
- oracle)
- echo 1521
- ;;
- postgresql)
- echo 5432
- ;;
- sqlserver)
- echo 1433
- ;;
- *)
- echo "~~~~~ please supply JDBC port for your repository ~~~~~"
- esac
- else
- echo $REPO_PORT
- fi
-}
-
-if [[ $REPO_JDBC_URL == "default" ]]; then
- REPO_PORT=$( resolvePort )
- case $REPO_DATABASE_TYPE in
- mariadb)
- echo "jdbc:mariadb://$REPO_HOST:$REPO_PORT/$REPO_DATABASE?characterEncoding=utf8"
- ;;
- mysql)
- echo "jdbc:mysql://$REPO_HOST:$REPO_PORT/$REPO_DATABASE?characterEncoding=utf8"
- ;;
- oracle)
- echo "jdbc:oracle:thin:@$REPO_HOST:$REPO_PORT/xe"
- ;;
- postgresql)
- echo "jdbc:postgresql://$REPO_HOST:$REPO_PORT/$REPO_DATABASE"
- ;;
- sqlserver)
- echo "jdbc:sqlserver://$REPO_HOST:$REPO_PORT;database=$REPO_DATABASE"
- ;;
- *)
- echo "~~~~~ please supply JDBC URL for your repository ~~~~~"
- esac
-else
- echo $REPO_JDBC_URL
-fi
diff --git a/container_files/opt-tier/setenv.sh b/container_files/opt-tier/setenv.sh
deleted file mode 100755
index f876f7a..0000000
--- a/container_files/opt-tier/setenv.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/bash
-printenv | sed 's/^\(.*\)$/\1/g' | grep -E "^MP_VERSION" > /opt/tier/env.bash
-printenv | sed 's/^\(.*\)$/\1/g' | grep -E "^TIER_RELEASE" >> /opt/tier/env.bash
-printenv | sed 's/^\(.*\)$/\1/g' | grep -E "^TIER_MAINTAINER" >> /opt/tier/env.bash
-
-echo "/opt/tier/env.bash is:"
-cat /opt/tier/env.bash
diff --git a/container_files/supervisor/supervisord.conf b/container_files/supervisor/supervisord.conf
deleted file mode 100644
index a1dc9bf..0000000
--- a/container_files/supervisor/supervisord.conf
+++ /dev/null
@@ -1,32 +0,0 @@
-[supervisord]
-logfile=/tmp/logsuperd
-logfile_maxbytes=0
-loglevel=error
-nodaemon=true
-user=root
-
-[program:httpd]
-command=/bin/bash -c "/usr/local/bin/start-httpd.sh"
-stdout_logfile=/tmp/loghttpd
-stdout_logfile_maxbytes=0
-redirect_stderr=true
-
-[program:midpoint]
-command=/bin/bash -c "/usr/local/bin/start-midpoint.sh"
-stdout_logfile=/dev/fd/2
-stdout_logfile_maxbytes=0
-redirect_stderr=true
-autorestart=false
-
-[program:shibboleth]
-command=/usr/sbin/shibd -f
-stdout_logfile=/dev/fd/2
-stdout_logfile_maxbytes=0
-redirect_stderr=true
-autorestart=false
-
-[program:crond]
-command=/usr/sbin/crond -n -i -m off
-stdout_logfile=/tmp/logcrond
-stdout_logfile_maxbytes=0
-redirect_stderr=true
diff --git a/container_files/usr-local-bin/healthcheck.sh b/container_files/usr-local-bin/healthcheck.sh
deleted file mode 100755
index 99f8963..0000000
--- a/container_files/usr-local-bin/healthcheck.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/bash
-
-(set -o pipefail ; curl -k -f https://localhost:443/midpoint/actuator/health | tr -d '[:space:]' | grep -q "\"status\":\"UP\"") || exit 1
diff --git a/container_files/usr-local-bin/setup-cron.sh b/container_files/usr-local-bin/setup-cron.sh
deleted file mode 100755
index 9ec9705..0000000
--- a/container_files/usr-local-bin/setup-cron.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/bash
-
-CRONFILE=/opt/tier/tier-cron
-
-echo "#send daily \"beacon\" to central" > ${CRONFILE}
-echo $(expr $RANDOM % 60) $(expr $RANDOM % 4) "* * * /usr/local/bin/sendtierbeacon.sh >> /tmp/logcrond 2>&1" >> ${CRONFILE}
-#echo "* * * * * /usr/local/bin/sendtierbeacon.sh >> /tmp/logcrond 2>&1" >> ${CRONFILE} # for testing
-
-chmod 644 ${CRONFILE}
-crontab ${CRONFILE}
diff --git a/container_files/usr-local-bin/setup-timezone.sh b/container_files/usr-local-bin/setup-timezone.sh
deleted file mode 100755
index b01eb8e..0000000
--- a/container_files/usr-local-bin/setup-timezone.sh
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/bash
-
-if [[ -n $TIMEZONE ]]; then
- echo "*** Setting timezone to '$TIMEZONE'"
- if [[ -e /usr/share/zoneinfo/$TIMEZONE ]]; then
- unlink /etc/localtime
- ln -s /usr/share/zoneinfo/$TIMEZONE /etc/localtime
- echo "date (UTC) is: $(date -u)"
- echo "date (current timezone) is $(date)"
- else
- echo "Error: time zone '$TIMEZONE' is unknown; not setting it."
- fi
-fi
diff --git a/container_files/usr-local-bin/start-httpd.sh b/container_files/usr-local-bin/start-httpd.sh
deleted file mode 100755
index 787d293..0000000
--- a/container_files/usr-local-bin/start-httpd.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/bash
-
-echo "Linking secrets"
-for filepath in /run/secrets/*; do
- label_file=`basename $filepath`
- if [ "$label_file" == "mp_host-key.pem" ]; then
- ln -sf /run/secrets/mp_host-key.pem /etc/pki/tls/private/host-key.pem
- fi
-done
-
-rm -f /etc/httpd/logs/httpd.pid /run/httpd/httpd.pid
-httpd -DFOREGROUND
diff --git a/container_files/usr-local-bin/start-midpoint.sh b/container_files/usr-local-bin/start-midpoint.sh
deleted file mode 100755
index abccd4b..0000000
--- a/container_files/usr-local-bin/start-midpoint.sh
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/bin/bash
-
-function check () {
- local VARNAME=$1
- if [ -z ${!VARNAME} ]; then
- echo "*** Couldn't start midPoint: $VARNAME variable is undefined. Please check your Docker composition."
- exit 1
- fi
-}
-
-echo "Linking secrets"
-for filepath in /run/secrets/*; do
- label_file=`basename $filepath`
- if [ "$label_file" == "mp_shibboleth_sp_keys.jks" ]; then
- if [ ! -d "/etc/pki/mp" ]; then
- mkdir /etc/pki/mp
- fi
- ln -sf /run/secrets/mp_shibboleth_sp_keys.jks /etc/pki/mp/sp-shibboleth-keys.jks
- fi
-done
-
-# These variables have reasonable defaults in Dockerfile. So we will _not_ supply defaults here.
-# The composer or user has to make sure they are well defined.
-
-check MP_MEM_MAX
-check MP_MEM_INIT
-check MP_DIR
-
-
-export MP_SET_midpoint_logging_alt_enabled=true
-export MP_SET_midpoint_logging_alt_filename=/tmp/logmidpoint
-export MP_SET_spring_profiles_active="`$MP_DIR/active-spring-profiles`"
-export MP_SET_logging_path=/tmp/logtomcat
-
-/opt/midpoint/bin/midpoint.sh 'container' &>/tmp/logmidpoint-console
\ No newline at end of file
diff --git a/container_files/usr-local-bin/startup.sh b/container_files/usr-local-bin/startup.sh
deleted file mode 100755
index 9f11831..0000000
--- a/container_files/usr-local-bin/startup.sh
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/bin/bash
-
-# normalizing logging variables as required by TIER
-export ENV=${ENV//[; ]/_}
-export USERTOKEN=${USERTOKEN//[; ]/_}
-
-/usr/local/bin/setup-timezone.sh
-
-# this is to be executed at run time, not at build time -- to ensure sufficient variability of execution times
-/usr/local/bin/setup-cron.sh
-
-# generic console logging pipe for anyone
-mkfifo -m 666 /tmp/logpipe
-cat <> /tmp/logpipe 1>&2 &
-
-mkfifo -m 666 /tmp/loghttpd
-(cat <> /tmp/loghttpd | awk '{printf "%s\n", $0; fflush()}' 1>/tmp/logpipe) &
-
-mkfifo -m 666 /tmp/logshib
-(cat <> /tmp/logshib | awk '{printf "%s\n", $0; fflush()}' 1>/tmp/logpipe) &
-
-mkfifo -m 666 /tmp/logcrond
-(cat <> /tmp/logcrond | awk -v ENV="$ENV" -v USERTOKEN="$USERTOKEN" '{line=sprintf ("crond;console;%s;%s;%s:%s", ENV, USERTOKEN, strftime("%F %T%z", systime(), 1), $0); print line >> "/tmp/logpipe"; print line >> "/var/log/cron.log"; fflush()}') &
-
-mkfifo -m 666 /tmp/logsuperd
-(cat <> /tmp/logsuperd | awk -v ENV="$ENV" -v USERTOKEN="$USERTOKEN" '{printf "supervisord;console;%s;%s;%s\n", ENV, USERTOKEN, $0; fflush()}' 1>/tmp/logpipe) &
-
-mkfifo -m 666 /tmp/logtomcat
-(cat <> /tmp/logtomcat | awk -v ENV="$ENV" -v USERTOKEN="$USERTOKEN" '{printf "tomcat;console;%s;%s;%s\n", ENV, USERTOKEN, $0; fflush()}' 1>/tmp/logpipe) &
-
-mkfifo -m 666 /tmp/logmidpoint
-(cat <> /tmp/logmidpoint | awk -v ENV="$ENV" -v USERTOKEN="$USERTOKEN" '{printf "midpoint;midpoint.log;%s;%s;%s\n", ENV, USERTOKEN, $0; fflush()}' 1>/tmp/logpipe) &
-
-mkfifo -m 666 /tmp/logmidpoint-console
-(cat <> /tmp/logmidpoint-console | awk -v ENV="$ENV" -v USERTOKEN="$USERTOKEN" '{printf "midpoint;console;%s;%s;%s\n", ENV, USERTOKEN, $0; fflush()}' 1>/tmp/logpipe) &
-
-/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
diff --git a/demo/grouper/.env b/demo/grouper/.env
deleted file mode 100644
index e927f1c..0000000
--- a/demo/grouper/.env
+++ /dev/null
@@ -1,4 +0,0 @@
-ENV=demo
-MP_MEM_MAX=2048m
-MP_MEM_INIT=1024m
-TIMEZONE=UTC
diff --git a/demo/grouper/README.md b/demo/grouper/README.md
deleted file mode 100644
index a0e5d88..0000000
--- a/demo/grouper/README.md
+++ /dev/null
@@ -1,9 +0,0 @@
-This is a demonstration of using midPoint dockerization for TIER environment in a broader context. It is a work in progress.
-
-# Building and execution
-```
-$ ../../build.sh
-$ docker-compose up --build
-```
-
-Please see a detailed description [here](https://spaces.at.internet2.edu/x/VhLtBw).
diff --git a/demo/grouper/add-ref-groups.gsh b/demo/grouper/add-ref-groups.gsh
deleted file mode 100644
index b4561f9..0000000
--- a/demo/grouper/add-ref-groups.gsh
+++ /dev/null
@@ -1,21 +0,0 @@
-
-def addGroups(gs,stem,owner,regexp) {
- for (group in stem.childGroups) {
- if (!group.name.endsWith('_includes') &&
- !group.name.endsWith('_excludes') &&
- !group.name.endsWith('_systemOfRecord') &&
- !group.name.endsWith('_systemOfRecordAndIncludes') &&
- (regexp == null || group.extension ==~ regexp)) {
- println 'Adding: ' + group
- def s = SubjectFinder.findById(group.getId(), 'group', 'g:gsa')
- owner.addMember(s, false)
- } else {
- println 'Ignoring: ' + group
- }
- }
-}
-
-gs = GrouperSession.startRootSession()
-def cs = GroupFinder.findByName(gs, "app:cs", true)
-
-addGroups(gs, StemFinder.findByName(gs, 'ref:course'), cs, /CS.*/)
diff --git a/demo/grouper/add-ref-groups.sh b/demo/grouper/add-ref-groups.sh
deleted file mode 100755
index bfb93cf..0000000
--- a/demo/grouper/add-ref-groups.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/bash
-source ../../library.bash
-
-execute_gsh grouper_grouper_daemon_1 add-ref-groups.gsh
diff --git a/demo/grouper/after-installation.sh b/demo/grouper/after-installation.sh
deleted file mode 100755
index aefe3b1..0000000
--- a/demo/grouper/after-installation.sh
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/bash
-
-B='\033[1;33m'
-N='\033[0m'
-
-echo -e "${B} * Uploading objects...${N}"
-$(dirname "$0")/upload-objects.sh
-
-echo -e "${B} * Testing resources...${N}"
-$(dirname "$0")/test-resources.sh
-
-echo -e "${B} * Recomputing Grouper admin group and user object...${N}"
-$(dirname "$0")/recompute.sh
-
-echo -e "${B} * Done${N}"
diff --git a/demo/grouper/beacon/Dockerfile b/demo/grouper/beacon/Dockerfile
new file mode 100644
index 0000000..256352c
--- /dev/null
+++ b/demo/grouper/beacon/Dockerfile
@@ -0,0 +1,15 @@
+FROM rockylinux:9.3
+
+COPY container_files/* /opt/tier/
+
+RUN dnf update -y --disablerepo=\* --enablerepo=baseos && \
+ dnf install -y cronie-anacron crontabs cronie --disablerepo=\* --enablerepo=baseos && \
+ dnf clean all -y ; \
+ rm -rf /var/cache/dnf ; \
+ /opt/tier/setup-cron.sh ;
+
+ENV TIER_RELEASE=not-released-yet \
+ TIER_MAINTAINER=tier \
+ MP_VERSION=4.8
+
+CMD [ "/usr/sbin/crond", "-n", "-i", "-m", "off" ]
diff --git a/container_files/usr-local-bin/sendtierbeacon.sh b/demo/grouper/beacon/container_files/sendtierbeacon.sh
similarity index 85%
rename from container_files/usr-local-bin/sendtierbeacon.sh
rename to demo/grouper/beacon/container_files/sendtierbeacon.sh
index 2f263bb..8f066f7 100755
--- a/container_files/usr-local-bin/sendtierbeacon.sh
+++ b/demo/grouper/beacon/container_files/sendtierbeacon.sh
@@ -25,13 +25,15 @@ EOF
# echo "going to send TIER beacon to ${LOGHOST}:${LOGPORT}:"
# cat $messagefile
- curl -s -XPOST "${LOGHOST}:${LOGPORT}/" -H 'Content-Type: application/json' -T $messagefile 1>/dev/null 2>&1
+ curl -s -XPOST "${LOGHOST}:${LOGPORT}/" -H 'Content-Type: application/json' -T $messagefile >/dev/null 2>&1
if [ $? -eq 0 ]; then
- echo "TIER beacon sent"
+ echo "TIER beacon sent"
else
echo "Failed to send TIER beacon"
fi
rm -f $messagefile 1>/dev/null 2>&1
+else
+ echo "TIER beacon skipped - scheduled but Opted out"
fi
diff --git a/demo/grouper/beacon/container_files/setup-cron.sh b/demo/grouper/beacon/container_files/setup-cron.sh
new file mode 100755
index 0000000..2d33d3a
--- /dev/null
+++ b/demo/grouper/beacon/container_files/setup-cron.sh
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+CRONFILE=/opt/tier/tier-cron
+
+echo "#send daily \"beacon\" to central" > ${CRONFILE}
+echo "" >> ${CRONFILE}
+echo "# ┌───────────── minute (0–59)" >> ${CRONFILE}
+echo "# │ ┌───────────── hour (0–23)" >> ${CRONFILE}
+echo "# │ │ ┌───────────── day of the month (1–31)" >> ${CRONFILE}
+echo "# │ │ │ ┌───────────── month (1–12)" >> ${CRONFILE}
+echo "# │ │ │ │ ┌───────────── day of the week (0–6) (Sunday to Saturday;" >> ${CRONFILE}
+echo "# │ │ │ │ │ 7 is also Sunday on some systems)" >> ${CRONFILE}
+echo "# │ │ │ │ │" >> ${CRONFILE}
+echo "# │ │ │ │ │" >> ${CRONFILE}
+echo "# * * * * * " >> ${CRONFILE}
+echo "" >> ${CRONFILE}
+echo "$(expr $RANDOM % 60) $(expr $RANDOM % 4) * * * /opt/tier/sendtierbeacon.sh 2>&1 | tee /proc/1/fd/1 >> /tmp/logcrond" >> ${CRONFILE}
+echo "" >> ${CRONFILE}
+echo "# List the current setting of the crontab to the log (when is the beacon scheduled)" >> ${CRONFILE}
+echo "@reboot crontab -l >/proc/1/fd/1" >> ${CRONFILE}
+echo "" >> ${CRONFILE}
+
+chmod 644 ${CRONFILE}
+crontab ${CRONFILE}
diff --git a/demo/grouper/configs-and-secrets/grouper/application/grouper-loader.properties b/demo/grouper/configs-and-secrets/grouper/application/grouper-loader.properties
old mode 100644
new mode 100755
index 62ef5f0..fe0865b
--- a/demo/grouper/configs-and-secrets/grouper/application/grouper-loader.properties
+++ b/demo/grouper/configs-and-secrets/grouper/application/grouper-loader.properties
@@ -51,6 +51,57 @@ db.sis.pass = 49321420423
db.sis.url = jdbc:mysql://sources:3306/sis
db.sis.driver = com.mysql.jdbc.Driver
+# midpoint External System
+db.midPoint.driver = org.postgresql.Driver
+#db.midPoint.pass = ${java.lang.System.getenv().get('GROUPER_DATABASE_PASSWORD_FILE') != null ? org.apache.commons.io.FileUtils.readFileToString(java.lang.System.getenv().get('GROUPER_DATABASE_PASSWORD_FILE'), "utf-8") : java.lang.System.getenv().get('GROUPER_DATABASE_PASSWORD') }
+db.midPoint.pass = password
+db.midPoint.url = jdbc:postgresql://grouper_data:5432/grouper_to_midpoint?CharSet=utf8
+db.midPoint.user = grouper
+
+# provisioner midpoint
+provisioner.midPoint.class = edu.internet2.middleware.grouper.app.midpointProvisioning.MidPointProvisioner
+provisioner.midPoint.configureMetadata = true
+provisioner.midPoint.customizeEntityCrud = true
+provisioner.midPoint.customizeGroupCrud = true
+provisioner.midPoint.customizeMembershipCrud = true
+provisioner.midPoint.dbExternalSystemConfigId = midPoint
+provisioner.midPoint.deleteEntities = true
+provisioner.midPoint.deleteEntitiesIfNotExistInGrouper = false
+provisioner.midPoint.deleteEntitiesIfGrouperDeleted = true
+provisioner.midPoint.deleteGroups = true
+provisioner.midPoint.deleteGroupsIfNotExistInGrouper = true
+provisioner.midPoint.deleteMemberships = true
+provisioner.midPoint.deleteMembershipsIfNotExistInGrouper = false
+provisioner.midPoint.deleteMembershipsIfGrouperDeleted = true
+provisioner.midPoint.makeChangesToEntities = true
+provisioner.midPoint.metadata.0.name = md_grouper_emailListName
+provisioner.midPoint.metadata.0.showForGroup = true
+provisioner.midPoint.midPointDeletedColumnName = deleted
+provisioner.midPoint.midPointLastModifiedColumnName = last_modified
+provisioner.midPoint.midPointLastModifiedColumnType = long
+provisioner.midPoint.midPointTablesPrefix = gr
+provisioner.midPoint.numberOfGroupAttributes = 1
+provisioner.midPoint.numberOfMetadata = 1
+provisioner.midPoint.operateOnGrouperEntities = true
+provisioner.midPoint.operateOnGrouperGroups = true
+provisioner.midPoint.operateOnGrouperMemberships = true
+provisioner.midPoint.provisioningType = membershipObjects
+provisioner.midPoint.selectAllEntities = true
+provisioner.midPoint.startWith = this is start with read only
+provisioner.midPoint.subjectSourcesToProvision = ldap
+provisioner.midPoint.targetGroupAttribute.0.name = emailListName
+provisioner.midPoint.targetGroupAttribute.0.translateExpression = \u0024{grouperProvisioningGroup.retrieveAttributeValueString('md_grouper_emailListName')}
+provisioner.midPoint.targetGroupAttribute.0.translateExpressionType = translationScript
+
+# changeLog/FullSync midPoint
+changeLog.consumer.midPoint.class = edu.internet2.middleware.grouper.changeLog.esb.consumer.EsbConsumer
+changeLog.consumer.midPoint.provisionerConfigId = midPoint
+changeLog.consumer.midPoint.publisher.class = edu.internet2.middleware.grouper.app.provisioning.ProvisioningConsumer
+changeLog.consumer.midPoint.quartzCron = 0/10 * * * * ?
+otherJob.midPoint_FullSync.class = edu.internet2.middleware.grouper.app.provisioning.GrouperProvisioningFullSyncJob
+otherJob.midPoint_FullSync.provisionerConfigId = midPoint
+otherJob.midPoint_FullSync.quartzCron = 0 0 4 * * ?
+
#####################################
## Messaging integration with change log
diff --git a/demo/grouper/configs-and-secrets/grouper/application/grouper.hibernate.properties b/demo/grouper/configs-and-secrets/grouper/application/grouper.hibernate.properties
old mode 100644
new mode 100755
index deb0d75..a334fda
--- a/demo/grouper/configs-and-secrets/grouper/application/grouper.hibernate.properties
+++ b/demo/grouper/configs-and-secrets/grouper/application/grouper.hibernate.properties
@@ -20,10 +20,13 @@
# e.g. hsqldb (b): jdbc:hsqldb:hsql://localhost:9001/grouper
# e.g. postgres: jdbc:postgresql://localhost:5432/database
# e.g. mssql: jdbc:sqlserver://localhost:3280;databaseName=grouper
-hibernate.connection.url = jdbc:mysql://grouper_data:3306/grouper?CharSet=utf8&useUnicode=true&characterEncoding=utf8
+hibernate.connection.url = jdbc:postgresql://grouper-data:5432/grouper
-hibernate.connection.username = root
+hibernate.connection.username = grouper
# If you are using an empty password, depending upon your version of
# Java and Ant you may need to specify a password of "".
# Note: you can keep passwords external and encrypted: https://bugs.internet2.edu/jira/browse/GRP-122
-hibernate.connection.password.elConfig = ${java.lang.System.getenv().get('GROUPER_DATABASE_PASSWORD_FILE') != null ? org.apache.commons.io.FileUtils.readFileToString(java.lang.System.getenv().get('GROUPER_DATABASE_PASSWORD_FILE'), "utf-8") : java.lang.System.getenv().get('GROUPER_DATABASE_PASSWORD') }
+# hibernate.connection.password.elConfig = ${java.lang.System.getenv().get('GROUPER_DATABASE_PASSWORD_FILE') != null ? org.apache.commons.io.FileUtils.readFileToString(java.lang.System.getenv().get('GROUPER_DATABASE_PASSWORD_FILE'), "utf-8") : java.lang.System.getenv().get('GROUPER_DATABASE_PASSWORD') }
+hibernate.connection.password = password
+hibernate.c3p0.max_size = 200
+
diff --git a/demo/grouper/configs-and-secrets/grouper/application/grouper.properties b/demo/grouper/configs-and-secrets/grouper/application/grouper.properties
old mode 100644
new mode 100755
index c931287..086d9a6
--- a/demo/grouper/configs-and-secrets/grouper/application/grouper.properties
+++ b/demo/grouper/configs-and-secrets/grouper/application/grouper.properties
@@ -23,3 +23,9 @@ groups.wheel.group = etc:sysadmingroup
# Used to allow Include Exclude groups
grouperIncludeExclude.use = true
grouperIncludeExclude.requireGroups.use = true
+
+# to allow periods in id paths, changed with grouper 2.5.49
+stem.validateExtensionByDefault = false
+group.validateExtensionByDefault = false
+attributeDef.validateExtensionByDefault = false
+attributeDefName.validateExtensionByDefault = false
diff --git a/demo/grouper/configs-and-secrets/grouper/application/grouper.text.en.us.properties b/demo/grouper/configs-and-secrets/grouper/application/grouper.text.en.us.properties
new file mode 100644
index 0000000..148ca04
--- /dev/null
+++ b/demo/grouper/configs-and-secrets/grouper/application/grouper.text.en.us.properties
@@ -0,0 +1,3 @@
+md_grouper_emailListName_midPoint_description = Enter the email list description
+md_grouper_emailListName_midPoint_label = Email list name
+
diff --git a/demo/grouper/configs-and-secrets/grouper/application/rabbitmq_password.txt b/demo/grouper/configs-and-secrets/grouper/application/rabbitmq_password.txt
index 158f675..f3097ab 100644
--- a/demo/grouper/configs-and-secrets/grouper/application/rabbitmq_password.txt
+++ b/demo/grouper/configs-and-secrets/grouper/application/rabbitmq_password.txt
@@ -1 +1 @@
-guest
\ No newline at end of file
+password
diff --git a/demo/grouper/configs-and-secrets/grouper/application/subject.properties b/demo/grouper/configs-and-secrets/grouper/application/subject.properties
old mode 100644
new mode 100755
index 577db03..5bd2388
--- a/demo/grouper/configs-and-secrets/grouper/application/subject.properties
+++ b/demo/grouper/configs-and-secrets/grouper/application/subject.properties
@@ -56,7 +56,7 @@ subjectApi.source.ldap.param.searchAttribute0.value = searchAttribute0
#searchSubject: find a subject by ID. ID is generally an opaque and permanent identifier, e.g. 12345678.
# Each subject has one and only on ID. Returns one result when searching for one ID.
-subjectApi.source.ldap.search.searchSubject.param.filter.value = (&(uid=%TERM%)(objectclass=person))
+subjectApi.source.ldap.search.searchSubject.param.filter.value = (&(uid=%TERM%)(objectClass=person))
subjectApi.source.ldap.search.searchSubject.param.scope.value = SUBTREE_SCOPE
subjectApi.source.ldap.search.searchSubject.param.base.value = ou=people
@@ -64,7 +64,7 @@ subjectApi.source.ldap.search.searchSubject.param.base.value = ou=people
# identifies the user, e.g. jsmith or jsmith@institution.edu.
# Subjects can have multiple identifiers. Note: it is nice to have if identifiers are unique
# even across sources. Returns one result when searching for one identifier.
-subjectApi.source.ldap.search.searchSubjectByIdentifier.param.filter.value = (&(|(uid=%TERM%)(employeeNumber=%TERM%))(objectclass=person))
+subjectApi.source.ldap.search.searchSubjectByIdentifier.param.filter.value = (&(|(uid=%TERM%)(employeeNumber=%TERM%)(incwbPersonEmployeeID=%TERM%)(incwbPersonStudentID=%TERM%)(incwbPersonGuestID=%TERM%))(objectClass=person))
subjectApi.source.ldap.search.searchSubjectByIdentifier.param.scope.value = SUBTREE_SCOPE
subjectApi.source.ldap.search.searchSubjectByIdentifier.param.base.value = ou=people
diff --git a/demo/grouper/configs-and-secrets/grouper/httpd/cachain-cer.pem b/demo/grouper/configs-and-secrets/grouper/grouperWebapp/WEB-INF/classes/grouper-loader.properties
old mode 100644
new mode 100755
similarity index 100%
rename from demo/grouper/configs-and-secrets/grouper/httpd/cachain-cer.pem
rename to demo/grouper/configs-and-secrets/grouper/grouperWebapp/WEB-INF/classes/grouper-loader.properties
diff --git a/demo/grouper/configs-and-secrets/grouper/grouperWebapp/WEB-INF/classes/grouper.client.properties b/demo/grouper/configs-and-secrets/grouper/grouperWebapp/WEB-INF/classes/grouper.client.properties
new file mode 100755
index 0000000..e69de29
diff --git a/demo/grouper/configs-and-secrets/grouper/grouperWebapp/WEB-INF/classes/grouper.hibernate.properties b/demo/grouper/configs-and-secrets/grouper/grouperWebapp/WEB-INF/classes/grouper.hibernate.properties
new file mode 100755
index 0000000..e69de29
diff --git a/demo/grouper/configs-and-secrets/grouper/grouperWebapp/WEB-INF/classes/grouper.properties b/demo/grouper/configs-and-secrets/grouper/grouperWebapp/WEB-INF/classes/grouper.properties
new file mode 100755
index 0000000..e69de29
diff --git a/demo/grouper/configs-and-secrets/grouper/grouperWebapp/WEB-INF/classes/grouperText/grouper.text.en.us.properties b/demo/grouper/configs-and-secrets/grouper/grouperWebapp/WEB-INF/classes/grouperText/grouper.text.en.us.properties
new file mode 100755
index 0000000..e69de29
diff --git a/demo/grouper/configs-and-secrets/grouper/grouperWebapp/WEB-INF/classes/subject.properties b/demo/grouper/configs-and-secrets/grouper/grouperWebapp/WEB-INF/classes/subject.properties
new file mode 100755
index 0000000..e69de29
diff --git a/demo/grouper/configs-and-secrets/grouper/httpd/host-cert.pem b/demo/grouper/configs-and-secrets/grouper/httpd/host-cert.pem
deleted file mode 100644
index 9cc228a..0000000
--- a/demo/grouper/configs-and-secrets/grouper/httpd/host-cert.pem
+++ /dev/null
@@ -1,20 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDPDCCAiQCCQDNZe8r0hVtuTANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJV
-UzELMAkGA1UECAwCTUkxEjAQBgNVBAcMCUFubiBBcmJvcjEXMBUGA1UECgwOSW50
-ZXJuZXQyL1RJRVIxFzAVBgNVBAMMDnNwLmV4YW1wbGUub3JnMB4XDTE3MDkyMjE5
-NTAzNVoXDTI3MDkyMDE5NTAzNVowYDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAk1J
-MRIwEAYDVQQHDAlBbm4gQXJib3IxFzAVBgNVBAoMDkludGVybmV0Mi9USUVSMRcw
-FQYDVQQDDA5zcC5leGFtcGxlLm9yZzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBAMTNJmsNpTpR4NrDJwOgK/o3UYlNdi1c6xBflt+liLAsQc160QReV4dS
-SGK8LZvN58a/BTIsH8dLhQlUQ8qQUY2AfolVrNxb7Waumeh/POzYUTRylnoGpU3W
-bGMEPxE/AdgP5U/adYvyu4XI5epv7wjZJOTqcVag15SalY+aso+ZC/5l+UzRxmWB
-ZxKTsSL1y7PFehY4/Zl3Y3oGVsVl/zspt5lteoZQeeVxUX29S3Af11yHY4xpEp+7
-rvAzY/nlsTiHAsUoCFK/NFQ2evvSRx52B9Fk1cWP1MDVDm2QjQqD9xBGYSnX6bhQ
-ejVx7JUJHlblu2Q5p5XdW0BihgFluoECAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
-n/qhYnIviPs4tglCdrw+M7gbqKNWadDC3F9HDYzlJMFeS/ae2turhEUgQPbYPDQQ
-eO3oOILtvCXNFUPM58jf8V5YFRrOqrTgx44kexQDaHO5YYNft5tF5TdvBYE2gOVr
-GdYrH2iSP8WX+Yy7JH5uqkfwWzEntWHJdey39rCWKAUCCB35+/2b4N53Qmlv2+ug
-CpNJYFtXInd4YMmM5HjXLyoWXtjnKiwDqYUCeYPSwAajnCqRqRXUX0gYTFDRiwRP
-HbmO9We0nqoc/71nikmGGoSRMO/zWVMFjwmAx1fGiWdU61sjGX8sHifzmVyJVEBI
-Z75p+JrWYZJYrx/vpWxL8g==
------END CERTIFICATE-----
diff --git a/demo/grouper/configs-and-secrets/grouper/httpd/host-key.pem b/demo/grouper/configs-and-secrets/grouper/httpd/host-key.pem
deleted file mode 100644
index 1b0b579..0000000
--- a/demo/grouper/configs-and-secrets/grouper/httpd/host-key.pem
+++ /dev/null
@@ -1,28 +0,0 @@
------BEGIN PRIVATE KEY-----
-MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDEzSZrDaU6UeDa
-wycDoCv6N1GJTXYtXOsQX5bfpYiwLEHNetEEXleHUkhivC2bzefGvwUyLB/HS4UJ
-VEPKkFGNgH6JVazcW+1mrpnofzzs2FE0cpZ6BqVN1mxjBD8RPwHYD+VP2nWL8ruF
-yOXqb+8I2STk6nFWoNeUmpWPmrKPmQv+ZflM0cZlgWcSk7Ei9cuzxXoWOP2Zd2N6
-BlbFZf87KbeZbXqGUHnlcVF9vUtwH9dch2OMaRKfu67wM2P55bE4hwLFKAhSvzRU
-Nnr70kcedgfRZNXFj9TA1Q5tkI0Kg/cQRmEp1+m4UHo1ceyVCR5W5btkOaeV3VtA
-YoYBZbqBAgMBAAECggEAA/5t0ypZug9DUu0283niqpdIzlKGHXGPS6vE8hD37ytW
-wobFiyMm/5YJ5gcPnePV2lCyGEyQ8Ih10LSnE4tOPGLpLnxQn8A11ymf8fnzEJNr
-Qnc42o0b+bJqTLAfX4g5z1qzOqWiUQ7CA3sKP3G6FiHh/8tKNYnaFif09Q8cpJFb
-YDDkvm48NJgsrIoCgmaFIQIn+yDzGQKWwTNMIks+RByWpc67j1x1kiyQM1RfrEev
-Yyq/ZkP66IYZzmZKpFCWGs5qbRZdxyXNpq85DjwA99lAH7vxtMJHQM4z1h1eDH4L
-Ma5hEnmmHu4D5lF2GDQYflvuFdDGH5tThO6MV0IrSQKBgQD+kvEtNxJCMxLOVFyV
-NWF3pk/i2nkD+53t/VPXjMPtW7IesouEGzU82I/fT2wUTkNwFdkVpv37qoLypKZm
-npJFxr6abQNjiDh2Fsh8/iuJfvdZUFJbCEY6NS58qgjix8XCQKRD06EugK7uekIZ
-zJnttF3qVBBD8Z8Uwxz8i+jF1wKBgQDF51y/5XB6Bz47cdxw7P8NsfnTz2V3H0HU
-OnlEBANbhmBadjU8dqbM54Nxbn7VOdooXPuSnAKJ9vPDg1n5Y/GO+lgldNzfyK6g
-HnbldSu0zBvAaGvmAjLjetEtOkBqYkrHJlT6JAems/Kc/YX5uooAz9/jNJFXP9++
-KbjH3CzHZwKBgQC6ppxEDZPKi83nD/2NvMTIyFzcNFj0LaEepFW7vc7NkiSn0zrt
-0lEXWqUqEv5oaPWTEcHH2VdxFRTLuSL0LKGMnWqUqQcKDA9xrcSzuFvNhRTwHC81
-5XwwI1wBNV4sgFKj2WdW/6y2/szDt0oNxnC50zvkmlwOpPKBc4kmNaKmowKBgBmC
-uXIDIXyZcmw3QTNNWZNqXcnv8iRo4xN4dilOWyBxMfp3QmWI5feD4G2+0Jqr2nNZ
-iRRdB/bA3qtVQ0PinkDQBIzPg6lVNS1uv+TUNc4YgXtL+pyrq+Om8U/jMmqEQR9q
-0YltG49houSZyatnYGK6aSHgpNuaYD0jI66fsyYBAoGAMefyD0I/ncArjuf58hVQ
-zSjxfcvlja9okrC8ZgqsVluezcm4rQNcSjBnESGTCjJC7O29AofGLHkvnsBQDiGk
-hE38IRisd+okXdApr41ifWDhmtASud5q6wlhOpMmQxg+OALf1rTvFYhbnFEXV/KY
-e5A4iXLRIbxbmXZDa35Rebw=
------END PRIVATE KEY-----
diff --git a/demo/grouper/configs-and-secrets/grouper/httpd/shib.conf b/demo/grouper/configs-and-secrets/grouper/httpd/shib.conf
new file mode 100755
index 0000000..9c33671
--- /dev/null
+++ b/demo/grouper/configs-and-secrets/grouper/httpd/shib.conf
@@ -0,0 +1,54 @@
+# https://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPApacheConfig
+
+# RPM installations on platforms with a conf.d directory will
+# result in this file being copied into that directory for you
+# and preserved across upgrades.
+
+# For non-RPM installs, you should copy the relevant contents of
+# this file to a configuration location you control.
+
+#
+# Load the Shibboleth module.
+#
+LoadModule mod_shib /usr/lib64/shibboleth/mod_shib_24.so
+
+#
+# Turn this on to support "require valid-user" rules from other
+# mod_authn_* modules, and use "require shib-session" for anonymous
+# session-based authorization in mod_shib.
+#
+ShibCompatValidUser Off
+
+#
+# Ensures handler will be accessible.
+#
+
+ AuthType None
+ Require all granted
+ SetHandler shib
+
+
+#
+# Used for example style sheet in error templates.
+#
+
+
+ AuthType None
+ Require all granted
+
+ Alias /shibboleth-sp/main.css /usr/share/shibboleth/main.css
+
+
+#
+# Configure the module for content.
+#
+# You MUST enable AuthType shibboleth for the module to process
+# any requests, and there MUST be a require command as well. To
+# enable Shibboleth but not specify any session/access requirements
+# use "require shibboleth".
+#
+
+ AuthType shibboleth
+ ShibRequestSetting requireSession 1
+ require shib-session
+
diff --git a/demo/grouper/configs-and-secrets/grouper/shibboleth/idp-metadata.xml b/demo/grouper/configs-and-secrets/grouper/shibboleth/idp-metadata.xml
deleted file mode 100644
index 4fa67a7..0000000
--- a/demo/grouper/configs-and-secrets/grouper/shibboleth/idp-metadata.xml
+++ /dev/null
@@ -1,207 +0,0 @@
-
-
-
-
-
-
-
- example.org
-
-
-
-
-
-
-
-MIIDEzCCAfugAwIBAgIUS9SuTXwsFVVG+LjOEAbLqqT/el0wDQYJKoZIhvcNAQEL
-BQAwFTETMBEGA1UEAwwKaWRwdGVzdGJlZDAeFw0xNTEyMTEwMjIwMjZaFw0zNTEy
-MTEwMjIwMjZaMBUxEzARBgNVBAMMCmlkcHRlc3RiZWQwggEiMA0GCSqGSIb3DQEB
-AQUAA4IBDwAwggEKAoIBAQCMAoDHx8xCIfv/6QKqt9mcHYmEJ8y2dKprUbpdcOjH
-YvNPIl/lHPsUyrb+Nc+q2CDeiWjVk1mWYq0UpIwpBMuw1H6+oOqr4VQRi65pin0M
-SfE0MWIaFo5FPvpvoptkHD4gvREbm4swyXGMczcMRfqgalFXhUD2wz8W3XAM5Cq2
-03XeJbj6TwjvKatG5XPdeUe2FBGuOO2q54L1hcIGnLMCQrg7D31lR13PJbjnJ0No
-5C3k8TPuny6vJsBC03GNLNKfmrKVTdzr3VKp1uay1G3DL9314fgmbl8HA5iRQmy+
-XInUU6/8NXZSF59p3ITAOvZQeZsbJjg5gGDip5OZo9YlAgMBAAGjWzBZMB0GA1Ud
-DgQWBBRPlM4VkKZ0U4ec9GrIhFQl0hNbLDA4BgNVHREEMTAvggppZHB0ZXN0YmVk
-hiFodHRwczovL2lkcHRlc3RiZWQvaWRwL3NoaWJib2xldGgwDQYJKoZIhvcNAQEL
-BQADggEBAIZ0a1ov3my3ljJG588I/PHx+TxAWONWmpKbO9c/qI3Drxk4oRIffiac
-ANxdvtabgIzrlk5gMMisD7oyqHJiWgKv5Bgctd8w3IS3lLl7wHX65mTKQRXniG98
-NIjkvfrhe2eeJxecOqnDI8GOhIGCIqZUn8ShdM/yHjhQ2Mh0Hj3U0LlKvnmfGSQl
-j0viGwbFCaNaIP3zc5UmCrdE5h8sWL3Fu7ILKM9RyFa2ILHrJScV9t623IcHffHP
-IeaY/WtuapsrqRFxuQL9QFWN0FsRIdLmjTq+00+B/XnnKRKFBuWfjhHLF/uu8f+E
-t6Lf23Kb8yD6ZR7dihMZAGHnYQ/hlhM=
-
-
-
-
-
-
-
-
-
-MIIDFDCCAfygAwIBAgIVAN3vv+b7KN5Se9m1RZsCllp/B/hdMA0GCSqGSIb3DQEB
-CwUAMBUxEzARBgNVBAMMCmlkcHRlc3RiZWQwHhcNMTUxMjExMDIyMDE0WhcNMzUx
-MjExMDIyMDE0WjAVMRMwEQYDVQQDDAppZHB0ZXN0YmVkMIIBIjANBgkqhkiG9w0B
-AQEFAAOCAQ8AMIIBCgKCAQEAh91caeY0Q85uhaUyqFwP2bMjwMFxMzRlAoqBHd7g
-u6eo4duaeLz1BaoR2XTBpNNvFR5oHH+TkKahVDGeH5+kcnIpxI8JPdsZml1srvf2
-Z6dzJsulJZUdpqnngycTkGtZgEoC1vmYVky2BSAIIifmdh6s0epbHnMGLsHzMKfJ
-Cb/Q6dYzRWTCPtzE2VMuQqqWgeyMr7u14x/Vqr9RPEFsgY8GIu5jzB6AyUIwrLg+
-MNkv6aIdcHwxYTGL7ijfy6rSWrgBflQoYRYNEnseK0ZHgJahz4ovCag6wZAoPpBs
-uYlY7lEr89Ucb6NHx3uqGMsXlDFdE4QwfDLLhCYHPvJ0uwIDAQABo1swWTAdBgNV
-HQ4EFgQUAkOgED3iYdmvQEOMm6u/JmD/UTQwOAYDVR0RBDEwL4IKaWRwdGVzdGJl
-ZIYhaHR0cHM6Ly9pZHB0ZXN0YmVkL2lkcC9zaGliYm9sZXRoMA0GCSqGSIb3DQEB
-CwUAA4IBAQBIdd4YWlnvJjql8+zKKgmWgIY7U8DA8e6QcbAf8f8cdE33RSnjI63X
-sv/y9GfmbAVAD6RIAXPFFeRYJ08GOxGI9axfNaKdlsklJ9bk4ducHqgCSWYVer3s
-RQBjxyOfSTvk9YCJvdJVQRJLcCvxwKakFCsOSnV3t9OvN86Ak+fKPVB5j2fM/0fZ
-Kqjn3iqgdNPTLXPsuJLJO5lITRiBa4onmVelAiCstI9PQiaEck+oAHnMTnC9JE/B
-DHv3e4rwq3LznlqPw0GSd7xqNTdMDwNOWjkuOr3sGpWS8ms/ZHHXV1Vd22uPe70i
-s00xrv14zLifcc8oj5DYzOhYRifRXgHX
-
-
-
-
-
-
-
-
-
-MIIDEzCCAfugAwIBAgIUG6Nn1rlERS1vsi88tcdzSYX0oqAwDQYJKoZIhvcNAQEL
-BQAwFTETMBEGA1UEAwwKaWRwdGVzdGJlZDAeFw0xNTEyMTEwMjIwMTRaFw0zNTEy
-MTEwMjIwMTRaMBUxEzARBgNVBAMMCmlkcHRlc3RiZWQwggEiMA0GCSqGSIb3DQEB
-AQUAA4IBDwAwggEKAoIBAQCBXv0o3fmT8iluyLjJ4lBAVCW+ZRVyEXPYQuRi7vfD
-cO4a6d1kxiJLsaK0W88VNxjFQRr8PgDkWr28vwoH1rgk4pLsszLD48DBzD942peJ
-l/S6FnsIJjmaHcBh4pbNhU4yowu63iKkvttrcZAEbpEro6Z8CziWEx8sywoaYEQG
-ifPkr9ORV6Cn3txq+9gMBePG41GrtZrUGIu+xrndL0Shh4Pq0eq/9MAsVlIIXEa8
-9WfH8J2kFcTOfoWtIc70b7TLZQsx4YnNcnrGLSUEcstFyPLX+Xtv5SNZF89OOIxX
-VNjNvgE5DbJb9hMM4UAFqI+1bo9QqtxwThjc/sOvIxzNAgMBAAGjWzBZMB0GA1Ud
-DgQWBBStTyogRPuAVG6q7yPyav1uvE+7pTA4BgNVHREEMTAvggppZHB0ZXN0YmVk
-hiFodHRwczovL2lkcHRlc3RiZWQvaWRwL3NoaWJib2xldGgwDQYJKoZIhvcNAQEL
-BQADggEBAFMfoOv+oISGjvamq7+Y4G7ep5vxlAPeK3RATYPYvAmyH946qZXh98ni
-QXyuqZW5P5eEt86toY45IwDU5r09SKwHughEe99iiEkxh0mb2qo84qX9/qcg+kyN
-jeLd/OSyolpUCEFNwOFcog7pj7Eer+6AHbwTn1Mjb5TBsKwtDMJsaxPvdj0u7M5r
-xL/wHkFhn1rCo2QiojzjSlV3yLTh49iTyhE3cG+RxaNKDCxhp0jSSLX1BW/ZoPA8
-+PMJEA+Q0QbyRD8aJOHN5O8jGxCa/ZzcOnYVL6AsEXoDiY3vAUYh1FUonOWw0m9H
-p+tGUbGS2l873J5PrsbpeKEVR/IIoKo=
-
-
-
-
-
-
- urn:mace:shibboleth:1.0:nameIdentifier
- urn:oasis:names:tc:SAML:2.0:nameid-format:transient
-
-
-
-
-
-
-
-
-
-
-
-
- localhost
-
-
-
-
-
-
-MIIDEzCCAfugAwIBAgIUS9SuTXwsFVVG+LjOEAbLqqT/el0wDQYJKoZIhvcNAQEL
-BQAwFTETMBEGA1UEAwwKaWRwdGVzdGJlZDAeFw0xNTEyMTEwMjIwMjZaFw0zNTEy
-MTEwMjIwMjZaMBUxEzARBgNVBAMMCmlkcHRlc3RiZWQwggEiMA0GCSqGSIb3DQEB
-AQUAA4IBDwAwggEKAoIBAQCMAoDHx8xCIfv/6QKqt9mcHYmEJ8y2dKprUbpdcOjH
-YvNPIl/lHPsUyrb+Nc+q2CDeiWjVk1mWYq0UpIwpBMuw1H6+oOqr4VQRi65pin0M
-SfE0MWIaFo5FPvpvoptkHD4gvREbm4swyXGMczcMRfqgalFXhUD2wz8W3XAM5Cq2
-03XeJbj6TwjvKatG5XPdeUe2FBGuOO2q54L1hcIGnLMCQrg7D31lR13PJbjnJ0No
-5C3k8TPuny6vJsBC03GNLNKfmrKVTdzr3VKp1uay1G3DL9314fgmbl8HA5iRQmy+
-XInUU6/8NXZSF59p3ITAOvZQeZsbJjg5gGDip5OZo9YlAgMBAAGjWzBZMB0GA1Ud
-DgQWBBRPlM4VkKZ0U4ec9GrIhFQl0hNbLDA4BgNVHREEMTAvggppZHB0ZXN0YmVk
-hiFodHRwczovL2lkcHRlc3RiZWQvaWRwL3NoaWJib2xldGgwDQYJKoZIhvcNAQEL
-BQADggEBAIZ0a1ov3my3ljJG588I/PHx+TxAWONWmpKbO9c/qI3Drxk4oRIffiac
-ANxdvtabgIzrlk5gMMisD7oyqHJiWgKv5Bgctd8w3IS3lLl7wHX65mTKQRXniG98
-NIjkvfrhe2eeJxecOqnDI8GOhIGCIqZUn8ShdM/yHjhQ2Mh0Hj3U0LlKvnmfGSQl
-j0viGwbFCaNaIP3zc5UmCrdE5h8sWL3Fu7ILKM9RyFa2ILHrJScV9t623IcHffHP
-IeaY/WtuapsrqRFxuQL9QFWN0FsRIdLmjTq+00+B/XnnKRKFBuWfjhHLF/uu8f+E
-t6Lf23Kb8yD6ZR7dihMZAGHnYQ/hlhM=
-
-
-
-
-
-
-
-
-
-MIIDFDCCAfygAwIBAgIVAN3vv+b7KN5Se9m1RZsCllp/B/hdMA0GCSqGSIb3DQEB
-CwUAMBUxEzARBgNVBAMMCmlkcHRlc3RiZWQwHhcNMTUxMjExMDIyMDE0WhcNMzUx
-MjExMDIyMDE0WjAVMRMwEQYDVQQDDAppZHB0ZXN0YmVkMIIBIjANBgkqhkiG9w0B
-AQEFAAOCAQ8AMIIBCgKCAQEAh91caeY0Q85uhaUyqFwP2bMjwMFxMzRlAoqBHd7g
-u6eo4duaeLz1BaoR2XTBpNNvFR5oHH+TkKahVDGeH5+kcnIpxI8JPdsZml1srvf2
-Z6dzJsulJZUdpqnngycTkGtZgEoC1vmYVky2BSAIIifmdh6s0epbHnMGLsHzMKfJ
-Cb/Q6dYzRWTCPtzE2VMuQqqWgeyMr7u14x/Vqr9RPEFsgY8GIu5jzB6AyUIwrLg+
-MNkv6aIdcHwxYTGL7ijfy6rSWrgBflQoYRYNEnseK0ZHgJahz4ovCag6wZAoPpBs
-uYlY7lEr89Ucb6NHx3uqGMsXlDFdE4QwfDLLhCYHPvJ0uwIDAQABo1swWTAdBgNV
-HQ4EFgQUAkOgED3iYdmvQEOMm6u/JmD/UTQwOAYDVR0RBDEwL4IKaWRwdGVzdGJl
-ZIYhaHR0cHM6Ly9pZHB0ZXN0YmVkL2lkcC9zaGliYm9sZXRoMA0GCSqGSIb3DQEB
-CwUAA4IBAQBIdd4YWlnvJjql8+zKKgmWgIY7U8DA8e6QcbAf8f8cdE33RSnjI63X
-sv/y9GfmbAVAD6RIAXPFFeRYJ08GOxGI9axfNaKdlsklJ9bk4ducHqgCSWYVer3s
-RQBjxyOfSTvk9YCJvdJVQRJLcCvxwKakFCsOSnV3t9OvN86Ak+fKPVB5j2fM/0fZ
-Kqjn3iqgdNPTLXPsuJLJO5lITRiBa4onmVelAiCstI9PQiaEck+oAHnMTnC9JE/B
-DHv3e4rwq3LznlqPw0GSd7xqNTdMDwNOWjkuOr3sGpWS8ms/ZHHXV1Vd22uPe70i
-s00xrv14zLifcc8oj5DYzOhYRifRXgHX
-
-
-
-
-
-
-
-
-
-MIIDEzCCAfugAwIBAgIUG6Nn1rlERS1vsi88tcdzSYX0oqAwDQYJKoZIhvcNAQEL
-BQAwFTETMBEGA1UEAwwKaWRwdGVzdGJlZDAeFw0xNTEyMTEwMjIwMTRaFw0zNTEy
-MTEwMjIwMTRaMBUxEzARBgNVBAMMCmlkcHRlc3RiZWQwggEiMA0GCSqGSIb3DQEB
-AQUAA4IBDwAwggEKAoIBAQCBXv0o3fmT8iluyLjJ4lBAVCW+ZRVyEXPYQuRi7vfD
-cO4a6d1kxiJLsaK0W88VNxjFQRr8PgDkWr28vwoH1rgk4pLsszLD48DBzD942peJ
-l/S6FnsIJjmaHcBh4pbNhU4yowu63iKkvttrcZAEbpEro6Z8CziWEx8sywoaYEQG
-ifPkr9ORV6Cn3txq+9gMBePG41GrtZrUGIu+xrndL0Shh4Pq0eq/9MAsVlIIXEa8
-9WfH8J2kFcTOfoWtIc70b7TLZQsx4YnNcnrGLSUEcstFyPLX+Xtv5SNZF89OOIxX
-VNjNvgE5DbJb9hMM4UAFqI+1bo9QqtxwThjc/sOvIxzNAgMBAAGjWzBZMB0GA1Ud
-DgQWBBStTyogRPuAVG6q7yPyav1uvE+7pTA4BgNVHREEMTAvggppZHB0ZXN0YmVk
-hiFodHRwczovL2lkcHRlc3RiZWQvaWRwL3NoaWJib2xldGgwDQYJKoZIhvcNAQEL
-BQADggEBAFMfoOv+oISGjvamq7+Y4G7ep5vxlAPeK3RATYPYvAmyH946qZXh98ni
-QXyuqZW5P5eEt86toY45IwDU5r09SKwHughEe99iiEkxh0mb2qo84qX9/qcg+kyN
-jeLd/OSyolpUCEFNwOFcog7pj7Eer+6AHbwTn1Mjb5TBsKwtDMJsaxPvdj0u7M5r
-xL/wHkFhn1rCo2QiojzjSlV3yLTh49iTyhE3cG+RxaNKDCxhp0jSSLX1BW/ZoPA8
-+PMJEA+Q0QbyRD8aJOHN5O8jGxCa/ZzcOnYVL6AsEXoDiY3vAUYh1FUonOWw0m9H
-p+tGUbGS2l873J5PrsbpeKEVR/IIoKo=
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/demo/grouper/configs-and-secrets/grouper/shibboleth/shibboleth2.xml b/demo/grouper/configs-and-secrets/grouper/shibboleth/shibboleth2.xml
old mode 100644
new mode 100755
index 0c38f82..e2d12ab
--- a/demo/grouper/configs-and-secrets/grouper/shibboleth/shibboleth2.xml
+++ b/demo/grouper/configs-and-secrets/grouper/shibboleth/shibboleth2.xml
@@ -1,60 +1,53 @@
-
+
+
-
-
+ REMOTE_USER="uid"
+ cipherSuites="DEFAULT:!EXP:!LOW:!aNULL:!eNULL:!DES:!IDEA:!SEED:!RC4:!3DES:!kRSA:!SSLv2:!SSLv3:!TLSv1:!TLSv1.1">
-
+
-
- SAML2
-
+ -->
+
+ SAML2
+
SAML2 Local
-
+
+
+
+
-
+
@@ -65,19 +58,25 @@
-
+
+
+
+
-
-
+
+
+
-
-
-
-
-
-
-
+
+
- Example of a second application (for a second vhost) that has a different entityID.
- Resources on the vhost would map to an applicationId of "admin":
- -->
-
diff --git a/demo/grouper/configs-and-secrets/grouper/shibboleth/sp-cert.pem b/demo/grouper/configs-and-secrets/grouper/shibboleth/sp-cert.pem
deleted file mode 100644
index 9cc228a..0000000
--- a/demo/grouper/configs-and-secrets/grouper/shibboleth/sp-cert.pem
+++ /dev/null
@@ -1,20 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDPDCCAiQCCQDNZe8r0hVtuTANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJV
-UzELMAkGA1UECAwCTUkxEjAQBgNVBAcMCUFubiBBcmJvcjEXMBUGA1UECgwOSW50
-ZXJuZXQyL1RJRVIxFzAVBgNVBAMMDnNwLmV4YW1wbGUub3JnMB4XDTE3MDkyMjE5
-NTAzNVoXDTI3MDkyMDE5NTAzNVowYDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAk1J
-MRIwEAYDVQQHDAlBbm4gQXJib3IxFzAVBgNVBAoMDkludGVybmV0Mi9USUVSMRcw
-FQYDVQQDDA5zcC5leGFtcGxlLm9yZzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBAMTNJmsNpTpR4NrDJwOgK/o3UYlNdi1c6xBflt+liLAsQc160QReV4dS
-SGK8LZvN58a/BTIsH8dLhQlUQ8qQUY2AfolVrNxb7Waumeh/POzYUTRylnoGpU3W
-bGMEPxE/AdgP5U/adYvyu4XI5epv7wjZJOTqcVag15SalY+aso+ZC/5l+UzRxmWB
-ZxKTsSL1y7PFehY4/Zl3Y3oGVsVl/zspt5lteoZQeeVxUX29S3Af11yHY4xpEp+7
-rvAzY/nlsTiHAsUoCFK/NFQ2evvSRx52B9Fk1cWP1MDVDm2QjQqD9xBGYSnX6bhQ
-ejVx7JUJHlblu2Q5p5XdW0BihgFluoECAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
-n/qhYnIviPs4tglCdrw+M7gbqKNWadDC3F9HDYzlJMFeS/ae2turhEUgQPbYPDQQ
-eO3oOILtvCXNFUPM58jf8V5YFRrOqrTgx44kexQDaHO5YYNft5tF5TdvBYE2gOVr
-GdYrH2iSP8WX+Yy7JH5uqkfwWzEntWHJdey39rCWKAUCCB35+/2b4N53Qmlv2+ug
-CpNJYFtXInd4YMmM5HjXLyoWXtjnKiwDqYUCeYPSwAajnCqRqRXUX0gYTFDRiwRP
-HbmO9We0nqoc/71nikmGGoSRMO/zWVMFjwmAx1fGiWdU61sjGX8sHifzmVyJVEBI
-Z75p+JrWYZJYrx/vpWxL8g==
------END CERTIFICATE-----
diff --git a/demo/grouper/configs-and-secrets/grouper/shibboleth/sp-key.pem b/demo/grouper/configs-and-secrets/grouper/shibboleth/sp-key.pem
deleted file mode 100644
index 1b0b579..0000000
--- a/demo/grouper/configs-and-secrets/grouper/shibboleth/sp-key.pem
+++ /dev/null
@@ -1,28 +0,0 @@
------BEGIN PRIVATE KEY-----
-MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDEzSZrDaU6UeDa
-wycDoCv6N1GJTXYtXOsQX5bfpYiwLEHNetEEXleHUkhivC2bzefGvwUyLB/HS4UJ
-VEPKkFGNgH6JVazcW+1mrpnofzzs2FE0cpZ6BqVN1mxjBD8RPwHYD+VP2nWL8ruF
-yOXqb+8I2STk6nFWoNeUmpWPmrKPmQv+ZflM0cZlgWcSk7Ei9cuzxXoWOP2Zd2N6
-BlbFZf87KbeZbXqGUHnlcVF9vUtwH9dch2OMaRKfu67wM2P55bE4hwLFKAhSvzRU
-Nnr70kcedgfRZNXFj9TA1Q5tkI0Kg/cQRmEp1+m4UHo1ceyVCR5W5btkOaeV3VtA
-YoYBZbqBAgMBAAECggEAA/5t0ypZug9DUu0283niqpdIzlKGHXGPS6vE8hD37ytW
-wobFiyMm/5YJ5gcPnePV2lCyGEyQ8Ih10LSnE4tOPGLpLnxQn8A11ymf8fnzEJNr
-Qnc42o0b+bJqTLAfX4g5z1qzOqWiUQ7CA3sKP3G6FiHh/8tKNYnaFif09Q8cpJFb
-YDDkvm48NJgsrIoCgmaFIQIn+yDzGQKWwTNMIks+RByWpc67j1x1kiyQM1RfrEev
-Yyq/ZkP66IYZzmZKpFCWGs5qbRZdxyXNpq85DjwA99lAH7vxtMJHQM4z1h1eDH4L
-Ma5hEnmmHu4D5lF2GDQYflvuFdDGH5tThO6MV0IrSQKBgQD+kvEtNxJCMxLOVFyV
-NWF3pk/i2nkD+53t/VPXjMPtW7IesouEGzU82I/fT2wUTkNwFdkVpv37qoLypKZm
-npJFxr6abQNjiDh2Fsh8/iuJfvdZUFJbCEY6NS58qgjix8XCQKRD06EugK7uekIZ
-zJnttF3qVBBD8Z8Uwxz8i+jF1wKBgQDF51y/5XB6Bz47cdxw7P8NsfnTz2V3H0HU
-OnlEBANbhmBadjU8dqbM54Nxbn7VOdooXPuSnAKJ9vPDg1n5Y/GO+lgldNzfyK6g
-HnbldSu0zBvAaGvmAjLjetEtOkBqYkrHJlT6JAems/Kc/YX5uooAz9/jNJFXP9++
-KbjH3CzHZwKBgQC6ppxEDZPKi83nD/2NvMTIyFzcNFj0LaEepFW7vc7NkiSn0zrt
-0lEXWqUqEv5oaPWTEcHH2VdxFRTLuSL0LKGMnWqUqQcKDA9xrcSzuFvNhRTwHC81
-5XwwI1wBNV4sgFKj2WdW/6y2/szDt0oNxnC50zvkmlwOpPKBc4kmNaKmowKBgBmC
-uXIDIXyZcmw3QTNNWZNqXcnv8iRo4xN4dilOWyBxMfp3QmWI5feD4G2+0Jqr2nNZ
-iRRdB/bA3qtVQ0PinkDQBIzPg6lVNS1uv+TUNc4YgXtL+pyrq+Om8U/jMmqEQR9q
-0YltG49houSZyatnYGK6aSHgpNuaYD0jI66fsyYBAoGAMefyD0I/ncArjuf58hVQ
-zSjxfcvlja9okrC8ZgqsVluezcm4rQNcSjBnESGTCjJC7O29AofGLHkvnsBQDiGk
-hE38IRisd+okXdApr41ifWDhmtASud5q6wlhOpMmQxg+OALf1rTvFYhbnFEXV/KY
-e5A4iXLRIbxbmXZDa35Rebw=
------END PRIVATE KEY-----
diff --git a/demo/grouper/configs-and-secrets/midpoint/httpd/host-cert.pem b/demo/grouper/configs-and-secrets/midpoint/httpd/host-cert.pem
deleted file mode 100644
index 9b1021b..0000000
--- a/demo/grouper/configs-and-secrets/midpoint/httpd/host-cert.pem
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDqDCCApCgAwIBAgIJAMOSkn4oS2aAMA0GCSqGSIb3DQEBCwUAMGkxCzAJBgNV
-BAYTAlVTMQswCQYDVQQIDAJNSTESMBAGA1UEBwwJQW5uIEFyYm9yMRcwFQYDVQQK
-DA5JbnRlcm5ldDIvVElFUjEgMB4GA1UEAwwXbWlkcG9pbnQuc3AuZXhhbXBsZS5v
-cmcwHhcNMTgwOTE0MDU1OTQ1WhcNMTkwOTE0MDU1OTQ1WjBpMQswCQYDVQQGEwJV
-UzELMAkGA1UECAwCTUkxEjAQBgNVBAcMCUFubiBBcmJvcjEXMBUGA1UECgwOSW50
-ZXJuZXQyL1RJRVIxIDAeBgNVBAMMF21pZHBvaW50LnNwLmV4YW1wbGUub3JnMIIB
-IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApj/b7MEUSfu3oXMfNgRwTse7
-a5UV7Jswf1M/ZN/ZZkAkIxNBevZgozjesvLPWrmsTgONi7XigJUJvCjdjmlW9eDM
-lri/rkD8HuOR1DQCVKL9nvoS2c3D7sq5Emda3V8Tlj82VqfEmePd3sajx7mcTfbH
-8jwAL9NhkC+WMib5IpjLGpG0FEAC0ha7Lxb+7jIiqHVJaqLXJGCyGN4mh6c1Q9S1
-f8RVTiW2a8x22G+9wnZYbkiA2Kxls177imHlhSz8EdvV4IpGw1amrEWhhuDEum7B
-vZ1xQDLatgRqh4qAKLIVYeRnJ8H1FelMa90qB4G08MIPifmTsQwqJyBYaEdgWQID
-AQABo1MwUTAdBgNVHQ4EFgQUqb9BteODF6wv5R57aEON/wGXMiowHwYDVR0jBBgw
-FoAUqb9BteODF6wv5R57aEON/wGXMiowDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG
-9w0BAQsFAAOCAQEAAcKhxI+tSItrXmqC0PSmgWyAYpqbkz6W/cefTutXqhIgY09f
-h0LSv7ogTahoGpyiZk9vy6u3OE9bYwxapEfa4KBjO6HxBMIVBBb3RegVjoPzjElN
-BDwAx0VGFcZTXwMxDWycWdG8ql7rCZBvS50w04uTaIgnGmqXAdWWmBgfJ9cRbxW+
-JwO/mOl1QM1lR/5142NpvuUVWlmZSKEGydE5A1qPz2wpDbBR1ym1BQNS4NEqw6Kp
-GSB8jKyCS1Ve0v2wVze2038Wukz02dq9uKPTIO3T+B+ibZmxn6Op/kFCc1/kK5NS
-Q6JdO1B6KquGAYdGmKAcQ19mv+jqGktqWEEf0g==
------END CERTIFICATE-----
diff --git a/demo/grouper/configs-and-secrets/midpoint/httpd/host-key.pem b/demo/grouper/configs-and-secrets/midpoint/httpd/host-key.pem
deleted file mode 100644
index 5746e59..0000000
--- a/demo/grouper/configs-and-secrets/midpoint/httpd/host-key.pem
+++ /dev/null
@@ -1,28 +0,0 @@
------BEGIN PRIVATE KEY-----
-MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCmP9vswRRJ+7eh
-cx82BHBOx7trlRXsmzB/Uz9k39lmQCQjE0F69mCjON6y8s9auaxOA42LteKAlQm8
-KN2OaVb14MyWuL+uQPwe45HUNAJUov2e+hLZzcPuyrkSZ1rdXxOWPzZWp8SZ493e
-xqPHuZxN9sfyPAAv02GQL5YyJvkimMsakbQUQALSFrsvFv7uMiKodUlqotckYLIY
-3iaHpzVD1LV/xFVOJbZrzHbYb73CdlhuSIDYrGWzXvuKYeWFLPwR29XgikbDVqas
-RaGG4MS6bsG9nXFAMtq2BGqHioAoshVh5GcnwfUV6Uxr3SoHgbTwwg+J+ZOxDCon
-IFhoR2BZAgMBAAECggEAEIRBpjjceiku6jRUwnoYaks/nIWYQwR8AfpUTwJKR/VR
-Yca097Fokm7A+UhUP3A45RtHQb0VPq8P44iv0kk24YCu8r5yFK7SHYOAZnOwU5ZJ
-2jSAEPF3aM7tKh3okhuzB3dKP7u1NZDE5zAW723KUJiW7sL1RcsbY0bHBj6G+9/H
-NplmsjuGt684vRBB0qOBfKF7EiG7mT69tHuNj4gRza9SMY31UtKbZdt2fNY6mp5V
-HscMba7egZP+Ke0pVX4+go9j7K8GG8hYaQDLjrzlPqrxZ2c5X9cC+CRDI/CHuL/s
-V/2yGZJ6n6UabwZoH83RdFrbQ94rU8Hkli6EvxXvMQKBgQDRpheNW5jDG5TfeJKh
-yfKTDQqH2Tk3BsBYYBN7Hf3m7vbkzlxnAKJAoSLmtRMuoeXvI5MrhzaHGsNIUS76
-LDIZnvB7DLUxhFUZsCPkpAA1QHuTWY96oR3PHnPjpk8lSUvtbOPwDLdzVApeFJgZ
-VqMNArZ7AHsK3Kkyi+f4WVQjbQKBgQDLAWiGb5dx6fAM2W6B6HjNmzjBWOuVEXa2
-76to9jzupBZmETfZgxtWUaWUDuNS+f7dtVUTE+p6v/w8clrHEhEZYkqunIOLo/UA
-LFPiuoTfEsWb1rh+nsCjCgy4uimixj/bSkf7NC6NyKTvCygA1mGnVVJUEPegYlDy
-LXCkaKWxHQKBgQCmyHSKL2lrJkEcOwakEU2acNCE3Gno/cT9SYmV83kvQ8JEqmrW
-QqnRsp9aXIljGscapPmKsmnNt5vNp1AxFAHTYh88NRLczsMIyZj0ZwgHVUI6KhC7
-5Psa78YQQBlMt2/g9TSsnuE+rYgF6mpKFiNm0Vasqeg47uzn2mdzqlUGTQKBgE04
-JutkTUY+h1pL5vYxWKpVDfy19z7H2tFxT1FowPrBneeLSyRI88Ac5I/yLdRlVeY9
-0LOmEr5Igwj3MsKgg7KVKfVLgdo/LrW3Jt2Kt3onKNXDkoBPoNUjwH0QC0Boiue+
-VK0gR0kVdm+bXccbxR+im+NwZNE0NLg6Qqu3RredAoGBALuVoqbPPmTCZXYG328H
-bzOs2aiR7BzPSVByV+qG6jW7w03RAnFPJZp7HMU+ViI5VY0wabUscMSvz5163+gM
-4KwY3v9ZjZzZGukIfLuudkdqtaiVOx/KeAC0n+nG21YU+wpZww8gkfHh1/sa2CME
-CWYCgOnmiTHcj83UaTqEXtmv
------END PRIVATE KEY-----
diff --git a/demo/grouper/configs-and-secrets/midpoint/shibboleth/shibboleth_sp_keys.jks b/demo/grouper/configs-and-secrets/midpoint/shibboleth/shibboleth_sp_keys.jks
deleted file mode 100644
index af2e8f4..0000000
Binary files a/demo/grouper/configs-and-secrets/midpoint/shibboleth/shibboleth_sp_keys.jks and /dev/null differ
diff --git a/demo/grouper/create-ref-loaders.gsh b/demo/grouper/create-ref-loaders.gsh
deleted file mode 100644
index 0cfdcdf..0000000
--- a/demo/grouper/create-ref-loaders.gsh
+++ /dev/null
@@ -1,31 +0,0 @@
-gs = GrouperSession.startRootSession()
-
-group = new GroupSave(gs).assignName("etc:affiliationLoader").assignCreateParentStemsIfNotExist(true).save()
-group.addType(GroupTypeFinder.find("grouperLoader"))
-group.setAttribute("grouperLoaderDbName", "sis")
-group.setAttribute("grouperLoaderType", "SQL_GROUP_LIST")
-group.setAttribute("grouperLoaderScheduleType", "CRON")
-group.setAttribute("grouperLoaderQuartzCron", "0 * * * * ?")
-group.setAttribute("grouperLoaderDbName", "sis")
-group.setAttribute("grouperLoaderGroupTypes", "addIncludeExclude")
-group.setAttribute("grouperLoaderQuery", "SELECT concat('ref:affiliation:',affiliation,'_systemOfRecord') as GROUP_NAME, uid as SUBJECT_ID, 'ldap' as SUBJECT_SOURCE_ID from SIS_AFFILIATIONS")
-
-group = new GroupSave(gs).assignName("etc:deptLoader").assignCreateParentStemsIfNotExist(true).save()
-group.addType(GroupTypeFinder.find("grouperLoader"))
-group.setAttribute("grouperLoaderDbName", "sis")
-group.setAttribute("grouperLoaderType", "SQL_GROUP_LIST")
-group.setAttribute("grouperLoaderScheduleType", "CRON")
-group.setAttribute("grouperLoaderQuartzCron", "0 * * * * ?")
-group.setAttribute("grouperLoaderDbName", "sis")
-group.setAttribute("grouperLoaderQuery", "SELECT concat('ref:dept:',department) as GROUP_NAME, uid as SUBJECT_ID, 'ldap' as SUBJECT_SOURCE_ID from SIS_PERSONS where department is not null")
-
-group = new GroupSave(gs).assignName("etc:coursesLoader").assignCreateParentStemsIfNotExist(true).save()
-group.addType(GroupTypeFinder.find("grouperLoader"))
-group.setAttribute("grouperLoaderDbName", "sis")
-group.setAttribute("grouperLoaderType", "SQL_GROUP_LIST")
-group.setAttribute("grouperLoaderScheduleType", "CRON")
-group.setAttribute("grouperLoaderQuartzCron", "0 * * * * ?")
-group.setAttribute("grouperLoaderDbName", "sis")
-group.setAttribute("grouperLoaderQuery", "SELECT concat('ref:course:',courseId) as GROUP_NAME, uid as SUBJECT_ID, 'ldap' as SUBJECT_SOURCE_ID from SIS_COURSES")
-
-edu.internet2.middleware.grouper.app.loader.GrouperLoaderType.scheduleLoads()
diff --git a/demo/grouper/create-ref-loaders.sh b/demo/grouper/create-ref-loaders.sh
deleted file mode 100755
index c9cd9cc..0000000
--- a/demo/grouper/create-ref-loaders.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/bash
-
-source ../../library.bash
-
-execute_gsh grouper_grouper_daemon_1 create-ref-loaders.gsh
diff --git a/demo/grouper/directory/Dockerfile b/demo/grouper/directory/Dockerfile
index 6e34ead..9a0948d 100644
--- a/demo/grouper/directory/Dockerfile
+++ b/demo/grouper/directory/Dockerfile
@@ -1,28 +1,39 @@
-FROM centos:centos7
-
-LABEL author="tier-packaging@internet2.edu "
-
-RUN yum install -y epel-release \
- && yum update -y \
- && yum install -y 389-ds-base \
- && yum clean all \
- && rm -rf /var/cache/yum
-
-COPY container_files/seed-data/ /seed-data/
-
-RUN useradd ldapadmin \
- && rm -fr /var/lock /usr/lib/systemd/system \
- # The 389-ds setup will fail because the hostname can't reliable be determined, so we'll bypass it and then install. \
- && sed -i 's/checkHostname {/checkHostname {\nreturn();/g' /usr/lib64/dirsrv/perl/DSUtil.pm \
- # Not doing SELinux \
- && sed -i 's/updateSelinuxPolicy($inf);//g' /usr/lib64/dirsrv/perl/* \
- # Do not restart at the end \
- && sed -i '/if (@errs = startServer($inf))/,/}/d' /usr/lib64/dirsrv/perl/* \
- && setup-ds.pl --silent --file /seed-data/ds-setup.inf \
- && /usr/sbin/ns-slapd -D /etc/dirsrv/slapd-dir \
- && while ! curl -s ldap://localhost:389 > /dev/null; do echo waiting for ldap to start; sleep 1; done; \
- ldapadd -H ldap:/// -f /seed-data/data.ldif -x -D "cn=Directory Manager" -w password
-
-EXPOSE 389
-
-CMD rm -rf /var/lock/dirsrv/slapd-dir/server/* && /usr/sbin/ns-slapd -D /etc/dirsrv/slapd-dir && sleep infinity
+FROM rockylinux:9.3 as baseinst
+
+RUN dnf update -y && \
+ dnf install -y --enablerepo=devel openldap openldap-clients openldap-servers && \
+ dnf clean all && \
+ rm -rf /var/cache/dnf
+
+EXPOSE 389/tcp
+
+VOLUME /var/lib/ldap
+
+FROM baseinst
+
+#LABEL author="tier-packaging@internet2.edu "
+
+ARG ldapDomain="dc=internet2,dc=edu"
+ARG ldapPw="password"
+
+ADD https://raw.githubusercontent.com/REFEDS/eduperson/master/schema/openldap/eduperson.ldif /etc/openldap/schema
+
+COPY container_files/* /opt
+
+RUN cd /opt ; \
+ /opt/update_schema /etc/openldap/slapd.d/cn\=config/cn\=schema/cn\=\{0\}core.ldif groupOfUniqueNames uniqueMember cn ; \
+ /opt/update_schema /etc/openldap/slapd.d/cn\=config/cn\=schema/cn\=\{0\}core.ldif groupOfNames member cn ; \
+ /opt/slapd.sh -init ; \
+ /opt/gen_config_update "${ldapDomain}" "${ldapPw}" "0" "0" ;\
+ cat 999_schema-list | while read line ; do \
+ ldapadd -H ldapi:/// -f /etc/openldap/schema/${line}.ldif ; \
+ done ; \
+ for s in 0 1 2 3 4 5 6 7 8 9 ; do \
+ find -type f -name "${s}[0-4]?_*.ldif" -exec ldapmodify -H ldapi:/// -f /opt/\{\} \; ; \
+ find -type f -name "${s}[5-9]?_*.ldif" -exec ldapadd -H ldapi:/// -f /opt/\{\} \; ; \
+ done ; \
+ rm /opt/[0-9]* && \
+ /opt/slapd.sh -stop ;
+
+CMD [ "/opt/slapd.sh", "-limit", "1024", "-debug", "256" ]
+
diff --git a/demo/grouper/directory/container_files/gen_config_update b/demo/grouper/directory/container_files/gen_config_update
new file mode 100755
index 0000000..a2d5647
--- /dev/null
+++ b/demo/grouper/directory/container_files/gen_config_update
@@ -0,0 +1,241 @@
+#!/bin/bash
+domain="${1:-dc=example,dc=com}"
+if [ $(echo -n ${domain} | wc -c ) -eq $(echo -n ${domain} | tr -d "," | wc -c) ]
+then
+ subDomain="${domain:4}"
+else
+ subDomain="$(echo -n ${domain:4} | cut -d , -f 1)"
+fi
+userpw="${2:-change_me}"
+cleartext="${3:-0}"
+locDebug="${4:-0}"
+
+function genPass() {
+ retVal="userPassword:"
+ if [ "${cleartext}" != "1" ]
+ then
+ secPw="$(slappasswd -s ${userpw})"
+ secPw2="$(echo -n ${secPw} | base64 )"
+ [ "${locDebug}" != "0" ] && echo "${userpw} => ${secPw} => ${secPw2}" >&2
+ retVal="${retVal}: ${secPw2}"
+ else
+ [ "${locDebug}" != "0" ] && echo "${userpw}" >&2
+ retVal="${retVal} ${userpw}"
+ fi
+ while [ ${#retVal} -gt 78 ]
+ do
+ echo "${retVal:0:78}"
+ retVal=" ${retVal:78}"
+ done
+ if [ ${#retVal} -gt 2 ]
+ then
+ echo "${retVal}"
+ fi
+}
+
+cat >999_schema-list <001_monitor-diff.ldif <101_mdb-diff.ldif <251_mod_config.ldif <151_default_structure.ldif <252_default_policy.ldif <851_default_structure.ldif <959_default_structure.ldif <&2
+ ulimit -n ${localLimit}
+ exec /usr/sbin/slapd -4 -h "ldapi:///" -u ldap -g ldap
+ exit 0
+ ;;
+ stop)
+ while read line
+ do
+ kill ${line}
+ count=0
+ while [ -e /proc/${line} ]
+ do
+ [ ${count} -gt 10 ] && kill -9 ${line}
+ echo "Waiting to terminate the process"
+ count=$(( ${count} + 1 ))
+ sleep 1
+ done
+ echo "Terminated..."
+ ${0} -stop
+ done < <( grep "^slapd$" /proc/*/comm | head -1 | cut -d / -f 3 )
+ exit 0
+ ;;
+ esac
+done
+
+ulimit -n ${localLimit}
+
+
+if [ -z ${LDAP_INIT+x} ]
+then
+ [ ! -z ${LDAP_INFO+x} ] && echo "uLimit : ${localLimit} / debug level : ${debugLevel}" >&2
+ exec /usr/sbin/slapd -h "ldap://0.0.0.0:389 ldapi:///" -u ldap -g ldap -d ${debugLevel}
+else
+ [ ! -z ${LDAP_INFO+x} ] && echo "uLimit : ${localLimit}" >&2
+ exec /usr/sbin/slapd -4 -h "ldapi:///" -u ldap -g ldap
+fi
+
diff --git a/demo/grouper/directory/container_files/update_schema b/demo/grouper/directory/container_files/update_schema
new file mode 100755
index 0000000..9fccca9
--- /dev/null
+++ b/demo/grouper/directory/container_files/update_schema
@@ -0,0 +1,103 @@
+#!/bin/bash
+[ "${1}" == "" ] && exit 1
+
+function getLines {
+ nLine=1
+ grep -n ^olc "${1}" | \
+ grep -A 1 "${2}" | \
+ cut -d : -f 1 | \
+ while read line
+ do
+ if [ ${nLine} -eq 1 ]
+ then
+ echo -n "${line},"
+ else
+ echo "$(( ${line} - 1))"
+ fi
+ nLine=$(( ${nLine} + 1 ))
+ done
+}
+
+function getCurrent {
+ sed -n "${2}p" "${1}" | sed "s/^ //g" | tr -d "\n"
+ echo
+}
+
+function convertToOptional {
+ if [ "${2}" != "" ]
+ then
+ original="${1} \$ ${2}"
+ else
+ original="${1}"
+ fi
+ read line
+ if [ $( echo "${line}" | grep -c "MUST ( ${original} )" ) -gt 0 ]
+ then
+ echo "${line}" | sed "s/MUST ( ${original} )/MUST ( ${2:-} )/; s/MAY (/MAY ( ${1} \$/"
+ else
+ echo "${line}"
+ fi
+}
+
+function wrapLine() {
+ lineToWrap="${1:-}"
+ while [ ${#lineToWrap} -gt 0 ]
+ do
+ if [ ${#lineToWrap} -ge 78 ]
+ then
+ echo "${lineToWrap:0:78}"
+ lineToWrap=" ${lineToWrap:78}"
+ else
+ echo "${lineToWrap}"
+ lineToWrap=""
+ fi
+ done
+}
+
+function replaceLine {
+ newline=$( echo -n ${2} | cut -d , -f 1)
+ sed -i "${2}d" "${1}"
+ firstLine=1
+ while read line
+ do
+ if [ ${firstLine} -eq 1 ]
+ then
+ sed -i "${newline} i ${line}" "${1}"
+ firstLine=0
+ else
+ sed -i "${newline} i\ ${line}" "${1}"
+ fi
+ newline=$(( ${newline} + 1 ))
+ done
+}
+
+function updateModifyTimestamp {
+ sed -i "s/^modifyTimestamp:.*/modifyTimestamp: $(date -u +%Y%m%d%H%M%SZ)/" "${1}"
+}
+
+
+function calculateCRC {
+ tail -n +3 "${1}" | \
+ gzip -1 -c | \
+ tail -c8 | \
+ hexdump -n4 | \
+ head -1 | \
+ sed "s/[^[:space:]]*[[:space:]]\([^[:space:]]*\)[[:space:]]\([^[:space:]]*\)/# CRC32 \2\1/"
+}
+
+function updateCRC {
+ sed -i "s/# CRC32.*/$(calculateCRC "${1}")/" "${1}"
+}
+
+lines="$(getLines "${1}" "${2}")"
+origLine="$(getCurrent "${1}" "${lines}")"
+newLine="$(echo ${origLine} | convertToOptional "${3}" "${4}")"
+if [ "${origLine}" != "${newLine}" ]
+then
+ echo "updating... / ${1} : ${2} ( ${3} : MUST => MAY) "
+ wrapLine "${newLine}" | replaceLine "${1}" "${lines}"
+ updateModifyTimestamp "${1}"
+ updateCRC "${1}"
+else
+ echo "nothing to update... / ${1} : ${2} ( ${3} : MUST => MAY) "
+fi
diff --git a/demo/grouper/docker-compose.yml b/demo/grouper/docker-compose.yml
index a80751a..b96f1d7 100644
--- a/demo/grouper/docker-compose.yml
+++ b/demo/grouper/docker-compose.yml
@@ -1,164 +1,326 @@
version: "3.3"
services:
+ prereq:
+ image: evolveum/midpoint:${MP_VER:-4.8.3}-rockylinux
+ command: >
+ bash -c "
+ echo ' - - - - - - -' ;
+ cd /mnt/security ;
+ if [ ! -e key.pem ] ;
+ then
+ echo 'Certificate has not been found. Generating of the new one...' ;
+ if [ -e /mnt/grouper-http/host-cert.pem -a -e /mnt/grouper-http/host-key.pem ] ;
+ then
+ echo 'Taking existing http certs... ';
+ cp /mnt/grouper-http/host-cert.pem cert.pem ;
+ cp /mnt/grouper-http/host-key.pem key.pem ;
+ else
+ echo 'Generating existing http certs... ';
+ openssl req -newkey rsa:2048 -keyout key.pem -nodes -subj '/C=US/ST=MI/L=Ann Arbor/O=Internet2\\/TIER/CN=midpoint.sp.example.org' -addext 'subjectAltName = DNS:midpoint.sp.example.org, DNS:midpoint_server, DNS:directory, DNS:idp, DNS: localhost, DNS: localhost.localdomain, IP:127.0.0.1, IP:::1' -out cert.pem -days 1825 -x509 -addext "basicConstraints=CA:FALSE";
+ fi ;
+ openssl req -newkey rsa:2048 -keyout sp-key.pem -nodes -subj '/C=US/ST=MI/L=Ann Arbor/O=Internet2\\/TIER/CN=sp.example.org' -out sp-cert.pem -days 3650 -x509 ;
+ openssl req -newkey rsa:3072 -keyout sp-signing-key.pem -nodes -subj '/CN=sptest.example.edu' -addext 'subjectAltName = DNS:sptest.example.edu' -out sp-signing-cert.pem -days 3650 -x509 ;
+ openssl req -newkey rsa:2048 -keyout idp-backchannel.key -nodes -subj '/CN=idptestbed' -addext 'subjectAltName = DNS:idptestbed, URI:https://idptestbed/idp/shibboleth' -out idp-backchannel.crt -days 7300 -x509 ;
+ openssl req -newkey rsa:2048 -keyout idp-encryption.key -nodes -subj '/CN=idptestbed' -addext 'subjectAltName = DNS:idptestbed, URI:https://idptestbed/idp/shibboleth' -out idp-encryption.crt -days 7300 -x509 ;
+ openssl req -newkey rsa:2048 -keyout idp-signing.key -nodes -subj '/CN=idptestbed' -addext 'subjectAltName = DNS:idptestbed, URI:https://idptestbed/idp/shibboleth' -out idp-signing.crt -days 7300 -x509 ;
+ openssl req -newkey rsa:2048 -keyout idp-browser.key -nodes -subj '/CN=idp.ccc.local' -addext 'authorityKeyIdentifier = keyid:always,issuer:always' -out idp-browser.crt -days 10585 -x509 ;
+ openssl x509 -noout -fingerprint -sha256 -in cert.pem ;
+ openssl pkcs12 -export -in sp-signing-cert.pem -inkey sp-signing-key.pem -out signing-key.p12 -passout pass:password -name signing-key ;
+ openssl pkcs12 -export -in cert.pem -inkey key.pem -out keystore.p12 -passout pass:password -name selfsigned ;
+ keytool -importkeystore -srckeystore signing-key.p12 -srcstoretype pkcs12 -srcstorepass password -srcalias signing-key -destkeystore shibboleth_sp_keys.jks -deststoretype jks -deststorepass changeit -noprompt -destalias signing-key ;
+ keytool -importkeystore -srckeystore keystore.p12 -srcstoretype pkcs12 -srcstorepass password -srcalias selfsigned -destkeystore keystore.jks -deststoretype jks -deststorepass password -noprompt -destalias selfsigned ;
+ keytool -list -keystore shibboleth_sp_keys.jks -storetype jceks -storepass changeit ;
+ keytool -list -keystore keystore.jks -storetype jceks -storepass password ;
+ openssl pkcs12 -export -in idp-backchannel.crt -inkey idp-backchannel.key -out idp-backchannel.p12 -passout pass:password -name idptestbed ;
+ openssl pkcs12 -export -in idp-browser.crt -inkey idp-browser.key -out idp-browser.p12 -passout pass:password -name myAlias ;
+ for s in *ert.pem *.crt ; do echo ' - - - - - ' ; echo $${s} ; openssl x509 -noout -fingerprint -sha256 -in $${s} ; echo ; openssl x509 -noout -subject -subject_hash -dates -in $${s} ; done ;
+ echo ' - - - - - ' ;
+ mkdir /mnt/midpoint/var/shibboleth ;
+ cp shibboleth_sp_keys.jks /mnt/midpoint/var/shibboleth ;
+ cp cert.pem /mnt/midpoint/var ;
+ cp key.pem /mnt/midpoint/var ;
+ cp cert.pem /mnt/nginx-cert ;
+ cp key.pem /mnt/nginx-cert ;
+ echo ' server {' >> /mnt/nginx-conf/default.conf ;
+ echo ' listen 80 default_server;' >> /mnt/nginx-conf/default.conf ;
+ echo ' server_name localhost;' >> /mnt/nginx-conf/default.conf ;
+ echo '' >> /mnt/nginx-conf/default.conf ;
+ echo ' return 301 https://$server_name$request_uri;' >> /mnt/nginx-conf/default.conf ;
+ echo '}' >> /mnt/nginx-conf/default.conf ;
+ echo ' server {' >> /mnt/nginx-conf/midpoint.conf ;
+ echo ' listen 443 ssl default_server;' >> /mnt/nginx-conf/midpoint.conf ;
+ echo ' server_name localhost;' >> /mnt/nginx-conf/midpoint.conf ;
+ echo '' >> /mnt/nginx-conf/midpoint.conf ;
+ echo ' ssl_certificate /etc/nginx/certs/cert.pem;' >> /mnt/nginx-conf/midpoint.conf ;
+ echo ' ssl_certificate_key /etc/nginx/certs/key.pem;' >> /mnt/nginx-conf/midpoint.conf ;
+ echo '' >> /mnt/nginx-conf/midpoint.conf ;
+ echo ' proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;' >> /mnt/nginx-conf/midpoint.conf ;
+ echo ' location / {' >> /mnt/nginx-conf/midpoint.conf ;
+ echo ' rewrite ^/$ /midpoint/ last;' >> /mnt/nginx-conf/midpoint.conf ;
+ echo ' rewrite ^/midpoint$ /midpoint/ last;' >> /mnt/nginx-conf/midpoint.conf ;
+ echo '' >> /mnt/nginx-conf/midpoint.conf ;
+ echo ' proxy_set_header X-Real-IP $$remote_addr;' >> /mnt/nginx-conf/midpoint.conf ;
+ echo ' proxy_set_header X-Forwarded-For $$proxy_add_x_forwarded_for;' >> /mnt/nginx-conf/midpoint.conf ;
+ echo ' proxy_set_header X-Forwarded-Host: $$host;' >> /mnt/nginx-conf/midpoint.conf ;
+ echo ' proxy_set_header X-Forwarded-Proto: $$scheme;' >> /mnt/nginx-conf/midpoint.conf ;
+ echo ' proxy_pass http://midpoint-container:8080/;' >> /mnt/nginx-conf/midpoint.conf ;
+ echo '' >> /mnt/nginx-conf/midpoint.conf ;
+ echo ' }' >> /mnt/nginx-conf/midpoint.conf ;
+ echo '' >> /mnt/nginx-conf/midpoint.conf ;
+ echo ' location /idp {' >> /mnt/nginx-conf/midpoint.conf ;
+ echo ' proxy_set_header Host localhost;' >> /mnt/nginx-conf/midpoint.conf ;
+ echo ' proxy_pass https://idp:443/idp ;' >> /mnt/nginx-conf/midpoint.conf ;
+ echo ' }' >> /mnt/nginx-conf/midpoint.conf ;
+ echo '' >> /mnt/nginx-conf/midpoint.conf ;
+ echo ' location /grouper {' >> /mnt/nginx-conf/midpoint.conf ;
+ echo ' rewrite ^/(.*)$ https://localhost:4443/$1 ;' >> /mnt/nginx-conf/midpoint.conf ;
+ echo ' }' >> /mnt/nginx-conf/midpoint.conf ;
+ echo ' location /grouperSSO {' >> /mnt/nginx-conf/midpoint.conf ;
+ echo ' rewrite ^/(.*)$ https://localhost:4443/$1 ;' >> /mnt/nginx-conf/midpoint.conf ;
+ echo ' }' >> /mnt/nginx-conf/midpoint.conf ;
+ echo ' }' >> /mnt/nginx-conf/midpoint.conf ;
+ cp idp-backchannel.crt /mnt/shibboleth-idp/credentials ;
+ cp idp-backchannel.p12 /mnt/shibboleth-idp/credentials ;
+ cp idp-browser.p12 /mnt/shibboleth-idp/credentials ;
+ cp idp-encryption.crt /mnt/shibboleth-idp/credentials ;
+ cp idp-encryption.key /mnt/shibboleth-idp/credentials ;
+ cp idp-signing.crt /mnt/shibboleth-idp/credentials ;
+ cp idp-signing.key /mnt/shibboleth-idp/credentials ;
+ cp sp-signing-cert.pem /mnt/shibboleth-idp/credentials ;
+ cp sp-cert.pem /mnt/shibboleth-idp/credentials ;
+ cp keystore.jks /mnt/shibboleth/certs ;
+ cp cert.pem /mnt/grouper-http/host-cert.pem ;
+ cp key.pem /mnt/grouper-http/host-key.pem ;
+ chmod -R 744 /mnt/grouper-http ;
+ chown -R --reference=/mnt/grouper-http /mnt/grouper-http ;
+ cp sp-cert.pem /mnt/grouper-shibboleth/sp-cert.pem ;
+ cp sp-key.pem /mnt/grouper-shibboleth/sp-key.pem ;
+ chmod -R 744 /mnt/grouper-shibboleth ;
+ chown -R --reference=/mnt/grouper-shibboleth /mnt/grouper-shibboleth ;
+ echo ' - - - - - ' ;
+ find -type f ;
+ echo ' - - - - - - -' ;
+ find /mnt/shibboleth-idp/ -type f ;
+ echo ' - - - - - - -' ;
+ find /mnt/shibboleth -type f ;
+ echo ' - - - - - - -' ;
+ find /mnt/midpoint/ -type f ;
+ echo ' - - - - - - -' ;
+ find /mnt/grouper*/ -type f ;
+ echo ' - - - - - - -' ;
+ else echo 'certificate already exists... (skip new cert generation)' ;
+ fi ;
+ if [ ! -e /mnt/shared_pw/db_pass ] ; then
+ echo 'Generating password for DB connection...';
+ dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64 | tr -d -c [0-9a-z] | cut -c 1-32 | tr -d [[:space:]] > /mnt/shared_pw/db_pass ;
+ fi ;
+ "
+ networks:
+ - net
+ volumes:
+ - security_object:/mnt/security
+ - shared_pw:/mnt/shared_pw
+ - idp_credentials:/mnt/shibboleth-idp/credentials
+ - idp_certs:/mnt/shibboleth/certs
+ - proxy_conf:/mnt/nginx-conf
+ - proxy_cert:/mnt/nginx-cert
+ - midpoint_home:/mnt/midpoint/var
+ - ./configs-and-secrets/grouper/httpd:/mnt/grouper-http
+ - ./configs-and-secrets/grouper/shibboleth:/mnt/grouper-shibboleth
+
grouper_daemon:
- build: ./grouper_daemon/
- command: bash -c "while ! curl -s grouper_data:3306 > /dev/null; do echo waiting for mysql on grouper_data to start; sleep 3; done; while ! curl -s ldap://directory:389 > /dev/null; do echo waiting for ldap on directory to start; sleep 3; done; /usr/local/bin/startup.sh"
+ image: i2incommon/grouper:4.12.0
+ command: [ "daemon" ]
depends_on:
- - grouper_data
- - directory
+ grouper_data:
+ condition: service_healthy
+ grouper_data_init:
+ condition: service_completed_successfully
+ directory:
+ condition: service_healthy
+ sources:
+ condition: service_started
environment:
- ENV
- USERTOKEN
- GROUPER_CLIENT_WEBSERVICE_PASSWORD_FILE=password
- GROUPER_DATABASE_PASSWORD_FILE=/run/secrets/g_database_password.txt
- - RABBITMQ_PASSWORD_FILE=/run/secrets/rabbitmq_password.txt
+ - RABBITMQ_PASSWORD=password
- SUBJECT_SOURCE_LDAP_PASSWORD=password
+ ulimits:
+ nofile:
+ soft: 1024
+ hard: 2048
networks:
net:
aliases:
- grouper-daemon
healthcheck:
- test: curl -s grouper_data:3306
+ test: gsh
interval: 30s
timeout: 30s
retries: 3
secrets:
- g_database_password.txt
- - rabbitmq_password.txt
- - source: grouper.hibernate.properties
- target: grouper_grouper.hibernate.properties
- - source: grouper-loader.properties
- target: grouper_grouper-loader.properties
- - source: subject.properties
- target: grouper_subject.properties
volumes:
- - type: bind
- source: ./configs-and-secrets/grouper/application/grouper.properties
- target: /opt/grouper/conf/grouper.properties
- - type: bind
- source: ./configs-and-secrets/grouper/application/grouper.client.properties
- target: /opt/grouper/conf/grouper.client.properties
+ - ./configs-and-secrets/grouper/application/grouper.properties:/opt/grouper/grouperWebapp/WEB-INF/classes/grouper.properties
+ - ./configs-and-secrets/grouper/application/grouper.client.properties:/opt/grouper/grouperWebapp/WEB-INF/classes/grouper.client.properties
+ - ./configs-and-secrets/grouper/application/grouper.hibernate.properties:/opt/grouper/grouperWebapp/WEB-INF/classes/grouper.hibernate.properties
+ - ./configs-and-secrets/grouper/application/grouper-loader.properties:/opt/grouper/grouperWebapp/WEB-INF/classes/grouper-loader.properties
+ - ./configs-and-secrets/grouper/application/subject.properties:/opt/grouper/grouperWebapp/WEB-INF/classes/subject.properties
+ - ./configs-and-secrets/grouper/application/grouper.text.en.us.properties:/opt/grouper/grouperWebapp/WEB-INF/classes/grouperText/grouper.text.en.us.properties
grouper_ui:
- build: ./grouper_ui/
- command: bash -c "while ! curl -s grouper_data:3306 > /dev/null; do echo waiting for mysql on grouper_data to start; sleep 3; done; while ! curl -s ldap://directory:389 > /dev/null; do echo waiting for ldap on directory to start; sleep 3; done; exec ui"
+ image: i2incommon/grouper:4.12.0
+ command: [ "ui" ]
depends_on:
- - grouper_data
- - directory
+ grouper_data:
+ condition: service_healthy
+ grouper_data_init:
+ condition: service_completed_successfully
+ directory:
+ condition: service_healthy
environment:
- ENV
- USERTOKEN
- GROUPER_DATABASE_PASSWORD_FILE=/run/secrets/g_database_password.txt
- SUBJECT_SOURCE_LDAP_PASSWORD=password
+ ulimits:
+ nofile:
+ soft: 1024
+ hard: 2048
networks:
net:
aliases:
- grouper-ui
ports:
- 4443:443
+ healthcheck:
+ test: curl -k -f https://127.0.0.1/grouper/grouperUi/ || exit 1
+ interval: 30s
+ timeout: 30s
+ retries: 3
secrets:
- g_database_password.txt
- - source: grouper.hibernate.properties
- target: grouper_grouper.hibernate.properties
- - source: grouper-loader.properties
- target: grouper_grouper-loader.properties
- - source: subject.properties
- target: grouper_subject.properties
- - source: g_sp-key.pem
- target: shib_sp-key.pem
- - source: g_host-key.pem
- target: host-key.pem
volumes:
- - type: bind
- source: ./configs-and-secrets/grouper/application/grouper.properties
- target: /opt/grouper/conf/grouper.properties
- - type: bind
- source: ./configs-and-secrets/grouper/application/grouper.client.properties
- target: /opt/grouper/conf/grouper.client.properties
- - type: bind
- source: ./configs-and-secrets/grouper/shibboleth/sp-cert.pem
- target: /etc/shibboleth/sp-cert.pem
- - type: bind
- source: ./configs-and-secrets/grouper/shibboleth/shibboleth2.xml
- target: /etc/shibboleth/shibboleth2.xml
- - type: bind
- source: ./configs-and-secrets/grouper/shibboleth/idp-metadata.xml
- target: /etc/shibboleth/idp-metadata.xml
- - type: bind
- source: ./configs-and-secrets/grouper/httpd/host-cert.pem
- target: /etc/pki/tls/certs/host-cert.pem
- - type: bind
- source: ./configs-and-secrets/grouper/httpd/host-cert.pem
- target: /etc/pki/tls/certs/cachain.pem
+ - ./configs-and-secrets/grouper/application/grouper.properties:/opt/grouper/conf/grouper.properties
+ - ./configs-and-secrets/grouper/application/grouper.client.properties:/opt/grouper/conf/grouper.client.properties
+ - ./configs-and-secrets/grouper/application/grouper.hibernate.properties:/opt/grouper/grouperWebapp/WEB-INF/classes/grouper.hibernate.properties
+ - ./configs-and-secrets/grouper/application/grouper-loader.properties:/opt/grouper/grouperWebapp/WEB-INF/classes/grouper-loader.properties
+ - ./configs-and-secrets/grouper/application/subject.properties:/opt/grouper/grouperWebapp/WEB-INF/classes/subject.properties
+ - ./configs-and-secrets/grouper/application/grouper.text.en.us.properties:/opt/grouper/grouperWebapp/WEB-INF/classes/grouperText/grouper.text.en.us.properties
+ - ./configs-and-secrets/grouper/shibboleth/idp-metadata.xml:/etc/shibboleth/idp-metadata.xml
+ - ./configs-and-secrets/grouper/shibboleth/sp-cert.pem:/etc/shibboleth/sp-cert.pem
+ - ./configs-and-secrets/grouper/shibboleth/sp-key.pem:/etc/shibboleth/sp-key.pem
+ - ./configs-and-secrets/grouper/shibboleth/shibboleth2.xml:/etc/shibboleth/shibboleth2.xml
+# Note: due to a bug in https://github.internet2.edu/docker/grouper/blob/2.5.57/container_files/usr-local-bin/librarySetupFilesForProcess.sh#L72
+# This file had to be mounted as shib2.conf, instead of shib.conf (bind mounts don't want to be moved)
+ - ./configs-and-secrets/grouper/httpd/shib.conf:/etc/httpd/conf.d/shib2.conf
+ - ./configs-and-secrets/grouper/httpd/host-cert.pem:/etc/pki/tls/certs/host-cert.pem
+ - ./configs-and-secrets/grouper/httpd/host-cert.pem:/etc/pki/tls/certs/cachain.pem
+ - ./configs-and-secrets/grouper/httpd/host-key.pem:/etc/pki/tls/private/host-key.pem
grouper_ws:
- build: ./grouper_ws/
- command: bash -c "while ! curl -s grouper_data:3306 > /dev/null; do echo waiting for mysql to start; sleep 3; done; while ! curl -s ldap://directory:389 > /dev/null; do echo waiting for ldap to start; sleep 3; done; exec ws"
+ image: i2incommon/grouper:4.12.0
+ command: [ "ws" ]
depends_on:
- - grouper_data
- - directory
+ grouper_data:
+ condition: service_healthy
+ directory:
+ condition: service_healthy
+ prereq:
+ condition: service_completed_successfully
+ idp_vol_init:
+ condition: service_completed_successfully
+ grouper_data_init:
+ condition: service_completed_successfully
environment:
- ENV
- GROUPER_DATABASE_PASSWORD_FILE=/run/secrets/g_database_password.txt
- SUBJECT_SOURCE_LDAP_PASSWORD=password
- USERTOKEN
+ ulimits:
+ nofile:
+ soft: 1024
+ hard: 2048
networks:
net:
aliases:
- grouper-ws
ports:
- 9443:443
+ healthcheck:
+ test: curl -k -f https://127.0.0.1/grouper-ws/status?diagnosticType=trivial || exit 1
+ interval: 30s
+ timeout: 30s
+ retries: 3
secrets:
- g_database_password.txt
- - source: grouper.hibernate.properties
- target: grouper_grouper.hibernate.properties
- - source: grouper-loader.properties
- target: grouper_grouper-loader.properties
- - source: subject.properties
- target: grouper_subject.properties
- - source: g_sp-key.pem
- target: shib_sp-key.pem
- - source: g_host-key.pem
- target: host-key.pem
+# - source: g_sp-key.pem
+# target: shib_sp-key.pem
+# - source: g_host-key.pem
+# target: host-key.pem
+ volumes:
+ - ./configs-and-secrets/grouper/application/grouper.properties:/opt/grouper/conf/grouper.properties
+ - ./configs-and-secrets/grouper/application/grouper.client.properties:/opt/grouper/conf/grouper.client.properties
+ - ./configs-and-secrets/grouper/application/grouper.hibernate.properties:/opt/grouper/grouperWebapp/WEB-INF/classes/grouper.hibernate.properties
+ - ./configs-and-secrets/grouper/application/grouper-loader.properties:/opt/grouper/grouperWebapp/WEB-INF/classes/grouper-loader.properties
+ - ./configs-and-secrets/grouper/application/subject.properties:/opt/grouper/grouperWebapp/WEB-INF/classes/subject.properties
+ - ./configs-and-secrets/grouper/application/grouper.text.en.us.properties:/opt/grouper/grouperWebapp/WEB-INF/classes/grouperText/grouper.text.en.us.properties
+ - ./grouper_ws/web.xml:/opt/grouper/grouperWebapp/WEB-INF/web.xml
+ - ./grouper_ws/tomcat-users.xml:/opt/tomee/conf/tomcat-users.xml
+ - ./grouper_ws/server.xml:/opt/tomee/conf/server.xml
+ - ./configs-and-secrets/grouper/shibboleth/sp-cert.pem:/etc/shibboleth/sp-cert.pem
+ - ./configs-and-secrets/grouper/shibboleth/sp-key.pem:/etc/shibboleth/sp-key.pem
+ - ./configs-and-secrets/grouper/httpd/host-cert.pem:/etc/pki/tls/certs/host-cert.pem
+ - ./configs-and-secrets/grouper/httpd/host-cert.pem:/etc/pki/tls/certs/cachain.pem
+ - ./configs-and-secrets/grouper/httpd/host-key.pem:/etc/pki/tls/private/host-key.pem
+
+ grouper_data_init:
+ image: i2incommon/grouper:4.12.0
+ command: >
+ bash -c "
+ if [ ! -e /var/lib/postgresql/data/initialized ] ; then
+ echo 'processing init...' ;
+ echo ' - - - - - -';
+ /opt/grouper/grouperWebapp/WEB-INF/bin/gsh.sh -registry -check -runscript -noprompt &&
+ /opt/grouper/grouperWebapp/WEB-INF/bin/gsh.sh /tmp-bin/initialize.gsh &&
+ /opt/grouper/grouperWebapp/WEB-INF/bin/gsh.sh /tmp-bin/set-prov.gsh &&
+ touch /var/lib/postgresql/data/initialized ;
+ else echo 'init skipped....' ;
+ fi
+ "
+ depends_on:
+ grouper_data:
+ condition: service_healthy
+ networks:
+ - net
volumes:
- - type: bind
- source: ./configs-and-secrets/grouper/application/grouper.properties
- target: /opt/grouper/conf/grouper.properties
- - type: bind
- source: ./configs-and-secrets/grouper/application/grouper.client.properties
- target: /opt/grouper/conf/grouper.client.properties
- - type: bind
- source: ./configs-and-secrets/grouper/httpd/host-cert.pem
- target: /etc/pki/tls/certs/host-cert.pem
- - type: bind
- source: ./configs-and-secrets/grouper/httpd/host-cert.pem
- target: /etc/pki/tls/certs/cachain.pem
+ - ./grouper_data_init/bootstrap:/tmp-bin
+ - ./grouper_data_init/conf/grouper.hibernate.properties:/opt/grouper/grouperWebapp/WEB-INF/classes/grouper.hibernate.properties
+ - ./grouper_data_init/conf/grouper.properties:/opt/grouper/grouperWebapp/WEB-INF/classes/grouper.properties
+ - grouper_data:/var/lib/postgresql/data
grouper_data:
- build: ./grouper_data/
+ image: postgres:16-alpine
networks:
net:
aliases:
- grouper-data
- ports:
- - 3306:3306
+ environment:
+ - POSTGRES_HOST_AUTH_METHOD=trust
+ - POSTGRES_USER=postgres
+ - POSTGRES_PASSWORD=password
+ - PGDATA=/var/lib/postgresql/data/pgdata
healthcheck:
- test: curl -s grouper_data:3306
- interval: 30s
- timeout: 30s
- retries: 3
+ test: [ "CMD-SHELL", "pg_isready -d grouper -U grouper" ]
+ interval: 1s
+ timeout: 5s
+ retries: 10
volumes:
- - grouper_data:/var/lib/mysql
-
- directory:
- build: ./directory/
- ports:
- - 389:389
- networks:
- - net
- volumes:
- - ldap:/var/lib/dirsrv
+ - grouper_data:/var/lib/postgresql/data
+ - ./grouper_data_init/sql:/docker-entrypoint-initdb.d
sources:
build: ./sources/
@@ -172,126 +334,267 @@ services:
environment:
- CREATE_NEW_DATABASE=if_needed
- data_init:
- image: i2incommon/midpoint:${tag:-4.8.2}
- command: >
- bash -c "
- chmod 777 /opt/mp-pw/ ;
- touch /opt/mp-pw/db_init_in_progress ;
- echo -e '#!/bin/sh\ntouch /opt/mp-pw/db_init' >/opt/db-init/000-start.sh ;
- echo -e '#!/bin/sh\necho DB structure init process has finished...\nrm -f /opt/mp-pw/db_init_in_progress /opt/mp-pw/db_init' > /opt/db-init/999-finish.sh ;
- /opt/midpoint/bin/midpoint.sh init-native
- "
- environment:
- - MP_INIT_DB_CONCAT=/opt/db-init/init.sql
- - MP_DB_PW=/opt/mp-pw/dbpassword
- - MP_PW_DEF=/opt/mp-pw/keystorepw
- volumes:
- - db_init:/opt/db-init
- - mp_pw:/opt/mp-pw
-
midpoint_data:
- image: postgres:13-alpine
- command: >
- bash -c "
- rm -f /var/lib/postgresql/data/postmaster.pid ;
- while [ ! -s /opt/mp-pw/dbpassword -o -e /opt/mp-pw/init_in_progress ] ; do
- echo 'Waiting to the end of the init process...';
- sleep 1;
- done ;
- {
- sleep 2 ;
- if [ ! -e /opt/mp-pw/db_init -a -e /opt/mp-pw/db_init_in_progress ] ;
- then echo 'DB init did not start...' ;
- rm -f /opt/mp-pw/db_ini*;
- echo 'The lock files has been removed...';
- fi ;
- } &
- docker-entrypoint.sh postgres
- "
- user: "70:70"
+ image: postgres:16-alpine
depends_on:
- - data_init
+ prereq:
+ condition: service_completed_successfully
environment:
- - POSTGRES_PASSWORD_FILE=/opt/mp-pw/dbpassword
+ - POSTGRES_PASSWORD_FILE=/mnt/shared_pw/db_pass
- POSTGRES_USER=midpoint
- POSTGRES_INITDB_ARGS=--lc-collate=en_US.utf8 --lc-ctype=en_US.utf8
- ports:
- - 5432:5432
+ healthcheck:
+ test: [ "CMD-SHELL", "pg_isready -d midpoint -U midpoint" ]
+ interval: 1s
+ timeout: 5s
+ retries: 10
networks:
- net
volumes:
- midpoint_data:/var/lib/postgresql/data
- - db_init:/docker-entrypoint-initdb.d/
- - mp_pw:/opt/mp-pw
+ - shared_pw:/mnt/shared_pw
+
+ data_init:
+ image: evolveum/midpoint:${MP_VER:-4.8.3}-rockylinux
+ depends_on:
+ prereq:
+ condition: service_completed_successfully
+ midpoint_data:
+ condition: service_healthy
+ command: >
+ bash -c "
+ cd /opt/midpoint ;
+ bin/midpoint.sh init-native ;
+ echo ' - - - - - - ' ;
+ bin/ninja.sh -B info >/dev/null 2>/tmp/ninja.log ;
+ grep -q \"ERROR\" /tmp/ninja.log && (
+ bin/ninja.sh run-sql --create --mode REPOSITORY ;
+ bin/ninja.sh run-sql --create --mode AUDIT ;
+ tar -cC /opt/midpoint-init . | tar -xvC /opt/midpoint/var ;
+ ) ||
+ echo -e '\\n Repository init is not needed...' ;
+ if [ $$(keytool -list -keystore /opt/midpoint/var/keystore.jceks -storetype jceks -storepass:file /opt/midpoint/var/keystorepw | grep -c 'local_gen_cert') -eq 0 ] ;
+ then
+ keytool -importcert -keystore /opt/midpoint/var/keystore.jceks -storetype jceks -storepass:file /opt/midpoint/var/keystorepw -trustcacerts -alias 'local_gen_cert' -file /opt/midpoint/var/cert.pem -noprompt ;
+ else
+ echo 'Certificate exists in the cert store' ;
+ fi ;
+ "
+ environment:
+ - MP_SET_midpoint_repository_jdbcUsername=midpoint
+ - MP_SET_midpoint_repository_jdbcPassword_FILE=/mnt/shared_pw/db_pass
+ - MP_SET_midpoint_repository_jdbcUrl=jdbc:postgresql://midpoint_data:5432/midpoint
+ - MP_SET_midpoint_repository_database=postgresql
+ - MP_INIT_CFG=/opt/midpoint/var
+ - MP_PW_DEF=/opt/midpoint/var/keystorepw
+ - MP_KEYSTORE=/opt/midpoint/var/keystore.jceks
+ networks:
+ - net
+ volumes:
+ - midpoint_home:/opt/midpoint/var
+ - shared_pw:/mnt/shared_pw
+ - ./midpoint_server:/opt/midpoint-init:ro
midpoint_server:
- build:
- context: ./midpoint_server/
- args:
- tag: ${tag:-4.8.2}
+ image: evolveum/midpoint:${MP_VER:-4.8.3}-rockylinux
+ container_name: midpoint_server
+ hostname: midpoint-container
depends_on:
- - data_init
- - midpoint_data
+ data_init:
+ condition: service_completed_successfully
+ idp_vol_init:
+ condition: service_completed_successfully
+ midpoint_data:
+ condition: service_healthy
+ command: [ "/opt/midpoint/bin/midpoint.sh", "container" ]
ports:
- - 8443:443
+ - 8080:8080
environment:
- - ENV
- - USERTOKEN
- - MP_SET_midpoint_administrator_initialPassword=Password1
- MP_SET_midpoint_repository_jdbcUsername=midpoint
- - MP_SET_midpoint_repository_jdbcPassword_FILE=/opt/mp-pw/dbpassword
+ - MP_SET_midpoint_repository_jdbcPassword_FILE=/mnt/shared_pw/db_pass
- MP_SET_midpoint_repository_jdbcUrl=jdbc:postgresql://midpoint_data:5432/midpoint
- - MP_SET_midpoint_keystore_keyStorePassword_FILE=/opt/mp-pw/keystorepw
- - MP_SET_server_tomcat_ajp_enabled=true
- - MP_SET_server_tomcat_ajp_port=9090
- - MP_SET_server_tomcat_ajp_secret=s3cr3t
- - MP_SET_logging_path=/tmp/logtomcat
+ - MP_SET_midpoint_repository_database=postgresql
+ - MP_SET_midpoint_keystore_keyStorePassword_FILE=/opt/midpoint/var/keystorepw
+ - MP_SET_midpoint_administrator_initialPassword=Test5ecr3t
- MP_UNSET_midpoint_repository_hibernateHbm2ddl=1
- MP_NO_ENV_COMPAT=1
- - MP_MEM_MAX
- - MP_MEM_INIT
- - MP_JAVA_OPTS
- - TIER_BEACON_OPT_OUT
- - TIMEZONE
networks:
net:
aliases:
- midpoint-server
- secrets:
- - mp_host-key.pem
- - mp_shibboleth_sp_keys.jks
volumes:
- midpoint_home:/opt/midpoint/var
- - type: bind
- source: ./configs-and-secrets/midpoint/shibboleth/idp-metadata.xml
- target: /etc/shibboleth/idp-metadata.xml
- - type: bind
- source: ./configs-and-secrets/midpoint/httpd/host-cert.pem
- target: /etc/pki/tls/certs/host-cert.pem
- - type: bind
- source: ./configs-and-secrets/midpoint/httpd/host-cert.pem
- target: /etc/pki/tls/certs/cachain.pem
- - mp_pw:/opt/mp-pw
+ - shared_pw:/mnt/shared_pw
+
+ directory:
+ build: ./directory/
+ ports:
+ - 389:389
+ networks:
+ - net
+ healthcheck:
+ test: [ "CMD-SHELL", "cat > /dev/tcp/localhost/389" ]
+ interval: 30s
+ timeout: 5s
+ retries: 10
+ volumes:
+ - ldap:/var/lib/ldap
+
+ idp_vol_init:
+ image: tier/shib-idp:3.4.6_20191002
+ depends_on:
+ prereq:
+ condition: service_completed_successfully
+ ulimits:
+ nofile:
+ soft: 1024
+ hard: 2048
+ command: >
+ bash -c "
+ echo 'Updating configuration...' ;
+ if [ -e /mnt/shibboleth-diff/conf ] ;
+ then
+ cp -vu /mnt/shibboleth-diff/conf/* /opt/shibboleth-idp/conf ;
+ fi ;
+ if [ -e /mnt/shibboleth-diff/credentials ] ;
+ then
+ cp -vu /mnt/shibboleth-diff/credentials/* /opt/shibboleth-idp/credentials ;
+ fi ;
+ if [ -e /mnt/shibboleth-diff/metadata ] ;
+ then
+ cp -vu /mnt/shibboleth-diff/metadata/* /opt/shibboleth-idp/metadata ;
+ fi ;
+ echo ' - - - - - - -' ;
+ echo 'Updating idp-metadata.xml file...' ;
+ grep -n 'X509Certificate' /mnt/shibboleth-diff/metadata/idp-metadata.xml | sed \"s/\\([0-9]*\\).*/\\1/\" > /tmp/checkpoints ;
+ wc -l /mnt/shibboleth-diff/metadata/idp-metadata.xml | sed \"s/\\([0-9]*\\).*/\\1/\" >> /tmp/checkpoints ;
+ current_line=1 ;
+ id=0 ;
+ file_path=( - idp-backchannel.crt - idp-signing.crt - idp-encryption.crt - idp-backchannel.crt - idp-signing.crt - idp-encryption.crt - ) ;
+ rm /opt/shibboleth-idp/metadata/idp-metadata.xml ;
+ cat /tmp/checkpoints | while read line ; do
+ if [ \"$${file_path[$${id}]}\" == \"-\" ] ; then
+ sed -n \"$${current_line},$${line}p\" /mnt/shibboleth-diff/metadata/idp-metadata.xml >> /opt/shibboleth-idp/metadata/idp-metadata.xml ;
+ else
+ sed '1d;$$d' /opt/shibboleth-idp/credentials/$${file_path[$${id}]} >> /opt/shibboleth-idp/metadata/idp-metadata.xml ;
+ fi ;
+ current_line=$${line};
+ id=$$(( $${id} + 1 )) ;
+ done ;
+ cp -v /opt/shibboleth-idp/metadata/idp-metadata.xml /opt/midpoint/var/shibboleth/idp-metadata.xml ;
+ cp -v /opt/shibboleth-idp/metadata/idp-metadata.xml /opt/grouper/idp-metadata.xml ;
+ chown --reference=/opt/grouper /opt/grouper/idp-metadata.xml ;
+ echo ' - - - - - - -' ;
+ echo 'Updating midpoint-sp.xml...';
+ grep -n 'X509Certificate' /mnt/shibboleth-diff/metadata/midpoint-sp.xml | sed \"s/\\([0-9]*\\).*/\\1/\" > /tmp/checkpoints ;
+ wc -l /mnt/shibboleth-diff/metadata/midpoint-sp.xml | sed \"s/\\([0-9]*\\).*/\\1/\" >> /tmp/checkpoints ;
+ current_line=1 ;
+ id=0 ;
+ file_path=( - sp-signing-cert.pem - ) ;
+ rm /opt/shibboleth-idp/metadata/midpoint-sp.xml ;
+ cat /tmp/checkpoints | while read line ; do
+ if [ \"$${file_path[$${id}]}\" == \"-\" ] ; then
+ sed -n \"$${current_line},$${line}p\" /mnt/shibboleth-diff/metadata/midpoint-sp.xml >> /opt/shibboleth-idp/metadata/midpoint-sp.xml ;
+ else
+ sed '1d;$$d' /opt/shibboleth-idp/credentials/$${file_path[$${id}]} >> /opt/shibboleth-idp/metadata/midpoint-sp.xml ;
+ fi ;
+ current_line=$${line};
+ id=$$(( $${id} + 1 )) ;
+ done ;
+ sed -i \"s/\\([[:space:]]\\).*$$/\\1/g;s/^[[:space:]]\\(\\).*$$/\\1/g\" /opt/shibboleth-idp/metadata/midpoint-sp.xml ;
+ echo ' - - - - - - -' ;
+ echo 'Updating grouper-sp.xml...';
+ grep -n 'X509Certificate' /mnt/shibboleth-diff/metadata/grouper-sp.xml | sed \"s/\\([0-9]*\\).*/\\1/\" > /tmp/checkpoints ;
+ wc -l /mnt/shibboleth-diff/metadata/grouper-sp.xml | sed \"s/\\([0-9]*\\).*/\\1/\" >> /tmp/checkpoints ;
+ current_line=1 ;
+ id=0 ;
+ file_path=( - sp-cert.pem - sp-cert.pem - ) ;
+ rm /opt/shibboleth-idp/metadata/grouper-sp.xml ;
+ cat /tmp/checkpoints | while read line ; do
+ if [ \"$${file_path[$${id}]}\" == \"-\" ] ; then
+ sed -n \"$${current_line},$${line}p\" /mnt/shibboleth-diff/metadata/grouper-sp.xml >> /opt/shibboleth-idp/metadata/grouper-sp.xml ;
+ else
+ sed '1d;$$d' /opt/shibboleth-idp/credentials/$${file_path[$${id}]} >> /opt/shibboleth-idp/metadata/grouper-sp.xml ;
+ fi ;
+ current_line=$${line};
+ id=$$(( $${id} + 1 )) ;
+ done ;
+ sed -i \"s/\\([[:space:]]\\).*$$/\\1/g;s/^[[:space:]]\\(\\).*$$/\\1/g\" /opt/shibboleth-idp/metadata/grouper-sp.xml ;
+ echo ' - - - - - - -' ;
+ echo 'Generating sealer key...' ;
+ rm /opt/shibboleth-idp/credentials/sealer.* ;
+ /opt/shibboleth-idp/bin/rotateSealerKey.sh ;
+ echo ' - - - - - - -' ;
+ echo 'DONE.' ;
+ "
+ volumes:
+ - idp_conf:/opt/shibboleth-idp/conf
+ - idp_credentials:/opt/shibboleth-idp/credentials
+ - idp_metadata:/opt/shibboleth-idp/metadata
+ - ./shibboleth-idp:/mnt/shibboleth-diff:ro
+ - midpoint_home:/opt/midpoint/var
+ - ./configs-and-secrets/grouper/shibboleth:/opt/grouper
- idp:
- build: ./idp/
+ idp:
+ image: tier/shib-idp:3.4.6_20191002
depends_on:
- - directory
+ directory:
+ condition: service_started
+ idp_vol_init:
+ condition: service_completed_successfully
+ ulimits:
+ nofile:
+ soft: 1024
+ hard: 2048
environment:
- JETTY_MAX_HEAP=64m
- JETTY_BROWSER_SSL_KEYSTORE_PASSWORD=password
- JETTY_BACKCHANNEL_SSL_KEYSTORE_PASSWORD=password
networks:
- net
+ volumes:
+ - idp_conf:/opt/shibboleth-idp/conf
+ - idp_credentials:/opt/shibboleth-idp/credentials
+ - idp_metadata:/opt/shibboleth-idp/metadata
+ - idp_certs:/opt/certs
+
+ beacon:
+ build: ./beacon/
+ networks:
+ - net
+ environment:
+ - TIER_RELEASE=not-released-yet
+ - TIER_MAINTAINER=tier
+ - MP_VERSION=4.8
+ - TIER_BEACON_OPT_OUT=true
+
+ proxy:
+ image: nginx:stable
+ depends_on:
+ prereq:
+ condition: service_completed_successfully
+ midpoint_server:
+ condition: service_started
+ idp:
+ condition: service_started
ports:
+ - 8180:80
- 443:443
+ networks:
+ - net
+ volumes:
+ - proxy_conf:/etc/nginx/conf.d
+ - proxy_cert:/etc/nginx/certs
mq:
build: ./mq/
environment:
- RABBITMQ_NODENAME=docker-rabbit
hostname: rabbitmq
+ ulimits:
+ nofile:
+ soft: 1024
+ hard: 2048
networks:
- net
ports:
@@ -300,39 +603,36 @@ services:
- mq:/var/lib/rabbitmq
networks:
- net:
+ net:
driver: bridge
secrets:
# grouper
- g_host-key.pem:
- file: ./configs-and-secrets/grouper/httpd/host-key.pem
- g_sp-key.pem:
- file: ./configs-and-secrets/grouper/shibboleth/sp-key.pem
+# g_host-key.pem:
+# file: ./configs-and-secrets/grouper/httpd/host-key.pem
+# g_sp-key.pem:
+# file: ./configs-and-secrets/grouper/shibboleth/sp-key.pem
g_database_password.txt:
file: ./configs-and-secrets/grouper/application/database_password.txt
- rabbitmq_password.txt:
- file: ./configs-and-secrets/grouper/application/rabbitmq_password.txt
- grouper.hibernate.properties:
- file: ./configs-and-secrets/grouper/application/grouper.hibernate.properties
- grouper-loader.properties:
- file: ./configs-and-secrets/grouper/application/grouper-loader.properties
- subject.properties:
- file: ./configs-and-secrets/grouper/application/subject.properties
-# midPoint
- mp_host-key.pem:
- file: ./configs-and-secrets/midpoint/httpd/host-key.pem
- mp_shibboleth_sp_keys.jks:
- file: ./configs-and-secrets/midpoint/shibboleth/shibboleth_sp_keys.jks
-
+# rabbitmq_password.txt:
+# file: ./configs-and-secrets/grouper/application/rabbitmq_password.txt
+
volumes:
+ security_object:
+ midpoint_data:
+ midpoint_home:
+ idp_conf:
+ idp_credentials:
+ idp_metadata:
+ idp_certs:
+ proxy_conf:
+ proxy_cert:
+ ldap:
+ shared_pw:
grouper_data:
source_data:
source_mysql:
target_data:
- ldap:
- db_init:
- mp_pw:
- midpoint_data:
- midpoint_home:
mq:
+ grouper-external_data:
+
diff --git a/demo/grouper/get-import-sis-persons-status.sh b/demo/grouper/get-import-sis-persons-status.sh
deleted file mode 100755
index 26d3fcd..0000000
--- a/demo/grouper/get-import-sis-persons-status.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/bash
-
-source ../../library.bash
-
-get_task_execution_status "Import from SIS persons"
diff --git a/demo/grouper/grouper_daemon/Dockerfile b/demo/grouper/grouper_daemon/Dockerfile
deleted file mode 100644
index b1ade52..0000000
--- a/demo/grouper/grouper_daemon/Dockerfile
+++ /dev/null
@@ -1,9 +0,0 @@
-FROM tier/grouper:2.4.0-a47-u25-w5-p6-20190611
-
-LABEL author="tier-packaging@internet2.edu "
-
-# Update this Shib yum repo
-COPY container_files/shibboleth/shibboleth.repo /etc/yum.repos.d/
-
-COPY container_files/tmp/* /tmp/
-COPY container_files/usr-local-bin/* /usr/local/bin/
diff --git a/demo/grouper/grouper_daemon/container_files/shibboleth/shibboleth.repo b/demo/grouper/grouper_daemon/container_files/shibboleth/shibboleth.repo
deleted file mode 100644
index dabe005..0000000
--- a/demo/grouper/grouper_daemon/container_files/shibboleth/shibboleth.repo
+++ /dev/null
@@ -1,9 +0,0 @@
-[shibboleth]
-name=Shibboleth (CentOS_7)
-# Please report any problems to https://shibboleth.atlassian.net/jira
-type=rpm-md
-mirrorlist=https://shibboleth.net/cgi-bin/mirrorlist.cgi/CentOS_7
-gpgcheck=1
-gpgkey=https://shibboleth.net/downloads/service-provider/RPMS/repomd.xml.key
- https://shibboleth.net/downloads/service-provider/RPMS/cantor.repomd.xml.key
-enabled=1
diff --git a/demo/grouper/grouper_daemon/container_files/tmp/initialize.gsh b/demo/grouper/grouper_daemon/container_files/tmp/initialize.gsh
deleted file mode 100644
index 67ebc1a..0000000
--- a/demo/grouper/grouper_daemon/container_files/tmp/initialize.gsh
+++ /dev/null
@@ -1,33 +0,0 @@
-System.out.println("************** initialize.gsh starting...")
-
-gs = GrouperSession.startRootSession()
-
-addStem("", "app", "app")
-addStem("", "basis", "basis")
-addStem("", "bundle", "bundle")
-addStem("", "org", "org")
-addStem("", "test", "test")
-
-addRootStem("ref", "ref")
-addStem("ref", "course", "course")
-addStem("ref", "affiliation", "affiliation")
-
-group = GroupFinder.findByName(gs, "etc:sysadmingroup", true)
-group.getAttributeDelegate().assignAttribute(LoaderLdapUtils.grouperLoaderLdapAttributeDefName()).getAttributeAssign()
-attributeAssign = group.getAttributeDelegate().retrieveAssignment(null, LoaderLdapUtils.grouperLoaderLdapAttributeDefName(), false, true)
-attributeAssign.getAttributeValueDelegate().assignValue(LoaderLdapUtils.grouperLoaderLdapQuartzCronName(), "0 * * * * ?")
-attributeAssign.getAttributeValueDelegate().assignValue(LoaderLdapUtils.grouperLoaderLdapTypeName(), "LDAP_SIMPLE")
-attributeAssign.getAttributeValueDelegate().assignValue(LoaderLdapUtils.grouperLoaderLdapFilterName(), "(cn=sysadmingroup)")
-attributeAssign.getAttributeValueDelegate().assignValue(LoaderLdapUtils.grouperLoaderLdapSearchDnName(), "ou=midpoint,ou=Groups")
-attributeAssign.getAttributeValueDelegate().assignValue(LoaderLdapUtils.grouperLoaderLdapServerIdName(), "demo")
-attributeAssign.getAttributeValueDelegate().assignValue(LoaderLdapUtils.grouperLoaderLdapSourceIdName(), "ldap")
-attributeAssign.getAttributeValueDelegate().assignValue(LoaderLdapUtils.grouperLoaderLdapSubjectExpressionName(), '${loaderLdapElUtils.convertDnToSpecificValue(subjectId)}')
-attributeAssign.getAttributeValueDelegate().assignValue(LoaderLdapUtils.grouperLoaderLdapSubjectAttributeName(), "uniqueMember")
-attributeAssign.getAttributeValueDelegate().assignValue(LoaderLdapUtils.grouperLoaderLdapSubjectIdTypeName(), "subjectId")
-
-chess = new GroupSave(gs).assignName("app:mailinglist:chess").assignCreateParentStemsIfNotExist(true).save()
-idmfans = new GroupSave(gs).assignName("app:mailinglist:idm-fans").assignCreateParentStemsIfNotExist(true).save()
-cs = new GroupSave(gs).assignName("app:cs").assignCreateParentStemsIfNotExist(true).save()
-volunteers = new GroupSave(gs).assignName("test:volunteers").assignCreateParentStemsIfNotExist(true).save()
-
-System.out.println("************** initialize.gsh done.")
diff --git a/demo/grouper/grouper_daemon/container_files/usr-local-bin/startup.sh b/demo/grouper/grouper_daemon/container_files/usr-local-bin/startup.sh
deleted file mode 100755
index 5f2a302..0000000
--- a/demo/grouper/grouper_daemon/container_files/usr-local-bin/startup.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/bash
-
-if [[ -e /tmp/initialize.gsh ]]
-then
- echo Executing /tmp/initialize.gsh on the first start
- /opt/grouper/grouper.apiBinary/bin/gsh /tmp/initialize.gsh
- rm /tmp/initialize.gsh
-else
- echo Skipping execution of /tmp/initialize.gsh as it is not present
-fi
-
-daemon
diff --git a/demo/grouper/grouper_data/Dockerfile b/demo/grouper/grouper_data/Dockerfile
deleted file mode 100644
index 9026486..0000000
--- a/demo/grouper/grouper_data/Dockerfile
+++ /dev/null
@@ -1,41 +0,0 @@
-FROM tier/grouper:2.4.0-a47-u25-w5-p6-20190611
-
-LABEL author="tier-packaging@internet2.edu "
-
-# Update this Shib yum repo
-COPY container_files/shibboleth/shibboleth.repo /etc/yum.repos.d/
-
-RUN yum-config-manager --save --setopt=security_shibboleth.skip_if_unavailable=true \
- && yum install -y epel-release \
- && yum update -y \
- && yum install -y mariadb-server mariadb \
- && yum clean all \
- && rm -rf /var/cache/yum
-
-COPY container_files/conf/ /opt/grouper/grouper.apiBinary/conf/
-COPY container_files/mysql/max_connections.cnf /etc/my.cnf.d/max_connections.cnf
-
-RUN ln -s /usr/bin/resolveip /usr/libexec/resolveip
-
-RUN mysql_install_db \
- && chown -R mysql:mysql /var/lib/mysql/ \
- && sed -i 's/^\(bind-address\s.*\)/# \1/' /etc/my.cnf \
- && sed -i 's/^\(log_error\s.*\)/# \1/' /etc/my.cnf \
- && sed -i 's/\[mysqld\]/\[mysqld\]\ncharacter_set_server = utf8/' /etc/my.cnf \
- && sed -i 's/\[mysqld\]/\[mysqld\]\ncollation_server = utf8_general_ci/' /etc/my.cnf \
- && sed -i 's/\[mysqld\]/\[mysqld\]\nport = 3306/' /etc/my.cnf \
- && cat /etc/my.cnf \
- && echo "/usr/bin/mysqld_safe &" > /tmp/config \
- && echo "mysqladmin --silent --wait=30 ping || exit 1" >> /tmp/config \
- && echo "mysql -e 'GRANT ALL PRIVILEGES ON *.* TO \"root\"@\"%\" WITH GRANT OPTION;'" >> /tmp/config \
- && echo "mysql -e 'CREATE DATABASE grouper CHARACTER SET utf8 COLLATE utf8_bin;'" >> /tmp/config \
- && bash /tmp/config \
- && rm -f /tmp/config
-
-RUN (mysqld_safe & ) \
- && while ! curl -s localhost:3306 > /dev/null; do echo waiting for mysqld to start; sleep 1; done; \
- bin/gsh -registry -check -runscript -noprompt
-
-EXPOSE 3306
-
-CMD mysqld_safe
diff --git a/demo/grouper/grouper_data/container_files/mysql/max_connections.cnf b/demo/grouper/grouper_data/container_files/mysql/max_connections.cnf
deleted file mode 100644
index 41002ed..0000000
--- a/demo/grouper/grouper_data/container_files/mysql/max_connections.cnf
+++ /dev/null
@@ -1,2 +0,0 @@
-[mysqld]
-max_connections=5000
diff --git a/demo/grouper/grouper_data/container_files/shibboleth/shibboleth.repo b/demo/grouper/grouper_data/container_files/shibboleth/shibboleth.repo
deleted file mode 100644
index dabe005..0000000
--- a/demo/grouper/grouper_data/container_files/shibboleth/shibboleth.repo
+++ /dev/null
@@ -1,9 +0,0 @@
-[shibboleth]
-name=Shibboleth (CentOS_7)
-# Please report any problems to https://shibboleth.atlassian.net/jira
-type=rpm-md
-mirrorlist=https://shibboleth.net/cgi-bin/mirrorlist.cgi/CentOS_7
-gpgcheck=1
-gpgkey=https://shibboleth.net/downloads/service-provider/RPMS/repomd.xml.key
- https://shibboleth.net/downloads/service-provider/RPMS/cantor.repomd.xml.key
-enabled=1
diff --git a/demo/grouper/grouper_data_init/bootstrap/initialize.gsh b/demo/grouper/grouper_data_init/bootstrap/initialize.gsh
new file mode 100644
index 0000000..eacf873
--- /dev/null
+++ b/demo/grouper/grouper_data_init/bootstrap/initialize.gsh
@@ -0,0 +1,98 @@
+System.out.println("************** initialize.gsh starting...")
+
+gs = GrouperSession.startRootSession()
+
+addStem("", "app", "app")
+addStem("", "basis", "basis")
+addStem("", "bundle", "bundle")
+addStem("", "org", "org")
+addStem("", "test", "test")
+
+addRootStem("ref", "ref")
+addStem("ref", "course", "Course")
+addStem("ref", "dept", "Department")
+addStem("ref", "affiliation", "Affiliation")
+
+new GroupSave().assignName("ref:affiliation:alum").assignDisplayName("Alumni").assignCreateParentStemsIfNotExist(true).save();
+new GroupSave().assignName("ref:affiliation:community").assignDisplayName("Community").assignCreateParentStemsIfNotExist(true).save();
+new GroupSave().assignName("ref:affiliation:faculty").assignDisplayName("Faculty").assignCreateParentStemsIfNotExist(true).save();
+new GroupSave().assignName("ref:affiliation:member").assignDisplayName("Member").assignCreateParentStemsIfNotExist(true).save();
+new GroupSave().assignName("ref:affiliation:staff").assignDisplayName("Staff").assignCreateParentStemsIfNotExist(true).save();
+new GroupSave().assignName("ref:affiliation:student").assignDisplayName("Student").assignCreateParentStemsIfNotExist(true).save();
+
+group = GroupFinder.findByName(gs, "etc:sysadmingroup", true)
+group.getAttributeDelegate().assignAttribute(LoaderLdapUtils.grouperLoaderLdapAttributeDefName()).getAttributeAssign()
+attributeAssign = group.getAttributeDelegate().retrieveAssignment(null, LoaderLdapUtils.grouperLoaderLdapAttributeDefName(), false, true)
+attributeAssign.getAttributeValueDelegate().assignValue(LoaderLdapUtils.grouperLoaderLdapQuartzCronName(), "0 * * * * ?")
+attributeAssign.getAttributeValueDelegate().assignValue(LoaderLdapUtils.grouperLoaderLdapTypeName(), "LDAP_SIMPLE")
+attributeAssign.getAttributeValueDelegate().assignValue(LoaderLdapUtils.grouperLoaderLdapFilterName(), "(cn=sysadmingroup)")
+attributeAssign.getAttributeValueDelegate().assignValue(LoaderLdapUtils.grouperLoaderLdapSearchDnName(), "ou=midpoint,ou=Groups")
+attributeAssign.getAttributeValueDelegate().assignValue(LoaderLdapUtils.grouperLoaderLdapServerIdName(), "demo")
+attributeAssign.getAttributeValueDelegate().assignValue(LoaderLdapUtils.grouperLoaderLdapSourceIdName(), "ldap")
+attributeAssign.getAttributeValueDelegate().assignValue(LoaderLdapUtils.grouperLoaderLdapSubjectExpressionName(), '${loaderLdapElUtils.convertDnToSpecificValue(subjectId)}')
+attributeAssign.getAttributeValueDelegate().assignValue(LoaderLdapUtils.grouperLoaderLdapSubjectAttributeName(), "uniqueMember")
+attributeAssign.getAttributeValueDelegate().assignValue(LoaderLdapUtils.grouperLoaderLdapSubjectIdTypeName(), "subjectId")
+
+admins = new GroupSave(gs).assignName("app:wordpress:admins").assignCreateParentStemsIfNotExist(true).save()
+editors = new GroupSave(gs).assignName("app:wordpress:editors").assignCreateParentStemsIfNotExist(true).save()
+chess = new GroupSave(gs).assignName("app:mailinglist:chess").assignCreateParentStemsIfNotExist(true).save()
+idmfans = new GroupSave(gs).assignName("app:mailinglist:idm-fans").assignCreateParentStemsIfNotExist(true).save()
+cs = new GroupSave(gs).assignName("app:cs").assignCreateParentStemsIfNotExist(true).save()
+volunteers = new GroupSave(gs).assignName("test:volunteers").assignCreateParentStemsIfNotExist(true).save()
+
+
+group = new GroupSave(gs).assignName("etc:affiliationLoader").assignCreateParentStemsIfNotExist(true).save()
+group.addType(GroupTypeFinder.find("grouperLoader"))
+group.setAttribute("grouperLoaderDbName", "sis")
+group.setAttribute("grouperLoaderType", "SQL_GROUP_LIST")
+group.setAttribute("grouperLoaderScheduleType", "CRON")
+group.setAttribute("grouperLoaderQuartzCron", "0 * * * * ?")
+group.setAttribute("grouperLoaderDbName", "sis")
+group.setAttribute("grouperLoaderGroupTypes", "addIncludeExclude")
+group.setAttribute("grouperLoaderQuery", "SELECT concat('ref:affiliation:',affiliation,'_systemOfRecord') as GROUP_NAME, uid as SUBJECT_IDENTIFIER, 'ldap' as SUBJECT_SOURCE_ID from SIS_AFFILIATIONS")
+
+group = new GroupSave(gs).assignName("etc:deptLoader").assignCreateParentStemsIfNotExist(true).save()
+group.addType(GroupTypeFinder.find("grouperLoader"))
+group.setAttribute("grouperLoaderDbName", "sis")
+group.setAttribute("grouperLoaderType", "SQL_GROUP_LIST")
+group.setAttribute("grouperLoaderScheduleType", "CRON")
+group.setAttribute("grouperLoaderQuartzCron", "0 * * * * ?")
+group.setAttribute("grouperLoaderDbName", "sis")
+group.setAttribute("grouperLoaderQuery", "SELECT concat('ref:dept:',department) as GROUP_NAME, uid as SUBJECT_IDENTIFIER, 'ldap' as SUBJECT_SOURCE_ID from SIS_PERSONS where department is not null")
+
+group = new GroupSave(gs).assignName("etc:coursesLoader").assignCreateParentStemsIfNotExist(true).save()
+group.addType(GroupTypeFinder.find("grouperLoader"))
+group.setAttribute("grouperLoaderDbName", "sis")
+group.setAttribute("grouperLoaderType", "SQL_GROUP_LIST")
+group.setAttribute("grouperLoaderScheduleType", "CRON")
+group.setAttribute("grouperLoaderQuartzCron", "0 * * * * ?")
+group.setAttribute("grouperLoaderDbName", "sis")
+group.setAttribute("grouperLoaderQuery", "SELECT concat('ref:course:',courseId) as GROUP_NAME, uid as SUBJECT_IDENTIFIER, 'ldap' as SUBJECT_SOURCE_ID from SIS_COURSES")
+
+edu.internet2.middleware.grouper.app.loader.GrouperLoaderType.scheduleLoads()
+
+
+
+def addGroups(gs,stem,owner,regexp) {
+ for (group in stem.childGroups) {
+ if (!group.name.endsWith('_includes') &&
+ !group.name.endsWith('_excludes') &&
+ !group.name.endsWith('_systemOfRecord') &&
+ !group.name.endsWith('_systemOfRecordAndIncludes') &&
+ (regexp == null || group.extension ==~ regexp)) {
+ println 'Adding: ' + group
+ def s = SubjectFinder.findById(group.getId(), 'group', 'g:gsa')
+ owner.addMember(s, false)
+ } else {
+ println 'Ignoring: ' + group
+ }
+ }
+}
+
+def cs = GroupFinder.findByName(gs, "app:cs", true)
+
+gs = GrouperSession.startRootSession()
+addGroups(gs, StemFinder.findByName(gs, 'ref:course'), cs, /CS.*/)
+
+System.out.println("************** initialize.gsh done.")
+
diff --git a/demo/grouper/grouper_data_init/bootstrap/set-prov.gsh b/demo/grouper/grouper_data_init/bootstrap/set-prov.gsh
new file mode 100644
index 0000000..e142afe
--- /dev/null
+++ b/demo/grouper/grouper_data_init/bootstrap/set-prov.gsh
@@ -0,0 +1,52 @@
+
+provisioner_name="midPoint";
+GrouperSession grouperSession = GrouperSession.startRootSession();
+
+def setProvOnStem(grouperSession,provisioner_name,folder_name) {
+ AttributeAssign attributeAssignMarker = null;
+ attributeAssignMarker = new AttributeAssignSave(grouperSession).assignOwnerStemName(folder_name).assignNameOfAttributeDefName("etc:provisioning:provisioningMarker").save();
+ new AttributeAssignSave(grouperSession).assignOwnerAttributeAssign(attributeAssignMarker).assignNameOfAttributeDefName("etc:provisioning:provisioningDirectAssign").addValue("true").save();
+ new AttributeAssignSave(grouperSession).assignOwnerAttributeAssign(attributeAssignMarker).assignNameOfAttributeDefName("etc:provisioning:provisioningDoProvision").addValue(provisioner_name).save();
+ new AttributeAssignSave(grouperSession).assignOwnerAttributeAssign(attributeAssignMarker).assignNameOfAttributeDefName("etc:provisioning:provisioningStemScope").addValue("sub").save();
+ new AttributeAssignSave(grouperSession).assignOwnerAttributeAssign(attributeAssignMarker).assignNameOfAttributeDefName("etc:provisioning:provisioningTarget").addValue(provisioner_name).save();
+ new AttributeAssignSave(grouperSession).assignOwnerAttributeAssign(attributeAssignMarker).assignNameOfAttributeDefName("etc:provisioning:provisioningMetadataJson").addValue("{\"destination\":\"midpoint\",\"actor\":\"initial load\"}").save();
+
+}
+
+def setProvOnGroup(grouperSession,provisioner_name,group_name) {
+ AttributeAssign attributeAssignMarker = null;
+ attributeAssignMarker = new AttributeAssignSave(grouperSession).assignOwnerGroupName(group_name).assignNameOfAttributeDefName("etc:provisioning:provisioningMarker").save();
+ new AttributeAssignSave(grouperSession).assignOwnerAttributeAssign(attributeAssignMarker).assignNameOfAttributeDefName("etc:provisioning:provisioningDirectAssign").addValue("true").save();
+ new AttributeAssignSave(grouperSession).assignOwnerAttributeAssign(attributeAssignMarker).assignNameOfAttributeDefName("etc:provisioning:provisioningDoProvision").addValue(provisioner_name).save();
+ new AttributeAssignSave(grouperSession).assignOwnerAttributeAssign(attributeAssignMarker).assignNameOfAttributeDefName("etc:provisioning:provisioningStemScope").addValue("sub").save();
+ new AttributeAssignSave(grouperSession).assignOwnerAttributeAssign(attributeAssignMarker).assignNameOfAttributeDefName("etc:provisioning:provisioningTarget").addValue(provisioner_name).save();
+ new AttributeAssignSave(grouperSession).assignOwnerAttributeAssign(attributeAssignMarker).assignNameOfAttributeDefName("etc:provisioning:provisioningMetadataJson").addValue("{\"destination\":\"midpoint\",\"actor\":\"initial load\"}").save();
+
+}
+
+def setProvOnGroupWithMailListAttr(grouperSession,provisioner_name,group_name,email_list_name) {
+ AttributeAssign attributeAssignMarker = null;
+ attributeAssignMarker = new AttributeAssignSave(grouperSession).assignOwnerGroupName(group_name).assignNameOfAttributeDefName("etc:provisioning:provisioningMarker").save();
+ new AttributeAssignSave(grouperSession).assignOwnerAttributeAssign(attributeAssignMarker).assignNameOfAttributeDefName("etc:provisioning:provisioningDirectAssign").addValue("true").save();
+ new AttributeAssignSave(grouperSession).assignOwnerAttributeAssign(attributeAssignMarker).assignNameOfAttributeDefName("etc:provisioning:provisioningDoProvision").addValue(provisioner_name).save();
+ new AttributeAssignSave(grouperSession).assignOwnerAttributeAssign(attributeAssignMarker).assignNameOfAttributeDefName("etc:provisioning:provisioningStemScope").addValue("sub").save();
+ new AttributeAssignSave(grouperSession).assignOwnerAttributeAssign(attributeAssignMarker).assignNameOfAttributeDefName("etc:provisioning:provisioningTarget").addValue(provisioner_name).save();
+ new AttributeAssignSave(grouperSession).assignOwnerAttributeAssign(attributeAssignMarker).assignNameOfAttributeDefName("etc:provisioning:provisioningMetadataJson").addValue("{\"destination\":\"midpoint\",\"actor\":\"initial load\"}").save();
+ new AttributeAssignSave(grouperSession).assignOwnerAttributeAssign(attributeAssignMarker).assignNameOfAttributeDefName("etc:provisioning:provisioningMetadataJson").addValue("{\"md_grouper_emailListName\":\"" + email_list_name + "\"}").save();
+
+}
+
+
+setProvOnStem(grouperSession,provisioner_name,"app")
+setProvOnGroupWithMailListAttr(grouperSession,provisioner_name,"app:mailinglist:chess","chessclub@example.edu")
+setProvOnGroupWithMailListAttr(grouperSession,provisioner_name,"app:mailinglist:idm-fans","idmfans@example.edu")
+setProvOnStem(grouperSession,provisioner_name,"test")
+setProvOnStem(grouperSession,provisioner_name,"ref:dept")
+setProvOnStem(grouperSession,provisioner_name,"ref:course")
+setProvOnGroup(grouperSession,provisioner_name,"ref:affiliation:alum")
+setProvOnGroup(grouperSession,provisioner_name,"ref:affiliation:community")
+setProvOnGroup(grouperSession,provisioner_name,"ref:affiliation:faculty")
+setProvOnGroup(grouperSession,provisioner_name,"ref:affiliation:member")
+setProvOnGroup(grouperSession,provisioner_name,"ref:affiliation:staff")
+setProvOnGroup(grouperSession,provisioner_name,"ref:affiliation:student")
+
diff --git a/demo/grouper/grouper_data/container_files/conf/grouper.hibernate.properties b/demo/grouper/grouper_data_init/conf/grouper.hibernate.properties
similarity index 85%
rename from demo/grouper/grouper_data/container_files/conf/grouper.hibernate.properties
rename to demo/grouper/grouper_data_init/conf/grouper.hibernate.properties
index 154b8eb..bfac95a 100644
--- a/demo/grouper/grouper_data/container_files/conf/grouper.hibernate.properties
+++ b/demo/grouper/grouper_data_init/conf/grouper.hibernate.properties
@@ -20,10 +20,13 @@
# e.g. hsqldb (b): jdbc:hsqldb:hsql://localhost:9001/grouper
# e.g. postgres: jdbc:postgresql://localhost:5432/database
# e.g. mssql: jdbc:sqlserver://localhost:3280;databaseName=grouper
-hibernate.connection.url = jdbc:mysql://localhost:3306/grouper?CharSet=utf8&useUnicode=true&characterEncoding=utf8
+hibernate.connection.url = jdbc:postgresql://grouper_data:5432/grouper
-hibernate.connection.username = root
+hibernate.connection.username = grouper
# If you are using an empty password, depending upon your version of
# Java and Ant you may need to specify a password of "".
# Note: you can keep passwords external and encrypted: https://bugs.internet2.edu/jira/browse/GRP-122
-hibernate.connection.password =
+hibernate.connection.password = password
+registry.auto.ddl.upToVersion = 4.*.*
+hibernate.c3p0.max_size = 200
+
diff --git a/demo/grouper/grouper_data/container_files/conf/grouper.properties b/demo/grouper/grouper_data_init/conf/grouper.properties
similarity index 100%
rename from demo/grouper/grouper_data/container_files/conf/grouper.properties
rename to demo/grouper/grouper_data_init/conf/grouper.properties
diff --git a/demo/grouper/grouper_data_init/sql/010_createSQLuser.sql b/demo/grouper/grouper_data_init/sql/010_createSQLuser.sql
new file mode 100644
index 0000000..9e6bd40
--- /dev/null
+++ b/demo/grouper/grouper_data_init/sql/010_createSQLuser.sql
@@ -0,0 +1,6 @@
+ALTER system SET max_connections=250;
+ALTER system SET shared_buffers='180MB';
+CREATE USER grouper PASSWORD 'password';
+CREATE DATABASE grouper;
+GRANT ALL PRIVILEGES ON DATABASE grouper TO grouper;
+ALTER DATABASE grouper OWNER TO grouper;
diff --git a/demo/grouper/grouper_data_init/sql/015_createDBforMP.sql b/demo/grouper/grouper_data_init/sql/015_createDBforMP.sql
new file mode 100644
index 0000000..471d523
--- /dev/null
+++ b/demo/grouper/grouper_data_init/sql/015_createDBforMP.sql
@@ -0,0 +1,3 @@
+CREATE DATABASE grouper_to_midpoint;
+GRANT ALL PRIVILEGES ON DATABASE grouper_to_midpoint TO grouper;
+ALTER DATABASE grouper_to_midpoint OWNER TO grouper;
diff --git a/demo/grouper/grouper_data_init/sql/020_createDBforMP.sh b/demo/grouper/grouper_data_init/sql/020_createDBforMP.sh
new file mode 100644
index 0000000..db8403b
--- /dev/null
+++ b/demo/grouper/grouper_data_init/sql/020_createDBforMP.sh
@@ -0,0 +1,97 @@
+#!/bin/bash
+set -e
+
+psql -v ON_ERROR_STOP=1 --username "grouper" --dbname "grouper_to_midpoint" <<-EOSQL
+CREATE TABLE gr_mp_groups (
+ group_name varchar(1024) NULL, -- Name of group mapped in some way
+ id_index int8 NOT NULL, -- This is the integer identifier for a group and foreign key to group attributes and memberships
+ display_name varchar(1024) NULL, -- Display name of group mapped in some way
+ description varchar(1024) NULL, -- Description of group mapped in some way
+ last_modified int8 NOT NULL, -- Millis since 1970, will be sequential and unique
+ deleted varchar(1) NOT NULL, -- T or F. Deleted rows will be removed after they have had time to be processed
+ CONSTRAINT gr_mp_groups_pkey PRIMARY KEY (id_index)
+);
+CREATE INDEX gr_mp_groups_ddx ON gr_mp_groups(display_name);
+CREATE INDEX gr_mp_groups_gdx ON gr_mp_groups(group_name);
+CREATE UNIQUE INDEX gr_mp_groups_idx ON gr_mp_groups(id_index);
+CREATE UNIQUE INDEX gr_mp_groups_ldx ON gr_mp_groups(last_modified);
+COMMENT ON TABLE gr_mp_groups IS 'This table holds groups';
+
+COMMENT ON COLUMN gr_mp_groups.group_name IS 'Name of group mapped in some way';
+COMMENT ON COLUMN gr_mp_groups.id_index IS 'This is the integer identifier for a group and foreign key to group attributes and memberships';
+COMMENT ON COLUMN gr_mp_groups.display_name IS 'Display name of group mapped in some way';
+COMMENT ON COLUMN gr_mp_groups.description IS 'Description of group mapped in some way';
+COMMENT ON COLUMN gr_mp_groups.last_modified IS 'Millis since 1970, will be sequential and unique';
+COMMENT ON COLUMN gr_mp_groups.deleted IS 'T or F. Deleted rows will be removed after they have had time to be processed';
+
+CREATE TABLE gr_mp_subjects (
+ subject_id_index int8 NOT NULL, -- This is the integer identifier for a subject and foreign key to subject attributes and memberships
+ subject_id varchar(1024) NULL, -- Subject ID mapped in some way
+ last_modified int8 NOT NULL, -- Millis since 1970, will be sequential and unique
+ deleted varchar(1) NOT NULL, -- T or F. Deleted rows will be removed after they have had time to be processed
+ CONSTRAINT gr_mp_subjects_pkey PRIMARY KEY (subject_id_index)
+);
+CREATE UNIQUE INDEX gr_mp_subjects_idx ON gr_mp_subjects(subject_id_index);
+CREATE UNIQUE INDEX gr_mp_subjects_ldx ON gr_mp_subjects(last_modified);
+CREATE INDEX gr_mp_subjects_sdx ON gr_mp_subjects(subject_id);
+COMMENT ON TABLE gr_mp_subjects IS 'This table holds subjects';
+
+COMMENT ON COLUMN gr_mp_subjects.subject_id_index IS 'This is the integer identifier for a subject and foreign key to subject attributes and memberships';
+COMMENT ON COLUMN gr_mp_subjects.subject_id IS 'Subject ID mapped in some way';
+COMMENT ON COLUMN gr_mp_subjects.last_modified IS 'Millis since 1970, will be sequential and unique';
+COMMENT ON COLUMN gr_mp_subjects.deleted IS 'T or F. Deleted rows will be removed after they have had time to be processed';
+
+CREATE TABLE gr_mp_group_attributes (
+ group_id_index int8 NOT NULL, -- This is the integer identifier for a group and foreign key to groups and memberships
+ attribute_name varchar(1000) NOT NULL, -- Attribute name for attributes not in the main group table
+ attribute_value varchar(4000) NULL, -- Attribute value could be null
+ last_modified int8 NOT NULL, -- Millis since 1970, will be sequential and unique
+ deleted varchar(1) NOT NULL, -- T or F. Deleted rows will be removed after they have had time to be processed
+ CONSTRAINT gr_mp_group_attributes_fk FOREIGN KEY (group_id_index) REFERENCES gr_mp_groups(id_index) ON DELETE CASCADE
+ );
+CREATE UNIQUE INDEX gr_mp_group_attributes_idx ON gr_mp_group_attributes(group_id_index, attribute_name, attribute_value);
+CREATE UNIQUE INDEX gr_mp_group_attributes_ldx ON gr_mp_group_attributes(last_modified);
+COMMENT ON TABLE gr_mp_group_attributes IS 'This table holds group attributes which are one to one or one to many to the groups table';
+
+COMMENT ON COLUMN gr_mp_group_attributes.group_id_index IS 'This is the integer identifier for a group and foreign key to groups and memberships';
+COMMENT ON COLUMN gr_mp_group_attributes.attribute_name IS 'Attribute name for attributes not in the main group table';
+COMMENT ON COLUMN gr_mp_group_attributes.attribute_value IS 'Attribute value could be null';
+COMMENT ON COLUMN gr_mp_group_attributes.last_modified IS 'Millis since 1970, will be sequential and unique';
+COMMENT ON COLUMN gr_mp_group_attributes.deleted IS 'T or F. Deleted rows will be removed after they have had time to be processed';
+
+CREATE TABLE gr_mp_memberships (
+ group_id_index int8 NOT NULL, -- This is the foreign key to groups
+ subject_id_index int8 NOT NULL, -- This is the foreign key to subjects
+ last_modified int8 NOT NULL, -- Millis since 1970, will be sequential and unique
+ deleted varchar(1) NOT NULL, -- T or F. Deleted rows will be removed after they have had time to be processed
+ CONSTRAINT gr_mp_memberships_gfk FOREIGN KEY (group_id_index) REFERENCES gr_mp_groups(id_index) ON DELETE CASCADE,
+ CONSTRAINT gr_mp_memberships_sfk FOREIGN KEY (subject_id_index) REFERENCES gr_mp_subjects(subject_id_index) ON DELETE CASCADE
+ );
+CREATE UNIQUE INDEX gr_mp_memberships_idx ON gr_mp_memberships(group_id_index, subject_id_index);
+CREATE UNIQUE INDEX gr_mp_memberships_ldx ON gr_mp_memberships(last_modified);
+COMMENT ON TABLE gr_mp_memberships IS 'This table holds memberships. The primary key is group_id_index and subject_id_index';
+
+COMMENT ON COLUMN gr_mp_memberships.group_id_index IS 'This is the foreign key to groups';
+COMMENT ON COLUMN gr_mp_memberships.subject_id_index IS 'This is the foreign key to subjects';
+COMMENT ON COLUMN gr_mp_memberships.last_modified IS 'Millis since 1970, will be sequential and unique';
+COMMENT ON COLUMN gr_mp_memberships.deleted IS 'T or F. Deleted rows will be removed after they have had time to be processed';
+
+CREATE TABLE gr_mp_subject_attributes (
+ subject_id_index int8 NOT NULL, -- This is the integer identifier and foreign key to subjects
+ attribute_name varchar(1000) NOT NULL, -- Attribute name for attributes not in the main subject table
+ attribute_value varchar(4000) NULL, -- Attribute value could be null
+ last_modified int8 NOT NULL, -- Millis since 1970, will be sequential and unique
+ deleted varchar(1) NOT NULL, -- T or F. Deleted rows will be removed after they have had time to be processed
+ CONSTRAINT gr_mp_subject_attributes_fk FOREIGN KEY (subject_id_index) REFERENCES gr_mp_subjects(subject_id_index) ON DELETE CASCADE
+ );
+CREATE UNIQUE INDEX gr_mp_subject_attributes_idx ON gr_mp_subject_attributes(subject_id_index, attribute_name, attribute_value);
+CREATE UNIQUE INDEX gr_mp_subject_attributes_ldx ON gr_mp_subject_attributes(last_modified);
+COMMENT ON TABLE gr_mp_subject_attributes IS 'This table holds subject attributes which are one to one or one to many to the subjects table';
+
+COMMENT ON COLUMN gr_mp_subject_attributes.subject_id_index IS 'This is the integer identifier and foreign key to subjects';
+COMMENT ON COLUMN gr_mp_subject_attributes.attribute_name IS 'Attribute name for attributes not in the main subject table';
+COMMENT ON COLUMN gr_mp_subject_attributes.attribute_value IS 'Attribute value could be null';
+COMMENT ON COLUMN gr_mp_subject_attributes.last_modified IS 'Millis since 1970, will be sequential and unique';
+COMMENT ON COLUMN gr_mp_subject_attributes.deleted IS 'T or F. Deleted rows will be removed after they have had time to be processed';
+
+EOSQL
diff --git a/demo/grouper/grouper_ui/Dockerfile b/demo/grouper/grouper_ui/Dockerfile
deleted file mode 100644
index fd4675c..0000000
--- a/demo/grouper/grouper_ui/Dockerfile
+++ /dev/null
@@ -1,10 +0,0 @@
-FROM tier/grouper:2.4.0-a47-u25-w5-p6-20190611
-
-LABEL author="tier-packaging@internet2.edu "
-
-# Update this Shib yum repo
-COPY container_files/shibboleth/shibboleth.repo /etc/yum.repos.d/
-
-#COPY in custom css, images, etc
-
-CMD ["ui"]
diff --git a/demo/grouper/grouper_ui/container_files/shibboleth/shibboleth.repo b/demo/grouper/grouper_ui/container_files/shibboleth/shibboleth.repo
deleted file mode 100644
index dabe005..0000000
--- a/demo/grouper/grouper_ui/container_files/shibboleth/shibboleth.repo
+++ /dev/null
@@ -1,9 +0,0 @@
-[shibboleth]
-name=Shibboleth (CentOS_7)
-# Please report any problems to https://shibboleth.atlassian.net/jira
-type=rpm-md
-mirrorlist=https://shibboleth.net/cgi-bin/mirrorlist.cgi/CentOS_7
-gpgcheck=1
-gpgkey=https://shibboleth.net/downloads/service-provider/RPMS/repomd.xml.key
- https://shibboleth.net/downloads/service-provider/RPMS/cantor.repomd.xml.key
-enabled=1
diff --git a/demo/grouper/grouper_ui/container_files/shibboleth/shibd.logger b/demo/grouper/grouper_ui/container_files/shibboleth/shibd.logger
deleted file mode 100644
index 2589b43..0000000
--- a/demo/grouper/grouper_ui/container_files/shibboleth/shibd.logger
+++ /dev/null
@@ -1,69 +0,0 @@
-# set overall behavior
-log4j.rootCategory=DEBUG, shibd_log, warn_log
-
-# fairly verbose for DEBUG, so generally leave at DEBUG
-log4j.category.XMLTooling.XMLObject=DEBUG
-log4j.category.XMLTooling.KeyInfoResolver=DEBUG
-log4j.category.Shibboleth.IPRange=DEBUG
-log4j.category.Shibboleth.PropertySet=DEBUG
-
-# raise for low-level tracing of SOAP client HTTP/SSL behavior
-log4j.category.XMLTooling.libcurl=DEBUG
-
-# useful categories to tune independently:
-#
-# tracing of SAML messages and security policies
-#log4j.category.OpenSAML.MessageDecoder=DEBUG
-#log4j.category.OpenSAML.MessageEncoder=DEBUG
-#log4j.category.OpenSAML.SecurityPolicyRule=DEBUG
-#log4j.category.XMLTooling.SOAPClient=DEBUG
-# interprocess message remoting
-#log4j.category.Shibboleth.Listener=DEBUG
-# mapping of requests to applicationId
-#log4j.category.Shibboleth.RequestMapper=DEBUG
-# high level session cache operations
-#log4j.category.Shibboleth.SessionCache=DEBUG
-# persistent storage and caching
-#log4j.category.XMLTooling.StorageService=DEBUG
-
-# logs XML being signed or verified if set to DEBUG
-log4j.category.XMLTooling.Signature.Debugger=DEBUG, sig_log
-log4j.additivity.XMLTooling.Signature.Debugger=false
-
-# the tran log blocks the "default" appender(s) at runtime
-# Level should be left at DEBUG for this category
-log4j.category.Shibboleth-TRANSACTION=DEBUG, tran_log
-log4j.additivity.Shibboleth-TRANSACTION=false
-# uncomment to suppress particular event types
-#log4j.category.Shibboleth-TRANSACTION.AuthnRequest=WARN
-#log4j.category.Shibboleth-TRANSACTION.Login=WARN
-#log4j.category.Shibboleth-TRANSACTION.Logout=WARN
-
-# define the appenders
-
-log4j.appender.shibd_log=org.apache.log4j.RollingFileAppender
-log4j.appender.shibd_log.fileName=/var/log/shibboleth/shibd.log
-log4j.appender.shibd_log.maxFileSize=1000000
-log4j.appender.shibd_log.maxBackupIndex=10
-log4j.appender.shibd_log.layout=org.apache.log4j.PatternLayout
-log4j.appender.shibd_log.layout.ConversionPattern=%d{%Y-%m-%d %H:%M:%S} %p %c %x: %m%n
-
-log4j.appender.warn_log=org.apache.log4j.RollingFileAppender
-log4j.appender.warn_log.fileName=/var/log/shibboleth/shibd_warn.log
-log4j.appender.warn_log.maxFileSize=1000000
-log4j.appender.warn_log.maxBackupIndex=10
-log4j.appender.warn_log.layout=org.apache.log4j.PatternLayout
-log4j.appender.warn_log.layout.ConversionPattern=%d{%Y-%m-%d %H:%M:%S} %p %c %x: %m%n
-log4j.appender.warn_log.threshold=WARN
-
-log4j.appender.tran_log=org.apache.log4j.RollingFileAppender
-log4j.appender.tran_log.fileName=/var/log/shibboleth/transaction.log
-log4j.appender.tran_log.maxFileSize=1000000
-log4j.appender.tran_log.maxBackupIndex=20
-log4j.appender.tran_log.layout=org.apache.log4j.PatternLayout
-log4j.appender.tran_log.layout.ConversionPattern=%d{%Y-%m-%d %H:%M:%S} %p %c %x: %m%n
-
-log4j.appender.sig_log=org.apache.log4j.FileAppender
-log4j.appender.sig_log.fileName=/var/log/shibboleth/signature.log
-log4j.appender.sig_log.layout=org.apache.log4j.PatternLayout
-log4j.appender.sig_log.layout.ConversionPattern=%m
diff --git a/demo/grouper/grouper_ws/Dockerfile b/demo/grouper/grouper_ws/Dockerfile
deleted file mode 100644
index d52b7ac..0000000
--- a/demo/grouper/grouper_ws/Dockerfile
+++ /dev/null
@@ -1,12 +0,0 @@
-FROM tier/grouper:2.4.0-a47-u25-w5-p6-20190611
-
-LABEL author="tier-packaging@internet2.edu "
-
-# Update this Shib yum repo
-COPY container_files/shibboleth/shibboleth.repo /etc/yum.repos.d/
-
-COPY container_files/web.xml /opt/grouper/grouper.ws/WEB-INF/
-COPY container_files/tomcat-users.xml /opt/tomcat/conf/
-COPY container_files/server.xml /opt/tomcat/conf/
-
-CMD ["ws"]
diff --git a/demo/grouper/grouper_ws/container_files/shibboleth/shibboleth.repo b/demo/grouper/grouper_ws/container_files/shibboleth/shibboleth.repo
deleted file mode 100644
index dabe005..0000000
--- a/demo/grouper/grouper_ws/container_files/shibboleth/shibboleth.repo
+++ /dev/null
@@ -1,9 +0,0 @@
-[shibboleth]
-name=Shibboleth (CentOS_7)
-# Please report any problems to https://shibboleth.atlassian.net/jira
-type=rpm-md
-mirrorlist=https://shibboleth.net/cgi-bin/mirrorlist.cgi/CentOS_7
-gpgcheck=1
-gpgkey=https://shibboleth.net/downloads/service-provider/RPMS/repomd.xml.key
- https://shibboleth.net/downloads/service-provider/RPMS/cantor.repomd.xml.key
-enabled=1
diff --git a/demo/grouper/grouper_ws/container_files/web.xml b/demo/grouper/grouper_ws/container_files/web.xml
deleted file mode 100644
index 03d3deb..0000000
--- a/demo/grouper/grouper_ws/container_files/web.xml
+++ /dev/null
@@ -1,128 +0,0 @@
-
-
-
-
-
-
-
-
- Grouper service filter
- edu.internet2.middleware.grouper.ws.GrouperServiceJ2ee
-
-
-
-
- Grouper logging filter
- edu.internet2.middleware.grouper.ws.j2ee.ServletFilterLogger
-
-
-
-
-
- Grouper service filter
- /services/*
-
-
- Grouper service filter
- /servicesRest/*
-
-
- AxisServlet
- Apache-Axis Servlet
- edu.internet2.middleware.grouper.ws.GrouperServiceAxisServlet
- 1
-
-
-
-
- RestServlet
- WS REST Servlet
- edu.internet2.middleware.grouper.ws.rest.GrouperRestServlet
- 1
-
-
- StatusServlet
- Status Servlet
- edu.internet2.middleware.grouper.j2ee.status.GrouperStatusServlet
- 1
-
-
- StatusServlet
- /status
-
-
- AxisServlet
- /services/*
-
-
- RestServlet
- /servicesRest/*
-
-
-
-
- Web services
- /services/*
-
-
- *
-
-
-
-
-
- Web services
- /servicesRest/*
-
-
-
- *
-
-
-
-
-
- BASIC
- Grouper Application
-
-
-
-
-
- The role that is required to log in to web service
-
- *
-
-
-
- 1
-
-
-
diff --git a/demo/grouper/grouper_ws/container_files/server.xml b/demo/grouper/grouper_ws/server.xml
similarity index 97%
rename from demo/grouper/grouper_ws/container_files/server.xml
rename to demo/grouper/grouper_ws/server.xml
index 112e7d0..17769bf 100644
--- a/demo/grouper/grouper_ws/container_files/server.xml
+++ b/demo/grouper/grouper_ws/server.xml
@@ -113,7 +113,7 @@
-->
-
+
+ grouper_user
+
+
+
+
+
+ BASIC
+ Grouper Application
+
+
+
+
+
+ The role that is required to log in to web service
+
+ grouper_user
+
+
+
\ No newline at end of file
diff --git a/demo/grouper/idp/Dockerfile b/demo/grouper/idp/Dockerfile
deleted file mode 100644
index 4968448..0000000
--- a/demo/grouper/idp/Dockerfile
+++ /dev/null
@@ -1,5 +0,0 @@
-FROM tier/shib-idp:3.4.6_20191002
-
-LABEL author="tier-packaging@internet2.edu "
-
-COPY shibboleth-idp/ /opt/shibboleth-idp/
diff --git a/demo/grouper/idp/shibboleth-idp/credentials/idp-backchannel.crt b/demo/grouper/idp/shibboleth-idp/credentials/idp-backchannel.crt
deleted file mode 100644
index c1f8fab..0000000
--- a/demo/grouper/idp/shibboleth-idp/credentials/idp-backchannel.crt
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDEzCCAfugAwIBAgIUS9SuTXwsFVVG+LjOEAbLqqT/el0wDQYJKoZIhvcNAQEL
-BQAwFTETMBEGA1UEAwwKaWRwdGVzdGJlZDAeFw0xNTEyMTEwMjIwMjZaFw0zNTEy
-MTEwMjIwMjZaMBUxEzARBgNVBAMMCmlkcHRlc3RiZWQwggEiMA0GCSqGSIb3DQEB
-AQUAA4IBDwAwggEKAoIBAQCMAoDHx8xCIfv/6QKqt9mcHYmEJ8y2dKprUbpdcOjH
-YvNPIl/lHPsUyrb+Nc+q2CDeiWjVk1mWYq0UpIwpBMuw1H6+oOqr4VQRi65pin0M
-SfE0MWIaFo5FPvpvoptkHD4gvREbm4swyXGMczcMRfqgalFXhUD2wz8W3XAM5Cq2
-03XeJbj6TwjvKatG5XPdeUe2FBGuOO2q54L1hcIGnLMCQrg7D31lR13PJbjnJ0No
-5C3k8TPuny6vJsBC03GNLNKfmrKVTdzr3VKp1uay1G3DL9314fgmbl8HA5iRQmy+
-XInUU6/8NXZSF59p3ITAOvZQeZsbJjg5gGDip5OZo9YlAgMBAAGjWzBZMB0GA1Ud
-DgQWBBRPlM4VkKZ0U4ec9GrIhFQl0hNbLDA4BgNVHREEMTAvggppZHB0ZXN0YmVk
-hiFodHRwczovL2lkcHRlc3RiZWQvaWRwL3NoaWJib2xldGgwDQYJKoZIhvcNAQEL
-BQADggEBAIZ0a1ov3my3ljJG588I/PHx+TxAWONWmpKbO9c/qI3Drxk4oRIffiac
-ANxdvtabgIzrlk5gMMisD7oyqHJiWgKv5Bgctd8w3IS3lLl7wHX65mTKQRXniG98
-NIjkvfrhe2eeJxecOqnDI8GOhIGCIqZUn8ShdM/yHjhQ2Mh0Hj3U0LlKvnmfGSQl
-j0viGwbFCaNaIP3zc5UmCrdE5h8sWL3Fu7ILKM9RyFa2ILHrJScV9t623IcHffHP
-IeaY/WtuapsrqRFxuQL9QFWN0FsRIdLmjTq+00+B/XnnKRKFBuWfjhHLF/uu8f+E
-t6Lf23Kb8yD6ZR7dihMZAGHnYQ/hlhM=
------END CERTIFICATE-----
diff --git a/demo/grouper/idp/shibboleth-idp/credentials/idp-backchannel.p12 b/demo/grouper/idp/shibboleth-idp/credentials/idp-backchannel.p12
deleted file mode 100644
index 112540a..0000000
Binary files a/demo/grouper/idp/shibboleth-idp/credentials/idp-backchannel.p12 and /dev/null differ
diff --git a/demo/grouper/idp/shibboleth-idp/credentials/idp-browser.p12 b/demo/grouper/idp/shibboleth-idp/credentials/idp-browser.p12
deleted file mode 100644
index 032be0b..0000000
Binary files a/demo/grouper/idp/shibboleth-idp/credentials/idp-browser.p12 and /dev/null differ
diff --git a/demo/grouper/idp/shibboleth-idp/credentials/idp-encryption.crt b/demo/grouper/idp/shibboleth-idp/credentials/idp-encryption.crt
deleted file mode 100644
index 15d764f..0000000
--- a/demo/grouper/idp/shibboleth-idp/credentials/idp-encryption.crt
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDEzCCAfugAwIBAgIUG6Nn1rlERS1vsi88tcdzSYX0oqAwDQYJKoZIhvcNAQEL
-BQAwFTETMBEGA1UEAwwKaWRwdGVzdGJlZDAeFw0xNTEyMTEwMjIwMTRaFw0zNTEy
-MTEwMjIwMTRaMBUxEzARBgNVBAMMCmlkcHRlc3RiZWQwggEiMA0GCSqGSIb3DQEB
-AQUAA4IBDwAwggEKAoIBAQCBXv0o3fmT8iluyLjJ4lBAVCW+ZRVyEXPYQuRi7vfD
-cO4a6d1kxiJLsaK0W88VNxjFQRr8PgDkWr28vwoH1rgk4pLsszLD48DBzD942peJ
-l/S6FnsIJjmaHcBh4pbNhU4yowu63iKkvttrcZAEbpEro6Z8CziWEx8sywoaYEQG
-ifPkr9ORV6Cn3txq+9gMBePG41GrtZrUGIu+xrndL0Shh4Pq0eq/9MAsVlIIXEa8
-9WfH8J2kFcTOfoWtIc70b7TLZQsx4YnNcnrGLSUEcstFyPLX+Xtv5SNZF89OOIxX
-VNjNvgE5DbJb9hMM4UAFqI+1bo9QqtxwThjc/sOvIxzNAgMBAAGjWzBZMB0GA1Ud
-DgQWBBStTyogRPuAVG6q7yPyav1uvE+7pTA4BgNVHREEMTAvggppZHB0ZXN0YmVk
-hiFodHRwczovL2lkcHRlc3RiZWQvaWRwL3NoaWJib2xldGgwDQYJKoZIhvcNAQEL
-BQADggEBAFMfoOv+oISGjvamq7+Y4G7ep5vxlAPeK3RATYPYvAmyH946qZXh98ni
-QXyuqZW5P5eEt86toY45IwDU5r09SKwHughEe99iiEkxh0mb2qo84qX9/qcg+kyN
-jeLd/OSyolpUCEFNwOFcog7pj7Eer+6AHbwTn1Mjb5TBsKwtDMJsaxPvdj0u7M5r
-xL/wHkFhn1rCo2QiojzjSlV3yLTh49iTyhE3cG+RxaNKDCxhp0jSSLX1BW/ZoPA8
-+PMJEA+Q0QbyRD8aJOHN5O8jGxCa/ZzcOnYVL6AsEXoDiY3vAUYh1FUonOWw0m9H
-p+tGUbGS2l873J5PrsbpeKEVR/IIoKo=
------END CERTIFICATE-----
diff --git a/demo/grouper/idp/shibboleth-idp/credentials/idp-encryption.key b/demo/grouper/idp/shibboleth-idp/credentials/idp-encryption.key
deleted file mode 100644
index 8bb5cc6..0000000
--- a/demo/grouper/idp/shibboleth-idp/credentials/idp-encryption.key
+++ /dev/null
@@ -1,27 +0,0 @@
------BEGIN RSA PRIVATE KEY-----
-MIIEpAIBAAKCAQEAgV79KN35k/Ipbsi4yeJQQFQlvmUVchFz2ELkYu73w3DuGund
-ZMYiS7GitFvPFTcYxUEa/D4A5Fq9vL8KB9a4JOKS7LMyw+PAwcw/eNqXiZf0uhZ7
-CCY5mh3AYeKWzYVOMqMLut4ipL7ba3GQBG6RK6OmfAs4lhMfLMsKGmBEBonz5K/T
-kVegp97cavvYDAXjxuNRq7Wa1BiLvsa53S9EoYeD6tHqv/TALFZSCFxGvPVnx/Cd
-pBXEzn6FrSHO9G+0y2ULMeGJzXJ6xi0lBHLLRcjy1/l7b+UjWRfPTjiMV1TYzb4B
-OQ2yW/YTDOFABaiPtW6PUKrccE4Y3P7DryMczQIDAQABAoIBAF/IflMllcUtw/Nb
-9USzpIscQh2nJaugtE5nqER/fT1cfU273Mjh0T6NtFMorjec5WAWBe6/0VVAwb3f
-C4QmO4xDnFhXjLxwAaT6nfvSi+O5d93XCxxLgNZUNL3ET7a2feELyoF+OdQT4sy3
-9dLyMdVHgtnQTQMAAVLeuQoyP+s+Zax4Gca6ln8QxIIvDoD7NITnpl8887Hghhzl
-CvKtRiPRtoI2JTXWgWuLI6xXfVsDvFT+Up+ki9TMLWLACcmMU1d+lUBOKIqhhQHG
-+np9iKxVausJwYaLwwT3h8SItNon7ltbV6kcqyZxMAA+uN8CVgIb5UaUrlW7Nvze
-1iUNudkCgYEAxpnBg8YxdEHFSMTqjEOYapn18cs3n32EBPtvPaUcvw3mGC1+ZVx1
-9WqnVsgykBOWI0qSBVF7Kke8yOqgqWtYQUFqLiMgCC9e/QcXnrm/bzAmKDgLVcCR
-KzgqU2ECQDkNSS0qeODjLGX4SEabDbLhN59WykHKM0i/RcrbhuvT1BcCgYEApsMD
-TFQBaiaEmLVm252piZf8b5g3DrUHeqGktHkHXTW4Iyyn8zEknoiCosk/Tej73zga
-cTT3zQgEh63DMC9Ag8IbIJiDpYLMkt1QvZYtq95E/94GVEfRRok6/pyagGYB351R
-PXcykrDyy26FSofmtaXU37Wxaj3ow+WROaPgULsCgYEArFoFScG3a2gkuRlDX8TN
-wj2o5lTxCbWY2+YEzR+8icWbGQJqPbb3G6uaW8LTtpt44Vm2zWzAEZo+KLMOCNmC
-tub5Kd8Lzm6l5brA8dvLWcgUZTT2CU5b7YEJomB+3pNkh0vuHwczv3Ui+j5kE4hY
-0bezT0W3H7iTXhNFXprMs7MCgYEAlIZn75l6URLRUjluzPdVQoktei72CpFNgflp
-+ps45dmskRd61mzUkqY+w8G+MiPqANu1IVLtyZz0e+tVRxsuuKsvAg8UYVtn3P5k
-pRaWwtaKWeFjfbkhOVOMSa0tJmK0FHfHHZmGX4ReGrXq3YDBCNQUDtOCmn9dSuyy
-NcYxSXUCgYB+yo6dg8nyHDSqKDdrQQiAKv7jNsbecQ/rYrt8l0n9FBiwn5R7v6kp
-afsimCVou5i06L2Cr5Xs+XSf11KVkDh+qM70ZFubWEsHCDrS1KrxUzfFbrQczKof
-qX7ZsBuOT72RwVEa8fpT6IZ6IpOOEPmUid/f2VM2aAcXgaF//vMjxA==
------END RSA PRIVATE KEY-----
diff --git a/demo/grouper/idp/shibboleth-idp/credentials/idp-signing.crt b/demo/grouper/idp/shibboleth-idp/credentials/idp-signing.crt
deleted file mode 100644
index 6a032c1..0000000
--- a/demo/grouper/idp/shibboleth-idp/credentials/idp-signing.crt
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDFDCCAfygAwIBAgIVAN3vv+b7KN5Se9m1RZsCllp/B/hdMA0GCSqGSIb3DQEB
-CwUAMBUxEzARBgNVBAMMCmlkcHRlc3RiZWQwHhcNMTUxMjExMDIyMDE0WhcNMzUx
-MjExMDIyMDE0WjAVMRMwEQYDVQQDDAppZHB0ZXN0YmVkMIIBIjANBgkqhkiG9w0B
-AQEFAAOCAQ8AMIIBCgKCAQEAh91caeY0Q85uhaUyqFwP2bMjwMFxMzRlAoqBHd7g
-u6eo4duaeLz1BaoR2XTBpNNvFR5oHH+TkKahVDGeH5+kcnIpxI8JPdsZml1srvf2
-Z6dzJsulJZUdpqnngycTkGtZgEoC1vmYVky2BSAIIifmdh6s0epbHnMGLsHzMKfJ
-Cb/Q6dYzRWTCPtzE2VMuQqqWgeyMr7u14x/Vqr9RPEFsgY8GIu5jzB6AyUIwrLg+
-MNkv6aIdcHwxYTGL7ijfy6rSWrgBflQoYRYNEnseK0ZHgJahz4ovCag6wZAoPpBs
-uYlY7lEr89Ucb6NHx3uqGMsXlDFdE4QwfDLLhCYHPvJ0uwIDAQABo1swWTAdBgNV
-HQ4EFgQUAkOgED3iYdmvQEOMm6u/JmD/UTQwOAYDVR0RBDEwL4IKaWRwdGVzdGJl
-ZIYhaHR0cHM6Ly9pZHB0ZXN0YmVkL2lkcC9zaGliYm9sZXRoMA0GCSqGSIb3DQEB
-CwUAA4IBAQBIdd4YWlnvJjql8+zKKgmWgIY7U8DA8e6QcbAf8f8cdE33RSnjI63X
-sv/y9GfmbAVAD6RIAXPFFeRYJ08GOxGI9axfNaKdlsklJ9bk4ducHqgCSWYVer3s
-RQBjxyOfSTvk9YCJvdJVQRJLcCvxwKakFCsOSnV3t9OvN86Ak+fKPVB5j2fM/0fZ
-Kqjn3iqgdNPTLXPsuJLJO5lITRiBa4onmVelAiCstI9PQiaEck+oAHnMTnC9JE/B
-DHv3e4rwq3LznlqPw0GSd7xqNTdMDwNOWjkuOr3sGpWS8ms/ZHHXV1Vd22uPe70i
-s00xrv14zLifcc8oj5DYzOhYRifRXgHX
------END CERTIFICATE-----
diff --git a/demo/grouper/idp/shibboleth-idp/credentials/idp-signing.key b/demo/grouper/idp/shibboleth-idp/credentials/idp-signing.key
deleted file mode 100644
index 011c27c..0000000
--- a/demo/grouper/idp/shibboleth-idp/credentials/idp-signing.key
+++ /dev/null
@@ -1,27 +0,0 @@
------BEGIN RSA PRIVATE KEY-----
-MIIEowIBAAKCAQEAh91caeY0Q85uhaUyqFwP2bMjwMFxMzRlAoqBHd7gu6eo4dua
-eLz1BaoR2XTBpNNvFR5oHH+TkKahVDGeH5+kcnIpxI8JPdsZml1srvf2Z6dzJsul
-JZUdpqnngycTkGtZgEoC1vmYVky2BSAIIifmdh6s0epbHnMGLsHzMKfJCb/Q6dYz
-RWTCPtzE2VMuQqqWgeyMr7u14x/Vqr9RPEFsgY8GIu5jzB6AyUIwrLg+MNkv6aId
-cHwxYTGL7ijfy6rSWrgBflQoYRYNEnseK0ZHgJahz4ovCag6wZAoPpBsuYlY7lEr
-89Ucb6NHx3uqGMsXlDFdE4QwfDLLhCYHPvJ0uwIDAQABAoIBAGpInLarQ0+X+ZXK
-+aoC+tNO9DUiHq/z2OD4ALGhXSTvr4mgBWNWTkc0F+qJD8MlM8zNkJxaoNGTyLjY
-Z95NQJPXAx2k15HwCENdulvV1oiX0dkTjgmscRmj6FwNAZ0EnWtien45mxZHxEyW
-FkbB9+OHc6JzNvzG9ps1Vk1FtFtO8w4exXuJVATJeArQmMvAUHMJYPb7Qs+/NX9R
-RlDvFfXDzQv5eAzudT1SyFSa5W+Bsw6BtEoeiqdp+xQh4yc733nwN7KG2Z/TpGse
-jVe6akbULuCXOe9uPa7kv8hnQEUH38QVlIw8pK1SsgNq7S0U44WU5uF8gbDBYle/
-OoPBvSECgYEAvCwVEa8ryLzee5FaX4PBxk10lEl/Yp9jC88wPUQ+ZpfniIIQIfwl
-csRE9D3/dJOVAxw/Ac32F72SLVDzLabAhlBRINYLB0ZkVuJi1CIoDHIf9nfh/pOx
-b96VMUe/mpAL4hZnZkmBKjesX5URPEKtBD0aSeCw9aFqhORjRrxCJg0CgYEAuNaD
-LOuTPKsC6nxRtiL9r0CA5gCCdpALxwJA7wHAeh03i5xmy61i4iOMaunxKZhG+nzz
-PhcI8Uhwwk+l3tbYAf1rrtmMKNcyjy+UqWXGt4ZkWFlIyIungyLiH9L32IMhXNF0
-fBgOZNtFTmQBU18a78uIir9xASUbtaakzOtJ2+cCgYAgfawVpZ11x8bSp0Jng6SN
-zQn4IMiyCrtbaqb1rTbpGAmOdIa8l4EP0/vkAGB/jIwKQXJPqXR4nO8EjBmxJD3R
-80RO2yaEVw80QVq3Lj6kB4ClWgXXo0DcBB7Wp4DZ+01R+HRaIQ8AbySATIjxUsH1
-HWfQoc9sWja+Q4Ew0YjKcQKBgGLoPsdBw8b6B5RsM9lPvgoSbScmbKl/CR5TwWVj
-vZhanAd0CLnCrSAvP4tSZf8JAio1xH+cGefrCJOhxTOKKYpfDklBFjQge2iNYHKJ
-CJ3aJ0XzePP/bwLIHtJCtOdBvA+L8VYaFVG418xLzT3MrYBVnFoKeTDQp5Q7eQJC
-gYJPAoGBAKHcuXWzvXoHKnOg8Ljg2xZ6/SfjwNDIIrpXVTAQifmK3q4+Ua2Q+Cjq
-97tPMxF2bVRcbnCSNKpTMOTrsWs8Z3GpMyCh6XgYMSlclXusDVUkRkPpWj8hVTR4
-opm/rxS83hCrTsIX3Il3T8Fpb97kdF+unCiWEaxrPEurjW8lB506
------END RSA PRIVATE KEY-----
diff --git a/demo/grouper/idp/shibboleth-idp/credentials/sealer.jks b/demo/grouper/idp/shibboleth-idp/credentials/sealer.jks
deleted file mode 100644
index 89957e0..0000000
Binary files a/demo/grouper/idp/shibboleth-idp/credentials/sealer.jks and /dev/null differ
diff --git a/demo/grouper/idp/shibboleth-idp/credentials/sealer.kver b/demo/grouper/idp/shibboleth-idp/credentials/sealer.kver
deleted file mode 100644
index d64b0e4..0000000
--- a/demo/grouper/idp/shibboleth-idp/credentials/sealer.kver
+++ /dev/null
@@ -1,2 +0,0 @@
-#Fri Dec 11 02:20:32 UTC 2015
-CurrentVersion=1
diff --git a/demo/grouper/idp/shibboleth-idp/metadata/idp-metadata.xml b/demo/grouper/idp/shibboleth-idp/metadata/idp-metadata.xml
deleted file mode 100644
index 65db47e..0000000
--- a/demo/grouper/idp/shibboleth-idp/metadata/idp-metadata.xml
+++ /dev/null
@@ -1,207 +0,0 @@
-
-
-
-
-
-
-
- example.org
-
-
-
-
-
-
-
-MIIDEzCCAfugAwIBAgIUS9SuTXwsFVVG+LjOEAbLqqT/el0wDQYJKoZIhvcNAQEL
-BQAwFTETMBEGA1UEAwwKaWRwdGVzdGJlZDAeFw0xNTEyMTEwMjIwMjZaFw0zNTEy
-MTEwMjIwMjZaMBUxEzARBgNVBAMMCmlkcHRlc3RiZWQwggEiMA0GCSqGSIb3DQEB
-AQUAA4IBDwAwggEKAoIBAQCMAoDHx8xCIfv/6QKqt9mcHYmEJ8y2dKprUbpdcOjH
-YvNPIl/lHPsUyrb+Nc+q2CDeiWjVk1mWYq0UpIwpBMuw1H6+oOqr4VQRi65pin0M
-SfE0MWIaFo5FPvpvoptkHD4gvREbm4swyXGMczcMRfqgalFXhUD2wz8W3XAM5Cq2
-03XeJbj6TwjvKatG5XPdeUe2FBGuOO2q54L1hcIGnLMCQrg7D31lR13PJbjnJ0No
-5C3k8TPuny6vJsBC03GNLNKfmrKVTdzr3VKp1uay1G3DL9314fgmbl8HA5iRQmy+
-XInUU6/8NXZSF59p3ITAOvZQeZsbJjg5gGDip5OZo9YlAgMBAAGjWzBZMB0GA1Ud
-DgQWBBRPlM4VkKZ0U4ec9GrIhFQl0hNbLDA4BgNVHREEMTAvggppZHB0ZXN0YmVk
-hiFodHRwczovL2lkcHRlc3RiZWQvaWRwL3NoaWJib2xldGgwDQYJKoZIhvcNAQEL
-BQADggEBAIZ0a1ov3my3ljJG588I/PHx+TxAWONWmpKbO9c/qI3Drxk4oRIffiac
-ANxdvtabgIzrlk5gMMisD7oyqHJiWgKv5Bgctd8w3IS3lLl7wHX65mTKQRXniG98
-NIjkvfrhe2eeJxecOqnDI8GOhIGCIqZUn8ShdM/yHjhQ2Mh0Hj3U0LlKvnmfGSQl
-j0viGwbFCaNaIP3zc5UmCrdE5h8sWL3Fu7ILKM9RyFa2ILHrJScV9t623IcHffHP
-IeaY/WtuapsrqRFxuQL9QFWN0FsRIdLmjTq+00+B/XnnKRKFBuWfjhHLF/uu8f+E
-t6Lf23Kb8yD6ZR7dihMZAGHnYQ/hlhM=
-
-
-
-
-
-
-
-
-
-MIIDFDCCAfygAwIBAgIVAN3vv+b7KN5Se9m1RZsCllp/B/hdMA0GCSqGSIb3DQEB
-CwUAMBUxEzARBgNVBAMMCmlkcHRlc3RiZWQwHhcNMTUxMjExMDIyMDE0WhcNMzUx
-MjExMDIyMDE0WjAVMRMwEQYDVQQDDAppZHB0ZXN0YmVkMIIBIjANBgkqhkiG9w0B
-AQEFAAOCAQ8AMIIBCgKCAQEAh91caeY0Q85uhaUyqFwP2bMjwMFxMzRlAoqBHd7g
-u6eo4duaeLz1BaoR2XTBpNNvFR5oHH+TkKahVDGeH5+kcnIpxI8JPdsZml1srvf2
-Z6dzJsulJZUdpqnngycTkGtZgEoC1vmYVky2BSAIIifmdh6s0epbHnMGLsHzMKfJ
-Cb/Q6dYzRWTCPtzE2VMuQqqWgeyMr7u14x/Vqr9RPEFsgY8GIu5jzB6AyUIwrLg+
-MNkv6aIdcHwxYTGL7ijfy6rSWrgBflQoYRYNEnseK0ZHgJahz4ovCag6wZAoPpBs
-uYlY7lEr89Ucb6NHx3uqGMsXlDFdE4QwfDLLhCYHPvJ0uwIDAQABo1swWTAdBgNV
-HQ4EFgQUAkOgED3iYdmvQEOMm6u/JmD/UTQwOAYDVR0RBDEwL4IKaWRwdGVzdGJl
-ZIYhaHR0cHM6Ly9pZHB0ZXN0YmVkL2lkcC9zaGliYm9sZXRoMA0GCSqGSIb3DQEB
-CwUAA4IBAQBIdd4YWlnvJjql8+zKKgmWgIY7U8DA8e6QcbAf8f8cdE33RSnjI63X
-sv/y9GfmbAVAD6RIAXPFFeRYJ08GOxGI9axfNaKdlsklJ9bk4ducHqgCSWYVer3s
-RQBjxyOfSTvk9YCJvdJVQRJLcCvxwKakFCsOSnV3t9OvN86Ak+fKPVB5j2fM/0fZ
-Kqjn3iqgdNPTLXPsuJLJO5lITRiBa4onmVelAiCstI9PQiaEck+oAHnMTnC9JE/B
-DHv3e4rwq3LznlqPw0GSd7xqNTdMDwNOWjkuOr3sGpWS8ms/ZHHXV1Vd22uPe70i
-s00xrv14zLifcc8oj5DYzOhYRifRXgHX
-
-
-
-
-
-
-
-
-
-MIIDEzCCAfugAwIBAgIUG6Nn1rlERS1vsi88tcdzSYX0oqAwDQYJKoZIhvcNAQEL
-BQAwFTETMBEGA1UEAwwKaWRwdGVzdGJlZDAeFw0xNTEyMTEwMjIwMTRaFw0zNTEy
-MTEwMjIwMTRaMBUxEzARBgNVBAMMCmlkcHRlc3RiZWQwggEiMA0GCSqGSIb3DQEB
-AQUAA4IBDwAwggEKAoIBAQCBXv0o3fmT8iluyLjJ4lBAVCW+ZRVyEXPYQuRi7vfD
-cO4a6d1kxiJLsaK0W88VNxjFQRr8PgDkWr28vwoH1rgk4pLsszLD48DBzD942peJ
-l/S6FnsIJjmaHcBh4pbNhU4yowu63iKkvttrcZAEbpEro6Z8CziWEx8sywoaYEQG
-ifPkr9ORV6Cn3txq+9gMBePG41GrtZrUGIu+xrndL0Shh4Pq0eq/9MAsVlIIXEa8
-9WfH8J2kFcTOfoWtIc70b7TLZQsx4YnNcnrGLSUEcstFyPLX+Xtv5SNZF89OOIxX
-VNjNvgE5DbJb9hMM4UAFqI+1bo9QqtxwThjc/sOvIxzNAgMBAAGjWzBZMB0GA1Ud
-DgQWBBStTyogRPuAVG6q7yPyav1uvE+7pTA4BgNVHREEMTAvggppZHB0ZXN0YmVk
-hiFodHRwczovL2lkcHRlc3RiZWQvaWRwL3NoaWJib2xldGgwDQYJKoZIhvcNAQEL
-BQADggEBAFMfoOv+oISGjvamq7+Y4G7ep5vxlAPeK3RATYPYvAmyH946qZXh98ni
-QXyuqZW5P5eEt86toY45IwDU5r09SKwHughEe99iiEkxh0mb2qo84qX9/qcg+kyN
-jeLd/OSyolpUCEFNwOFcog7pj7Eer+6AHbwTn1Mjb5TBsKwtDMJsaxPvdj0u7M5r
-xL/wHkFhn1rCo2QiojzjSlV3yLTh49iTyhE3cG+RxaNKDCxhp0jSSLX1BW/ZoPA8
-+PMJEA+Q0QbyRD8aJOHN5O8jGxCa/ZzcOnYVL6AsEXoDiY3vAUYh1FUonOWw0m9H
-p+tGUbGS2l873J5PrsbpeKEVR/IIoKo=
-
-
-
-
-
-
- urn:mace:shibboleth:1.0:nameIdentifier
- urn:oasis:names:tc:SAML:2.0:nameid-format:transient
-
-
-
-
-
-
-
-
-
-
-
-
- localhost
-
-
-
-
-
-
-MIIDEzCCAfugAwIBAgIUS9SuTXwsFVVG+LjOEAbLqqT/el0wDQYJKoZIhvcNAQEL
-BQAwFTETMBEGA1UEAwwKaWRwdGVzdGJlZDAeFw0xNTEyMTEwMjIwMjZaFw0zNTEy
-MTEwMjIwMjZaMBUxEzARBgNVBAMMCmlkcHRlc3RiZWQwggEiMA0GCSqGSIb3DQEB
-AQUAA4IBDwAwggEKAoIBAQCMAoDHx8xCIfv/6QKqt9mcHYmEJ8y2dKprUbpdcOjH
-YvNPIl/lHPsUyrb+Nc+q2CDeiWjVk1mWYq0UpIwpBMuw1H6+oOqr4VQRi65pin0M
-SfE0MWIaFo5FPvpvoptkHD4gvREbm4swyXGMczcMRfqgalFXhUD2wz8W3XAM5Cq2
-03XeJbj6TwjvKatG5XPdeUe2FBGuOO2q54L1hcIGnLMCQrg7D31lR13PJbjnJ0No
-5C3k8TPuny6vJsBC03GNLNKfmrKVTdzr3VKp1uay1G3DL9314fgmbl8HA5iRQmy+
-XInUU6/8NXZSF59p3ITAOvZQeZsbJjg5gGDip5OZo9YlAgMBAAGjWzBZMB0GA1Ud
-DgQWBBRPlM4VkKZ0U4ec9GrIhFQl0hNbLDA4BgNVHREEMTAvggppZHB0ZXN0YmVk
-hiFodHRwczovL2lkcHRlc3RiZWQvaWRwL3NoaWJib2xldGgwDQYJKoZIhvcNAQEL
-BQADggEBAIZ0a1ov3my3ljJG588I/PHx+TxAWONWmpKbO9c/qI3Drxk4oRIffiac
-ANxdvtabgIzrlk5gMMisD7oyqHJiWgKv5Bgctd8w3IS3lLl7wHX65mTKQRXniG98
-NIjkvfrhe2eeJxecOqnDI8GOhIGCIqZUn8ShdM/yHjhQ2Mh0Hj3U0LlKvnmfGSQl
-j0viGwbFCaNaIP3zc5UmCrdE5h8sWL3Fu7ILKM9RyFa2ILHrJScV9t623IcHffHP
-IeaY/WtuapsrqRFxuQL9QFWN0FsRIdLmjTq+00+B/XnnKRKFBuWfjhHLF/uu8f+E
-t6Lf23Kb8yD6ZR7dihMZAGHnYQ/hlhM=
-
-
-
-
-
-
-
-
-
-MIIDFDCCAfygAwIBAgIVAN3vv+b7KN5Se9m1RZsCllp/B/hdMA0GCSqGSIb3DQEB
-CwUAMBUxEzARBgNVBAMMCmlkcHRlc3RiZWQwHhcNMTUxMjExMDIyMDE0WhcNMzUx
-MjExMDIyMDE0WjAVMRMwEQYDVQQDDAppZHB0ZXN0YmVkMIIBIjANBgkqhkiG9w0B
-AQEFAAOCAQ8AMIIBCgKCAQEAh91caeY0Q85uhaUyqFwP2bMjwMFxMzRlAoqBHd7g
-u6eo4duaeLz1BaoR2XTBpNNvFR5oHH+TkKahVDGeH5+kcnIpxI8JPdsZml1srvf2
-Z6dzJsulJZUdpqnngycTkGtZgEoC1vmYVky2BSAIIifmdh6s0epbHnMGLsHzMKfJ
-Cb/Q6dYzRWTCPtzE2VMuQqqWgeyMr7u14x/Vqr9RPEFsgY8GIu5jzB6AyUIwrLg+
-MNkv6aIdcHwxYTGL7ijfy6rSWrgBflQoYRYNEnseK0ZHgJahz4ovCag6wZAoPpBs
-uYlY7lEr89Ucb6NHx3uqGMsXlDFdE4QwfDLLhCYHPvJ0uwIDAQABo1swWTAdBgNV
-HQ4EFgQUAkOgED3iYdmvQEOMm6u/JmD/UTQwOAYDVR0RBDEwL4IKaWRwdGVzdGJl
-ZIYhaHR0cHM6Ly9pZHB0ZXN0YmVkL2lkcC9zaGliYm9sZXRoMA0GCSqGSIb3DQEB
-CwUAA4IBAQBIdd4YWlnvJjql8+zKKgmWgIY7U8DA8e6QcbAf8f8cdE33RSnjI63X
-sv/y9GfmbAVAD6RIAXPFFeRYJ08GOxGI9axfNaKdlsklJ9bk4ducHqgCSWYVer3s
-RQBjxyOfSTvk9YCJvdJVQRJLcCvxwKakFCsOSnV3t9OvN86Ak+fKPVB5j2fM/0fZ
-Kqjn3iqgdNPTLXPsuJLJO5lITRiBa4onmVelAiCstI9PQiaEck+oAHnMTnC9JE/B
-DHv3e4rwq3LznlqPw0GSd7xqNTdMDwNOWjkuOr3sGpWS8ms/ZHHXV1Vd22uPe70i
-s00xrv14zLifcc8oj5DYzOhYRifRXgHX
-
-
-
-
-
-
-
-
-
-MIIDEzCCAfugAwIBAgIUG6Nn1rlERS1vsi88tcdzSYX0oqAwDQYJKoZIhvcNAQEL
-BQAwFTETMBEGA1UEAwwKaWRwdGVzdGJlZDAeFw0xNTEyMTEwMjIwMTRaFw0zNTEy
-MTEwMjIwMTRaMBUxEzARBgNVBAMMCmlkcHRlc3RiZWQwggEiMA0GCSqGSIb3DQEB
-AQUAA4IBDwAwggEKAoIBAQCBXv0o3fmT8iluyLjJ4lBAVCW+ZRVyEXPYQuRi7vfD
-cO4a6d1kxiJLsaK0W88VNxjFQRr8PgDkWr28vwoH1rgk4pLsszLD48DBzD942peJ
-l/S6FnsIJjmaHcBh4pbNhU4yowu63iKkvttrcZAEbpEro6Z8CziWEx8sywoaYEQG
-ifPkr9ORV6Cn3txq+9gMBePG41GrtZrUGIu+xrndL0Shh4Pq0eq/9MAsVlIIXEa8
-9WfH8J2kFcTOfoWtIc70b7TLZQsx4YnNcnrGLSUEcstFyPLX+Xtv5SNZF89OOIxX
-VNjNvgE5DbJb9hMM4UAFqI+1bo9QqtxwThjc/sOvIxzNAgMBAAGjWzBZMB0GA1Ud
-DgQWBBStTyogRPuAVG6q7yPyav1uvE+7pTA4BgNVHREEMTAvggppZHB0ZXN0YmVk
-hiFodHRwczovL2lkcHRlc3RiZWQvaWRwL3NoaWJib2xldGgwDQYJKoZIhvcNAQEL
-BQADggEBAFMfoOv+oISGjvamq7+Y4G7ep5vxlAPeK3RATYPYvAmyH946qZXh98ni
-QXyuqZW5P5eEt86toY45IwDU5r09SKwHughEe99iiEkxh0mb2qo84qX9/qcg+kyN
-jeLd/OSyolpUCEFNwOFcog7pj7Eer+6AHbwTn1Mjb5TBsKwtDMJsaxPvdj0u7M5r
-xL/wHkFhn1rCo2QiojzjSlV3yLTh49iTyhE3cG+RxaNKDCxhp0jSSLX1BW/ZoPA8
-+PMJEA+Q0QbyRD8aJOHN5O8jGxCa/ZzcOnYVL6AsEXoDiY3vAUYh1FUonOWw0m9H
-p+tGUbGS2l873J5PrsbpeKEVR/IIoKo=
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/demo/grouper/idp/shibboleth-idp/metadata/midpoint-sp-new.xml b/demo/grouper/idp/shibboleth-idp/metadata/midpoint-sp-new.xml
deleted file mode 100644
index a819f4b..0000000
--- a/demo/grouper/idp/shibboleth-idp/metadata/midpoint-sp-new.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-
-
-
- midpointdemo
-
-
-
-
-
-MIIDHDCCAgSgAwIBAgIJAPEnL5jgbeVoMA0GCSqGSIb3DQEBCwUAMBoxGDAWBgNV
-BAMMD2lkcC5leGFtcGxlLmVkdTAeFw0xODEwMTAyMDM1NDBaFw0yMzEwMDkyMDM1
-NDBaMBoxGDAWBgNVBAMMD2lkcC5leGFtcGxlLmVkdTCCASIwDQYJKoZIhvcNAQEB
-BQADggEPADCCAQoCggEBAKwTrvQhmFX3SUNgJAhQ/YV0UX56Rt53mwbiKuH+Ez83
-7z6XRynBVsfzHfbWe0IpNKx5mIr84dfbGhQKQBEKzQuek7ihW3J6PIVZN1A3icZZ
-B9i7gow902bT0ZfRG8QW49gl7pk3ASutPcO9Dq5Xc/AqWr3OSO/Pei0yBtTdzG3b
-rm0u0gbj3P2tjt7BN77wIB+yjJsND3ITtP0MFXIJxLTlty8thwqQOAOAYcF+rhC5
-znnBLsRNo0E57PtzZs8i/BpEX2uPTxpEyvlU1vtyxcKUiHtK5ZjOsDEkS2rEualr
-+FILYg/Oxw1gi0+mNO1a94Ft+UoLiREztq6MQt8OK98CAwEAAaNlMGMwQgYDVR0R
-BDswOYIPaWRwLmV4YW1wbGUuZWR1hiZodHRwczovL2lkcC5leGFtcGxlLmVkdS9p
-ZHAvc2hpYmJvbGV0aDAdBgNVHQ4EFgQU3ZJ8oHkmlgPtZuZAxnzONccPsb8wDQYJ
-KoZIhvcNAQELBQADggEBAIJ4oZKSMGpF8J3qdfjLZGkc3iVbu/eiE1MD77no0oCz
-nelY0CNUBuFJk1Xv+Bv0fW0cVugtMPz4xi7zv0zkpS2IVxpPZWBosuVabUD9k+V4
-iN5woJdO7e2KRGvhlWmbkmoZUvhygDe0u0vblNfLzDwFQvxHXiWG//P7SanoQrjP
-dE8U21tYz+EFm6s5TvHxVhr9id8c+UacAFCpAtzUB+J8K1abx05XlKsySflkOQV9
-JbM4zOy5gXSI5dY9dGUF77g0muyC+jAhIhLSt/7v3vJgvBurrxPoeBFXOU3D+siT
-VZlKtYzYjJhVqXx1vKrWEE1hkpqm+iYgZe4MvgcdswY=
-
-
-
-
-
-
-
-
-
-
-
diff --git a/demo/grouper/midpoint-objects-manual/tasks/task-recomputation-users.xml b/demo/grouper/midpoint-objects-manual/tasks/task-recomputation-users.xml
deleted file mode 100644
index 03fe35f..0000000
--- a/demo/grouper/midpoint-objects-manual/tasks/task-recomputation-users.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-
- User recomputation
-
-
-
-
-
-
-
- 1571729899646-0-1
-
-
-
- http://midpoint.evolveum.com/xml/ns/public/provisioning/channels-3#recompute
- runnable
-
- single
-
- tight
-
-
-
-
- c:UserType
-
-
-
-
-
diff --git a/demo/grouper/midpoint_server/Dockerfile b/demo/grouper/midpoint_server/Dockerfile
deleted file mode 100644
index 11ab497..0000000
--- a/demo/grouper/midpoint_server/Dockerfile
+++ /dev/null
@@ -1,11 +0,0 @@
-ARG tag=4.8.2
-
-FROM i2incommon/midpoint:${tag}
-
-MAINTAINER info@evolveum.com
-
-ENV MP_DIR /opt/midpoint
-
-VOLUME ${MP_DIR}/var
-
-COPY container_files/mp-home/ ${MP_DIR}/var/
diff --git a/demo/grouper/midpoint_server/container_files/httpd/host-cert.pem b/demo/grouper/midpoint_server/container_files/httpd/host-cert.pem
deleted file mode 100644
index 9b1021b..0000000
--- a/demo/grouper/midpoint_server/container_files/httpd/host-cert.pem
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDqDCCApCgAwIBAgIJAMOSkn4oS2aAMA0GCSqGSIb3DQEBCwUAMGkxCzAJBgNV
-BAYTAlVTMQswCQYDVQQIDAJNSTESMBAGA1UEBwwJQW5uIEFyYm9yMRcwFQYDVQQK
-DA5JbnRlcm5ldDIvVElFUjEgMB4GA1UEAwwXbWlkcG9pbnQuc3AuZXhhbXBsZS5v
-cmcwHhcNMTgwOTE0MDU1OTQ1WhcNMTkwOTE0MDU1OTQ1WjBpMQswCQYDVQQGEwJV
-UzELMAkGA1UECAwCTUkxEjAQBgNVBAcMCUFubiBBcmJvcjEXMBUGA1UECgwOSW50
-ZXJuZXQyL1RJRVIxIDAeBgNVBAMMF21pZHBvaW50LnNwLmV4YW1wbGUub3JnMIIB
-IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApj/b7MEUSfu3oXMfNgRwTse7
-a5UV7Jswf1M/ZN/ZZkAkIxNBevZgozjesvLPWrmsTgONi7XigJUJvCjdjmlW9eDM
-lri/rkD8HuOR1DQCVKL9nvoS2c3D7sq5Emda3V8Tlj82VqfEmePd3sajx7mcTfbH
-8jwAL9NhkC+WMib5IpjLGpG0FEAC0ha7Lxb+7jIiqHVJaqLXJGCyGN4mh6c1Q9S1
-f8RVTiW2a8x22G+9wnZYbkiA2Kxls177imHlhSz8EdvV4IpGw1amrEWhhuDEum7B
-vZ1xQDLatgRqh4qAKLIVYeRnJ8H1FelMa90qB4G08MIPifmTsQwqJyBYaEdgWQID
-AQABo1MwUTAdBgNVHQ4EFgQUqb9BteODF6wv5R57aEON/wGXMiowHwYDVR0jBBgw
-FoAUqb9BteODF6wv5R57aEON/wGXMiowDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG
-9w0BAQsFAAOCAQEAAcKhxI+tSItrXmqC0PSmgWyAYpqbkz6W/cefTutXqhIgY09f
-h0LSv7ogTahoGpyiZk9vy6u3OE9bYwxapEfa4KBjO6HxBMIVBBb3RegVjoPzjElN
-BDwAx0VGFcZTXwMxDWycWdG8ql7rCZBvS50w04uTaIgnGmqXAdWWmBgfJ9cRbxW+
-JwO/mOl1QM1lR/5142NpvuUVWlmZSKEGydE5A1qPz2wpDbBR1ym1BQNS4NEqw6Kp
-GSB8jKyCS1Ve0v2wVze2038Wukz02dq9uKPTIO3T+B+ibZmxn6Op/kFCc1/kK5NS
-Q6JdO1B6KquGAYdGmKAcQ19mv+jqGktqWEEf0g==
------END CERTIFICATE-----
diff --git a/demo/grouper/midpoint_server/container_files/httpd/host-key.pem b/demo/grouper/midpoint_server/container_files/httpd/host-key.pem
deleted file mode 100644
index 5746e59..0000000
--- a/demo/grouper/midpoint_server/container_files/httpd/host-key.pem
+++ /dev/null
@@ -1,28 +0,0 @@
------BEGIN PRIVATE KEY-----
-MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCmP9vswRRJ+7eh
-cx82BHBOx7trlRXsmzB/Uz9k39lmQCQjE0F69mCjON6y8s9auaxOA42LteKAlQm8
-KN2OaVb14MyWuL+uQPwe45HUNAJUov2e+hLZzcPuyrkSZ1rdXxOWPzZWp8SZ493e
-xqPHuZxN9sfyPAAv02GQL5YyJvkimMsakbQUQALSFrsvFv7uMiKodUlqotckYLIY
-3iaHpzVD1LV/xFVOJbZrzHbYb73CdlhuSIDYrGWzXvuKYeWFLPwR29XgikbDVqas
-RaGG4MS6bsG9nXFAMtq2BGqHioAoshVh5GcnwfUV6Uxr3SoHgbTwwg+J+ZOxDCon
-IFhoR2BZAgMBAAECggEAEIRBpjjceiku6jRUwnoYaks/nIWYQwR8AfpUTwJKR/VR
-Yca097Fokm7A+UhUP3A45RtHQb0VPq8P44iv0kk24YCu8r5yFK7SHYOAZnOwU5ZJ
-2jSAEPF3aM7tKh3okhuzB3dKP7u1NZDE5zAW723KUJiW7sL1RcsbY0bHBj6G+9/H
-NplmsjuGt684vRBB0qOBfKF7EiG7mT69tHuNj4gRza9SMY31UtKbZdt2fNY6mp5V
-HscMba7egZP+Ke0pVX4+go9j7K8GG8hYaQDLjrzlPqrxZ2c5X9cC+CRDI/CHuL/s
-V/2yGZJ6n6UabwZoH83RdFrbQ94rU8Hkli6EvxXvMQKBgQDRpheNW5jDG5TfeJKh
-yfKTDQqH2Tk3BsBYYBN7Hf3m7vbkzlxnAKJAoSLmtRMuoeXvI5MrhzaHGsNIUS76
-LDIZnvB7DLUxhFUZsCPkpAA1QHuTWY96oR3PHnPjpk8lSUvtbOPwDLdzVApeFJgZ
-VqMNArZ7AHsK3Kkyi+f4WVQjbQKBgQDLAWiGb5dx6fAM2W6B6HjNmzjBWOuVEXa2
-76to9jzupBZmETfZgxtWUaWUDuNS+f7dtVUTE+p6v/w8clrHEhEZYkqunIOLo/UA
-LFPiuoTfEsWb1rh+nsCjCgy4uimixj/bSkf7NC6NyKTvCygA1mGnVVJUEPegYlDy
-LXCkaKWxHQKBgQCmyHSKL2lrJkEcOwakEU2acNCE3Gno/cT9SYmV83kvQ8JEqmrW
-QqnRsp9aXIljGscapPmKsmnNt5vNp1AxFAHTYh88NRLczsMIyZj0ZwgHVUI6KhC7
-5Psa78YQQBlMt2/g9TSsnuE+rYgF6mpKFiNm0Vasqeg47uzn2mdzqlUGTQKBgE04
-JutkTUY+h1pL5vYxWKpVDfy19z7H2tFxT1FowPrBneeLSyRI88Ac5I/yLdRlVeY9
-0LOmEr5Igwj3MsKgg7KVKfVLgdo/LrW3Jt2Kt3onKNXDkoBPoNUjwH0QC0Boiue+
-VK0gR0kVdm+bXccbxR+im+NwZNE0NLg6Qqu3RredAoGBALuVoqbPPmTCZXYG328H
-bzOs2aiR7BzPSVByV+qG6jW7w03RAnFPJZp7HMU+ViI5VY0wabUscMSvz5163+gM
-4KwY3v9ZjZzZGukIfLuudkdqtaiVOx/KeAC0n+nG21YU+wpZww8gkfHh1/sa2CME
-CWYCgOnmiTHcj83UaTqEXtmv
------END PRIVATE KEY-----
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/config.xml b/demo/grouper/midpoint_server/container_files/mp-home/config.xml
deleted file mode 100644
index c45e612..0000000
--- a/demo/grouper/midpoint_server/container_files/mp-home/config.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-
-
-
-
-
- ${midpoint.home}/import
-
-
- native
- jdbc:postgresql://localhost:5432/midpoint
-
-
-
- com.evolveum.midpoint.audit.impl.LoggerAuditServiceFactory
-
-
- com.evolveum.midpoint.repo.sqale.audit.SqaleAuditServiceFactory
-
-
-
- true
- ${midpoint.home}/icf-connectors
-
-
- ${midpoint.home}/keystore.jceks
- changeit
- default
-
-
-
-
-
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/functionLibraries/100-function-library-grouper.xml b/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/functionLibraries/100-function-library-grouper.xml
deleted file mode 100644
index 2fc89e0..0000000
--- a/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/functionLibraries/100-function-library-grouper.xml
+++ /dev/null
@@ -1,197 +0,0 @@
-
-
-
- grouper
- Functions for Grouper AMQP connector
-
-
-
-
-
- createUcfChange
-
- message
- c:AsyncUpdateMessageType
-
-
- groupIncludePattern
- xsd:anyType
-
-
- groupExcludePattern
- xsd:anyType
-
-
- relevantSourceId
- xsd:string
-
-
- c:UcfChangeType
-
-
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/objectTemplates/100-template-user.xml b/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/objectTemplates/100-template-user.xml
deleted file mode 100644
index 4873611..0000000
--- a/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/objectTemplates/100-template-user.xml
+++ /dev/null
@@ -1,92 +0,0 @@
-
-
-
-
- template-user
-
- strong
-
-
-
-
-
- assignment
-
-
-
-
-
-
-
-
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/resources/100-grouper.xml b/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/resources/100-grouper.xml
deleted file mode 100644
index af60e56..0000000
--- a/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/resources/100-grouper.xml
+++ /dev/null
@@ -1,201 +0,0 @@
-
-
-
-
-
- Grouper Resource
-
-
-
- connectorType
- com.evolveum.polygon.connector.grouper.rest.GrouperConnector
-
-
-
-
-
- https://grouper-ws:443
- banderson
- password
- :
-
- :
- app:.*
- test:.*
- ref:.*
- .*_(includes|excludes|systemOfRecord|systemOfRecordAndIncludes)
- ldap
- true
-
-
- false
- true
- false
-
-
-
- AMQP async update connector
-
-
-
- connectorType
- AsyncUpdateConnector
-
-
-
-
-
-
- amqp://mq:5672
- guest
- guest
- sampleQueue
-
-
-
-
-
-
-
-
-
- entitlement
- group
- ri:Group
- true
-
- [ri:name]
-
- strong
-
- extension/grouperName
-
-
-
- strong
-
-
-
-
- assignment
-
- all
-
-
-
-
-
- [ri:member]
- explicit
- indexOnly
-
-
-
-
-
- true
- entitlement
- group
- ri:Group
- OrgType
-
-
- extension/grouperName
-
- $projection/attributes/name
-
-
-
-
- linked
- http://midpoint.evolveum.com/xml/ns/public/provisioning/channels-3#asyncUpdate
-
-
-
- false
-
-
- linked
- true
-
-
- deleted
-
-
- true
-
-
- unlinked
-
- http://midpoint.evolveum.com/xml/ns/public/model/action-3#link
-
-
-
- unmatched
-
- http://midpoint.evolveum.com/xml/ns/public/model/action-3#addFocus
-
-
-
-
-
- passive
-
-
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/systemConfigurations/010-system-configuration.xml b/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/systemConfigurations/010-system-configuration.xml
deleted file mode 100644
index 52c86d3..0000000
--- a/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/systemConfigurations/010-system-configuration.xml
+++ /dev/null
@@ -1,1839 +0,0 @@
-
-
-
- SystemConfiguration
- true
-
-
-
-
-
-
- ERROR
- ro.isdc.wro.extensions.processor.css.Less4jProcessor
-
-
-
- OFF
- org.springframework.security.web.DefaultSecurityFilterChain
-
-
-
- OFF
- org.hibernate.engine.jdbc.spi.SqlExceptionHelper
-
-
-
- OFF
- org.hibernate.engine.jdbc.batch.internal.BatchingBatch
-
-
-
- WARN
- org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl
-
-
-
- OFF
- org.hibernate.internal.ExceptionMapperStandardImpl
-
-
-
- WARN
- org.apache.wicket.resource.PropertiesFactory
-
-
-
- ERROR
- org.springframework.context.support.ResourceBundleMessageSource
-
-
-
- INFO
- com.evolveum.midpoint.model.impl.lens.projector.Projector
-
-
-
- INFO
- com.evolveum.midpoint.model.impl.lens.Clockwork
-
-
- DEBUG
- com.evolveum.polygon.connector.grouper
-
-
-
- %date [%X{subsystem}] [%thread] %level \(%logger\): %msg%n
- MIDPOINT_LOG
- ${midpoint.home}/log/midpoint.log
- ${midpoint.home}/log/midpoint-%d{yyyy-MM-dd}.%i.log
- 10
- 100MB
- true
-
-
-
- %date %level: %msg%n
- MIDPOINT_PROFILE_LOG
- ${midpoint.home}/log/midpoint-profile.log
- ${midpoint.home}/log/midpoint-profile-%d{yyyy-MM-dd}.%i.log
- 10
- 100MB
- true
-
- MIDPOINT_LOG
- INFO
-
- false
- false
-
-
-
- UserType
-
-
-
- OrgType
-
-
- retired
-
-
-
-
-
-
- P3M
-
-
- P1M
-
-
-
- true
-
- true
-
-
- true
- true
-
-
- true
- true
-
-
- true
-
-
-
- true
-
-
- perCacheAndObjectType
-
-
-
- 60
-
- SystemConfigurationType
- ArchetypeType
- ObjectTemplateType
- SecurityPolicyType
- ValuePolicyType
- ResourceType
- RoleType
- OrgType
- ServiceType
- ShadowType
-
-
- perCacheAndObjectType
-
-
-
-
-
-
- perOperationAndObjectType
-
-
-
-
- performance
- Performance tracing
- true
- true
- performance-trace %{timestamp} %{focusName} %{milliseconds}
- true
- true
-
-
- functional
- Functional tracing
- true
- functional-trace %{timestamp} %{focusName}
- true
- true
- true
-
- normal
-
-
-
- functional-model-logging
- Functional tracing (with model logging)
- true
- functional-trace %{timestamp} %{focusName}
- true
- true
- true
-
-
- com.evolveum.midpoint.model
- TRACE
-
-
-
- normal
-
-
-
- functional-sql-logging
- Functional tracing (with SQL logging)
- true
- functional-trace %{timestamp} %{focusName}
- true
- true
- true
-
-
- org.hibernate.SQL
- TRACE
-
-
-
- normal
-
-
-
-
-
- demo/grouper
-
-
-
- UserType
-
- search
-
-
- myAccesses
-
-
- col-12 col-xxl-6
-
- fe fe-assignment
-
-
- 10
-
- viewAll
-
-
-
- fa fa-search
-
-
-
- /self/profile/user
- allAssignments
-
-
-
- requestAccess
-
-
-
- fas fa-plus-circle
-
-
-
- /self/requestAccess
-
-
- allAssignments
- 5
-
-
- myRequests
-
-
- col-12 col-xxl-6
-
- fe fe-case
-
-
- 20
-
- viewAll
-
-
-
- fa fa-search
-
-
-
- /admin/casesAll
- my-cases
-
-
- myRequests
- 5
-
-
- myWorkItems
-
-
- col-12 col-xxl-6
-
- fa fa-inbox
-
-
- 40
-
- viewAll
-
-
-
- fa fa-search
-
-
-
- /admin/myWorkItems
-
-
- myWorkItems
- 5
-
-
- myAccounts
-
-
- col-12 col-xxl-6
-
- fa fa-male
-
-
- 30
-
- viewAll
-
-
-
- fa fa-search
-
-
-
- /self/profile/user
- projections
-
-
- projections
- 5
-
-
- profileWidget
-
-
- PageSelfDashboard.profile.description
- col-md-3
-
- bg-green fa fa-user
-
-
- linkWidget
-
- profile-widget-action
-
- /self/profile/user
-
-
-
-
- credentialsWidget
-
-
- PageSelfDashboard.credentials.description
- col-md-3
-
- bg-blue fa fa-shield-alt
-
-
- linkWidget
-
- credentials-widget-action
-
- /self/credentials
-
-
-
-
- listResourcesWidget
-
-
- col-md-3
-
- bg-purple fa fa-database
-
-
- linkWidget
-
- list-resources-widget-action
-
- /admin/resources
-
-
-
-
- listUsersWidget
-
-
- col-md-3
-
- bg-red fa fa-user
-
-
- linkWidget
-
- list-resources-widget-action
-
- /admin/users
-
-
-
-
-
-
- my-cases
-
-
-
-
- My cases
-
- MyCases.title
-
-
- My case
-
- fe fe-case-object
-
-
- 1000
- CaseType
-
-
-
-
-
-
- manual-case-view
-
-
-
-
- All manual cases
-
- AllManualCases.title
-
-
- Manual case
- Manual provisioning cases
-
- 1010
- CaseType
-
-
-
-
-
-
- operation-request-case-view
-
-
-
-
- All requests
-
- AllRequests.title
-
-
- Request
- Operation requests
-
- 1020
- CaseType
-
-
-
-
-
-
- approval-case-view
-
-
-
-
- All approvals
-
- AllApprovals.title
-
-
- Approval
- Approval cases
-
- 1030
- CaseType
-
-
-
-
-
-
- correlation-case-view
-
-
-
-
- All correlations
-
- AllCorrelations.title
-
-
- Correlation
- Correlation cases
-
- 1040
- CaseType
-
-
-
-
-
- reconciliation-tasks-view
- 30
- TaskType
-
-
-
-
-
- recomputation-tasks-view
- 30
- TaskType
-
-
-
-
-
- import-tasks-view
- 30
- TaskType
-
-
-
-
-
- live-sync-tasks-view
- 30
- TaskType
-
-
-
-
-
- async-update-tasks-view
- 30
- TaskType
-
-
-
-
-
- cleanup-tasks-view
- 30
- TaskType
-
-
-
-
-
- report-tasks-view
-
-
-
- Report tasks
- report tasks
-
- ReportTasks.title
-
-
-
- fa fa-chart-pie
- green
-
-
- 30
- TaskType
-
-
-
-
-
- non-iterative-bulk-tasks-view
- 30
- TaskType
-
-
-
-
-
- iterative-bulk-tasks-view
- 30
- TaskType
-
-
-
-
-
- report-import-task-view
- 30
- add
- TaskType
-
-
-
-
-
- export-report-tasks-view
- add
- 30
- TaskType
-
-
-
-
-
-
-
- export-report-distributed-tasks-view
- add
- 30
- TaskType
-
-
-
-
-
-
-
- shadow-integrity-check-task-view
- 30
- add
- TaskType
-
-
-
-
-
- shadows-refresh-task-view
- 30
- add
- TaskType
-
-
-
-
-
- objects-delete-task-view
- 30
- add
- TaskType
-
-
-
-
-
- shadows-delete-long-time-not-updated-task-view
- 30
- add
- TaskType
-
-
-
-
-
- execute-change-task-view
- 30
- add
- TaskType
-
-
-
-
-
- execute-deltas-task-view
- 30
- add
- TaskType
-
-
-
-
-
- reindex-repository-task-view
- 30
- add
- TaskType
-
-
-
-
-
- object-integrity-check-task-view
- 30
- add
- TaskType
-
-
-
-
-
- validity-task-view
- 30
- add
- TaskType
-
-
-
-
-
- trigger-task-view
- 30
- add
- TaskType
-
-
-
-
-
- propagation-task-view
- 30
- add
- TaskType
-
-
-
-
-
- multi-propagation-task-view
- 30
- add
- TaskType
-
-
-
-
-
- certification-tasks-view
- 30
- TaskType
-
-
-
-
-
- approval-tasks-view
- 30
- TaskType
-
-
-
-
-
- utility-tasks-view
- 30
- TaskType
-
-
-
-
-
- system-tasks-view
- 30
- TaskType
-
-
-
-
-
- dashboard-reports-view
- ReportType
-
-
-
-
-
- collection-reports-view
- ReportType
-
-
-
-
-
- application-role
- add
- RoleType
-
-
-
-
-
- business-role
- add
- RoleType
-
-
-
-
-
- application
-
-
-
- ServiceType
-
-
-
-
-
- event-mark
- c:MarkType
-
-
-
-
-
-
-
- object-mark
- c:MarkType
-
-
-
-
-
-
-
- Persons
- This view displays all users with archetype "Person"
- person-view
- 10
- UserType
-
-
-
-
-
-
-
-
- Allow searching for users having account on specific resource. Intent is not considered. The search item is not displayed by default
- (visibleByDefault=false).
-
- true
-
-
- linkRef/@ matches (
- . type ShadowType
- and resourceRef/@/name = `resourceParameter?.getName()?.getOrig()`
- and kind = "account" )
-
-
-
-
-
-
- resourceParameter
- c:ObjectReferenceType
- ResourceType
-
-
-
- Allow searching for users not having account on specific resource. Intent is not considered. The search item is not displayed by default
- (visibleByDefault=false).
-
- true
-
-
- linkRef/@ not matches (
- . type ShadowType
- and resourceRef/@/name = `resourceParameter?.getName()?.getOrig()`
- and kind = "account" )
-
-
-
-
-
-
- resourceParameter
- c:ObjectReferenceType
- ResourceType
-
-
-
-
-
-
- resource-templates
-
-
-
- All resource templates
-
- ResourceType.template.all.title
-
-
- Resource template
-
- fa fa-file-alt
-
-
- ResourceType
-
-
-
-
-
-
-
-
- c:TaskType
-
- advanced-options-panel
-
-
-
- formPanel
-
- advanced-options
- 150
-
-
-
- -
- cleanupAfterCompletion
-
- -
- threadStopAction
-
- -
- binding
-
- -
- dependent
-
-
-
-
- operational-attributes-panel
-
-
-
- formPanel
-
- operational-attributes
- 900
-
-
-
- -
- executionState
-
- -
- schedulingState
-
- -
- node
-
- -
- nodeAsObserved
-
- -
- resultStatus
-
- -
- result
-
- -
- nextRunStartTimestamp
-
- -
- nextRetryTimestamp
-
- -
- unpauseAction
-
- -
- taskIdentifier
-
- -
- parent
-
- -
- waitingReason
-
- -
- stateBeforeSuspend
-
- -
- schedulingStateBeforeSuspend
-
- -
- otherHandlersUriStack
-
- -
- channel
-
- -
- subtaskRef
-
- -
- dependentTaskRef
-
- -
- lastRunStartTimestamp
-
- -
- lastRunFinishTimestamp
-
- -
- completionTimestamp
-
-
-
- 910
- hidden
- operation-attributes-progress
-
-
-
- -
- progress
-
- -
- expectedTotal
-
- -
- stalledSince
-
-
-
-
-
- c:UserType
-
- applications
-
-
-
- modify
- roleMemberships
-
- applications
- c:ServiceType
-
-
-
-
-
- hidden
- ServiceType
- ServiceType
-
-
-
-
-
-
-
- rw-type-basic
-
- basic
-
-
-
- -
- schemaHandling/objectType/displayName
- visible
-
- -
- schemaHandling/objectType/description
- visible
-
- -
- schemaHandling/objectType/kind
- visible
-
- -
- schemaHandling/objectType/intent
- visible
-
- -
- schemaHandling/objectType/securityPolicyRef
- visible
-
- -
- schemaHandling/objectType/default
- visible
-
-
-
- hidden
- schemaHandling/objectType
-
- rw-type-basic
-
-
- rw-type-delineation
-
- delineation
-
-
-
- -
- schemaHandling/objectType/delineation/objectClass
- visible
-
- -
- schemaHandling/objectType/delineation/auxiliaryObjectClass
- visible
-
- -
- schemaHandling/objectType/delineation/searchHierarchyScope
- visible
-
- -
- schemaHandling/objectType/delineation/filter
- visible
-
- -
- schemaHandling/objectType/delineation/classificationCondition
- visible
-
-
-
- hidden
- schemaHandling/objectType/delineation
-
- rw-type-delineation
-
-
- rw-attribute-limitations
-
- limitationsMapping
-
-
-
- -
- schemaHandling/objectType/attribute/limitations/access/read
- visible
-
- -
- schemaHandling/objectType/attribute/limitations/access/add
- visible
-
- -
- schemaHandling/objectType/attribute/limitations/access/modify
- visible
-
- -
- schemaHandling/objectType/attribute/limitations/minOccurs
- visible
-
- -
- schemaHandling/objectType/attribute/limitations/maxOccurs
- visible
-
- -
- schemaHandling/objectType/attribute/limitations/processing
- visible
-
-
-
- hidden
- schemaHandling/objectType/attribute/limitations
-
- rw-attribute-limitations
-
-
- rw-synchronization-reaction-main
-
- reactionMainSetting
-
-
-
- -
- schemaHandling/objectType/synchronization/reaction/name
- visible
-
- -
- schemaHandling/objectType/synchronization/reaction/description
- visible
-
- -
- schemaHandling/objectType/synchronization/reaction/situation
- visible
-
-
-
- hidden
- schemaHandling/objectType/synchronization/reaction
-
- rw-synchronization-reaction-main
-
-
- rw-synchronization-reaction-optional
-
- reactionOptionalSetting
-
-
-
- -
- schemaHandling/objectType/synchronization/reaction/condition
- visible
-
- -
- schemaHandling/objectType/synchronization/reaction/channel
- visible
-
- -
- schemaHandling/objectType/synchronization/reaction/order
- visible
-
-
-
- hidden
- schemaHandling/objectType/synchronization/reaction
-
- rw-synchronization-reaction-optional
-
-
- rw-attribute
-
- mainConfigurationAttribute
-
-
-
- -
- schemaHandling/objectType/attribute/ref
- visible
-
- -
- schemaHandling/objectType/attribute/displayName
- visible
-
- -
- schemaHandling/objectType/attribute/help
- visible
-
- -
- schemaHandling/objectType/attribute/description
- visible
-
- -
- schemaHandling/objectType/attribute/tolerant
- visible
-
- -
- schemaHandling/objectType/attribute/exclusiveStrong
- visible
-
- -
- schemaHandling/objectType/attribute/readReplaceMode
- visible
-
- -
- schemaHandling/objectType/attribute/fetchStrategy
- visible
-
- -
- schemaHandling/objectType/attribute/matchingRule
- visible
-
-
-
- hidden
- schemaHandling/objectType/attribute
-
- rw-attribute
-
-
- rw-association
-
- association
-
-
-
- -
- schemaHandling/objectType/association/ref
- visible
-
- -
- schemaHandling/objectType/association/displayName
- visible
-
- -
- schemaHandling/objectType/association/description
- visible
-
- -
- schemaHandling/objectType/association/auxiliaryObjectClass
- visible
-
- -
- schemaHandling/objectType/association/kind
- visible
-
- -
- schemaHandling/objectType/association/intent
- visible
-
- -
- schemaHandling/objectType/association/direction
- visible
-
- -
- schemaHandling/objectType/association/associationAttribute
- visible
-
- -
- schemaHandling/objectType/association/shortcutAssociationAttribute
- visible
-
- -
- schemaHandling/objectType/association/valueAttribute
- visible
-
- -
- schemaHandling/objectType/association/shortcutValueAttribute
- visible
-
- -
- schemaHandling/objectType/association/explicitReferentialIntegrity
- visible
-
-
-
- hidden
- schemaHandling/objectType/association
-
- rw-association
-
-
-
-
- rw-connectorConfiguration-partial
-
- required
-
-
-
- -
- connectorConfiguration/configurationProperties/jdbcUrlTemplate
-
- -
- connectorConfiguration/configurationProperties/jdbcDriver
-
- -
- connectorConfiguration/configurationProperties/password
-
- -
- connectorConfiguration/configurationProperties/user
-
- -
- connectorConfiguration/configurationProperties/port
-
- -
- connectorConfiguration/configurationProperties/host
-
- -
- connectorConfiguration/configurationProperties/database
-
-
-
- hidden
- connectorConfiguration/configurationProperties
-
- rw-connectorConfiguration-partial
-
-
- run
-
-
-
- connectorType
- org.identityconnectors.databasetable.DatabaseTableConnector
-
-
- available
- true
-
-
-
-
-
-
-
- rw-connectorConfiguration-partial
-
- required
-
-
-
- -
- connectorConfiguration/configurationProperties/host
-
- -
- connectorConfiguration/configurationProperties/port
-
- -
- connectorConfiguration/configurationProperties/connectionSecurity
-
- -
- connectorConfiguration/configurationProperties/bindDn
- visible
-
- -
- connectorConfiguration/configurationProperties/bindPassword
- visible
-
-
-
- hidden
- connectorConfiguration/configurationProperties
-
- rw-connectorConfiguration-partial
-
-
- run
-
-
-
- connectorType
- com.evolveum.polygon.connector.ldap.LdapConnector
-
-
- available
- true
-
-
-
-
-
-
-
- rw-connectorConfiguration-partial
-
- required
-
-
-
- -
- connectorConfiguration/configurationProperties/host
-
- -
- connectorConfiguration/configurationProperties/port
-
- -
- connectorConfiguration/configurationProperties/connectionSecurity
-
- -
- connectorConfiguration/configurationProperties/bindDn
- visible
-
- -
- connectorConfiguration/configurationProperties/bindPassword
- visible
-
-
-
- hidden
- connectorConfiguration/configurationProperties
-
- rw-connectorConfiguration-partial
-
-
- run
-
-
-
- connectorType
- com.evolveum.polygon.connector.ldap.ad.AdLdapConnector
-
-
- available
- true
-
-
-
-
-
-
- true
-
- admin-dashboard
-
-
-
-
-
- allRoles
- true
- allRoles
-
-
- allOrgs
- allOrgs
-
-
- allServices
- allServices
-
-
-
-
-
- never
- never
-
-
-
-
- safe
-
- "Safe" expression profile. It is supposed to contain only operations that are "safe",
- i.e. operations that have very little risk to harm the system, circumvent midPoint security
- and so on. Use of those operations should be reasonably safe in all expressions.
- However, there are limitations. This profile may incomplete or it may even be not completely secure.
- Proper security testing of this profile was not yet conducted. It is provided here "AS IS",
- without any guarantees. Use at your own risk.
-
- deny
-
- asIs
- allow
-
-
- path
- allow
-
-
- value
- allow
-
-
- const
- allow
-
-
- script
- deny
-
-
-
-
- script-safe
- deny
-
- com.evolveum.midpoint.xml.ns._public.common.common_3
- MidPoint common schema - generated bean classes
- allow
-
-
- com.evolveum.prism.xml.ns._public.types_3
- Prism schema - bean classes
- allow
-
-
- java.lang.Integer
- allow
-
-
- java.lang.Object
- Basic Java operations.
- deny
-
- equals
- allow
-
-
- hashCode
- allow
-
-
-
- java.lang.String
- String operations are generally safe. But Groovy is adding execute() method which is very dangerous.
- allow
-
- execute
- deny
-
-
-
- java.lang.CharSequence
- allow
-
-
- java.lang.Enum
- allow
-
-
- java.util.List
- List operations are generally safe. But Groovy is adding execute() method which is very dangerous.
- allow
-
- execute
- deny
-
-
-
- java.util.ArrayList
- List operations are generally safe. But Groovy is adding execute() method which is very dangerous.
- allow
-
- execute
- deny
-
-
-
- java.util.Map
- allow
-
-
- java.util.HashMap
- allow
-
-
- java.util.Date
- allow
-
-
- javax.xml.namespace.QName
- allow
-
-
- javax.xml.datatype.XMLGregorianCalendar
- allow
-
-
- java.lang.System
- Just a few methods of System are safe enough.
- deny
-
- currentTimeMillis
- allow
-
-
-
- java.lang.IllegalStateException
- Basic Java exception. Also used in test.
- allow
-
-
- java.lang.IllegalArgumentException
- Basic Java exception.
- allow
-
-
- com.evolveum.midpoint.model.common.expression.functions.BasicExpressionFunctions
- MidPoint basic functions library
- allow
-
-
- com.evolveum.midpoint.model.common.expression.functions.LogExpressionFunctions
- MidPoint logging functions library
- allow
-
-
- com.evolveum.midpoint.report.impl.ReportFunctions
- MidPoint report functions library
- allow
-
-
- org.apache.commons.lang3.StringUtils
- Apache Commons: Strings
- allow
-
-
-
-
-
-
-
-
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/tasks/995-task-group-scavenger.xml b/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/tasks/995-task-group-scavenger.xml
deleted file mode 100644
index 11a3005..0000000
--- a/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/tasks/995-task-group-scavenger.xml
+++ /dev/null
@@ -1,92 +0,0 @@
-
-
-
-
-
-
- Group Scavenger
-
-
-
-
-
- runnable
-
- recurring
- 60
-
-
-
-
-
- OrgType
-
-
-
- lifecycleState
- retired
-
-
-
-
-
-
- execute-script
-
- script
-
- import com.evolveum.midpoint.xml.ns._public.common.common_3.*
-
- result = midpoint.currentResult
- log.info('Processing dead group: {}', input)
- query = prismContext.queryFor(UserType.class)
- .item(UserType.F_ROLE_MEMBERSHIP_REF).ref(input.oid)
- .build()
- members = midpoint.repositoryService.searchObjects(UserType.class, query, null, result)
- log.info('Found {} members: {}', members.size(), members)
-
- for (member in members) {
- log.info('Going to recompute {}', member)
- try {
- midpoint.recompute(UserType.class, member.oid)
- } catch (Throwable t) {
- log.error('Couldn\'t recompute {}: {}', member, t.message, t)
- }
- }
- log.info('Members recomputed; checking if the org is still in "retired" state')
- orgAfter = midpoint.repositoryService.getObject(OrgType.class, input.oid, null, result)
- currentState = orgAfter.asObjectable().lifecycleState
- log.info('Current state = {}', currentState)
- if (currentState == 'retired') {
- log.info('Deleting the org: {}', orgAfter)
- midpoint.deleteObject(OrgType.class, orgAfter.oid, null)
- } else {
- log.info('State has changed, not deleting the org: {}', orgAfter)
- }
- log.info('Dead group processing done: {}', input)
-
-
-
-
-
-
-
-
-
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/cs-portal.csv b/demo/grouper/midpoint_server/cs-portal.csv
similarity index 100%
rename from demo/grouper/midpoint_server/container_files/mp-home/cs-portal.csv
rename to demo/grouper/midpoint_server/cs-portal.csv
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/faculty-portal.csv b/demo/grouper/midpoint_server/faculty-portal.csv
similarity index 100%
rename from demo/grouper/midpoint_server/container_files/mp-home/faculty-portal.csv
rename to demo/grouper/midpoint_server/faculty-portal.csv
diff --git a/demo/grouper/midpoint_server/icf-connectors/connector-grouper-1.1.1.0.jar b/demo/grouper/midpoint_server/icf-connectors/connector-grouper-1.1.1.0.jar
new file mode 100644
index 0000000..55d7a58
Binary files /dev/null and b/demo/grouper/midpoint_server/icf-connectors/connector-grouper-1.1.1.0.jar differ
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/icf-connectors/connector-grouper-rest-0.7.jar b/demo/grouper/midpoint_server/icf-connectors/connector-grouper-rest-0.7.jar
similarity index 100%
rename from demo/grouper/midpoint_server/container_files/mp-home/icf-connectors/connector-grouper-rest-0.7.jar
rename to demo/grouper/midpoint_server/icf-connectors/connector-grouper-rest-0.7.jar
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/icf-connectors/net.tirasa.connid.bundles.db.scriptedsql-2.2.6-SNAPSHOT.jar b/demo/grouper/midpoint_server/icf-connectors/net.tirasa.connid.bundles.db.scriptedsql-2.2.6-SNAPSHOT.jar
similarity index 100%
rename from demo/grouper/midpoint_server/container_files/mp-home/icf-connectors/net.tirasa.connid.bundles.db.scriptedsql-2.2.6-SNAPSHOT.jar
rename to demo/grouper/midpoint_server/icf-connectors/net.tirasa.connid.bundles.db.scriptedsql-2.2.6-SNAPSHOT.jar
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/lib/mariadb-java-client-3.0.6.jar b/demo/grouper/midpoint_server/lib/mariadb-java-client-3.0.6.jar
similarity index 100%
rename from demo/grouper/midpoint_server/container_files/mp-home/lib/mariadb-java-client-3.0.6.jar
rename to demo/grouper/midpoint_server/lib/mariadb-java-client-3.0.6.jar
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/lib/mysql-connector-java-8.0.30.jar b/demo/grouper/midpoint_server/lib/mysql-connector-java-8.0.30.jar
similarity index 100%
rename from demo/grouper/midpoint_server/container_files/mp-home/lib/mysql-connector-java-8.0.30.jar
rename to demo/grouper/midpoint_server/lib/mysql-connector-java-8.0.30.jar
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/mailing-lists.csv b/demo/grouper/midpoint_server/mailing-lists.csv
similarity index 100%
rename from demo/grouper/midpoint_server/container_files/mp-home/mailing-lists.csv
rename to demo/grouper/midpoint_server/mailing-lists.csv
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/archetypes/300-archetype-affiliation.xml b/demo/grouper/midpoint_server/post-initial-objects/archetypes/300-archetype-affiliation.xml
similarity index 100%
rename from demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/archetypes/300-archetype-affiliation.xml
rename to demo/grouper/midpoint_server/post-initial-objects/archetypes/300-archetype-affiliation.xml
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/archetypes/300-archetype-course.xml b/demo/grouper/midpoint_server/post-initial-objects/archetypes/300-archetype-course.xml
similarity index 100%
rename from demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/archetypes/300-archetype-course.xml
rename to demo/grouper/midpoint_server/post-initial-objects/archetypes/300-archetype-course.xml
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/archetypes/300-archetype-department.xml b/demo/grouper/midpoint_server/post-initial-objects/archetypes/300-archetype-department.xml
similarity index 100%
rename from demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/archetypes/300-archetype-department.xml
rename to demo/grouper/midpoint_server/post-initial-objects/archetypes/300-archetype-department.xml
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/archetypes/300-archetype-external-person.xml b/demo/grouper/midpoint_server/post-initial-objects/archetypes/300-archetype-external-person.xml
similarity index 100%
rename from demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/archetypes/300-archetype-external-person.xml
rename to demo/grouper/midpoint_server/post-initial-objects/archetypes/300-archetype-external-person.xml
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/archetypes/300-archetype-generic-grouper-group.xml b/demo/grouper/midpoint_server/post-initial-objects/archetypes/300-archetype-generic-grouper-group.xml
similarity index 100%
rename from demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/archetypes/300-archetype-generic-grouper-group.xml
rename to demo/grouper/midpoint_server/post-initial-objects/archetypes/300-archetype-generic-grouper-group.xml
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/archetypes/300-archetype-mailing-list.xml b/demo/grouper/midpoint_server/post-initial-objects/archetypes/300-archetype-mailing-list.xml
similarity index 100%
rename from demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/archetypes/300-archetype-mailing-list.xml
rename to demo/grouper/midpoint_server/post-initial-objects/archetypes/300-archetype-mailing-list.xml
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/archetypes/300-archetype-midpoint-group.xml b/demo/grouper/midpoint_server/post-initial-objects/archetypes/300-archetype-midpoint-group.xml
similarity index 100%
rename from demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/archetypes/300-archetype-midpoint-group.xml
rename to demo/grouper/midpoint_server/post-initial-objects/archetypes/300-archetype-midpoint-group.xml
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/archetypes/300-archetype-sis-person.xml b/demo/grouper/midpoint_server/post-initial-objects/archetypes/300-archetype-sis-person.xml
similarity index 100%
rename from demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/archetypes/300-archetype-sis-person.xml
rename to demo/grouper/midpoint_server/post-initial-objects/archetypes/300-archetype-sis-person.xml
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/bulkActions/900-test-all-resources.xml b/demo/grouper/midpoint_server/post-initial-objects/bulkActions/900-test-all-resources.xml
similarity index 93%
rename from demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/bulkActions/900-test-all-resources.xml
rename to demo/grouper/midpoint_server/post-initial-objects/bulkActions/900-test-all-resources.xml
index 5b22670..380bcf5 100644
--- a/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/bulkActions/900-test-all-resources.xml
+++ b/demo/grouper/midpoint_server/post-initial-objects/bulkActions/900-test-all-resources.xml
@@ -6,6 +6,7 @@
c:ResourceType
+ fb0bbf07-e33f-4ddd-85a1-16a7edc237f2
0a37121f-d515-4a23-9b6d-554c5ef61272
4d70a0da-02dd-41cf-b0a1-00e75d3eaa15
a343fc2e-3954-4034-ba1a-2b72c21e577a
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/bulkActions/910-recompute-grouper-objects.xml b/demo/grouper/midpoint_server/post-initial-objects/bulkActions/910-recompute-grouper-objects.xml
similarity index 100%
rename from demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/bulkActions/910-recompute-grouper-objects.xml
rename to demo/grouper/midpoint_server/post-initial-objects/bulkActions/910-recompute-grouper-objects.xml
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/ordering.txt b/demo/grouper/midpoint_server/post-initial-objects/ordering.txt
similarity index 100%
rename from demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/ordering.txt
rename to demo/grouper/midpoint_server/post-initial-objects/ordering.txt
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/orgs/100-org-affiliations.xml b/demo/grouper/midpoint_server/post-initial-objects/orgs/100-org-affiliations.xml
similarity index 100%
rename from demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/orgs/100-org-affiliations.xml
rename to demo/grouper/midpoint_server/post-initial-objects/orgs/100-org-affiliations.xml
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/orgs/100-org-courses.xml b/demo/grouper/midpoint_server/post-initial-objects/orgs/100-org-courses.xml
similarity index 100%
rename from demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/orgs/100-org-courses.xml
rename to demo/grouper/midpoint_server/post-initial-objects/orgs/100-org-courses.xml
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/orgs/100-org-departments.xml b/demo/grouper/midpoint_server/post-initial-objects/orgs/100-org-departments.xml
similarity index 100%
rename from demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/orgs/100-org-departments.xml
rename to demo/grouper/midpoint_server/post-initial-objects/orgs/100-org-departments.xml
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/orgs/100-org-generic-groups.xml b/demo/grouper/midpoint_server/post-initial-objects/orgs/100-org-generic-groups.xml
similarity index 100%
rename from demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/orgs/100-org-generic-groups.xml
rename to demo/grouper/midpoint_server/post-initial-objects/orgs/100-org-generic-groups.xml
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/orgs/100-org-mailing-lists.xml b/demo/grouper/midpoint_server/post-initial-objects/orgs/100-org-mailing-lists.xml
similarity index 100%
rename from demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/orgs/100-org-mailing-lists.xml
rename to demo/grouper/midpoint_server/post-initial-objects/orgs/100-org-mailing-lists.xml
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/orgs/100-org-midpoint-groups.xml b/demo/grouper/midpoint_server/post-initial-objects/orgs/100-org-midpoint-groups.xml
similarity index 100%
rename from demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/orgs/100-org-midpoint-groups.xml
rename to demo/grouper/midpoint_server/post-initial-objects/orgs/100-org-midpoint-groups.xml
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/orgs/400-org-grouper-sysadmin.xml b/demo/grouper/midpoint_server/post-initial-objects/orgs/400-org-grouper-sysadmin.xml
similarity index 100%
rename from demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/orgs/400-org-grouper-sysadmin.xml
rename to demo/grouper/midpoint_server/post-initial-objects/orgs/400-org-grouper-sysadmin.xml
diff --git a/demo/grouper/midpoint_server/post-initial-objects/resources/100-grouper-new.xml b/demo/grouper/midpoint_server/post-initial-objects/resources/100-grouper-new.xml
new file mode 100644
index 0000000..c01db8a
--- /dev/null
+++ b/demo/grouper/midpoint_server/post-initial-objects/resources/100-grouper-new.xml
@@ -0,0 +1,379 @@
+
+
+
+
+ Source: Groups
+
+
+
+
+
+
+
+ c:connectorType
+ com.evolveum.polygon.connector.grouper.GrouperConnector
+
+
+ connectorVersion
+ 1.1.1.0
+
+
+
+
+
+
+ grouper_data
+ 5432
+ grouper
+ password
+ gr
+ grouper_to_midpoint
+ members
+ member_of
+ emailListName
+
+
+ false
+ false
+ false
+
+
+
+
+
+ account
+ default
+ Default Account
+ true
+ ri:subject
+
+
+ c:UserType
+
+
+
+ [ri:subject_id]
+
+
+ $user/name
+
+
+
+
+
+
+
+ [ri:member_of]
+ explicit
+
+
+ [ri:group]
+
+ strong
+
+
+ c:OrgType
+
+
+ name
+
+
+
+
+
+
+
+
+ grouper-group
+
+
+ subtype
+
+
+
+
+
+
+ assignment
+
+
+
+
+
+
+
+ entitlement
+ group
+ objectToSubject
+ ri:members
+ icfs:uid
+ ri:member_of
+ icfs:uid
+ false
+
+
+
+
+
+ unique_index
+ -
+
[name]
+
+
+
+
+
+
+
+ unmatched
+
+
+ true
+
+
+
+
+ unlinked
+
+
+ true
+
+
+
+
+ linked
+
+
+
+
+
+ deleted
+
+
+
+
+
+
+
+
+
+ entitlement
+ group
+ Group
+ true
+ ri:group
+
+
+ c:OrgType
+
+
+
+ [ri:emailListName]
+ explicit
+
+ strong
+
+ emailAddress
+
+
+
+
+
+ [icfs:uid]
+
+
+ $focus/name
+
+
+
+
+
+ [ri:group_name]
+
+ strong
+
+ extension/grouperName
+
+
+
+ strong
+
+
+
+
+ assignment
+
+ all
+
+
+
+
+
+ [ri:display_name]
+
+
+ extension/grouperDisplayName
+
+
+
+
+ $focus/displayName
+
+
+
+
+ [ri:description]
+
+
+ $focus/description
+
+
+
+
+
+ [ri:members]
+ explicit
+
+
+
+
+
+ unique_index
+ -
+
[name]
+
+
+
+
+
+
+
+ unmatched
+
+
+
+ true
+
+
+
+
+ unlinked
+
+
+ true
+
+
+
+
+ linked
+
+
+
+
+
+ deleted
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+ 2023-05-24T13:23:53.145+02:00
+ d991389de17be20e-55b20a5934dbcc31
+
+
+
+
+ false
+
+
+
+
+ connector
+
+
+
+
+
+
+
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/resources/100-ldap-main.xml b/demo/grouper/midpoint_server/post-initial-objects/resources/100-ldap-main.xml
similarity index 99%
rename from demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/resources/100-ldap-main.xml
rename to demo/grouper/midpoint_server/post-initial-objects/resources/100-ldap-main.xml
index 57bedbe..ffb88a2 100644
--- a/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/resources/100-ldap-main.xml
+++ b/demo/grouper/midpoint_server/post-initial-objects/resources/100-ldap-main.xml
@@ -36,11 +36,11 @@
directory
dc=internet2,dc=edu
- cn=Directory Manager
+ cn=admin,dc=internet2,dc=edu
password
- nsUniqueId
+ entryUUID
spr
memberOf
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/resources/100-source-sis-persons.xml b/demo/grouper/midpoint_server/post-initial-objects/resources/100-source-sis-persons.xml
similarity index 100%
rename from demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/resources/100-source-sis-persons.xml
rename to demo/grouper/midpoint_server/post-initial-objects/resources/100-source-sis-persons.xml
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/resources/100-target-cs-portal.xml b/demo/grouper/midpoint_server/post-initial-objects/resources/100-target-cs-portal.xml
similarity index 100%
rename from demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/resources/100-target-cs-portal.xml
rename to demo/grouper/midpoint_server/post-initial-objects/resources/100-target-cs-portal.xml
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/resources/100-target-faculty-portal.xml b/demo/grouper/midpoint_server/post-initial-objects/resources/100-target-faculty-portal.xml
similarity index 100%
rename from demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/resources/100-target-faculty-portal.xml
rename to demo/grouper/midpoint_server/post-initial-objects/resources/100-target-faculty-portal.xml
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/resources/100-target-mailing-lists.xml b/demo/grouper/midpoint_server/post-initial-objects/resources/100-target-mailing-lists.xml
similarity index 100%
rename from demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/resources/100-target-mailing-lists.xml
rename to demo/grouper/midpoint_server/post-initial-objects/resources/100-target-mailing-lists.xml
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/roles/200-metarole-grouper-provided-group.xml b/demo/grouper/midpoint_server/post-initial-objects/roles/200-metarole-grouper-provided-group.xml
similarity index 79%
rename from demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/roles/200-metarole-grouper-provided-group.xml
rename to demo/grouper/midpoint_server/post-initial-objects/roles/200-metarole-grouper-provided-group.xml
index a57bb9f..291410f 100644
--- a/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/roles/200-metarole-grouper-provided-group.xml
+++ b/demo/grouper/midpoint_server/post-initial-objects/roles/200-metarole-grouper-provided-group.xml
@@ -90,6 +90,7 @@
+
displayName
@@ -149,46 +151,8 @@
-
- lifecycle state
- This mapping sets org lifecycle state to be either "active" or "retired", depending on
- whether Grouper group for this org still exists. Orgs in the latter state are on the way to deletion:
- their members are unassigned and after no members are there, the org is automatically deleted.
- strong
-
-
-
-
- lifecycleState
-
-
-
2
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/roles/200-metarole-ldap-group.xml b/demo/grouper/midpoint_server/post-initial-objects/roles/200-metarole-ldap-group.xml
similarity index 100%
rename from demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/roles/200-metarole-ldap-group.xml
rename to demo/grouper/midpoint_server/post-initial-objects/roles/200-metarole-ldap-group.xml
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/roles/200-role-ldap-basic.xml b/demo/grouper/midpoint_server/post-initial-objects/roles/200-role-ldap-basic.xml
similarity index 100%
rename from demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/roles/200-role-ldap-basic.xml
rename to demo/grouper/midpoint_server/post-initial-objects/roles/200-role-ldap-basic.xml
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/securityPolicy/000-security-policy.xml b/demo/grouper/midpoint_server/post-initial-objects/securityPolicy/000-security-policy.xml
similarity index 70%
rename from demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/securityPolicy/000-security-policy.xml
rename to demo/grouper/midpoint_server/post-initial-objects/securityPolicy/000-security-policy.xml
index b58d2fe..65c6fa7 100644
--- a/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/securityPolicy/000-security-policy.xml
+++ b/demo/grouper/midpoint_server/post-initial-objects/securityPolicy/000-security-policy.xml
@@ -1,5 +1,4 @@
-
-
+
Default Security Policy
@@ -16,21 +15,21 @@
midpointdemo-shibboleth
true
-
- /etc/pki/mp/sp-shibboleth-keys.jks
-
- changeit
-
- signing-key
-
- password
-
-
+
+ /opt/midpoint/var/shibboleth/shibboleth_sp_keys.jks
+
+ changeit
+
+ signing-key
+
+ password
+
+
- https://idptestbed/idp/shibboleth
+ https://idptestbed/idp/shibboleth
- /etc/shibboleth/idp-metadata.xml
+ /opt/midpoint/var/shibboleth/idp-metadata.xml
Shibboleth
urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST
@@ -40,16 +39,18 @@
- admin-gui-default
- Default gui sequence
+ admin-gui-saml-internal
+
+ Internal SAML2 GUI authentication sequence.
+
- true
http://midpoint.evolveum.com/xml/ns/public/common/channels-3#user
- gui-default
+ true
+ saml-internal
- loginForm
- 1
+ mySamlSso
+ 30
sufficient
@@ -74,8 +75,8 @@
rest-default
- true
http://midpoint.evolveum.com/xml/ns/public/common/channels-3#rest
+ true
rest-default
@@ -87,8 +88,8 @@
actuator-default
- true
http://midpoint.evolveum.com/xml/ns/public/common/channels-3#actuator
+ true
actuator-default
diff --git a/demo/grouper/midpoint_server/post-initial-objects/systemConfigurations/000-public-url.xml b/demo/grouper/midpoint_server/post-initial-objects/systemConfigurations/000-public-url.xml
new file mode 100644
index 0000000..d353b5e
--- /dev/null
+++ b/demo/grouper/midpoint_server/post-initial-objects/systemConfigurations/000-public-url.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+ c:SystemConfigurationType
+
+ modify
+
+ delta
+
+
+ add
+ infrastructure
+
+ https://localhost/midpoint
+
+
+
+
+
+
diff --git a/demo/grouper/midpoint-objects-manual/tasks/task-import-sis-persons.xml b/demo/grouper/midpoint_server/post-initial-objects/tasks/980_import-sis-persons.xml
similarity index 100%
rename from demo/grouper/midpoint-objects-manual/tasks/task-import-sis-persons.xml
rename to demo/grouper/midpoint_server/post-initial-objects/tasks/980_import-sis-persons.xml
diff --git a/demo/grouper/midpoint-objects-manual/tasks/task-reconciliation-grouper-groups.xml b/demo/grouper/midpoint_server/post-initial-objects/tasks/990_task-liveSync-grouper.xml
similarity index 66%
rename from demo/grouper/midpoint-objects-manual/tasks/task-reconciliation-grouper-groups.xml
rename to demo/grouper/midpoint_server/post-initial-objects/tasks/990_task-liveSync-grouper.xml
index 421c1a0..88a504a 100644
--- a/demo/grouper/midpoint-objects-manual/tasks/task-reconciliation-grouper-groups.xml
+++ b/demo/grouper/midpoint_server/post-initial-objects/tasks/990_task-liveSync-grouper.xml
@@ -1,5 +1,5 @@
+
+
- 605a0127-a313-442a-9d5e-151eac8b0745
+ bf9f49a0-04c3-464f-98cf-55b3553d9574
runnable
-
-
-
-
- single
-
loose
restart
+
+ recurring
+ 5
+
-
+
-
- ri:Group
+
-
+
diff --git a/demo/grouper/midpoint-objects-manual/tasks/task-async-update-grouper.xml b/demo/grouper/midpoint_server/post-initial-objects/tasks/990_task-reconciliation-grouper.xml
similarity index 50%
rename from demo/grouper/midpoint-objects-manual/tasks/task-async-update-grouper.xml
rename to demo/grouper/midpoint_server/post-initial-objects/tasks/990_task-reconciliation-grouper.xml
index 08f3c1a..5b9c491 100644
--- a/demo/grouper/midpoint-objects-manual/tasks/task-async-update-grouper.xml
+++ b/demo/grouper/midpoint_server/post-initial-objects/tasks/990_task-reconciliation-grouper.xml
@@ -17,18 +17,19 @@
- Grouper async updates
+ xmlns:ri="http://midpoint.evolveum.com/xml/ns/public/resource/instance-3"
+ oid="605a0127-a313-442a-9d5e-151eac8b0745">
+ Grouper reconciliation
-
-
+
+
- 1552664339630-0-2
+ 605a0127-a313-442a-9d5e-151eac8b0745
runnable
-
+
@@ -37,15 +38,30 @@
loose
restart
-
-
-
-
-
-
-
-
- 1
-
+
+
+ 1
+
+
+
+
+ ri:group
+
+
+
+
+
+ 2
+
+
+
+
+ ri:subject
+
+
+
+
+
+
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/users/600-user-banderson.xml b/demo/grouper/midpoint_server/post-initial-objects/users/600-user-banderson.xml
similarity index 98%
rename from demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/users/600-user-banderson.xml
rename to demo/grouper/midpoint_server/post-initial-objects/users/600-user-banderson.xml
index eb6dd26..3c0352a 100644
--- a/demo/grouper/midpoint_server/container_files/mp-home/post-initial-objects/users/600-user-banderson.xml
+++ b/demo/grouper/midpoint_server/post-initial-objects/users/600-user-banderson.xml
@@ -23,10 +23,12 @@
Bob Anderson
Bob
Anderson
+
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/res/sis-persons/SchemaScript.groovy b/demo/grouper/midpoint_server/res/sis-persons/SchemaScript.groovy
similarity index 100%
rename from demo/grouper/midpoint_server/container_files/mp-home/res/sis-persons/SchemaScript.groovy
rename to demo/grouper/midpoint_server/res/sis-persons/SchemaScript.groovy
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/res/sis-persons/SearchScript.groovy b/demo/grouper/midpoint_server/res/sis-persons/SearchScript.groovy
similarity index 100%
rename from demo/grouper/midpoint_server/container_files/mp-home/res/sis-persons/SearchScript.groovy
rename to demo/grouper/midpoint_server/res/sis-persons/SearchScript.groovy
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/res/sis-persons/TestScript.groovy b/demo/grouper/midpoint_server/res/sis-persons/TestScript.groovy
similarity index 100%
rename from demo/grouper/midpoint_server/container_files/mp-home/res/sis-persons/TestScript.groovy
rename to demo/grouper/midpoint_server/res/sis-persons/TestScript.groovy
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/schema/internet2.xsd b/demo/grouper/midpoint_server/schema/internet2.xsd
similarity index 95%
rename from demo/grouper/midpoint_server/container_files/mp-home/schema/internet2.xsd
rename to demo/grouper/midpoint_server/schema/internet2.xsd
index c482436..2433d8b 100644
--- a/demo/grouper/midpoint_server/container_files/mp-home/schema/internet2.xsd
+++ b/demo/grouper/midpoint_server/schema/internet2.xsd
@@ -26,6 +26,7 @@
+
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/source-external.csv b/demo/grouper/midpoint_server/source-external.csv
similarity index 100%
rename from demo/grouper/midpoint_server/container_files/mp-home/source-external.csv
rename to demo/grouper/midpoint_server/source-external.csv
diff --git a/demo/grouper/midpoint_server/container_files/mp-home/staff-portal.csv b/demo/grouper/midpoint_server/staff-portal.csv
similarity index 100%
rename from demo/grouper/midpoint_server/container_files/mp-home/staff-portal.csv
rename to demo/grouper/midpoint_server/staff-portal.csv
diff --git a/demo/grouper/purge-queue.sh b/demo/grouper/purge-queue.sh
deleted file mode 100755
index 2633e4d..0000000
--- a/demo/grouper/purge-queue.sh
+++ /dev/null
@@ -1 +0,0 @@
-docker exec grouper_mq_1 rabbitmqctl purge_queue sampleQueue
diff --git a/demo/grouper/recompute.sh b/demo/grouper/recompute.sh
deleted file mode 100755
index 0d9633e..0000000
--- a/demo/grouper/recompute.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/bash
-
-source $(dirname "$0")/../../library.bash
-
-recompute orgs d48ec05b-fffd-4262-acd3-d9ff63365b62
-recompute users e897468f-20bd-419c-8fc5-1fe60e2600de
diff --git a/demo/grouper/idp/shibboleth-idp/conf/attribute-filter.xml b/demo/grouper/shibboleth-idp/conf/attribute-filter.xml
similarity index 100%
rename from demo/grouper/idp/shibboleth-idp/conf/attribute-filter.xml
rename to demo/grouper/shibboleth-idp/conf/attribute-filter.xml
diff --git a/demo/shibboleth/idp/shibboleth-idp/conf/attribute-resolver.xml b/demo/grouper/shibboleth-idp/conf/attribute-resolver.xml
similarity index 100%
rename from demo/shibboleth/idp/shibboleth-idp/conf/attribute-resolver.xml
rename to demo/grouper/shibboleth-idp/conf/attribute-resolver.xml
diff --git a/demo/grouper/idp/shibboleth-idp/conf/idp.properties b/demo/grouper/shibboleth-idp/conf/idp.properties
similarity index 100%
rename from demo/grouper/idp/shibboleth-idp/conf/idp.properties
rename to demo/grouper/shibboleth-idp/conf/idp.properties
diff --git a/demo/shibboleth/idp/shibboleth-idp/conf/ldap.properties b/demo/grouper/shibboleth-idp/conf/ldap.properties
similarity index 100%
rename from demo/shibboleth/idp/shibboleth-idp/conf/ldap.properties
rename to demo/grouper/shibboleth-idp/conf/ldap.properties
diff --git a/demo/grouper/idp/shibboleth-idp/conf/metadata-providers.xml b/demo/grouper/shibboleth-idp/conf/metadata-providers.xml
similarity index 100%
rename from demo/grouper/idp/shibboleth-idp/conf/metadata-providers.xml
rename to demo/grouper/shibboleth-idp/conf/metadata-providers.xml
diff --git a/demo/grouper/shibboleth-idp/metadata/grouper-sp.xml b/demo/grouper/shibboleth-idp/metadata/grouper-sp.xml
new file mode 100644
index 0000000..59ce891
--- /dev/null
+++ b/demo/grouper/shibboleth-idp/metadata/grouper-sp.xml
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ sp.example.org
+
+ CN=sp.example.org,O=Internet2/TIER,L=Ann Arbor,ST=MI,C=US
+ MIIDoTCCAomgAwIBAgIUXUq8nQrtKzyfKVa4vWPMNypvj3YwDQYJKoZIhvcNAQEL
+BQAwYDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAk1JMRIwEAYDVQQHDAlBbm4gQXJi
+b3IxFzAVBgNVBAoMDkludGVybmV0Mi9USUVSMRcwFQYDVQQDDA5zcC5leGFtcGxl
+Lm9yZzAeFw0yNDA1MTcxMDI3NTRaFw0zNDA1MTUxMDI3NTRaMGAxCzAJBgNVBAYT
+AlVTMQswCQYDVQQIDAJNSTESMBAGA1UEBwwJQW5uIEFyYm9yMRcwFQYDVQQKDA5J
+bnRlcm5ldDIvVElFUjEXMBUGA1UEAwwOc3AuZXhhbXBsZS5vcmcwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCdEGX6TqmgRmMsCDNvMyPbjtmpchAsqGDa
+Cfuai7lhc2daXOpIzbQKEdMVZBcANAGKUZyAsX0kOnr2m2QL6Qyo2vCUX6J1kNGA
+eUxymaXAGC5dwqmWxWwcWX0zGRgr/Vf3fckMALTsoJfJRVAYFMmVULA2s+vCzfSK
+lz9S2DGBXL0w32HK5MZtVoE2VTDw4upoMA/qnSId6kD594bfMPJc0UtlrjW854GW
+Nza5zUymXIpFzDNNJWj9Ua02ZmXsz8XVZ8OV3MnFu6+IOyyrJo28OO+HbRznBrJB
+YNVm7Xp9CcjQqHobfLtIdxA6Fx+hj1A8GUJDVywIP+HwgWK3k7TTAgMBAAGjUzBR
+MB0GA1UdDgQWBBRHic4T+LwfBK06uaGCJFcOwmqwETAfBgNVHSMEGDAWgBRHic4T
++LwfBK06uaGCJFcOwmqwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUA
+A4IBAQAAEYXtBlrKj5ma7DeikxBewrVGR71MUUKNWJJAf+bcZqtVh7+O3NB5uJjh
+4zGphzYJOOzFQAqzSwVfVtVD+vD7Kiz6AlA1vMRZYLszaDQfjY/r9NKce2rey/Av
+Atj2CY2jYr/39N0LFvRYMJ48sEIkBGcuupRMej2K8BGFhvTpu5n5wWuUhVQWeJKT
+OVCaU2N8LbRtGtxpZK/O1Da1Wt6eSKbRXvzVWHAElOygc0/GI8d7JY9lBvw45E/+
+nEoKp74+Ny08HQgDVEG+j2mguWprCtnR3zaI/m/6pQSBo8Sw4t4Df3kL+7wU1Tgx
+4ZcnodN4uwnkgzNwTVmH4Eg41CJA
+
+
+
+
+
+
+ sp.example.org
+
+ CN=sp.example.org,O=Internet2/TIER,L=Ann Arbor,ST=MI,C=US
+ MIIDoTCCAomgAwIBAgIUXUq8nQrtKzyfKVa4vWPMNypvj3YwDQYJKoZIhvcNAQEL
+BQAwYDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAk1JMRIwEAYDVQQHDAlBbm4gQXJi
+b3IxFzAVBgNVBAoMDkludGVybmV0Mi9USUVSMRcwFQYDVQQDDA5zcC5leGFtcGxl
+Lm9yZzAeFw0yNDA1MTcxMDI3NTRaFw0zNDA1MTUxMDI3NTRaMGAxCzAJBgNVBAYT
+AlVTMQswCQYDVQQIDAJNSTESMBAGA1UEBwwJQW5uIEFyYm9yMRcwFQYDVQQKDA5J
+bnRlcm5ldDIvVElFUjEXMBUGA1UEAwwOc3AuZXhhbXBsZS5vcmcwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCdEGX6TqmgRmMsCDNvMyPbjtmpchAsqGDa
+Cfuai7lhc2daXOpIzbQKEdMVZBcANAGKUZyAsX0kOnr2m2QL6Qyo2vCUX6J1kNGA
+eUxymaXAGC5dwqmWxWwcWX0zGRgr/Vf3fckMALTsoJfJRVAYFMmVULA2s+vCzfSK
+lz9S2DGBXL0w32HK5MZtVoE2VTDw4upoMA/qnSId6kD594bfMPJc0UtlrjW854GW
+Nza5zUymXIpFzDNNJWj9Ua02ZmXsz8XVZ8OV3MnFu6+IOyyrJo28OO+HbRznBrJB
+YNVm7Xp9CcjQqHobfLtIdxA6Fx+hj1A8GUJDVywIP+HwgWK3k7TTAgMBAAGjUzBR
+MB0GA1UdDgQWBBRHic4T+LwfBK06uaGCJFcOwmqwETAfBgNVHSMEGDAWgBRHic4T
++LwfBK06uaGCJFcOwmqwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUA
+A4IBAQAAEYXtBlrKj5ma7DeikxBewrVGR71MUUKNWJJAf+bcZqtVh7+O3NB5uJjh
+4zGphzYJOOzFQAqzSwVfVtVD+vD7Kiz6AlA1vMRZYLszaDQfjY/r9NKce2rey/Av
+Atj2CY2jYr/39N0LFvRYMJ48sEIkBGcuupRMej2K8BGFhvTpu5n5wWuUhVQWeJKT
+OVCaU2N8LbRtGtxpZK/O1Da1Wt6eSKbRXvzVWHAElOygc0/GI8d7JY9lBvw45E/+
+nEoKp74+Ny08HQgDVEG+j2mguWprCtnR3zaI/m/6pQSBo8Sw4t4Df3kL+7wU1Tgx
+4ZcnodN4uwnkgzNwTVmH4Eg41CJA
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/demo/grouper/configs-and-secrets/midpoint/shibboleth/idp-metadata.xml b/demo/grouper/shibboleth-idp/metadata/idp-metadata.xml
similarity index 98%
rename from demo/grouper/configs-and-secrets/midpoint/shibboleth/idp-metadata.xml
rename to demo/grouper/shibboleth-idp/metadata/idp-metadata.xml
index 28ae7d1..b273997 100644
--- a/demo/grouper/configs-and-secrets/midpoint/shibboleth/idp-metadata.xml
+++ b/demo/grouper/shibboleth-idp/metadata/idp-metadata.xml
@@ -202,8 +202,8 @@ p+tGUbGS2l873J5PrsbpeKEVR/IIoKo=
-
-
+
+
diff --git a/demo/grouper/idp/shibboleth-idp/metadata/midpoint-sp.xml b/demo/grouper/shibboleth-idp/metadata/midpoint-sp.xml
similarity index 92%
rename from demo/grouper/idp/shibboleth-idp/metadata/midpoint-sp.xml
rename to demo/grouper/shibboleth-idp/metadata/midpoint-sp.xml
index 5789ed8..fa0b437 100644
--- a/demo/grouper/idp/shibboleth-idp/metadata/midpoint-sp.xml
+++ b/demo/grouper/shibboleth-idp/metadata/midpoint-sp.xml
@@ -25,8 +25,8 @@ and do *NOT* provide it in real time to your partners.
-
-
+
+
@@ -64,8 +64,8 @@ AIW0+dXJ2IyzM+0sv2g4DOsXsnSvinGqjr82A54mXGSr7edhPdlQhILFkJfhTwLq+mjnyQSNe3s2
-
-
+
+
diff --git a/demo/grouper/show-queue-size.sh b/demo/grouper/show-queue-size.sh
deleted file mode 100755
index 0af6d80..0000000
--- a/demo/grouper/show-queue-size.sh
+++ /dev/null
@@ -1 +0,0 @@
-docker exec grouper_mq_1 rabbitmqctl list_queues
diff --git a/demo/grouper/ssh-tunnel-redir-fix.sh b/demo/grouper/ssh-tunnel-redir-fix.sh
deleted file mode 100755
index 42409a9..0000000
--- a/demo/grouper/ssh-tunnel-redir-fix.sh
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/bash
-# This file is used for trainings with SSH tunnels.
-# It will change the hard-coded ports for Shibboleth, but will keep localhost.
-
-declare -a fileList=(
-"configs-and-secrets/midpoint/shibboleth/idp-metadata.xml"
-"configs-and-secrets/grouper/shibboleth/idp-metadata.xml"
-"idp/shibboleth-idp/metadata/idp-metadata.xml"
-"idp/shibboleth-idp/metadata/grouper-sp.xml"
-"idp/shibboleth-idp/metadata/midpoint-sp.xml"
-"idp/shibboleth-idp/metadata/midpoint-sp-new.xml"
-)
-
-if [ $# -eq 0 ]
-then
- echo 'Please specify a directory as the first argument (e.g. ".")'
- exit
-fi
-
-echo "Working in directory: $1";
-for f in "${fileList[@]}"
-do
- echo "Replacing in: $1/$f..."
- # We cannot SSH tunnel port 443 without root, so using 10443
- sed -i 's#https://localhost/#https://localhost:10443/#g' $f
-# sed -i 's#https://localhost:4443/#https://localhost:14443/#g' $f
-done
-
-exit
diff --git a/demo/grouper/test-resources.sh b/demo/grouper/test-resources.sh
deleted file mode 100755
index 5551e55..0000000
--- a/demo/grouper/test-resources.sh
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/bash
-
-source $(dirname "$0")/../../library.bash
-
-test_resource 0a37121f-d515-4a23-9b6d-554c5ef61272
-test_resource 4d70a0da-02dd-41cf-b0a1-00e75d3eaa15
-test_resource a343fc2e-3954-4034-ba1a-2b72c21e577a
-test_resource e417225d-8a08-46f3-9b5d-624990b52386
-test_resource fe805d13-481b-43ec-97d8-9d2df72cd38e
-test_resource 1eff65de-5bb6-483d-9edf-8cc2c2ee0233
-
diff --git a/demo/grouper/tests/main.bats b/demo/grouper/tests/main.bats
deleted file mode 100644
index 2d9e6b7..0000000
--- a/demo/grouper/tests/main.bats
+++ /dev/null
@@ -1,304 +0,0 @@
-#!/usr/bin/env bats
-
-load ../../../common
-load ../../../library
-
-@test "000 Cleanup before running the tests" {
- (cd ../simple ; docker-compose down -v)
- (cd ../shibboleth ; docker-compose down -v)
- docker-compose down -v
-}
-
-@test "010 Initialize and start the composition" {
- # We want to fail cleanly if there's any interference
- docker ps
- ! (docker ps | grep -E "shibboleth_(idp|directory)_1|(grouper|simple|shibboleth|postgresql)_(midpoint_server|midpoint_data)_1")
- docker-compose build --pull grouper_daemon grouper_ui grouper_data directory sources midpoint_data idp mq
- # Sometimes the tier/midpoint:xyz is not yet in the repository, causing issues with --pull
- docker-compose build midpoint_server
- docker-compose up -d
-}
-
-@test "020 Wait until components are started" {
- touch $BATS_TMPDIR/not-started
- wait_for_midpoint_start grouper_midpoint_server_1 grouper_midpoint_data_1
- wait_for_shibboleth_idp_start grouper_idp_1
- wait_for_grouper_ui_start grouper_grouper_ui_1
- rm $BATS_TMPDIR/not-started
-}
-
-@test "040 Check midPoint health" {
- if [ -e $BATS_TMPDIR/not-started ]; then skip 'not started'; fi
- check_health
-}
-
-@test "050 Check Shibboleth IDP health" {
- if [ -e $BATS_TMPDIR/not-started ]; then skip 'not started'; fi
- check_health_shibboleth_idp
-}
-
-#@test "060 Check Grouper health" {
-# if [ -e $BATS_TMPDIR/not-started ]; then skip 'not started'; fi
-# skip TODO
-#}
-
-@test "100 Get 'administrator'" {
- if [ -e $BATS_TMPDIR/not-started ]; then skip 'not started'; fi
- check_health
- get_and_check_object users 00000000-0000-0000-0000-000000000002 administrator
-}
-
-@test "110 And and get 'test110'" {
- if [ -e $BATS_TMPDIR/not-started ]; then skip 'not started'; fi
- check_health
- echo "test110" >/tmp/test110.xml
- add_object users /tmp/test110.xml
- rm /tmp/test110.xml
- search_and_check_object users test110
- delete_object_by_name users test110
-}
-
-@test "200 Upload objects" {
- if [ -e $BATS_TMPDIR/not-started ]; then skip 'not started'; fi
-
- # reduce data in SIS database so imports will take reasonable time
- docker exec grouper_sources_1 mysql sis -u root -p123321 -e "delete from SIS_COURSES where uid not in ('amorrison', 'banderson', 'cmorrison', 'danderson', 'ddavis', 'jsmith', 'kwhite', 'mroberts', 'whenderson', 'wprice')"
- docker exec grouper_sources_1 mysql sis -u root -p123321 -e "delete from SIS_AFFILIATIONS where uid not in ('amorrison', 'banderson', 'cmorrison', 'danderson', 'ddavis', 'jsmith', 'kwhite', 'mroberts', 'whenderson', 'wprice')"
- docker exec grouper_sources_1 mysql sis -u root -p123321 -e "delete from SIS_PERSONS where uid not in ('amorrison', 'banderson', 'cmorrison', 'danderson', 'ddavis', 'jsmith', 'kwhite', 'mroberts', 'whenderson', 'wprice')"
-
- check_health
- ./upload-objects.sh
-
- search_and_check_object objectTemplates template-user
-
- search_and_check_object archetypes affiliation
- search_and_check_object archetypes course
- search_and_check_object archetypes department
-
- search_and_check_object orgs affiliations
- search_and_check_object orgs courses
- search_and_check_object orgs departments
-
- search_and_check_object resources "LDAP (directory)"
- search_and_check_object resources "Grouper Resource"
- search_and_check_object resources "SQL SIS persons (sources)"
-
- search_and_check_object roles metarole-grouper-provided-group
- search_and_check_object roles metarole-ldap-group
- search_and_check_object roles role-ldap-basic
-}
-
-@test "210 Test resources" {
- if [ -e $BATS_TMPDIR/not-started ]; then skip 'not started'; fi
- test_resource 0a37121f-d515-4a23-9b6d-554c5ef61272
- test_resource 4d70a0da-02dd-41cf-b0a1-00e75d3eaa15
- test_resource a343fc2e-3954-4034-ba1a-2b72c21e577a
- test_resource e417225d-8a08-46f3-9b5d-624990b52386
- test_resource fe805d13-481b-43ec-97d8-9d2df72cd38e
- test_resource 1eff65de-5bb6-483d-9edf-8cc2c2ee0233
-}
-
-@test "215 Recompute banderson and sysadmingroup" {
- if [ -e $BATS_TMPDIR/not-started ]; then skip 'not started'; fi
-
- ./recompute.sh
-}
-
-@test "220 Import SIS_PERSONS" {
- if [ -e $BATS_TMPDIR/not-started ]; then skip 'not started'; fi
-
- add_object tasks midpoint-objects-manual/tasks/task-import-sis-persons.xml
- search_and_check_object tasks "Import from SIS persons"
- wait_for_task_completion 22c2a3d0-0961-4255-9eec-c550a79aeaaa 6 10
- assert_task_success 22c2a3d0-0961-4255-9eec-c550a79aeaaa
-
- search_and_check_object users jsmith
- search_and_check_object users banderson
- search_and_check_object users kwhite
- search_and_check_object users whenderson
- search_and_check_object users ddavis
- search_and_check_object users cmorrison
- search_and_check_object users danderson
- search_and_check_object users amorrison
- search_and_check_object users wprice
- search_and_check_object users mroberts
-
- check_ldap_account_by_user_name jsmith grouper_directory_1
- check_ldap_account_by_user_name banderson grouper_directory_1
- check_ldap_account_by_user_name kwhite grouper_directory_1
- check_ldap_account_by_user_name whenderson grouper_directory_1
- check_ldap_account_by_user_name ddavis grouper_directory_1
- check_ldap_account_by_user_name cmorrison grouper_directory_1
- check_ldap_account_by_user_name danderson grouper_directory_1
- check_ldap_account_by_user_name amorrison grouper_directory_1
- check_ldap_account_by_user_name wprice grouper_directory_1
- check_ldap_account_by_user_name mroberts grouper_directory_1
-}
-
-@test "230 Create ref loaders" {
- if [ -e $BATS_TMPDIR/not-started ]; then skip 'not started'; fi
-
- ./create-ref-loaders.sh
-}
-
-@test "235 Wait for loaders to run" {
- if [ -e $BATS_TMPDIR/not-started ]; then skip 'not started'; fi
-
- sleep 120
-}
-
-@test "240 Create additional ref groups" {
- if [ -e $BATS_TMPDIR/not-started ]; then skip 'not started'; fi
-
- ./add-ref-groups.sh
-}
-
-#@test "250 Check 'TestUser250' in midPoint and LDAP" {
-# if [ -e $BATS_TMPDIR/not-started ]; then skip 'not started'; fi
-#
-# check_health
-# echo "TestUser250Test User250TestUser250password" >/tmp/testuser250.xml
-# add_object users /tmp/testuser250.xml
-# rm /tmp/testuser250.xml
-# search_and_check_object users TestUser250
-#
-# # probably will not work
-# execute_bulk_action tests/resources/bulk-action/assign-role-grouper-sysadmin-to-test-user.xml grouper_midpoint_server_1
-#
-# check_ldap_account_by_user_name TestUser250 grouper_directory_1
-# check_of_ldap_membership TestUser250 "ou=groups,dc=internet2,dc=edu" "sysadmingroup" grouper_directory_1
-#
-# delete_object_by_name users TestUser250
-#}
-
-@test "310 Import Grouper-to-midPoint async update task" {
- if [ -e $BATS_TMPDIR/not-started ]; then skip 'not started'; fi
-
- check_health
- add_object tasks midpoint-objects-manual/tasks/task-async-update-grouper.xml
- search_and_check_object tasks "Grouper async updates"
-}
-
-@test "320 Wait for the queue to become empty" {
- if [ -e $BATS_TMPDIR/not-started ]; then skip 'not started'; fi
-
- ATTEMPT=0
- MAX_ATTEMPTS=20
- DELAY=10
-
- get_messages sampleQueue
- echo "Messages: $MESSAGES"
-
- until [[ $ATTEMPT = $MAX_ATTEMPTS ]]; do
- ATTEMPT=$((ATTEMPT+1))
- get_messages sampleQueue
- echo "Messages: $MESSAGES"
- if [ "$MESSAGES" = "0" ]; then return 0; fi
- echo "Waiting $DELAY seconds for the queue to become empty (attempt $ATTEMPT) ..."
- sleep $DELAY
- done
- return 1
-}
-
-@test "330 Check groups in midPoint and LDAP" {
- #skip 'Temporarily disabled because it caused problem in I2 buid system'
- if [ -e $BATS_TMPDIR/not-started ]; then skip 'not started'; fi
-
- search_and_check_object orgs course_ACCT101
- search_and_check_object orgs course_ACCT201
- search_and_check_object orgs course_CS251
- search_and_check_object orgs course_CS252
- search_and_check_object orgs course_MATH100
- search_and_check_object orgs course_MATH101
- search_and_check_object orgs course_SCI123
- search_and_check_object orgs course_SCI404
-
- check_ldap_courses_by_name course_ACCT101 grouper_directory_1
- check_ldap_courses_by_name course_ACCT201 grouper_directory_1
- check_ldap_courses_by_name course_CS251 grouper_directory_1
- check_ldap_courses_by_name course_CS252 grouper_directory_1
- check_ldap_courses_by_name course_MATH100 grouper_directory_1
- check_ldap_courses_by_name course_MATH101 grouper_directory_1
- check_ldap_courses_by_name course_SCI123 grouper_directory_1
- check_ldap_courses_by_name course_SCI404 grouper_directory_1
-}
-
-@test "340 Execute triggers and check group membership in LDAP" {
- if [ -e $BATS_TMPDIR/not-started ]; then skip 'not started'; fi
-
- sleep 60
- run_task_now "00000000-0000-0000-0000-000000000007" grouper_midpoint_server_1
- sleep 30
-
-# memberships will be there only after triggers are executed
-
- check_of_ldap_membership amorrison "ou=courses,ou=groups,dc=internet2,dc=edu" "ACCT101" grouper_directory_1
- check_of_ldap_membership cmorrison "ou=courses,ou=groups,dc=internet2,dc=edu" "ACCT101" grouper_directory_1
- check_of_ldap_membership mroberts "ou=courses,ou=groups,dc=internet2,dc=edu" "ACCT101" grouper_directory_1
- check_of_ldap_membership whenderson "ou=courses,ou=groups,dc=internet2,dc=edu" "ACCT101" grouper_directory_1
-
- check_of_ldap_membership amorrison "ou=courses,ou=groups,dc=internet2,dc=edu" "CS251" grouper_directory_1
- check_of_ldap_membership cmorrison "ou=courses,ou=groups,dc=internet2,dc=edu" "CS251" grouper_directory_1
- check_of_ldap_membership ddavis "ou=courses,ou=groups,dc=internet2,dc=edu" "CS251" grouper_directory_1
- check_of_ldap_membership mroberts "ou=courses,ou=groups,dc=internet2,dc=edu" "CS251" grouper_directory_1
-
- check_of_ldap_membership kwhite "ou=courses,ou=groups,dc=internet2,dc=edu" "CS252" grouper_directory_1
-
- check_of_ldap_membership danderson "ou=courses,ou=groups,dc=internet2,dc=edu" "MATH100" grouper_directory_1
- check_of_ldap_membership ddavis "ou=courses,ou=groups,dc=internet2,dc=edu" "MATH100" grouper_directory_1
- check_of_ldap_membership kwhite "ou=courses,ou=groups,dc=internet2,dc=edu" "MATH100" grouper_directory_1
- check_of_ldap_membership wprice "ou=courses,ou=groups,dc=internet2,dc=edu" "MATH100" grouper_directory_1
-
- check_of_ldap_membership amorrison "ou=courses,ou=groups,dc=internet2,dc=edu" "MATH101" grouper_directory_1
- check_of_ldap_membership cmorrison "ou=courses,ou=groups,dc=internet2,dc=edu" "MATH101" grouper_directory_1
- check_of_ldap_membership mroberts "ou=courses,ou=groups,dc=internet2,dc=edu" "MATH101" grouper_directory_1
-
- check_of_ldap_membership danderson "ou=courses,ou=groups,dc=internet2,dc=edu" "SCI123" grouper_directory_1
- check_of_ldap_membership mroberts "ou=courses,ou=groups,dc=internet2,dc=edu" "SCI123" grouper_directory_1
-
- check_of_ldap_membership kwhite "ou=courses,ou=groups,dc=internet2,dc=edu" "SCI404" grouper_directory_1
- check_of_ldap_membership wprice "ou=courses,ou=groups,dc=internet2,dc=edu" "SCI404" grouper_directory_1
-}
-
-@test "400 Suspend async update task" {
- if [ -e $BATS_TMPDIR/not-started ]; then skip 'not started'; fi
-
- suspend_task 47fc57bd-8c34-4555-9b9f-7087ff179860 grouper_midpoint_server_1
- wait_for_task_completion 47fc57bd-8c34-4555-9b9f-7087ff179860 5 10
-}
-
-@test "410 Add wprice to 'ref:affiliation:alum_includes' groups" {
- if [ -e $BATS_TMPDIR/not-started ]; then skip 'not started'; fi
-
- docker cp tests/resources/grouper/t410.gsh grouper_grouper_daemon_1:/tmp/
- docker exec grouper_grouper_daemon_1 bash -c "/opt/grouper/grouper.apiBinary/bin/gsh /tmp/t410.gsh"
-}
-
-@test "420 Reconcile Grouper" {
- if [ -e $BATS_TMPDIR/not-started ]; then skip 'not started'; fi
-
- add_object tasks midpoint-objects-manual/tasks/task-reconciliation-grouper-groups.xml
- search_and_check_object tasks "Grouper reconciliation (groups)"
- wait_for_task_completion 605a0127-a313-442a-9d5e-151eac8b0745 6 10
- assert_task_success 605a0127-a313-442a-9d5e-151eac8b0745
-}
-
-@test "430 Recompute users" {
- if [ -e $BATS_TMPDIR/not-started ]; then skip 'not started'; fi
-
- add_object tasks midpoint-objects-manual/tasks/task-recomputation-users.xml
- search_and_check_object tasks "User recomputation"
- wait_for_task_completion 83a737ea-5eb7-4e78-b431-331cccf02354 6 10
- assert_task_success 83a737ea-5eb7-4e78-b431-331cccf02354
-}
-
-@test "440 Check wprice group membership in LDAP" {
- #skip 'Temporarily disabled because it caused problem in I2 buid system'
- if [ -e $BATS_TMPDIR/not-started ]; then skip 'not started'; fi
-
- check_of_ldap_membership wprice "ou=Affiliations,ou=Groups,dc=internet2,dc=edu" "alum" grouper_directory_1
-}
-
-@test "999 Clean up" {
- docker-compose down -v
-}
diff --git a/demo/grouper/tests/resources/bulk-action/assign-role-grouper-sysadmin-to-banderson.xml b/demo/grouper/tests/resources/bulk-action/assign-role-grouper-sysadmin-to-banderson.xml
deleted file mode 100644
index 9ec69a2..0000000
--- a/demo/grouper/tests/resources/bulk-action/assign-role-grouper-sysadmin-to-banderson.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
- c:UserType
-
-
- c:name
- banderson
-
-
-
- assign
-
- role
- d48ec05b-fffd-4262-acd3-d9ff63365b62
-
-
-
-
diff --git a/demo/grouper/tests/resources/bulk-action/assign-role-grouper-sysadmin-to-test-user.xml b/demo/grouper/tests/resources/bulk-action/assign-role-grouper-sysadmin-to-test-user.xml
deleted file mode 100644
index f8c84b3..0000000
--- a/demo/grouper/tests/resources/bulk-action/assign-role-grouper-sysadmin-to-test-user.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
- c:UserType
-
-
- c:name
- TestUser250
-
-
-
- assign
-
- role
- d48ec05b-fffd-4262-acd3-d9ff63365b62
-
-
-
-
diff --git a/demo/grouper/tests/resources/bulk-action/recompute-role-grouper-sysadmin.xml b/demo/grouper/tests/resources/bulk-action/recompute-role-grouper-sysadmin.xml
deleted file mode 100644
index 1356484..0000000
--- a/demo/grouper/tests/resources/bulk-action/recompute-role-grouper-sysadmin.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
- c:RoleType
-
-
- name
- role-grouper-sysadmin
-
-
-
- recompute
-
-
-
diff --git a/demo/grouper/tests/resources/grouper/old-t410.gsh b/demo/grouper/tests/resources/grouper/old-t410.gsh
deleted file mode 100644
index 69e4b18..0000000
--- a/demo/grouper/tests/resources/grouper/old-t410.gsh
+++ /dev/null
@@ -1,11 +0,0 @@
-System.out.println("************** t410.gsh starting **************");
-
-gs = GrouperSession.startRootSession()
-
-testGroup = GroupFinder.findByName(gs, 'midpoint:test')
-kwhite = SubjectFinder.findById('kwhite', 'person', 'ldap')
-wprice = SubjectFinder.findById('wprice', 'person', 'ldap')
-testGroup.deleteMember(kwhite, false)
-testGroup.deleteMember(wprice, false)
-
-System.out.println("************** t410.gsh done **************");
diff --git a/demo/grouper/tests/resources/grouper/t300.gsh b/demo/grouper/tests/resources/grouper/t300.gsh
deleted file mode 100644
index d2b63e3..0000000
--- a/demo/grouper/tests/resources/grouper/t300.gsh
+++ /dev/null
@@ -1,15 +0,0 @@
-System.out.println("************** t300.gsh starting **************");
-
-gs = GrouperSession.startRootSession()
-
-exportedGroups = GroupFinder.findByName(gs, 'etc:exportedGroups')
-alumSubject = SubjectFinder.findByIdentifier('ref:affiliation:alum', 'group', 'g:gsa')
-exportedGroups.addMember(alumSubject, false)
-
-alumIncludes = GroupFinder.findByName(gs, 'ref:affiliation:alum_includes')
-testGroup = GroupFinder.findByName(gs, 'etc:testGroup')
-wprice = SubjectFinder.findById('wprice', 'person', 'ldap')
-alumIncludes.addMember(wprice, false)
-testGroup.addMember(wprice, false)
-
-System.out.println("************** t300.gsh done **************");
diff --git a/demo/grouper/tests/resources/grouper/t350.gsh b/demo/grouper/tests/resources/grouper/t350.gsh
deleted file mode 100644
index d0d2d3e..0000000
--- a/demo/grouper/tests/resources/grouper/t350.gsh
+++ /dev/null
@@ -1,12 +0,0 @@
-System.out.println("************** t350.gsh starting **************");
-
-gs = GrouperSession.startRootSession()
-
-alumIncludes = GroupFinder.findByName(gs, 'ref:affiliation:alum_includes')
-testGroup = GroupFinder.findByName(gs, 'midpoint:test')
-kwhite = SubjectFinder.findById('kwhite', 'person', 'ldap')
-wprice = SubjectFinder.findById('wprice', 'person', 'ldap')
-testGroup.addMember(kwhite, false)
-alumIncludes.deleteMember(wprice, false)
-
-System.out.println("************** t350.gsh done **************");
diff --git a/demo/grouper/tests/resources/grouper/t410.gsh b/demo/grouper/tests/resources/grouper/t410.gsh
deleted file mode 100644
index 5c803bd..0000000
--- a/demo/grouper/tests/resources/grouper/t410.gsh
+++ /dev/null
@@ -1,9 +0,0 @@
-System.out.println("************** t410.gsh starting **************");
-
-gs = GrouperSession.startRootSession()
-
-alumIncludesGroup = GroupFinder.findByName(gs, 'ref:affiliation:alum_includes')
-wprice = SubjectFinder.findById('wprice', 'person', 'ldap')
-alumIncludesGroup.addMember(wprice, false)
-
-System.out.println("************** t410.gsh done **************");
diff --git a/demo/grouper/tests/resources/rabbitmq/check-samplequeue.sh b/demo/grouper/tests/resources/rabbitmq/check-samplequeue.sh
deleted file mode 100755
index e336a63..0000000
--- a/demo/grouper/tests/resources/rabbitmq/check-samplequeue.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-count=$(rabbitmqctl list_queues | grep sampleQueue | awk '{print $2}')
-if [[ -z $count || $count -eq 0 ]]; then
- echo "ERROR: sampleQueue does not exist or is empty"
- exit 1
-else
- echo "OK: sampleQueue has $count message(s)"
- exit 0
-fi
diff --git a/demo/grouper/tests/resources/tasks/task-livesync-grouper-single.xml b/demo/grouper/tests/resources/tasks/task-livesync-grouper-single.xml
deleted file mode 100644
index 365d007..0000000
--- a/demo/grouper/tests/resources/tasks/task-livesync-grouper-single.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-
- LiveSync from Grouper
-
- account
- ri:AccountObjectClass
-
- 1535465478027-0-1
-
- runnable
- LiveSynchronization
- http://midpoint.evolveum.com/xml/ns/public/model/synchronization/task/live-sync/handler-3
-
- single
- loose
-
diff --git a/demo/grouper/tests/resources/users/user-grouper-admin.xml b/demo/grouper/tests/resources/users/user-grouper-admin.xml
deleted file mode 100644
index d785e47..0000000
--- a/demo/grouper/tests/resources/users/user-grouper-admin.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-
- grouper-admin
-
-
-
-
-
- Grouper admin
- Grouper
- Admin
-
-
- password
-
-
-
-
diff --git a/demo/grouper/update-bgasper-in-grouper.gsh b/demo/grouper/update-bgasper-in-grouper.gsh
deleted file mode 100644
index b0ed0b2..0000000
--- a/demo/grouper/update-bgasper-in-grouper.gsh
+++ /dev/null
@@ -1,13 +0,0 @@
-
-def add(gs,groupName,subject) {
- GroupFinder.findByName(gs, groupName, true).addMember(subject, false)
-}
-
-gs = GrouperSession.startRootSession()
-
-def bgasper = SubjectFinder.findById('bgasper', 'user', 'ldap')
-add(gs, 'ref:affiliation:alum_excludes', bgasper)
-add(gs, 'ref:affiliation:faculty_includes', bgasper)
-add(gs, 'app:mailinglist:chess', bgasper)
-add(gs, 'app:mailinglist:idm-fans', bgasper)
-add(gs, 'test:volunteers', bgasper)
diff --git a/demo/grouper/update-bgasper-in-grouper.sh b/demo/grouper/update-bgasper-in-grouper.sh
deleted file mode 100755
index 31abf04..0000000
--- a/demo/grouper/update-bgasper-in-grouper.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/bash
-
-source ../../library.bash
-
-execute_gsh grouper_grouper_daemon_1 update-bgasper-in-grouper.gsh
diff --git a/demo/grouper/upload-async-update-task.sh b/demo/grouper/upload-async-update-task.sh
deleted file mode 100755
index bdf8ba2..0000000
--- a/demo/grouper/upload-async-update-task.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/bash
-
-source ../../library.bash
-
-upload_from_file midpoint-objects-manual/tasks/task-async-update-grouper.xml
diff --git a/demo/grouper/upload-import-sis-persons.sh b/demo/grouper/upload-import-sis-persons.sh
deleted file mode 100755
index 058c9af..0000000
--- a/demo/grouper/upload-import-sis-persons.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/bash
-
-source ../../library.bash
-
-upload_from_file midpoint-objects-manual/tasks/task-import-sis-persons.xml
diff --git a/demo/grouper/upload-objects.sh b/demo/grouper/upload-objects.sh
deleted file mode 100755
index 93f8a15..0000000
--- a/demo/grouper/upload-objects.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/bash
-
-function upload () {
- local filename=$1
- local regex="midpoint-objects/(.*)/(.*)"
- if [[ $filename =~ $regex ]]
- then
- type="${BASH_REMATCH[1]}"
- oid=`cat $filename | sed -n 's:.*oid=\"\([A-Za-z0-9\-]*\)\".*:\1:p' | sed -n '1 p'`
- echo "Uploading $filename ($type, $oid)"
- curl -k --user administrator:Password1 -H "Content-Type: application/xml" -X PUT "https://localhost:8443/midpoint/ws/rest/$type/$oid?options=overwrite&options=raw" --data-binary @$filename
- else
- echo "Skipping $filename"
- fi
-}
-
-find midpoint-objects -name "*.xml" | while read filename; do upload $filename; done
diff --git a/demo/grouper/upload-recompute-users.sh b/demo/grouper/upload-recompute-users.sh
deleted file mode 100755
index 42b5551..0000000
--- a/demo/grouper/upload-recompute-users.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/bash
-
-source ../../library.bash
-
-upload_from_file midpoint-objects-manual/tasks/task-recomputation-users.xml
diff --git a/demo/grouper/upload-reconcile-grouper-groups.sh b/demo/grouper/upload-reconcile-grouper-groups.sh
deleted file mode 100755
index 94deb18..0000000
--- a/demo/grouper/upload-reconcile-grouper-groups.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/bash
-
-source ../../library.bash
-
-upload_from_file midpoint-objects-manual/tasks/task-reconciliation-grouper-groups.xml
diff --git a/container_files/httpd/conf/midpoint.conf.auth.shibboleth b/demo/shibboleth-apache-sp/apache/httpd/conf.d/midpoint.conf
similarity index 52%
rename from container_files/httpd/conf/midpoint.conf.auth.shibboleth
rename to demo/shibboleth-apache-sp/apache/httpd/conf.d/midpoint.conf
index e8fcc24..20aa6d2 100644
--- a/container_files/httpd/conf/midpoint.conf.auth.shibboleth
+++ b/demo/shibboleth-apache-sp/apache/httpd/conf.d/midpoint.conf
@@ -3,7 +3,7 @@ Timeout 2400
ProxyTimeout 2400
ProxyBadHeader Ignore
-ProxyPass /midpoint ajp://localhost:9090/midpoint secret=s3cr3t timeout=2400 retry=0
+ProxyPass /midpoint ajp://midpoint_server:9090/midpoint secret=s3cr3t timeout=2400 retry=0
AuthType shibboleth
@@ -19,3 +19,19 @@ ProxyPass /midpoint ajp://localhost:9090/midpoint secret=s3cr3t timeout=2400 ret
AuthType None
Require all granted
+
+
+ AuthType shibboleth
+ ShibRequestSetting requireSession 1
+ ShibRequireSession on
+ ShibUseHeaders On
+ require shibboleth
+
+
+
+ AuthType shibboleth
+ ShibRequestSetting requireSession false
+ ShibUseHeaders On
+ require shibboleth
+
+
diff --git a/demo/shibboleth-apache-sp/apache/httpd/conf.d/ssl-enable.conf b/demo/shibboleth-apache-sp/apache/httpd/conf.d/ssl-enable.conf
new file mode 100644
index 0000000..b529fa2
--- /dev/null
+++ b/demo/shibboleth-apache-sp/apache/httpd/conf.d/ssl-enable.conf
@@ -0,0 +1,18 @@
+
+ RewriteEngine on
+ RewriteRule "^/$" "/midpoint/" [R]
+
+
+ SSLEngine on
+
+ SSLCertificateFile /etc/httpd/certs/host-cert.pem
+
+ SSLCertificateKeyFile /etc/httpd/certs/host-key.pem
+
+ # HSTS (mod_headers is required) (15768000 seconds = 6 months)
+ Header always set Strict-Transport-Security "max-age=15768000"
+
+ RewriteRule "^/midpoint/$" "/midpoint/auth/shib" [R]
+
+
+
diff --git a/demo/shibboleth/configs-and-secrets/midpoint/shibboleth/attribute-map.xml b/demo/shibboleth-apache-sp/apache/shibboleth/attribute-map.xml
similarity index 100%
rename from demo/shibboleth/configs-and-secrets/midpoint/shibboleth/attribute-map.xml
rename to demo/shibboleth-apache-sp/apache/shibboleth/attribute-map.xml
diff --git a/demo/shibboleth/configs-and-secrets/midpoint/shibboleth/shibboleth2.xml b/demo/shibboleth-apache-sp/apache/shibboleth/shibboleth2.xml
similarity index 100%
rename from demo/shibboleth/configs-and-secrets/midpoint/shibboleth/shibboleth2.xml
rename to demo/shibboleth-apache-sp/apache/shibboleth/shibboleth2.xml
diff --git a/demo/shibboleth-apache-sp/beacon/Dockerfile b/demo/shibboleth-apache-sp/beacon/Dockerfile
new file mode 100644
index 0000000..68339b6
--- /dev/null
+++ b/demo/shibboleth-apache-sp/beacon/Dockerfile
@@ -0,0 +1,14 @@
+FROM rockylinux:9.3
+
+COPY container_files/* /opt/tier/
+
+RUN dnf update -y --disablerepo=\* --enablerepo=baseos && \
+ dnf install -y cronie-anacron crontabs cronie --disablerepo=\* --enablerepo=baseos && \
+ dnf clean all -y ; \
+ /opt/tier/setup-cron.sh ;
+
+ENV TIER_RELEASE=not-released-yet \
+ TIER_MAINTAINER=tier \
+ MP_VERSION=4.8
+
+CMD [ "/usr/sbin/crond", "-n", "-i", "-m", "off" ]
diff --git a/demo/shibboleth-apache-sp/beacon/container_files/sendtierbeacon.sh b/demo/shibboleth-apache-sp/beacon/container_files/sendtierbeacon.sh
new file mode 100755
index 0000000..8f066f7
--- /dev/null
+++ b/demo/shibboleth-apache-sp/beacon/container_files/sendtierbeacon.sh
@@ -0,0 +1,39 @@
+#!/bin/bash
+
+LOGHOST="collector.testbed.tier.internet2.edu"
+LOGPORT="5001"
+
+if [ -s /opt/tier/env.bash ]; then
+ . /opt/tier/env.bash
+fi
+
+messagefile="/tmp/beaconmsg"
+
+if [ -z "$TIER_BEACON_OPT_OUT" ]; then
+ cat > $messagefile </dev/null 2>&1
+ if [ $? -eq 0 ]; then
+ echo "TIER beacon sent"
+ else
+ echo "Failed to send TIER beacon"
+ fi
+
+ rm -f $messagefile 1>/dev/null 2>&1
+
+else
+ echo "TIER beacon skipped - scheduled but Opted out"
+fi
diff --git a/demo/shibboleth-apache-sp/beacon/container_files/setup-cron.sh b/demo/shibboleth-apache-sp/beacon/container_files/setup-cron.sh
new file mode 100755
index 0000000..2d33d3a
--- /dev/null
+++ b/demo/shibboleth-apache-sp/beacon/container_files/setup-cron.sh
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+CRONFILE=/opt/tier/tier-cron
+
+echo "#send daily \"beacon\" to central" > ${CRONFILE}
+echo "" >> ${CRONFILE}
+echo "# ┌───────────── minute (0–59)" >> ${CRONFILE}
+echo "# │ ┌───────────── hour (0–23)" >> ${CRONFILE}
+echo "# │ │ ┌───────────── day of the month (1–31)" >> ${CRONFILE}
+echo "# │ │ │ ┌───────────── month (1–12)" >> ${CRONFILE}
+echo "# │ │ │ │ ┌───────────── day of the week (0–6) (Sunday to Saturday;" >> ${CRONFILE}
+echo "# │ │ │ │ │ 7 is also Sunday on some systems)" >> ${CRONFILE}
+echo "# │ │ │ │ │" >> ${CRONFILE}
+echo "# │ │ │ │ │" >> ${CRONFILE}
+echo "# * * * * * " >> ${CRONFILE}
+echo "" >> ${CRONFILE}
+echo "$(expr $RANDOM % 60) $(expr $RANDOM % 4) * * * /opt/tier/sendtierbeacon.sh 2>&1 | tee /proc/1/fd/1 >> /tmp/logcrond" >> ${CRONFILE}
+echo "" >> ${CRONFILE}
+echo "# List the current setting of the crontab to the log (when is the beacon scheduled)" >> ${CRONFILE}
+echo "@reboot crontab -l >/proc/1/fd/1" >> ${CRONFILE}
+echo "" >> ${CRONFILE}
+
+chmod 644 ${CRONFILE}
+crontab ${CRONFILE}
diff --git a/demo/shibboleth-apache-sp/directory/Dockerfile b/demo/shibboleth-apache-sp/directory/Dockerfile
new file mode 100644
index 0000000..4880156
--- /dev/null
+++ b/demo/shibboleth-apache-sp/directory/Dockerfile
@@ -0,0 +1,35 @@
+FROM rockylinux:9.3 as baseinst
+
+RUN dnf update -y && \
+ dnf install -y --enablerepo=devel openldap openldap-clients openldap-servers && \
+ dnf clean all && \
+ rm -rf /var/cache/dnf
+
+EXPOSE 389/tcp
+
+VOLUME /var/lib/ldap
+
+FROM baseinst
+
+#LABEL author="tier-packaging@internet2.edu "
+
+ARG ldapDomain="dc=internet2,dc=edu"
+ARG ldapPw="password"
+
+COPY container_files/* /opt
+
+RUN cd /opt ; \
+ /opt/slapd.sh -init ; \
+ /opt/gen_config_update "${ldapDomain}" "${ldapPw}" "0" "0" ;\
+ cat 999_schema-list | while read line ; do \
+ ldapadd -H ldapi:/// -f /etc/openldap/schema/${line}.ldif ; \
+ done ; \
+ for s in 0 1 2 3 4 5 6 7 8 9 ; do \
+ find -type f -name "${s}[0-4]?_*.ldif" -exec ldapmodify -H ldapi:/// -f /opt/\{\} \; ; \
+ find -type f -name "${s}[5-9]?_*.ldif" -exec ldapadd -H ldapi:/// -f /opt/\{\} \; ; \
+ done ; \
+ rm /opt/[0-9]* && \
+ /opt/slapd.sh -stop ;
+
+CMD [ "/opt/slapd.sh", "-limit", "1024", "-debug", "256" ]
+
diff --git a/demo/shibboleth-apache-sp/directory/container_files/gen_config_update b/demo/shibboleth-apache-sp/directory/container_files/gen_config_update
new file mode 100755
index 0000000..a23fccc
--- /dev/null
+++ b/demo/shibboleth-apache-sp/directory/container_files/gen_config_update
@@ -0,0 +1,203 @@
+#!/bin/bash
+domain="${1:-dc=example,dc=com}"
+if [ $(echo -n ${domain} | wc -c ) -eq $(echo -n ${domain} | tr -d "," | wc -c) ]
+then
+ subDomain="${domain:4}"
+else
+ subDomain="$(echo -n ${domain:4} | cut -d , -f 1)"
+fi
+userpw="${2:-change_me}"
+cleartext="${3:-0}"
+locDebug="${4:-0}"
+
+function genPass() {
+ retVal="userPassword:"
+ if [ "${cleartext}" != "1" ]
+ then
+ secPw="$(slappasswd -s ${userpw})"
+ secPw2="$(echo -n ${secPw} | base64 )"
+ [ "${locDebug}" != "0" ] && echo "${userpw} => ${secPw} => ${secPw2}" >&2
+ retVal="${retVal}: ${secPw2}"
+ else
+ [ "${locDebug}" != "0" ] && echo "${userpw}" >&2
+ retVal="${retVal} ${userpw}"
+ fi
+ while [ ${#retVal} -gt 78 ]
+ do
+ echo "${retVal:0:78}"
+ retVal=" ${retVal:78}"
+ done
+ if [ ${#retVal} -gt 2 ]
+ then
+ echo "${retVal}"
+ fi
+}
+
+cat >999_schema-list <001_monitor-diff.ldif <101_mdb-diff.ldif <251_mod_config.ldif <151_default_structure.ldif <252_default_policy.ldif <851_default_structure.ldif <959_default_structure.ldif <&2
+ ulimit -n ${localLimit}
+ exec /usr/sbin/slapd -4 -h "ldapi:///" -u ldap -g ldap
+ exit 0
+ ;;
+ stop)
+ while read line
+ do
+ kill ${line}
+ count=0
+ while [ -e /proc/${line} ]
+ do
+ [ ${count} -gt 10 ] && kill -9 ${line}
+ echo "Waiting to terminate the process"
+ count=$(( ${count} + 1 ))
+ sleep 1
+ done
+ echo "Terminated..."
+ ${0} -stop
+ done < <( grep "^slapd$" /proc/*/comm | head -1 | cut -d / -f 3 )
+ exit 0
+ ;;
+ esac
+done
+
+ulimit -n ${localLimit}
+
+
+if [ -z ${LDAP_INIT+x} ]
+then
+ [ ! -z ${LDAP_INFO+x} ] && echo "uLimit : ${localLimit} / debug level : ${debugLevel}" >&2
+ exec /usr/sbin/slapd -h "ldap://0.0.0.0:389 ldapi:///" -u ldap -g ldap -d ${debugLevel}
+else
+ [ ! -z ${LDAP_INFO+x} ] && echo "uLimit : ${localLimit}" >&2
+ exec /usr/sbin/slapd -4 -h "ldapi:///" -u ldap -g ldap
+fi
+
diff --git a/demo/shibboleth-apache-sp/docker-compose.yml b/demo/shibboleth-apache-sp/docker-compose.yml
new file mode 100644
index 0000000..499eb50
--- /dev/null
+++ b/demo/shibboleth-apache-sp/docker-compose.yml
@@ -0,0 +1,328 @@
+version: "3.3"
+
+services:
+ prereq:
+ image: evolveum/midpoint:${MP_VER:-4.8.3}-rockylinux
+ command: >
+ bash -c "
+ echo ' - - - - - - -' ;
+ cd /mnt/security ;
+ if [ ! -e key.pem ] ;
+ then
+ echo 'Certificate has not been found. Generating of the new one...' ;
+ openssl req -newkey rsa:2048 -keyout key.pem -nodes -subj '/C=US/ST=MI/L=Ann Arbor/O=Internet2\\/TIER/CN=midpoint.sp.example.org' -addext 'subjectAltName = DNS:midpoint.sp.example.org, DNS:midpoint_server, DNS:directory, DNS:idp, DNS: localhost, DNS: localhost.localdomain, IP:127.0.0.1, IP:::1' -out cert.pem -days 1825 -x509 ;
+ openssl req -newkey rsa:3072 -keyout sp-encrypt-key.pem -nodes -subj '/CN=sptest.example.edu' -addext 'subjectAltName = DNS:sptest.example.edu' -out sp-encrypt-cert.pem -days 3650 -x509 ;
+ openssl req -newkey rsa:3072 -keyout sp-signing-key.pem -nodes -subj '/CN=sptest.example.edu' -addext 'subjectAltName = DNS:sptest.example.edu' -out sp-signing-cert.pem -days 3650 -x509 ;
+ openssl req -newkey rsa:2048 -keyout idp-backchannel.key -nodes -subj '/CN=idptestbed' -addext 'subjectAltName = DNS:idptestbed, URI:https://idptestbed/idp/shibboleth' -out idp-backchannel.crt -days 7300 -x509 ;
+ openssl req -newkey rsa:2048 -keyout idp-encryption.key -nodes -subj '/CN=idptestbed' -addext 'subjectAltName = DNS:idptestbed, URI:https://idptestbed/idp/shibboleth' -out idp-encryption.crt -days 7300 -x509 ;
+ openssl req -newkey rsa:2048 -keyout idp-signing.key -nodes -subj '/CN=idptestbed' -addext 'subjectAltName = DNS:idptestbed, URI:https://idptestbed/idp/shibboleth' -out idp-signing.crt -days 7300 -x509 ;
+ openssl req -newkey rsa:2048 -keyout idp-browser.key -nodes -subj '/CN=idp.ccc.local' -addext 'authorityKeyIdentifier = keyid:always,issuer:always' -out idp-browser.crt -days 10585 -x509 ;
+ openssl x509 -noout -fingerprint -sha256 -in cert.pem ;
+ openssl pkcs12 -export -in sp-signing-cert.pem -inkey sp-signing-key.pem -out signing-key.p12 -passout pass:password -name signing-key ;
+ openssl pkcs12 -export -in sp-encrypt-cert.pem -inkey sp-encrypt-key.pem -out encrypt-key.p12 -passout pass:password -name encrypt-key ;
+ openssl pkcs12 -export -in cert.pem -inkey key.pem -out keystore.p12 -passout pass:password -name selfsigned ;
+ keytool -importkeystore -srckeystore encrypt-key.p12 -srcstoretype pkcs12 -srcstorepass password -srcalias encrypt-key -destkeystore shibboleth_sp_keys.jks -deststoretype jks -deststorepass changeit -noprompt -destalias encrypt-key ;
+ keytool -importkeystore -srckeystore signing-key.p12 -srcstoretype pkcs12 -srcstorepass password -srcalias signing-key -destkeystore shibboleth_sp_keys.jks -deststoretype jks -deststorepass changeit -noprompt -destalias signing-key ;
+ keytool -importkeystore -srckeystore keystore.p12 -srcstoretype pkcs12 -srcstorepass password -srcalias selfsigned -destkeystore keystore.jks -deststoretype jks -deststorepass password -noprompt -destalias selfsigned ;
+ keytool -list -keystore shibboleth_sp_keys.jks -storetype jceks -storepass changeit ;
+ keytool -list -keystore keystore.jks -storetype jceks -storepass password ;
+ openssl pkcs12 -export -in idp-backchannel.crt -inkey idp-backchannel.key -out idp-backchannel.p12 -passout pass:password -name idptestbed ;
+ openssl pkcs12 -export -in idp-browser.crt -inkey idp-browser.key -out idp-browser.p12 -passout pass:password -name myAlias ;
+ for s in *ert.pem *.crt ; do echo ' - - - - - ' ; echo $${s} ; openssl x509 -noout -fingerprint -sha256 -in $${s} ; echo ; openssl x509 -noout -subject -subject_hash -dates -in $${s} ; done ;
+ echo ' - - - - - ' ;
+ mkdir /mnt/httpd/certs ;
+ cp cert.pem /mnt/httpd/certs/host-cert.pem ;
+ cp key.pem /mnt/httpd/certs/host-key.pem ;
+ cp cert.pem /mnt/midpoint/var ;
+ cp -v /mnt/apache/httpd/conf.d/* /mnt/httpd/conf.d ;
+ cp -v /mnt/apache/httpd/conf.modules.d/* /mnt/httpd/conf.modules.d ;
+ cp -v /mnt/apache/shibboleth/* /mnt/shibboleth-sp ;
+ cp -v sp-encrypt-cert.pem /mnt/shibboleth-sp ;
+ cp -v sp-encrypt-key.pem /mnt/shibboleth-sp ;
+ cp -v sp-signing-cert.pem /mnt/shibboleth-sp ;
+ cp -v sp-signing-key.pem /mnt/shibboleth-sp ;
+ cp idp-backchannel.crt /mnt/shibboleth-idp/credentials ;
+ cp idp-backchannel.p12 /mnt/shibboleth-idp/credentials ;
+ cp idp-browser.p12 /mnt/shibboleth-idp/credentials ;
+ cp idp-encryption.crt /mnt/shibboleth-idp/credentials ;
+ cp idp-encryption.key /mnt/shibboleth-idp/credentials ;
+ cp idp-signing.crt /mnt/shibboleth-idp/credentials ;
+ cp idp-signing.key /mnt/shibboleth-idp/credentials ;
+ cp sp-signing-cert.pem /mnt/shibboleth-idp/credentials ;
+ cp sp-encrypt-cert.pem /mnt/shibboleth-idp/credentials ;
+ cp keystore.jks /mnt/shibboleth/certs ;
+ echo ' - - - - - ' ;
+ find -type f ;
+ echo ' - - - - - - -' ;
+ find /mnt/shibboleth-idp/ -type f ;
+ echo ' - - - - - - -' ;
+ find /mnt/shibboleth -type f ;
+ echo ' - - - - - - -' ;
+ find /mnt/midpoint/ -type f ;
+ echo ' - - - - - - -' ;
+ else echo 'certificate already exists... (skip new cert generation)' ;
+ fi ;
+ if [ ! -e /mnt/shared_pw/db_pass ] ; then
+ echo 'Generating password for DB connection...';
+ dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64 | tr -d -c [0-9a-z] | cut -c 1-32 | tr -d [[:space:]] > /mnt/shared_pw/db_pass ;
+ fi ;
+ "
+ networks:
+ - net
+ volumes:
+ - security_object:/mnt/security
+ - shared_pw:/mnt/shared_pw
+ - idp_credentials:/mnt/shibboleth-idp/credentials
+ - idp_certs:/mnt/shibboleth/certs
+ - midpoint_home:/mnt/midpoint/var
+ - apache_conf:/mnt/httpd
+ - shibboleth_conf:/mnt/shibboleth-sp
+ - ./apache:/mnt/apache:ro
+
+ midpoint_data:
+ image: postgres:16-alpine
+ depends_on:
+ prereq:
+ condition: service_completed_successfully
+ environment:
+ - POSTGRES_PASSWORD_FILE=/mnt/shared_pw/db_pass
+ - POSTGRES_USER=midpoint
+ - POSTGRES_INITDB_ARGS=--lc-collate=en_US.utf8 --lc-ctype=en_US.utf8
+ healthcheck:
+ test: [ "CMD-SHELL", "pg_isready -d midpoint -U midpoint" ]
+ interval: 1s
+ timeout: 5s
+ retries: 10
+ networks:
+ - net
+ volumes:
+ - midpoint_data:/var/lib/postgresql/data
+ - shared_pw:/mnt/shared_pw
+
+ data_init:
+ image: evolveum/midpoint:${MP_VER:-4.8.3}-rockylinux
+ depends_on:
+ prereq:
+ condition: service_completed_successfully
+ midpoint_data:
+ condition: service_healthy
+ command: >
+ bash -c "
+ cd /opt/midpoint ;
+ bin/midpoint.sh init-native ;
+ echo ' - - - - - - ' ;
+ bin/ninja.sh -B info >/dev/null 2>/tmp/ninja.log ;
+ grep -q \"ERROR\" /tmp/ninja.log && (
+ bin/ninja.sh run-sql --create --mode REPOSITORY ;
+ bin/ninja.sh run-sql --create --mode AUDIT
+ ) ||
+ echo -e '\\n Repository init is not needed...' ;
+ if [ $$(keytool -list -keystore /opt/midpoint/var/keystore.jceks -storetype jceks -storepass:file /opt/midpoint/var/keystorepw | grep -c 'local_gen_cert') -eq 0 ] ;
+ then
+ keytool -importcert -keystore /opt/midpoint/var/keystore.jceks -storetype jceks -storepass:file /opt/midpoint/var/keystorepw -trustcacerts -alias 'local_gen_cert' -file /opt/midpoint/var/cert.pem -noprompt ;
+ else
+ echo 'Certificate exists in the cert store' ;
+ fi ;
+ "
+ environment:
+ - MP_SET_midpoint_repository_jdbcUsername=midpoint
+ - MP_SET_midpoint_repository_jdbcPassword_FILE=/mnt/shared_pw/db_pass
+ - MP_SET_midpoint_repository_jdbcUrl=jdbc:postgresql://midpoint_data:5432/midpoint
+ - MP_SET_midpoint_repository_database=postgresql
+ - MP_INIT_CFG=/opt/midpoint/var
+ - MP_PW_DEF=/opt/midpoint/var/keystorepw
+ - MP_KEYSTORE=/opt/midpoint/var/keystore.jceks
+ networks:
+ - net
+ volumes:
+ - midpoint_home:/opt/midpoint/var
+ - shared_pw:/mnt/shared_pw
+
+ midpoint_server:
+ image: evolveum/midpoint:${MP_VER:-4.8.3}-rockylinux
+ container_name: midpoint_server
+ hostname: midpoint-container
+ depends_on:
+ data_init:
+ condition: service_completed_successfully
+ idp_vol_init:
+ condition: service_completed_successfully
+ midpoint_data:
+ condition: service_healthy
+ command: [ "/opt/midpoint/bin/midpoint.sh", "container" ]
+ expose:
+ - 8080
+ environment:
+ - MP_SET_midpoint_repository_jdbcUsername=midpoint
+ - MP_SET_midpoint_repository_jdbcPassword_FILE=/mnt/shared_pw/db_pass
+ - MP_SET_midpoint_repository_jdbcUrl=jdbc:postgresql://midpoint_data:5432/midpoint
+ - MP_SET_midpoint_repository_database=postgresql
+ - MP_SET_midpoint_keystore_keyStorePassword_FILE=/opt/midpoint/var/keystorepw
+ - MP_SET_server_port=8080
+ - MP_SET_server_tomcat_ajp_enabled=true
+ - MP_SET_server_tomcat_ajp_address="0.0.0.0"
+ - MP_SET_server_tomcat_ajp_port=9090
+ - MP_SET_server_tomcat_ajp_secret=s3cr3t
+ - MP_SET_midpoint_administrator_initialPassword=Test5ecr3t
+ - MP_UNSET_midpoint_repository_hibernateHbm2ddl=1
+ - MP_NO_ENV_COMPAT=1
+ - MP_ENTRY_POINT=/opt/midpoint-dirs-docker-entrypoint
+ networks:
+ - net
+ volumes:
+ - midpoint_home:/opt/midpoint/var
+ - shared_pw:/mnt/shared_pw
+ - ./midpoint_server/post-initial-objects:/opt/midpoint-dirs-docker-entrypoint/post-initial-objects:ro
+ - ./midpoint_server/shibboleth:/opt/midpoint-dirs-docker-entrypoint/shibboleth:ro
+
+ directory:
+ build: ./directory/
+ ports:
+ - 389:389
+ networks:
+ - net
+ volumes:
+ - ldap:/var/lib/ldap
+
+ idp_vol_init:
+ image: tier/shib-idp:3.4.6_20191002
+ depends_on:
+ prereq:
+ condition: service_completed_successfully
+ ulimits:
+ nofile:
+ soft: 1024
+ hard: 2048
+ command: >
+ bash -c "
+ echo 'Updating configuration...' ;
+ if [ -e /mnt/shibboleth-diff/conf ] ;
+ then
+ cp -vu /mnt/shibboleth-diff/conf/* /opt/shibboleth-idp/conf ;
+ fi ;
+ if [ -e /mnt/shibboleth-diff/credentials ] ;
+ then
+ cp -vu /mnt/shibboleth-diff/credentials/* /opt/shibboleth-idp/credentials ;
+ fi ;
+ if [ -e /mnt/shibboleth-diff/metadata ] ;
+ then
+ cp -vu /mnt/shibboleth-diff/metadata/* /opt/shibboleth-idp/metadata ;
+ fi ;
+ echo ' - - - - - - -' ;
+ echo 'Updating idp-metadata.xml file...' ;
+ grep -n 'X509Certificate' /mnt/shibboleth-diff/metadata/idp-metadata.xml | sed \"s/\\([0-9]*\\).*/\\1/\" > /tmp/checkpoints ;
+ wc -l /mnt/shibboleth-diff/metadata/idp-metadata.xml | sed \"s/\\([0-9]*\\).*/\\1/\" >> /tmp/checkpoints ;
+ current_line=1 ;
+ id=0 ;
+ file_path=( - idp-backchannel.crt - idp-signing.crt - idp-encryption.crt - idp-backchannel.crt - idp-signing.crt - idp-encryption.crt - ) ;
+ rm /opt/shibboleth-idp/metadata/idp-metadata.xml ;
+ cat /tmp/checkpoints | while read line ; do
+ if [ \"$${file_path[$${id}]}\" == \"-\" ] ; then
+ sed -n \"$${current_line},$${line}p\" /mnt/shibboleth-diff/metadata/idp-metadata.xml >> /opt/shibboleth-idp/metadata/idp-metadata.xml ;
+ else
+ sed '1d;$$d' /opt/shibboleth-idp/credentials/$${file_path[$${id}]} >> /opt/shibboleth-idp/metadata/idp-metadata.xml ;
+ fi ;
+ current_line=$${line};
+ id=$$(( $${id} + 1 )) ;
+ done ;
+ cp -v /opt/shibboleth-idp/metadata/idp-metadata.xml /mnt/shibboleth/idp-metadata.xml ;
+ echo ' - - - - - - -' ;
+ echo 'Updating midpoint-shib-sp.xml...';
+ grep -n 'X509Certificate' /mnt/shibboleth-diff/metadata/midpoint-shib-sp.xml | sed \"s/\\([0-9]*\\).*/\\1/\" > /tmp/checkpoints ;
+ wc -l /mnt/shibboleth-diff/metadata/midpoint-shib-sp.xml | sed \"s/\\([0-9]*\\).*/\\1/\" >> /tmp/checkpoints ;
+ current_line=1 ;
+ id=0 ;
+ file_path=( - sp-signing-cert.pem - sp-encrypt-cert.pem - ) ;
+ rm /opt/shibboleth-idp/metadata/midpoint-shib-sp.xml ;
+ cat /tmp/checkpoints | while read line ; do
+ if [ \"$${file_path[$${id}]}\" == \"-\" ] ; then
+ sed -n \"$${current_line},$${line}p\" /mnt/shibboleth-diff/metadata/midpoint-shib-sp.xml >> /opt/shibboleth-idp/metadata/midpoint-shib-sp.xml ;
+ else
+ sed '1d;$$d' /opt/shibboleth-idp/credentials/$${file_path[$${id}]} >> /opt/shibboleth-idp/metadata/midpoint-shib-sp.xml ;
+ fi ;
+ current_line=$${line};
+ id=$$(( $${id} + 1 )) ;
+ done ;
+ sed -i \"s/\\([[:space:]]\\).*$$/\\1/g;s/^[[:space:]]\\(\\).*$$/\\1/g\" /opt/shibboleth-idp/metadata/midpoint-shib-sp.xml ;
+ echo ' - - - - - - -' ;
+ echo 'Generating sealer key...' ;
+ rm /opt/shibboleth-idp/credentials/sealer.* ;
+ /opt/shibboleth-idp/bin/rotateSealerKey.sh ;
+ echo ' - - - - - - -' ;
+ echo 'DONE.' ;
+ "
+ volumes:
+ - idp_conf:/opt/shibboleth-idp/conf
+ - idp_credentials:/opt/shibboleth-idp/credentials
+ - idp_metadata:/opt/shibboleth-idp/metadata
+ - ./shibboleth-idp:/mnt/shibboleth-diff:ro
+ - shibboleth_conf:/mnt/shibboleth
+
+ idp:
+ image: tier/shib-idp:3.4.6_20191002
+ depends_on:
+ directory:
+ condition: service_started
+ idp_vol_init:
+ condition: service_completed_successfully
+ ports:
+ - 443:443
+ ulimits:
+ nofile:
+ soft: 1024
+ hard: 2048
+ environment:
+ - JETTY_MAX_HEAP=64m
+ - JETTY_BROWSER_SSL_KEYSTORE_PASSWORD=password
+ - JETTY_BACKCHANNEL_SSL_KEYSTORE_PASSWORD=password
+ networks:
+ - net
+ volumes:
+ - idp_conf:/opt/shibboleth-idp/conf
+ - idp_credentials:/opt/shibboleth-idp/credentials
+ - idp_metadata:/opt/shibboleth-idp/metadata
+ - idp_certs:/opt/certs
+
+ beacon:
+ build: ./beacon/
+ networks:
+ - net
+ environment:
+ - TIER_RELEASE=not-released-yet
+ - TIER_MAINTAINER=tier
+ - MP_VERSION=4.8
+ - TIER_BEACON_OPT_OUT=true
+
+ proxy:
+ image: i2incommon/shibboleth_sp:3.4.1_06122023_rocky8_multiarch
+ depends_on:
+ idp:
+ condition: service_started
+ idp_vol_init:
+ condition: service_completed_successfully
+ midpoint_server:
+ condition: service_started
+ networks:
+ - net
+ ports:
+ - 8443:443
+ volumes:
+ - apache_conf:/etc/httpd
+ - shibboleth_conf:/etc/shibboleth
+
+networks:
+ net:
+ driver: bridge
+
+volumes:
+ security_object:
+ midpoint_data:
+ midpoint_home:
+ idp_conf:
+ idp_credentials:
+ idp_metadata:
+ idp_certs:
+ apache_conf:
+ shibboleth_conf:
+ ldap:
+ shared_pw:
diff --git a/demo/shibboleth-apache-sp/midpoint_server/post-initial-objects/SecurityPolicy.xml b/demo/shibboleth-apache-sp/midpoint_server/post-initial-objects/SecurityPolicy.xml
new file mode 100644
index 0000000..8396297
--- /dev/null
+++ b/demo/shibboleth-apache-sp/midpoint_server/post-initial-objects/SecurityPolicy.xml
@@ -0,0 +1,88 @@
+
+ Default Security Policy
+
+
+
+ loginForm
+
+
+ httpBasic
+
+
+ httpHeader
+ REMOTE_USER
+ https://localhost:8443/Shibboleth.sso/Logout
+
+
+
+ admin-gui-saml-internal
+
+ Internal SAML2 GUI authentication sequence.
+
+
+ http://midpoint.evolveum.com/xml/ns/public/common/channels-3#user
+ true
+ saml-internal
+
+
+ httpHeader
+ 30
+ sufficient
+
+
+
+ admin-gui-emergency
+
+ Special GUI authentication sequence that is using just the internal user password.
+
+
+ http://midpoint.evolveum.com/xml/ns/public/common/channels-3#user
+ false
+ emergency
+
+
+
+
+ loginForm
+ 30
+ sufficient
+
+
+
+ rest-default
+
+ http://midpoint.evolveum.com/xml/ns/public/common/channels-3#rest
+ true
+ rest-default
+
+
+ httpBasic
+ 1
+ sufficient
+
+
+
+ actuator-default
+
+ http://midpoint.evolveum.com/xml/ns/public/common/channels-3#actuator
+ true
+ actuator-default
+
+
+ httpBasic
+ 1
+ sufficient
+
+
+ /actuator/health
+
+
+
+ 0
+ 3
+ PT3M
+ PT15M
+
+
+
+
diff --git a/demo/shibboleth/idp/shibboleth-idp/conf/attribute-filter.xml b/demo/shibboleth-apache-sp/shibboleth-idp/conf/attribute-filter.xml
similarity index 100%
rename from demo/shibboleth/idp/shibboleth-idp/conf/attribute-filter.xml
rename to demo/shibboleth-apache-sp/shibboleth-idp/conf/attribute-filter.xml
diff --git a/demo/grouper/idp/shibboleth-idp/conf/attribute-resolver.xml b/demo/shibboleth-apache-sp/shibboleth-idp/conf/attribute-resolver.xml
similarity index 100%
rename from demo/grouper/idp/shibboleth-idp/conf/attribute-resolver.xml
rename to demo/shibboleth-apache-sp/shibboleth-idp/conf/attribute-resolver.xml
diff --git a/demo/shibboleth/idp/shibboleth-idp/conf/idp.properties b/demo/shibboleth-apache-sp/shibboleth-idp/conf/idp.properties
similarity index 99%
rename from demo/shibboleth/idp/shibboleth-idp/conf/idp.properties
rename to demo/shibboleth-apache-sp/shibboleth-idp/conf/idp.properties
index 2470feb..cf0b2f8 100644
--- a/demo/shibboleth/idp/shibboleth-idp/conf/idp.properties
+++ b/demo/shibboleth-apache-sp/shibboleth-idp/conf/idp.properties
@@ -26,8 +26,8 @@ idp.scope= example.org
#idp.sealer.aliasBase = secret
idp.sealer.storeResource= %{idp.home}/credentials/sealer.jks
idp.sealer.versionResource= %{idp.home}/credentials/sealer.kver
-idp.sealer.storePassword= password
-idp.sealer.keyPassword= password
+idp.sealer.storePassword= changeit
+idp.sealer.keyPassword= changeit
# Settings for public/private signing and encryption key(s)
# During decryption key rollover, point the ".2" properties at a second
diff --git a/demo/grouper/idp/shibboleth-idp/conf/ldap.properties b/demo/shibboleth-apache-sp/shibboleth-idp/conf/ldap.properties
similarity index 100%
rename from demo/grouper/idp/shibboleth-idp/conf/ldap.properties
rename to demo/shibboleth-apache-sp/shibboleth-idp/conf/ldap.properties
diff --git a/demo/shibboleth-apache-sp/shibboleth-idp/conf/metadata-providers.xml b/demo/shibboleth-apache-sp/shibboleth-idp/conf/metadata-providers.xml
new file mode 100644
index 0000000..4c760b3
--- /dev/null
+++ b/demo/shibboleth-apache-sp/shibboleth-idp/conf/metadata-providers.xml
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/demo/shibboleth/configs-and-secrets/midpoint/shibboleth/idp-metadata.xml b/demo/shibboleth-apache-sp/shibboleth-idp/metadata/idp-metadata.xml
similarity index 97%
rename from demo/shibboleth/configs-and-secrets/midpoint/shibboleth/idp-metadata.xml
rename to demo/shibboleth-apache-sp/shibboleth-idp/metadata/idp-metadata.xml
index 28ae7d1..86de901 100644
--- a/demo/shibboleth/configs-and-secrets/midpoint/shibboleth/idp-metadata.xml
+++ b/demo/shibboleth-apache-sp/shibboleth-idp/metadata/idp-metadata.xml
@@ -101,12 +101,12 @@ p+tGUbGS2l873J5PrsbpeKEVR/IIoKo=
-
+
-
+
+ urn:mace:shibboleth:1.0:nameIdentifier
urn:oasis:names:tc:SAML:2.0:nameid-format:transient
- urn:mace:shibboleth:1.0:nameIdentifier
diff --git a/demo/shibboleth/idp/shibboleth-idp/metadata/midpoint-shib-sp.xml b/demo/shibboleth-apache-sp/shibboleth-idp/metadata/midpoint-shib-sp.xml
similarity index 61%
rename from demo/shibboleth/idp/shibboleth-idp/metadata/midpoint-shib-sp.xml
rename to demo/shibboleth-apache-sp/shibboleth-idp/metadata/midpoint-shib-sp.xml
index fbd3655..58f384e 100644
--- a/demo/shibboleth/idp/shibboleth-idp/metadata/midpoint-shib-sp.xml
+++ b/demo/shibboleth-apache-sp/shibboleth-idp/metadata/midpoint-shib-sp.xml
@@ -29,62 +29,60 @@ and do *NOT* provide it in real time to your partners.
- buildkitsandbox
+ 902a9863aa37
- CN=buildkitsandbox
- MIID/zCCAmegAwIBAgIUVGDhD9M4yz9FoDaLK0CKO31Gwm4wDQYJKoZIhvcNAQEL
-BQAwGjEYMBYGA1UEAxMPYnVpbGRraXRzYW5kYm94MB4XDTIzMDYxMjEzMTUwMVoX
-DTMzMDYwOTEzMTUwMVowGjEYMBYGA1UEAxMPYnVpbGRraXRzYW5kYm94MIIBojAN
-BgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAvTY3I7mkXCmRzb5otELFPWMwmlLv
-+yUhgg6Vg9Id27ygNEhcOTqfy3b5lahmJLvQeA7yUwIIzt4MMnLMKxf9F41sL22s
-TonwXDK75AhduR1F0EyyAeVsTOLmL/h7jTAt2Bv95SZ/Gd0bfcWsDdlMQbUofwZ9
-Wm9LpWj0//Iw7o5vUGBwrXygZPqdQ/6gFwpRdv437PT3Lki0G11AQuhYTJyGWXDS
-UTqYUp2W+DOmm2jyCUsY+Ht43qsFbHqsR4w4iV93UA3bRCPFww+gKHU/mmxXoPpd
-VDtAp/PB8qRm2sWQV8xY+AlSerBZZ8oHZfbUcsI0cYE/vQpGEgbYrq7V/widy/4Y
-8WeuG/6kDgFFQXzl5IajjvvYzxX/Kii65/4ouYkT91v4DuWRSUE/g9Z66HeRJiiT
-JyOHTkYawz/A8PwqrHc7dRRVP5uxwdt8nTyIOer+O0aWDqUKrfybByLxO+lOHJiz
-BXmLet1Nh/A04Sa18WWwqcC950RvgaIZiVElAgMBAAGjPTA7MBoGA1UdEQQTMBGC
-D2J1aWxka2l0c2FuZGJveDAdBgNVHQ4EFgQUglQr3VfgTCy4RHmUrl2KCK6WGgUw
-DQYJKoZIhvcNAQELBQADggGBABm6pQD/zn4sGvYhDXKcKXVBK7rSKdG6bcVG+kTK
-wUmEOEqJN6wcugjn//nKyhELG1/9huKumMFC+rRFpvwRYZ9LsfvRNxprAL8Vc7sh
-O2AaXssUxh4g9YyW9enHkkU3FuZHuKMIsV/W2jkHxR0Xbs41ZBi7lpgFTOLGi/Jj
-gLQndqIPFLZxUKor+/nc14CYqSVUDjWBiZ5N3BU1QV9AJVxX3tnJmUrvv6rWMwfp
-uSsEKTE3z2udoK2h1xf5skeN0oJbWdHnBNhIo60lsQ65a9WSHCwphy8S4twiHsDF
-wkDE1Kl+VOenbiY7CLK9QSkd8khAfywmIrXvFYGOk1nddPZtC3ACSUesvQbe08zv
-oLBiJe12fzG4s76hSsM6m6qnnKhovhByzhDYlMqp7x5O9Mbqn5GeJvpgRKUY51TB
-B2s7s9LudXKDBDKaw9lTvK56mmxWHTyxlx0YxzgMcVMvShQLeBdStDmHdDWK/HWu
-bAcjyR/CDWHawvytoy7a1tzP2w==
+ CN=902a9863aa37
+ MIID6zCCAlOgAwIBAgIJAJ+Xet5c0YjjMA0GCSqGSIb3DQEBCwUAMBcxFTATBgNV
+BAMTDDkwMmE5ODYzYWEzNzAeFw0yMTEyMDIyMzAwMjBaFw0zMTExMzAyMzAwMjBa
+MBcxFTATBgNVBAMTDDkwMmE5ODYzYWEzNzCCAaIwDQYJKoZIhvcNAQEBBQADggGP
+ADCCAYoCggGBALMu8PXgzlNqUuNTamJ6U/jmqGacVetSLhb+/IbTl92NlFMt1ZGZ
+n72Wb01gBHKXUMT9QHFUP0eTwDOTXyKRf8UrAdW3dwQDHthQ7MPWKEcHPApEKu5H
+eo2JSEcyYGXqlr2Il62skfFudEY4xzgNrCc7KYAi8aUPsoqHICqzCGcU8Tw44/N0
+HU9leHBKIlTm5h0mxNX8+/GQCbQvhyIebUNdN12qWhn7wAY7wbgtc23lLKgD++df
+jOywttrrBCojHXdytMunUjbSavET8k0y45+3/r/VeKJBd3CA7glG2fBUW5xizS01
+sfTJanuSL3FcE9lm3U1CCFblHEwAgip0z2cnu0MBy8WNYzDEyaZqE6VD2i0uRvf3
+zCmJ3V77+0/fScgRS7JttyFW20UTVWh3olSXU8ORM1GSab6qWNTZpdVySlHeIdWC
+QicAlADNY9EchvfQCcWl1wgBxWEOl4nTNUzdtE+X/kIR/VXuO+OwXA7qbx/ytwZO
+LqoFarhD5S3X0wIDAQABozowODAXBgNVHREEEDAOggw5MDJhOTg2M2FhMzcwHQYD
+VR0OBBYEFOQ85hdOd14qPZFoKasCsUwh2ktxMA0GCSqGSIb3DQEBCwUAA4IBgQAp
+8GtAv4ZplaSKSGRFSJHM5ozbG5vn9mf7fx4vMMchKbituHB0CsgUL8JWRE4iG6o/
+UKVfg93JaBqTTh8sGcBt9DEvufBsTY/oAQm3lUMk8xVWb6W00xCKOYcukXd8/i+B
+rBbdCTdyYLb6JpdIUYEiUKKYypUiYAvgkiaSfz81Vf5R+X1TkPDvAIBlOzYS4XRG
+zsDsadiiNJKjQbz3AEG/KEtail0L+EwYp+dAB0gMOPi/hfEaAHh7NfNbcHBp8SJZ
+HkdQreNZXScPBmVx6XYv+SkRPHrE2arln3VCYbt2LwY7TVxL8U3Ii2Ui9+lUp18q
+NcxxOBFkIDEJp8tUwxjh8sZRrl14NoYl688+d4oDmWd09VBr3Z3Gi7rPWzBvqDl9
+Cvzm7tk0J5CDJ/pgoJC0DoZw6gyM9d0Eetk5uguLtSyZdRsBdD9gHeDbxZ/zykpT
+VOtn1CstTpGrIu//upz4d9NV+3RWcX8zRsK3mqk/eMBqjdZw0AKVKE4jzzSouZk=
- buildkitsandbox
+ 902a9863aa37
- CN=buildkitsandbox
- MIID/zCCAmegAwIBAgIUT3mnnjaGhi0ma3nulXpEQTNi7vowDQYJKoZIhvcNAQEL
-BQAwGjEYMBYGA1UEAxMPYnVpbGRraXRzYW5kYm94MB4XDTIzMDYxMjEzMTUwMVoX
-DTMzMDYwOTEzMTUwMVowGjEYMBYGA1UEAxMPYnVpbGRraXRzYW5kYm94MIIBojAN
-BgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAuZ+JbwVk2U/ZYBLgPkS9ToZmDAOs
-bC/weInnbgdkdmIp3cjBJaitxx2aCl3Pwcs/vM9WT1ou+n6/2dmwQrRCbyr1XjQg
-4UAKYc28anKzwx5+ihcb+ReMiwSIU94mXfXL6iFuwQPKCD7AnibAmRUeZf/gkngT
-cnaI9cRqQlyarM8nnkXsE3+cd2yA69y/zHTRsa2rJT/bM2rsOXe/Bi+NgpRoUBsp
-V9sUvpXbiahtCVYXiHbrsKpIgqJ9y4OlD4RAqZxX9JX2mSRjHjLocIeOsjDK1DYe
-6sAxsy29NSqIvhsNg7kdyx3wWZIokpLL2Z43GIaLYGzXMOP3a17ajtp8HlPtzvaK
-KbN2P7hkfISmQ7IcOdhxkNPDvs7mEqy7XnGaWdY/7A5DlkACDG321wGzyDS+6qJO
-R3B0AAMiwXYDqLyfM1lOWrzLTNZkgX+/d2roTrxwy5Sn3jJ4kD9hztErWWUxGJGk
-DObkoF9QAj/7xQ4GfpZ0gGh1PfxL8PzHseSnAgMBAAGjPTA7MBoGA1UdEQQTMBGC
-D2J1aWxka2l0c2FuZGJveDAdBgNVHQ4EFgQUJCkrVG620H8d9enYV7ajWsb+4o0w
-DQYJKoZIhvcNAQELBQADggGBAJ9ArmkmB/aMiDN5K0Ze3MLz9CIvK9x+T8ri+hW5
-tnUQXI82DEDw3CFoQ4eqfI2P89NFJVWX/+68nPkHRoBI4vrD1VZRMF53PU95Mqvm
-XhsGj6F2CRQkPLfITKAbQXeYMzkQaTf85KUGyihSIEfdyANxKBy+109NK0012mwT
-ZIuIjTtao7b2KC+VWaknu2JSK7ScseOX8NUzxl09trRo5itl8ucljmAfh9jfVZfU
-SwTqof/Nho42ZOg7t5MrFOMOi5UtOjG/c7v2TSYvc5Bz0dbxWlNglyNBQ4jfwYBR
-A/sMGQ8kdng+AV7F+CZLvwCsmkOmPoj0yWuUCEOMWrI94dQRzk2knhURJEZNmtAQ
-GQUN41h+e8+nTqd18a1yS/0ryzrEpf/jYNC+te1lya0oNoe0hm4HBAsNu58VYIVd
-BcMc6UqGcj6lLYohLRXxzNc2BgjcRmheFRAGbx1WUIPGFGmAc6pjnVBiN9YGLfIb
-iAUZBIyVQohCQmcS+NChw8ae7A==
+ CN=902a9863aa37
+ MIID6zCCAlOgAwIBAgIJAPyhTN3IjNxAMA0GCSqGSIb3DQEBCwUAMBcxFTATBgNV
+BAMTDDkwMmE5ODYzYWEzNzAeFw0yMTEyMDIyMzAwMjFaFw0zMTExMzAyMzAwMjFa
+MBcxFTATBgNVBAMTDDkwMmE5ODYzYWEzNzCCAaIwDQYJKoZIhvcNAQEBBQADggGP
+ADCCAYoCggGBALrIjRMDZivNAAEHazkPsOfZKQQ8ikxUlwex4W9jubXXIIKmQZBF
+bU1or3GXSWQHjOmqM38elQ+pjZcyuGifGcT48inq4E57Mg0U6BWJChRwqbuUmF9t
+t0I/oDqWkHfqx/UCP2poVT9b76ZLr9D+NCMFCZEw+eJukPV53c83baRdZUXM550X
+YCNGbUXnifl9ZhlVkQ+teqsXayR+HBBljaJ7vE9pbv8yrVIR+sOsa68dJIMUFiBs
+5OgZvfnto5BcwNwE1opaeORI0mkpZP1u/YOnlrHHIf5nSo5/MiF3gC9oGgWnRbnf
+rWPwAvfcxlBURJsgjO/FSPWW/OmrtL8YafinPoFmWERpHXWmXfDecnHvOjhrwzSr
+BjZciPxfDUfZZnpNX+ZRhZAhxR3IGwxN8tEHyNB6kJZHBY0PqaogcLUzhVbV7jUD
+fWV4oQM14OkBx4bI5EYkTVaI966S1v/5fyltzhjkztC16M2xig3lBG5t+wFDsjUO
+j86XM/lxm6R5CQIDAQABozowODAXBgNVHREEEDAOggw5MDJhOTg2M2FhMzcwHQYD
+VR0OBBYEFP3RZINsIoxMe6LbKdaYexFlpR6XMA0GCSqGSIb3DQEBCwUAA4IBgQAx
+ysr70luutkA31L0J4QF+JuS0UenIRwvlvnPusHqVU/0zS0PmE0gzZxRfdg1L3gNi
+IqvpBk4nTpnL0nio/da+Grm+94DZRP0qalH+oPJaFK+cxGaSu2qaIWc1pZdgO5+8
+r08MBb4d9hHviZ1Ay3r8m9Gs9FeD/BumZKatvTxts+ydP5TiJenz261djyBqBiTC
+XFIW866d90l4QQQwWClkfbEN7fj65ANaHXeaYKdYUeUXAPh6oSDmshVE8VFhkIr0
+JOpzj0wzn3Uy+Sqj9EqLxXxELZ0Ho3t9kwIVatNjbQEUd3yNsyDf8hmjCWJgHa5N
+4PUHrjVIaqBQEE4f4NwKtAnNQ/bQ7EZiaXtPnJ9tMGGXZY1QztFa/Kv5j7zBgeyu
+V5DuUo2gc+mm2oSYuicmZGA9tW6bGkwMM3Me90zNWMk68vFtB/mbGDPiKM7yODqT
+3lF1Jj4UDI0oGK59Z06d9G03sAsDf9JDLQ9PfmEHSh7c2O+F9eEj3hrUMiYzDFA=
diff --git a/demo/shibboleth-midpoint-sp/beacon/Dockerfile b/demo/shibboleth-midpoint-sp/beacon/Dockerfile
new file mode 100644
index 0000000..256352c
--- /dev/null
+++ b/demo/shibboleth-midpoint-sp/beacon/Dockerfile
@@ -0,0 +1,15 @@
+FROM rockylinux:9.3
+
+COPY container_files/* /opt/tier/
+
+RUN dnf update -y --disablerepo=\* --enablerepo=baseos && \
+ dnf install -y cronie-anacron crontabs cronie --disablerepo=\* --enablerepo=baseos && \
+ dnf clean all -y ; \
+ rm -rf /var/cache/dnf ; \
+ /opt/tier/setup-cron.sh ;
+
+ENV TIER_RELEASE=not-released-yet \
+ TIER_MAINTAINER=tier \
+ MP_VERSION=4.8
+
+CMD [ "/usr/sbin/crond", "-n", "-i", "-m", "off" ]
diff --git a/demo/shibboleth-midpoint-sp/beacon/container_files/sendtierbeacon.sh b/demo/shibboleth-midpoint-sp/beacon/container_files/sendtierbeacon.sh
new file mode 100755
index 0000000..8f066f7
--- /dev/null
+++ b/demo/shibboleth-midpoint-sp/beacon/container_files/sendtierbeacon.sh
@@ -0,0 +1,39 @@
+#!/bin/bash
+
+LOGHOST="collector.testbed.tier.internet2.edu"
+LOGPORT="5001"
+
+if [ -s /opt/tier/env.bash ]; then
+ . /opt/tier/env.bash
+fi
+
+messagefile="/tmp/beaconmsg"
+
+if [ -z "$TIER_BEACON_OPT_OUT" ]; then
+ cat > $messagefile </dev/null 2>&1
+ if [ $? -eq 0 ]; then
+ echo "TIER beacon sent"
+ else
+ echo "Failed to send TIER beacon"
+ fi
+
+ rm -f $messagefile 1>/dev/null 2>&1
+
+else
+ echo "TIER beacon skipped - scheduled but Opted out"
+fi
diff --git a/demo/shibboleth-midpoint-sp/beacon/container_files/setup-cron.sh b/demo/shibboleth-midpoint-sp/beacon/container_files/setup-cron.sh
new file mode 100755
index 0000000..2d33d3a
--- /dev/null
+++ b/demo/shibboleth-midpoint-sp/beacon/container_files/setup-cron.sh
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+CRONFILE=/opt/tier/tier-cron
+
+echo "#send daily \"beacon\" to central" > ${CRONFILE}
+echo "" >> ${CRONFILE}
+echo "# ┌───────────── minute (0–59)" >> ${CRONFILE}
+echo "# │ ┌───────────── hour (0–23)" >> ${CRONFILE}
+echo "# │ │ ┌───────────── day of the month (1–31)" >> ${CRONFILE}
+echo "# │ │ │ ┌───────────── month (1–12)" >> ${CRONFILE}
+echo "# │ │ │ │ ┌───────────── day of the week (0–6) (Sunday to Saturday;" >> ${CRONFILE}
+echo "# │ │ │ │ │ 7 is also Sunday on some systems)" >> ${CRONFILE}
+echo "# │ │ │ │ │" >> ${CRONFILE}
+echo "# │ │ │ │ │" >> ${CRONFILE}
+echo "# * * * * * " >> ${CRONFILE}
+echo "" >> ${CRONFILE}
+echo "$(expr $RANDOM % 60) $(expr $RANDOM % 4) * * * /opt/tier/sendtierbeacon.sh 2>&1 | tee /proc/1/fd/1 >> /tmp/logcrond" >> ${CRONFILE}
+echo "" >> ${CRONFILE}
+echo "# List the current setting of the crontab to the log (when is the beacon scheduled)" >> ${CRONFILE}
+echo "@reboot crontab -l >/proc/1/fd/1" >> ${CRONFILE}
+echo "" >> ${CRONFILE}
+
+chmod 644 ${CRONFILE}
+crontab ${CRONFILE}
diff --git a/demo/shibboleth-midpoint-sp/directory/Dockerfile b/demo/shibboleth-midpoint-sp/directory/Dockerfile
new file mode 100644
index 0000000..4880156
--- /dev/null
+++ b/demo/shibboleth-midpoint-sp/directory/Dockerfile
@@ -0,0 +1,35 @@
+FROM rockylinux:9.3 as baseinst
+
+RUN dnf update -y && \
+ dnf install -y --enablerepo=devel openldap openldap-clients openldap-servers && \
+ dnf clean all && \
+ rm -rf /var/cache/dnf
+
+EXPOSE 389/tcp
+
+VOLUME /var/lib/ldap
+
+FROM baseinst
+
+#LABEL author="tier-packaging@internet2.edu "
+
+ARG ldapDomain="dc=internet2,dc=edu"
+ARG ldapPw="password"
+
+COPY container_files/* /opt
+
+RUN cd /opt ; \
+ /opt/slapd.sh -init ; \
+ /opt/gen_config_update "${ldapDomain}" "${ldapPw}" "0" "0" ;\
+ cat 999_schema-list | while read line ; do \
+ ldapadd -H ldapi:/// -f /etc/openldap/schema/${line}.ldif ; \
+ done ; \
+ for s in 0 1 2 3 4 5 6 7 8 9 ; do \
+ find -type f -name "${s}[0-4]?_*.ldif" -exec ldapmodify -H ldapi:/// -f /opt/\{\} \; ; \
+ find -type f -name "${s}[5-9]?_*.ldif" -exec ldapadd -H ldapi:/// -f /opt/\{\} \; ; \
+ done ; \
+ rm /opt/[0-9]* && \
+ /opt/slapd.sh -stop ;
+
+CMD [ "/opt/slapd.sh", "-limit", "1024", "-debug", "256" ]
+
diff --git a/demo/shibboleth-midpoint-sp/directory/container_files/gen_config_update b/demo/shibboleth-midpoint-sp/directory/container_files/gen_config_update
new file mode 100755
index 0000000..a23fccc
--- /dev/null
+++ b/demo/shibboleth-midpoint-sp/directory/container_files/gen_config_update
@@ -0,0 +1,203 @@
+#!/bin/bash
+domain="${1:-dc=example,dc=com}"
+if [ $(echo -n ${domain} | wc -c ) -eq $(echo -n ${domain} | tr -d "," | wc -c) ]
+then
+ subDomain="${domain:4}"
+else
+ subDomain="$(echo -n ${domain:4} | cut -d , -f 1)"
+fi
+userpw="${2:-change_me}"
+cleartext="${3:-0}"
+locDebug="${4:-0}"
+
+function genPass() {
+ retVal="userPassword:"
+ if [ "${cleartext}" != "1" ]
+ then
+ secPw="$(slappasswd -s ${userpw})"
+ secPw2="$(echo -n ${secPw} | base64 )"
+ [ "${locDebug}" != "0" ] && echo "${userpw} => ${secPw} => ${secPw2}" >&2
+ retVal="${retVal}: ${secPw2}"
+ else
+ [ "${locDebug}" != "0" ] && echo "${userpw}" >&2
+ retVal="${retVal} ${userpw}"
+ fi
+ while [ ${#retVal} -gt 78 ]
+ do
+ echo "${retVal:0:78}"
+ retVal=" ${retVal:78}"
+ done
+ if [ ${#retVal} -gt 2 ]
+ then
+ echo "${retVal}"
+ fi
+}
+
+cat >999_schema-list <001_monitor-diff.ldif <101_mdb-diff.ldif <251_mod_config.ldif <151_default_structure.ldif <252_default_policy.ldif <851_default_structure.ldif <959_default_structure.ldif <&2
+ ulimit -n ${localLimit}
+ exec /usr/sbin/slapd -4 -h "ldapi:///" -u ldap -g ldap
+ exit 0
+ ;;
+ stop)
+ while read line
+ do
+ kill ${line}
+ count=0
+ while [ -e /proc/${line} ]
+ do
+ [ ${count} -gt 10 ] && kill -9 ${line}
+ echo "Waiting to terminate the process"
+ count=$(( ${count} + 1 ))
+ sleep 1
+ done
+ echo "Terminated..."
+ ${0} -stop
+ done < <( grep "^slapd$" /proc/*/comm | head -1 | cut -d / -f 3 )
+ exit 0
+ ;;
+ esac
+done
+
+ulimit -n ${localLimit}
+
+
+if [ -z ${LDAP_INIT+x} ]
+then
+ [ ! -z ${LDAP_INFO+x} ] && echo "uLimit : ${localLimit} / debug level : ${debugLevel}" >&2
+ exec /usr/sbin/slapd -h "ldap://0.0.0.0:389 ldapi:///" -u ldap -g ldap -d ${debugLevel}
+else
+ [ ! -z ${LDAP_INFO+x} ] && echo "uLimit : ${localLimit}" >&2
+ exec /usr/sbin/slapd -4 -h "ldapi:///" -u ldap -g ldap
+fi
+
diff --git a/demo/shibboleth-midpoint-sp/docker-compose.yml b/demo/shibboleth-midpoint-sp/docker-compose.yml
new file mode 100644
index 0000000..a3bd98b
--- /dev/null
+++ b/demo/shibboleth-midpoint-sp/docker-compose.yml
@@ -0,0 +1,356 @@
+version: "3.3"
+
+services:
+ prereq:
+ image: evolveum/midpoint:${MP_VER:-4.8.3}-rockylinux
+ command: >
+ bash -c "
+ echo ' - - - - - - -' ;
+ cd /mnt/security ;
+ if [ ! -e key.pem ] ;
+ then
+ echo 'Certificate has not been found. Generating of the new one...' ;
+ openssl req -newkey rsa:2048 -keyout key.pem -nodes -subj '/C=US/ST=MI/L=Ann Arbor/O=Internet2\\/TIER/CN=midpoint.sp.example.org' -addext 'subjectAltName = DNS:midpoint.sp.example.org, DNS:midpoint_server, DNS:directory, DNS:idp, DNS: localhost, DNS: localhost.localdomain, IP:127.0.0.1, IP:::1' -out cert.pem -days 1825 -x509 ;
+ openssl req -newkey rsa:3072 -keyout sp-encrypt-key.pem -nodes -subj '/CN=sptest.example.edu' -addext 'subjectAltName = DNS:sptest.example.edu' -out sp-encrypt-cert.pem -days 3650 -x509 ;
+ openssl req -newkey rsa:3072 -keyout sp-signing-key.pem -nodes -subj '/CN=sptest.example.edu' -addext 'subjectAltName = DNS:sptest.example.edu' -out sp-signing-cert.pem -days 3650 -x509 ;
+ openssl req -newkey rsa:2048 -keyout idp-backchannel.key -nodes -subj '/CN=idptestbed' -addext 'subjectAltName = DNS:idptestbed, URI:https://idptestbed/idp/shibboleth' -out idp-backchannel.crt -days 7300 -x509 ;
+ openssl req -newkey rsa:2048 -keyout idp-encryption.key -nodes -subj '/CN=idptestbed' -addext 'subjectAltName = DNS:idptestbed, URI:https://idptestbed/idp/shibboleth' -out idp-encryption.crt -days 7300 -x509 ;
+ openssl req -newkey rsa:2048 -keyout idp-signing.key -nodes -subj '/CN=idptestbed' -addext 'subjectAltName = DNS:idptestbed, URI:https://idptestbed/idp/shibboleth' -out idp-signing.crt -days 7300 -x509 ;
+ openssl req -newkey rsa:2048 -keyout idp-browser.key -nodes -subj '/CN=idp.ccc.local' -addext 'authorityKeyIdentifier = keyid:always,issuer:always' -out idp-browser.crt -days 10585 -x509 ;
+ openssl x509 -noout -fingerprint -sha256 -in cert.pem ;
+ openssl pkcs12 -export -in sp-signing-cert.pem -inkey sp-signing-key.pem -out signing-key.p12 -passout pass:password -name signing-key ;
+ openssl pkcs12 -export -in sp-encrypt-cert.pem -inkey sp-encrypt-key.pem -out encrypt-key.p12 -passout pass:password -name encrypt-key ;
+ openssl pkcs12 -export -in cert.pem -inkey key.pem -out keystore.p12 -passout pass:password -name selfsigned ;
+ keytool -importkeystore -srckeystore encrypt-key.p12 -srcstoretype pkcs12 -srcstorepass password -srcalias encrypt-key -destkeystore shibboleth_sp_keys.jks -deststoretype jks -deststorepass changeit -noprompt -destalias encrypt-key ;
+ keytool -importkeystore -srckeystore signing-key.p12 -srcstoretype pkcs12 -srcstorepass password -srcalias signing-key -destkeystore shibboleth_sp_keys.jks -deststoretype jks -deststorepass changeit -noprompt -destalias signing-key ;
+ keytool -importkeystore -srckeystore keystore.p12 -srcstoretype pkcs12 -srcstorepass password -srcalias selfsigned -destkeystore keystore.jks -deststoretype jks -deststorepass password -noprompt -destalias selfsigned ;
+ keytool -list -keystore shibboleth_sp_keys.jks -storetype jceks -storepass changeit ;
+ keytool -list -keystore keystore.jks -storetype jceks -storepass password ;
+ openssl pkcs12 -export -in idp-backchannel.crt -inkey idp-backchannel.key -out idp-backchannel.p12 -passout pass:password -name idptestbed ;
+ openssl pkcs12 -export -in idp-browser.crt -inkey idp-browser.key -out idp-browser.p12 -passout pass:password -name myAlias ;
+ for s in *ert.pem *.crt ; do echo ' - - - - - ' ; echo $${s} ; openssl x509 -noout -fingerprint -sha256 -in $${s} ; echo ; openssl x509 -noout -subject -subject_hash -dates -in $${s} ; done ;
+ echo ' - - - - - ' ;
+ mkdir /mnt/midpoint/var/shibboleth ;
+ cp shibboleth_sp_keys.jks /mnt/midpoint/var/shibboleth ;
+ cp cert.pem /mnt/midpoint/var ;
+ cp key.pem /mnt/midpoint/var ;
+ mkdir /mnt/nginx/certs;
+ cp cert.pem /mnt/nginx/certs ;
+ cp key.pem /mnt/nginx/certs ;
+ echo ' server {' >> /mnt/nginx/conf.d/midpoint.conf ;
+ echo ' listen 443 ssl default_server;' >> /mnt/nginx/conf.d/midpoint.conf ;
+ echo ' server_name localhost;' >> /mnt/nginx/conf.d/midpoint.conf ;
+ echo '' >> /mnt/nginx/conf.d/midpoint.conf ;
+ echo ' ssl_certificate /etc/nginx/certs/cert.pem;' >> /mnt/nginx/conf.d/midpoint.conf ;
+ echo ' ssl_certificate_key /etc/nginx/certs/key.pem;' >> /mnt/nginx/conf.d/midpoint.conf ;
+ echo '' >> /mnt/nginx/conf.d/midpoint.conf ;
+ echo ' proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;' >> /mnt/nginx/conf.d/midpoint.conf ;
+ echo ' location / {' >> /mnt/nginx/conf.d/midpoint.conf ;
+ echo ' rewrite ^/$ /midpoint/ last;' >> /mnt/nginx/conf.d/midpoint.conf ;
+ echo ' rewrite ^/midpoint$ /midpoint/ last;' >> /mnt/nginx/conf.d/midpoint.conf ;
+ echo '' >> /mnt/nginx/conf.d/midpoint.conf ;
+ echo ' proxy_set_header X-Real-IP $$remote_addr;' >> /mnt/nginx/conf.d/midpoint.conf ;
+ echo ' proxy_set_header X-Forwarded-For $$proxy_add_x_forwarded_for;' >> /mnt/nginx/conf.d/midpoint.conf ;
+ echo ' proxy_set_header X-Forwarded-Host: $$host;' >> /mnt/nginx/conf.d/midpoint.conf ;
+ echo ' proxy_set_header X-Forwarded-Proto: $$scheme;' >> /mnt/nginx/conf.d/midpoint.conf ;
+ echo ' proxy_pass http://midpoint-container:8080/;' >> /mnt/nginx/conf.d/midpoint.conf ;
+ echo '' >> /mnt/nginx/conf.d/midpoint.conf ;
+ echo ' }' >> /mnt/nginx/conf.d/midpoint.conf ;
+ echo '' >> /mnt/nginx/conf.d/midpoint.conf ;
+ echo ' location /idp {' >> /mnt/nginx/conf.d/midpoint.conf ;
+ echo ' proxy_set_header Host localhost;' >> /mnt/nginx/conf.d/midpoint.conf ;
+ echo ' proxy_pass https://idp:443/idp ;' >> /mnt/nginx/conf.d/midpoint.conf ;
+ echo ' }' >> /mnt/nginx/conf.d/midpoint.conf ;
+ echo ' }' >> /mnt/nginx/conf.d/midpoint.conf ;
+ cp idp-backchannel.crt /mnt/shibboleth-idp/credentials ;
+ cp idp-backchannel.p12 /mnt/shibboleth-idp/credentials ;
+ cp idp-browser.p12 /mnt/shibboleth-idp/credentials ;
+ cp idp-encryption.crt /mnt/shibboleth-idp/credentials ;
+ cp idp-encryption.key /mnt/shibboleth-idp/credentials ;
+ cp idp-signing.crt /mnt/shibboleth-idp/credentials ;
+ cp idp-signing.key /mnt/shibboleth-idp/credentials ;
+ cp sp-signing-cert.pem /mnt/shibboleth-idp/credentials ;
+ cp keystore.jks /mnt/shibboleth/certs ;
+ echo ' - - - - - ' ;
+ find -type f ;
+ echo ' - - - - - - -' ;
+ find /mnt/shibboleth-idp/ -type f ;
+ echo ' - - - - - - -' ;
+ find /mnt/shibboleth -type f ;
+ echo ' - - - - - - -' ;
+ find /mnt/midpoint/ -type f ;
+ echo ' - - - - - - -' ;
+ else echo 'certificate already exists... (skip new cert generation)' ;
+ fi ;
+ if [ ! -e /mnt/shared_pw/db_pass ] ; then
+ echo 'Generating password for DB connection...';
+ dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64 | tr -d -c [0-9a-z] | cut -c 1-32 | tr -d [[:space:]] > /mnt/shared_pw/db_pass ;
+ fi ;
+ "
+ networks:
+ - net
+ volumes:
+ - security_object:/mnt/security
+ - shared_pw:/mnt/shared_pw
+ - idp_credentials:/mnt/shibboleth-idp/credentials
+ - idp_certs:/mnt/shibboleth/certs
+ - proxy_conf:/mnt/nginx
+ - midpoint_home:/mnt/midpoint/var
+
+ midpoint_data:
+ image: postgres:16-alpine
+ depends_on:
+ prereq:
+ condition: service_completed_successfully
+ environment:
+ - POSTGRES_PASSWORD_FILE=/mnt/shared_pw/db_pass
+ - POSTGRES_USER=midpoint
+ - POSTGRES_INITDB_ARGS=--lc-collate=en_US.utf8 --lc-ctype=en_US.utf8
+ healthcheck:
+ test: [ "CMD-SHELL", "pg_isready -d midpoint -U midpoint" ]
+ interval: 1s
+ timeout: 5s
+ retries: 10
+ networks:
+ - net
+ volumes:
+ - midpoint_data:/var/lib/postgresql/data
+ - shared_pw:/mnt/shared_pw
+
+ data_init:
+ image: evolveum/midpoint:${MP_VER:-4.8.3}-rockylinux
+ depends_on:
+ prereq:
+ condition: service_completed_successfully
+ midpoint_data:
+ condition: service_healthy
+ command: >
+ bash -c "
+ cd /opt/midpoint ;
+ bin/midpoint.sh init-native ;
+ echo ' - - - - - - ' ;
+ bin/ninja.sh -B info >/dev/null 2>/tmp/ninja.log ;
+ grep -q \"ERROR\" /tmp/ninja.log && (
+ bin/ninja.sh run-sql --create --mode REPOSITORY ;
+ bin/ninja.sh run-sql --create --mode AUDIT
+ ) ||
+ echo -e '\\n Repository init is not needed...' ;
+ if [ $$(keytool -list -keystore /opt/midpoint/var/keystore.jceks -storetype jceks -storepass:file /opt/midpoint/var/keystorepw | grep -c 'local_gen_cert') -eq 0 ] ;
+ then
+ keytool -importcert -keystore /opt/midpoint/var/keystore.jceks -storetype jceks -storepass:file /opt/midpoint/var/keystorepw -trustcacerts -alias 'local_gen_cert' -file /opt/midpoint/var/cert.pem -noprompt ;
+ else
+ echo 'Certificate exists in the cert store' ;
+ fi ;
+ "
+ environment:
+ - MP_SET_midpoint_repository_jdbcUsername=midpoint
+ - MP_SET_midpoint_repository_jdbcPassword_FILE=/mnt/shared_pw/db_pass
+ - MP_SET_midpoint_repository_jdbcUrl=jdbc:postgresql://midpoint_data:5432/midpoint
+ - MP_SET_midpoint_repository_database=postgresql
+ - MP_INIT_CFG=/opt/midpoint/var
+ - MP_PW_DEF=/opt/midpoint/var/keystorepw
+ - MP_KEYSTORE=/opt/midpoint/var/keystore.jceks
+ networks:
+ - net
+ volumes:
+ - midpoint_home:/opt/midpoint/var
+ - shared_pw:/mnt/shared_pw
+
+ midpoint_server:
+ image: evolveum/midpoint:${MP_VER:-4.8.3}-rockylinux
+ container_name: midpoint_server
+ hostname: midpoint-container
+ depends_on:
+ data_init:
+ condition: service_completed_successfully
+ idp_vol_init:
+ condition: service_completed_successfully
+ midpoint_data:
+ condition: service_healthy
+ command: [ "/opt/midpoint/bin/midpoint.sh", "container" ]
+ ports:
+ - 8080:8080
+ environment:
+ - MP_SET_midpoint_repository_jdbcUsername=midpoint
+ - MP_SET_midpoint_repository_jdbcPassword_FILE=/mnt/shared_pw/db_pass
+ - MP_SET_midpoint_repository_jdbcUrl=jdbc:postgresql://midpoint_data:5432/midpoint
+ - MP_SET_midpoint_repository_database=postgresql
+ - MP_SET_midpoint_keystore_keyStorePassword_FILE=/opt/midpoint/var/keystorepw
+ - MP_SET_midpoint_administrator_initialPassword=Test5ecr3t
+ - MP_UNSET_midpoint_repository_hibernateHbm2ddl=1
+ - MP_NO_ENV_COMPAT=1
+ - MP_ENTRY_POINT=/opt/midpoint-dirs-docker-entrypoint
+ networks:
+ - net
+ volumes:
+ - midpoint_home:/opt/midpoint/var
+ - shared_pw:/mnt/shared_pw
+ - ./midpoint_server/post-initial-objects:/opt/midpoint-dirs-docker-entrypoint/post-initial-objects:ro
+ - ./midpoint_server/shibboleth:/opt/midpoint-dirs-docker-entrypoint/shibboleth:ro
+
+ directory:
+ build: ./directory/
+ ports:
+ - 389:389
+ networks:
+ - net
+ volumes:
+ - ldap:/var/lib/ldap
+
+ idp_vol_init:
+ image: tier/shib-idp:3.4.6_20191002
+ depends_on:
+ prereq:
+ condition: service_completed_successfully
+ ulimits:
+ nofile:
+ soft: 1024
+ hard: 2048
+ command: >
+ bash -c "
+ echo 'Updating configuration...' ;
+ if [ -e /mnt/shibboleth-diff/conf ] ;
+ then
+ cp -vu /mnt/shibboleth-diff/conf/* /opt/shibboleth-idp/conf ;
+ fi ;
+ if [ -e /mnt/shibboleth-diff/credentials ] ;
+ then
+ cp -vu /mnt/shibboleth-diff/credentials/* /opt/shibboleth-idp/credentials ;
+ fi ;
+ if [ -e /mnt/shibboleth-diff/metadata ] ;
+ then
+ cp -vu /mnt/shibboleth-diff/metadata/* /opt/shibboleth-idp/metadata ;
+ fi ;
+ echo ' - - - - - - -' ;
+ echo 'Updating idp-metadata.xml file...' ;
+ grep -n 'X509Certificate' /mnt/shibboleth-diff/metadata/idp-metadata.xml | sed \"s/\\([0-9]*\\).*/\\1/\" > /tmp/checkpoints ;
+ wc -l /mnt/shibboleth-diff/metadata/idp-metadata.xml | sed \"s/\\([0-9]*\\).*/\\1/\" >> /tmp/checkpoints ;
+ current_line=1 ;
+ id=0 ;
+ file_path=( - idp-backchannel.crt - idp-signing.crt - idp-encryption.crt - idp-backchannel.crt - idp-signing.crt - idp-encryption.crt - ) ;
+ rm /opt/shibboleth-idp/metadata/idp-metadata.xml ;
+ cat /tmp/checkpoints | while read line ; do
+ if [ \"$${file_path[$${id}]}\" == \"-\" ] ; then
+ sed -n \"$${current_line},$${line}p\" /mnt/shibboleth-diff/metadata/idp-metadata.xml >> /opt/shibboleth-idp/metadata/idp-metadata.xml ;
+ else
+ sed '1d;$$d' /opt/shibboleth-idp/credentials/$${file_path[$${id}]} >> /opt/shibboleth-idp/metadata/idp-metadata.xml ;
+ fi ;
+ current_line=$${line};
+ id=$$(( $${id} + 1 )) ;
+ done ;
+ cp -v /opt/shibboleth-idp/metadata/idp-metadata.xml /opt/midpoint/var/shibboleth/idp-metadata.xml ;
+ echo ' - - - - - - -' ;
+ echo 'Updating midpoint-sp.xml...';
+ grep -n 'X509Certificate' /mnt/shibboleth-diff/metadata/midpoint-sp.xml | sed \"s/\\([0-9]*\\).*/\\1/\" > /tmp/checkpoints ;
+ wc -l /mnt/shibboleth-diff/metadata/midpoint-sp.xml | sed \"s/\\([0-9]*\\).*/\\1/\" >> /tmp/checkpoints ;
+ current_line=1 ;
+ id=0 ;
+ file_path=( - sp-signing-cert.pem - ) ;
+ rm /opt/shibboleth-idp/metadata/midpoint-sp.xml ;
+ cat /tmp/checkpoints | while read line ; do
+ if [ \"$${file_path[$${id}]}\" == \"-\" ] ; then
+ sed -n \"$${current_line},$${line}p\" /mnt/shibboleth-diff/metadata/midpoint-sp.xml >> /opt/shibboleth-idp/metadata/midpoint-sp.xml ;
+ else
+ sed '1d;$$d' /opt/shibboleth-idp/credentials/$${file_path[$${id}]} >> /opt/shibboleth-idp/metadata/midpoint-sp.xml ;
+ fi ;
+ current_line=$${line};
+ id=$$(( $${id} + 1 )) ;
+ done ;
+ sed -i \"s/\\([[:space:]]\\).*$$/\\1/g;s/^[[:space:]]\\(\\).*$$/\\1/g\" /opt/shibboleth-idp/metadata/midpoint-sp.xml ;
+ echo ' - - - - - - -' ;
+ echo 'Updating midpoint-sp-ssl.xml...';
+ grep -n 'X509Certificate' /mnt/shibboleth-diff/metadata/midpoint-sp-ssl.xml | sed \"s/\\([0-9]*\\).*/\\1/\" > /tmp/checkpoints ;
+ wc -l /mnt/shibboleth-diff/metadata/midpoint-sp-ssl.xml | sed \"s/\\([0-9]*\\).*/\\1/\" >> /tmp/checkpoints ;
+ current_line=1 ;
+ id=0 ;
+ file_path=( - sp-signing-cert.pem - ) ;
+ rm /opt/shibboleth-idp/metadata/midpoint-sp-ssl.xml ;
+ cat /tmp/checkpoints | while read line ; do
+ if [ \"$${file_path[$${id}]}\" == \"-\" ] ; then
+ sed -n \"$${current_line},$${line}p\" /mnt/shibboleth-diff/metadata/midpoint-sp-ssl.xml >> /opt/shibboleth-idp/metadata/midpoint-sp-ssl.xml ;
+ else
+ sed '1d;$$d' /opt/shibboleth-idp/credentials/$${file_path[$${id}]} >> /opt/shibboleth-idp/metadata/midpoint-sp-ssl.xml ;
+ fi ;
+ current_line=$${line};
+ id=$$(( $${id} + 1 )) ;
+ done ;
+ sed -i \"s/\\([[:space:]]\\).*$$/\\1/g;s/^[[:space:]]\\(\\).*$$/\\1/g\" /opt/shibboleth-idp/metadata/midpoint-sp-ssl.xml ;
+ echo ' - - - - - - -' ;
+ echo 'Generating sealer key...' ;
+ rm /opt/shibboleth-idp/credentials/sealer.* ;
+ /opt/shibboleth-idp/bin/rotateSealerKey.sh ;
+ echo ' - - - - - - -' ;
+ echo 'DONE.' ;
+ "
+ volumes:
+ - idp_conf:/opt/shibboleth-idp/conf
+ - idp_credentials:/opt/shibboleth-idp/credentials
+ - idp_metadata:/opt/shibboleth-idp/metadata
+ - ./shibboleth-idp:/mnt/shibboleth-diff:ro
+ - midpoint_home:/opt/midpoint/var
+
+ idp:
+ image: tier/shib-idp:3.4.6_20191002
+ depends_on:
+ directory:
+ condition: service_started
+ idp_vol_init:
+ condition: service_completed_successfully
+ ulimits:
+ nofile:
+ soft: 1024
+ hard: 2048
+ environment:
+ - JETTY_MAX_HEAP=64m
+ - JETTY_BROWSER_SSL_KEYSTORE_PASSWORD=password
+ - JETTY_BACKCHANNEL_SSL_KEYSTORE_PASSWORD=password
+ networks:
+ - net
+ volumes:
+ - idp_conf:/opt/shibboleth-idp/conf
+ - idp_credentials:/opt/shibboleth-idp/credentials
+ - idp_metadata:/opt/shibboleth-idp/metadata
+ - idp_certs:/opt/certs
+
+ beacon:
+ build: ./beacon/
+ networks:
+ - net
+ environment:
+ - TIER_RELEASE=not-released-yet
+ - TIER_MAINTAINER=tier
+ - MP_VERSION=4.8
+ - TIER_BEACON_OPT_OUT=true
+
+ proxy:
+ image: nginx:stable
+ depends_on:
+ prereq:
+ condition: service_completed_successfully
+ midpoint_server:
+ condition: service_started
+ idp:
+ condition: service_started
+ ports:
+ - 8180:80
+ - 443:443
+ networks:
+ - net
+ volumes:
+ - proxy_conf:/etc/nginx
+
+networks:
+ net:
+ driver: bridge
+
+volumes:
+ security_object:
+ midpoint_data:
+ midpoint_home:
+ idp_conf:
+ idp_credentials:
+ idp_metadata:
+ idp_certs:
+ proxy_conf:
+ ldap:
+ shared_pw:
diff --git a/demo/shibboleth/midpoint_server/container_files/mp-home/post-initial-objects/securityPolicy/SecurityPolicy.xml b/demo/shibboleth-midpoint-sp/midpoint_server/post-initial-objects/SecurityPolicy.xml
similarity index 82%
rename from demo/shibboleth/midpoint_server/container_files/mp-home/post-initial-objects/securityPolicy/SecurityPolicy.xml
rename to demo/shibboleth-midpoint-sp/midpoint_server/post-initial-objects/SecurityPolicy.xml
index cb2cfed..65c6fa7 100644
--- a/demo/shibboleth/midpoint_server/container_files/mp-home/post-initial-objects/securityPolicy/SecurityPolicy.xml
+++ b/demo/shibboleth-midpoint-sp/midpoint_server/post-initial-objects/SecurityPolicy.xml
@@ -8,11 +8,6 @@
httpBasic
-
- httpHeader
- REMOTE_USER
- https://localhost:8443/Shibboleth.sso/Logout
-
mySamlSso
My internal enterprise SAML-based SSO system.
@@ -21,7 +16,7 @@
true
- /etc/pki/mp/sp-shibboleth-keys.jks
+ /opt/midpoint/var/shibboleth/shibboleth_sp_keys.jks
changeit
@@ -34,7 +29,7 @@
https://idptestbed/idp/shibboleth
- /etc/shibboleth/idp-metadata.xml
+ /opt/midpoint/var/shibboleth/idp-metadata.xml
Shibboleth
urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST
@@ -50,7 +45,7 @@
http://midpoint.evolveum.com/xml/ns/public/common/channels-3#user
- false
+ true
saml-internal
@@ -77,23 +72,6 @@
sufficient
-
- admin-gui-default
- Default gui sequence
-
- Special GUI authentication sequence that is using Shibboleth SP
-
-
- http://midpoint.evolveum.com/xml/ns/public/common/channels-3#user
- true
- shib
-
-
- httpHeader
- 1
- sufficient
-
-
rest-default
diff --git a/demo/shibboleth-midpoint-sp/midpoint_server/post-initial-objects/public-url.xml b/demo/shibboleth-midpoint-sp/midpoint_server/post-initial-objects/public-url.xml
new file mode 100644
index 0000000..d353b5e
--- /dev/null
+++ b/demo/shibboleth-midpoint-sp/midpoint_server/post-initial-objects/public-url.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+ c:SystemConfigurationType
+
+ modify
+
+ delta
+
+
+ add
+ infrastructure
+
+ https://localhost/midpoint
+
+
+
+
+
+
diff --git a/demo/shibboleth-midpoint-sp/midpoint_server/shibboleth/attribute-map.xml b/demo/shibboleth-midpoint-sp/midpoint_server/shibboleth/attribute-map.xml
new file mode 100644
index 0000000..f0a5f19
--- /dev/null
+++ b/demo/shibboleth-midpoint-sp/midpoint_server/shibboleth/attribute-map.xml
@@ -0,0 +1,168 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/demo/shibboleth-midpoint-sp/midpoint_server/shibboleth/shibboleth2.xml b/demo/shibboleth-midpoint-sp/midpoint_server/shibboleth/shibboleth2.xml
new file mode 100644
index 0000000..9ed72c2
--- /dev/null
+++ b/demo/shibboleth-midpoint-sp/midpoint_server/shibboleth/shibboleth2.xml
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SAML2
+
+
+
+ SAML2 Local
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/demo/shibboleth-midpoint-sp/shibboleth-idp/conf/attribute-filter.xml b/demo/shibboleth-midpoint-sp/shibboleth-idp/conf/attribute-filter.xml
new file mode 100644
index 0000000..c7a14c7
--- /dev/null
+++ b/demo/shibboleth-midpoint-sp/shibboleth-idp/conf/attribute-filter.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/demo/shibboleth-midpoint-sp/shibboleth-idp/conf/attribute-resolver.xml b/demo/shibboleth-midpoint-sp/shibboleth-idp/conf/attribute-resolver.xml
new file mode 100644
index 0000000..ee9519f
--- /dev/null
+++ b/demo/shibboleth-midpoint-sp/shibboleth-idp/conf/attribute-resolver.xml
@@ -0,0 +1,293 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/demo/shibboleth-midpoint-sp/shibboleth-idp/conf/idp.properties b/demo/shibboleth-midpoint-sp/shibboleth-idp/conf/idp.properties
new file mode 100644
index 0000000..cf0b2f8
--- /dev/null
+++ b/demo/shibboleth-midpoint-sp/shibboleth-idp/conf/idp.properties
@@ -0,0 +1,195 @@
+# Load any additional property resources from a comma-delimited list
+idp.additionalProperties= /conf/ldap.properties, /conf/saml-nameid.properties, /conf/services.properties
+
+# Set the entityID of the IdP
+idp.entityID= https://idptestbed/idp/shibboleth
+
+# Set the scope used in the attribute resolver for scoped attributes
+idp.scope= example.org
+
+# General cookie properties (maxAge only applies to persistent cookies)
+#idp.cookie.secure = false
+#idp.cookie.httpOnly = true
+#idp.cookie.domain =
+#idp.cookie.path =
+#idp.cookie.maxAge = 31536000
+
+# Set the location of user-supplied web flow definitions
+#idp.webflows = %{idp.home}/flows
+
+# Set the location of Velocity view templates
+#idp.views = %{idp.home}/views
+
+# Settings for internal AES encryption key
+#idp.sealer.storeType = JCEKS
+#idp.sealer.updateInterval = PT15M
+#idp.sealer.aliasBase = secret
+idp.sealer.storeResource= %{idp.home}/credentials/sealer.jks
+idp.sealer.versionResource= %{idp.home}/credentials/sealer.kver
+idp.sealer.storePassword= changeit
+idp.sealer.keyPassword= changeit
+
+# Settings for public/private signing and encryption key(s)
+# During decryption key rollover, point the ".2" properties at a second
+# keypair, uncomment in credentials.xml, then publish it in your metadata.
+idp.signing.key= %{idp.home}/credentials/idp-signing.key
+idp.signing.cert= %{idp.home}/credentials/idp-signing.crt
+idp.encryption.key= %{idp.home}/credentials/idp-encryption.key
+idp.encryption.cert= %{idp.home}/credentials/idp-encryption.crt
+#idp.encryption.key.2 = %{idp.home}/credentials/idp-encryption-old.key
+#idp.encryption.cert.2 = %{idp.home}/credentials/idp-encryption-old.crt
+
+# Sets the bean ID to use as a default security configuration set
+#idp.security.config = shibboleth.DefaultSecurityConfiguration
+
+# To default to SHA-1, set to shibboleth.SigningConfiguration.SHA1
+#idp.signing.config = shibboleth.SigningConfiguration.SHA256
+
+# Configures trust evaluation of keys used by services at runtime
+# Defaults to supporting both explicit key and PKIX using SAML metadata.
+#idp.trust.signatures = shibboleth.ChainingSignatureTrustEngine
+# To pick only one set to one of:
+# shibboleth.ExplicitKeySignatureTrustEngine, shibboleth.PKIXSignatureTrustEngine
+#idp.trust.certificates = shibboleth.ChainingX509TrustEngine
+# To pick only one set to one of:
+# shibboleth.ExplicitKeyX509TrustEngine, shibboleth.PKIXX509TrustEngine
+
+# If true, encryption will happen whenever a key to use can be located, but
+# failure to encrypt won't result in request failure.
+idp.encryption.optional = true
+
+# Configuration of client- and server-side storage plugins
+#idp.storage.cleanupInterval = PT10M
+#idp.storage.htmlLocalStorage = false
+
+# Set to true to expose more detailed errors in responses to SPs
+#idp.errors.detailed = false
+# Set to false to skip signing of SAML response messages that signal errors
+#idp.errors.signed = true
+# Name of bean containing a list of Java exception classes to ignore
+#idp.errors.excludedExceptions = ExceptionClassListBean
+# Name of bean containing a property set mapping exception names to views
+#idp.errors.exceptionMappings = ExceptionToViewPropertyBean
+# Set if a different default view name for events and exceptions is needed
+#idp.errors.defaultView = error
+
+# Set to false to disable the IdP session layer
+#idp.session.enabled = true
+
+# Set to "shibboleth.StorageService" for server-side storage of user sessions
+#idp.session.StorageService = shibboleth.ClientSessionStorageService
+idp.session.StorageService = shibboleth.StorageService
+
+# Size of session IDs
+#idp.session.idSize = 32
+# Bind sessions to IP addresses
+#idp.session.consistentAddress = true
+# Inactivity timeout
+#idp.session.timeout = PT60M
+# Extra time to store sessions for logout
+#idp.session.slop = PT0S
+# Tolerate storage-related errors
+#idp.session.maskStorageFailure = false
+# Track information about SPs logged into
+idp.session.trackSPSessions = true
+# Support lookup by SP for SAML logout
+idp.session.secondaryServiceIndex = true
+# Length of time to track SP sessions
+#idp.session.defaultSPlifetime = PT2H
+
+# Regular expression matching login flows to enable, e.g. IPAddress|Password
+idp.authn.flows= Password
+
+# Regular expression of forced "initial" methods when no session exists,
+# usually in conjunction with the idp.authn.resolveAttribute property below.
+#idp.authn.flows.initial = Password
+
+# Set to an attribute ID to resolve prior to selecting authentication flows;
+# its values are used to filter the flows to allow.
+#idp.authn.resolveAttribute = eduPersonAssurance
+
+# Default lifetime and timeout of various authentication methods
+#idp.authn.defaultLifetime = PT60M
+#idp.authn.defaultTimeout = PT30M
+
+# Whether to prioritize "active" results when an SP requests more than
+# one possible matching login method (V2 behavior was to favor them)
+#idp.authn.favorSSO = true
+
+# Whether to fail requests when a user identity after authentication
+# doesn't match the identity in a pre-existing session.
+#idp.authn.identitySwitchIsError = false
+
+# Set to "shibboleth.StorageService" or custom bean for alternate storage of consent
+#idp.consent.StorageService = shibboleth.ClientPersistentStorageService
+
+# Set to "shibboleth.consent.AttributeConsentStorageKey" to use an attribute
+# to key user consent storage records (and set the attribute name)
+#idp.consent.userStorageKey = shibboleth.consent.PrincipalConsentStorageKey
+#idp.consent.userStorageKeyAttribute = uid
+
+# Flags controlling how built-in attribute consent feature operates
+#idp.consent.allowDoNotRemember = true
+#idp.consent.allowGlobal = true
+#idp.consent.allowPerAttribute = false
+
+# Whether attribute values and terms of use text are compared
+#idp.consent.compareValues = false
+# Maximum number of consent records for space-limited storage (e.g. cookies)
+#idp.consent.maxStoredRecords = 10
+# Maximum number of consent records for larger/server-side storage (0 = no limit)
+#idp.consent.expandedMaxStoredRecords = 0
+
+# Time in milliseconds to expire consent storage records.
+#idp.consent.storageRecordLifetime = P1Y
+
+# Whether to lookup metadata, etc. for every SP involved in a logout
+# for use by user interface logic; adds overhead so off by default.
+#idp.logout.elaboration = false
+
+# Whether to require logout requests be signed/authenticated.
+#idp.logout.authenticated = true
+
+# Message freshness and replay cache tuning
+#idp.policy.messageLifetime = PT3M
+#idp.policy.clockSkew = PT3M
+
+# Set to custom bean for alternate storage of replay cache
+#idp.replayCache.StorageService = shibboleth.StorageService
+
+# Toggles whether to allow outbound messages via SAML artifact
+#idp.artifact.enabled = true
+# Suppresses typical signing/encryption when artifact binding used
+#idp.artifact.secureChannel = true
+# May differ to direct SAML 2 artifact lookups to specific server nodes
+#idp.artifact.endpointIndex = 2
+# Set to custom bean for alternate storage of artifact map state
+#idp.artifact.StorageService = shibboleth.StorageService
+
+# Name of access control policy for various admin flows
+idp.status.accessPolicy= AccessByIPAddress
+idp.resolvertest.accessPolicy= AccessByIPAddress
+idp.reload.accessPolicy= AccessByIPAddress
+
+# Comma-delimited languages to use if not match can be found with the
+# browser-supported languages, defaults to an empty list.
+idp.ui.fallbackLanguages= en,fr,de
+
+# Storage service used by CAS protocol
+# Defaults to shibboleth.StorageService (in-memory)
+# MUST be server-side storage (e.g. in-memory, memcached, database)
+# NOTE that idp.session.StorageService requires server-side storage
+# when CAS protocol is enabled
+idp.cas.StorageService=shibboleth.StorageService
+
+# CAS service registry implementation class
+#idp.cas.serviceRegistryClass=net.shibboleth.idp.cas.service.PatternServiceRegistry
+
+# Profile flows in which the ProfileRequestContext should be exposed
+# in servlet request under the key "opensamlProfileRequestContext"
+#idp.profile.exposeProfileRequestContextInServletRequest = SAML2/POST/SSO,SAML2/Redirect/SSO
+
+# F-TICKS auditing - set salt to include hashed username
+#idp.fticks.federation=MyFederation
+#idp.fticks.algorithm=SHA-256
+#idp.fticks.salt=somethingsecret
diff --git a/demo/shibboleth-midpoint-sp/shibboleth-idp/conf/ldap.properties b/demo/shibboleth-midpoint-sp/shibboleth-idp/conf/ldap.properties
new file mode 100644
index 0000000..726f145
--- /dev/null
+++ b/demo/shibboleth-midpoint-sp/shibboleth-idp/conf/ldap.properties
@@ -0,0 +1,58 @@
+# LDAP authentication configuration, see authn/ldap-authn-config.xml
+
+## Authenticator strategy, either anonSearchAuthenticator, bindSearchAuthenticator, directAuthenticator, adAuthenticator
+#idp.authn.LDAP.authenticator = anonSearchAuthenticator
+
+## Connection properties ##
+idp.authn.LDAP.ldapURL = ldap://directory:389
+idp.authn.LDAP.useStartTLS = false
+idp.authn.LDAP.useSSL = false
+#idp.authn.LDAP.connectTimeout = 3000
+
+## SSL configuration, either jvmTrust, certificateTrust, or keyStoreTrust
+#idp.authn.LDAP.sslConfig = certificateTrust
+## If using certificateTrust above, set to the trusted certificate's path
+idp.authn.LDAP.trustCertificates = %{idp.home}/credentials/ldap-server.crt
+## If using keyStoreTrust above, set to the truststore path
+idp.authn.LDAP.trustStore = %{idp.home}/credentials/ldap-server.truststore
+
+## Return attributes during authentication
+## NOTE: this is not used during attribute resolution; configure that directly in the
+## attribute-resolver.xml configuration via a DataConnector's element
+idp.authn.LDAP.returnAttributes = cn,businessCategory,mail
+
+## DN resolution properties ##
+
+# Search DN resolution, used by anonSearchAuthenticator, bindSearchAuthenticator
+# for AD: CN=Users,DC=example,DC=org
+idp.authn.LDAP.baseDN = ou=people,dc=internet2,dc=edu
+#idp.authn.LDAP.subtreeSearch = false
+idp.authn.LDAP.userFilter = (uid={user})
+# bind search configuration
+# for AD: idp.authn.LDAP.bindDN=adminuser@domain.com
+idp.authn.LDAP.bindDN = cn=admin,dc=internet2,dc=edu
+idp.authn.LDAP.bindDNCredential = password
+
+# Format DN resolution, used by directAuthenticator, adAuthenticator
+# for AD use idp.authn.LDAP.dnFormat=%s@domain.com
+idp.authn.LDAP.dnFormat = uid=%s,ou=people,dc=internet2,dc=edu
+
+# LDAP attribute configuration, see attribute-resolver.xml
+idp.attribute.resolver.LDAP.ldapURL = %{idp.authn.LDAP.ldapURL}
+idp.attribute.resolver.LDAP.baseDN = %{idp.authn.LDAP.baseDN}
+idp.attribute.resolver.LDAP.bindDN = %{idp.authn.LDAP.bindDN}
+idp.attribute.resolver.LDAP.bindDNCredential = %{idp.authn.LDAP.bindDNCredential}
+idp.attribute.resolver.LDAP.useStartTLS = %{idp.authn.LDAP.useStartTLS:true}
+idp.attribute.resolver.LDAP.trustCertificates = %{idp.authn.LDAP.trustCertificates}
+idp.attribute.resolver.LDAP.searchFilter = (uid=$requestContext.principalName)
+
+# LDAP pool configuration, used for both authn and DN resolution
+#idp.pool.LDAP.minSize = 3
+#idp.pool.LDAP.maxSize = 10
+#idp.pool.LDAP.validateOnCheckout = false
+#idp.pool.LDAP.validatePeriodically = true
+#idp.pool.LDAP.validatePeriod = 300
+#idp.pool.LDAP.prunePeriod = 300
+#idp.pool.LDAP.idleTime = 600
+#idp.pool.LDAP.blockWaitTime = 3000
+#idp.pool.LDAP.failFastInitialize = false
diff --git a/demo/shibboleth/idp/shibboleth-idp/conf/metadata-providers.xml b/demo/shibboleth-midpoint-sp/shibboleth-idp/conf/metadata-providers.xml
similarity index 97%
rename from demo/shibboleth/idp/shibboleth-idp/conf/metadata-providers.xml
rename to demo/shibboleth-midpoint-sp/shibboleth-idp/conf/metadata-providers.xml
index 2a44b8d..684b387 100644
--- a/demo/shibboleth/idp/shibboleth-idp/conf/metadata-providers.xml
+++ b/demo/shibboleth-midpoint-sp/shibboleth-idp/conf/metadata-providers.xml
@@ -27,8 +27,6 @@
-
-
-
+
@@ -23,34 +23,34 @@ and do *NOT* provide it in real time to your partners.
-
+
-
-
+
+
- sp.example.org
+ midpoint.sp.example.org
- CN=sp.example.org,O=Internet2/TIER,L=Ann Arbor,ST=MI,C=US
- MIIDPDCCAiQCCQDNZe8r0hVtuTANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJV
-UzELMAkGA1UECAwCTUkxEjAQBgNVBAcMCUFubiBBcmJvcjEXMBUGA1UECgwOSW50
-ZXJuZXQyL1RJRVIxFzAVBgNVBAMMDnNwLmV4YW1wbGUub3JnMB4XDTE3MDkyMjE5
-NTAzNVoXDTI3MDkyMDE5NTAzNVowYDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAk1J
-MRIwEAYDVQQHDAlBbm4gQXJib3IxFzAVBgNVBAoMDkludGVybmV0Mi9USUVSMRcw
-FQYDVQQDDA5zcC5leGFtcGxlLm9yZzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBAMTNJmsNpTpR4NrDJwOgK/o3UYlNdi1c6xBflt+liLAsQc160QReV4dS
-SGK8LZvN58a/BTIsH8dLhQlUQ8qQUY2AfolVrNxb7Waumeh/POzYUTRylnoGpU3W
-bGMEPxE/AdgP5U/adYvyu4XI5epv7wjZJOTqcVag15SalY+aso+ZC/5l+UzRxmWB
-ZxKTsSL1y7PFehY4/Zl3Y3oGVsVl/zspt5lteoZQeeVxUX29S3Af11yHY4xpEp+7
-rvAzY/nlsTiHAsUoCFK/NFQ2evvSRx52B9Fk1cWP1MDVDm2QjQqD9xBGYSnX6bhQ
-ejVx7JUJHlblu2Q5p5XdW0BihgFluoECAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
-n/qhYnIviPs4tglCdrw+M7gbqKNWadDC3F9HDYzlJMFeS/ae2turhEUgQPbYPDQQ
-eO3oOILtvCXNFUPM58jf8V5YFRrOqrTgx44kexQDaHO5YYNft5tF5TdvBYE2gOVr
-GdYrH2iSP8WX+Yy7JH5uqkfwWzEntWHJdey39rCWKAUCCB35+/2b4N53Qmlv2+ug
-CpNJYFtXInd4YMmM5HjXLyoWXtjnKiwDqYUCeYPSwAajnCqRqRXUX0gYTFDRiwRP
-HbmO9We0nqoc/71nikmGGoSRMO/zWVMFjwmAx1fGiWdU61sjGX8sHifzmVyJVEBI
-Z75p+JrWYZJYrx/vpWxL8g==
+ CN=sptest.example.edu,O=Internet2/TIER,L=Ann Arbor,ST=MI,C=US
+ MIID/TCCAmWgAwIBAgIJAJZqOL69C6nRMA0GCSqGSIb3DQEBCwUAMB0xGzAZBgNVBAMTEnNwdGVz
+dC5leGFtcGxlLmVkdTAeFw0xODEyMjAyMjM4NDhaFw0yODEyMTcyMjM4NDhaMB0xGzAZBgNVBAMT
+EnNwdGVzdC5leGFtcGxlLmVkdTCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBANJ1OC6Q
+l4te2/7PArBkuM/EF1NcQILv7bJaecJDGYBVoWgL0a2KQ0XMESusgkVmVjj/jcbtvwIiXI/6BEu8
+15OF6eSZIwxWdQBpeKbrWTbt07GiGgdXoXot6oMs5a9YXuWLt8pTXrFVMmwXU+ZfWJtuU8OIgm9e
+sAEIQBHvDVOJtdKdBMWJFa5nUzkaVvA0Fr8r+/FHUvSCnlKOMaUIfTgtoS9AQnaRQ1dVl39Z2KAh
+87JYvRIxvbaPaKgar2eGQ+PQD8rqsB5K5wgnADAxYM9Vo0YXSpPH+FvwN3EJgURUSEY2E0Jx8JOx
+368ERNLXx3kfnRxCiZRDkTZF9WP6lBnDwc1WXRwpVCDTRnF+SIh6IC1Bj/qpkpCD3nri7tycejoe
+AtVj1YZHWarf9iqdcLYOAWmeyGbFl3hjv6qcXnIfy1KyHLCAdIrg1TymLovXXKW09pEbVLdsHmLz
+0h+DxPs4FsinK2AQBMn16u8BJJ/+spCzIQ2QNPcGORh6XemBpQIDAQABo0AwPjAdBgNVHREEFjAU
+ghJzcHRlc3QuZXhhbXBsZS5lZHUwHQYDVR0OBBYEFPC8rkASWHQxrtCQ4wwtnsJRy6K5MA0GCSqG
+SIb3DQEBCwUAA4IBgQCks2nY7YzdIKV02NHD9STWD3yPtEwPYZZ3NBno0WW20rS6cU+fxFx37nY8
+ULve4cFQkLR8fOO44e1qIuTgLGCauSGTx/Ts/tbmZXbpGTwV7cjZDCfC7yEFAVrfQFOMNKeQEssu
+LFj+d4STGLorxsM+2YygdOgohJz0e3xOcmCNHqEuC9RbzrnLc/A4/mOHKwnwCCg71zA1/Ew9NUoR
+m2n8IfaONIUaMg9opNiHxX4eu3UFaaPmn/mInuWYYMXzbIbdlU/XhKvXrujWYWj7anTDWvGQmNEe
+csQH92SrO0pf+9WwcWUQTQiWUdq8/OxjXfzs1PrQnSlp0eizgcdKHDKbCUaSuK1i2wdxfEsu5sbZ
+AIW0+dXJ2IyzM+0sv2g4DOsXsnSvinGqjr82A54mXGSr7edhPdlQhILFkJfhTwLq+mjnyQSNe3s2
+4VNeGc76jbHIrkEWuA460QGqz1Fa2CsQo5SH1IkxNIKpBZWt+w2LdAza/NzYyDruY5IJCrZa9Qw=
@@ -64,15 +64,8 @@ Z75p+JrWYZJYrx/vpWxL8g==
-
-
-
-
-
-
-
-
-
+
+
diff --git a/demo/shibboleth/idp/shibboleth-idp/metadata/midpoint-sp.xml b/demo/shibboleth-midpoint-sp/shibboleth-idp/metadata/midpoint-sp.xml.bck
similarity index 100%
rename from demo/shibboleth/idp/shibboleth-idp/metadata/midpoint-sp.xml
rename to demo/shibboleth-midpoint-sp/shibboleth-idp/metadata/midpoint-sp.xml.bck
diff --git a/demo/shibboleth/.env b/demo/shibboleth/.env
deleted file mode 100644
index f99ab0c..0000000
--- a/demo/shibboleth/.env
+++ /dev/null
@@ -1,6 +0,0 @@
-# These parameters can be overridden by setting environment variables before calling docker-compose up
-ENV=demo
-USERTOKEN=
-MP_MEM_MAX=2048m
-MP_MEM_INIT=1024m
-TIMEZONE=UTC
diff --git a/demo/shibboleth/configs-and-secrets/midpoint/httpd/00-shib.conf b/demo/shibboleth/configs-and-secrets/midpoint/httpd/00-shib.conf
deleted file mode 100644
index 0e5c7b2..0000000
--- a/demo/shibboleth/configs-and-secrets/midpoint/httpd/00-shib.conf
+++ /dev/null
@@ -1 +0,0 @@
-LoadModule mod_shib /usr/lib64/shibboleth/mod_shib_24.so
diff --git a/demo/shibboleth/configs-and-secrets/midpoint/httpd/host-cert.pem b/demo/shibboleth/configs-and-secrets/midpoint/httpd/host-cert.pem
deleted file mode 100644
index 9b1021b..0000000
--- a/demo/shibboleth/configs-and-secrets/midpoint/httpd/host-cert.pem
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDqDCCApCgAwIBAgIJAMOSkn4oS2aAMA0GCSqGSIb3DQEBCwUAMGkxCzAJBgNV
-BAYTAlVTMQswCQYDVQQIDAJNSTESMBAGA1UEBwwJQW5uIEFyYm9yMRcwFQYDVQQK
-DA5JbnRlcm5ldDIvVElFUjEgMB4GA1UEAwwXbWlkcG9pbnQuc3AuZXhhbXBsZS5v
-cmcwHhcNMTgwOTE0MDU1OTQ1WhcNMTkwOTE0MDU1OTQ1WjBpMQswCQYDVQQGEwJV
-UzELMAkGA1UECAwCTUkxEjAQBgNVBAcMCUFubiBBcmJvcjEXMBUGA1UECgwOSW50
-ZXJuZXQyL1RJRVIxIDAeBgNVBAMMF21pZHBvaW50LnNwLmV4YW1wbGUub3JnMIIB
-IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApj/b7MEUSfu3oXMfNgRwTse7
-a5UV7Jswf1M/ZN/ZZkAkIxNBevZgozjesvLPWrmsTgONi7XigJUJvCjdjmlW9eDM
-lri/rkD8HuOR1DQCVKL9nvoS2c3D7sq5Emda3V8Tlj82VqfEmePd3sajx7mcTfbH
-8jwAL9NhkC+WMib5IpjLGpG0FEAC0ha7Lxb+7jIiqHVJaqLXJGCyGN4mh6c1Q9S1
-f8RVTiW2a8x22G+9wnZYbkiA2Kxls177imHlhSz8EdvV4IpGw1amrEWhhuDEum7B
-vZ1xQDLatgRqh4qAKLIVYeRnJ8H1FelMa90qB4G08MIPifmTsQwqJyBYaEdgWQID
-AQABo1MwUTAdBgNVHQ4EFgQUqb9BteODF6wv5R57aEON/wGXMiowHwYDVR0jBBgw
-FoAUqb9BteODF6wv5R57aEON/wGXMiowDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG
-9w0BAQsFAAOCAQEAAcKhxI+tSItrXmqC0PSmgWyAYpqbkz6W/cefTutXqhIgY09f
-h0LSv7ogTahoGpyiZk9vy6u3OE9bYwxapEfa4KBjO6HxBMIVBBb3RegVjoPzjElN
-BDwAx0VGFcZTXwMxDWycWdG8ql7rCZBvS50w04uTaIgnGmqXAdWWmBgfJ9cRbxW+
-JwO/mOl1QM1lR/5142NpvuUVWlmZSKEGydE5A1qPz2wpDbBR1ym1BQNS4NEqw6Kp
-GSB8jKyCS1Ve0v2wVze2038Wukz02dq9uKPTIO3T+B+ibZmxn6Op/kFCc1/kK5NS
-Q6JdO1B6KquGAYdGmKAcQ19mv+jqGktqWEEf0g==
------END CERTIFICATE-----
diff --git a/demo/shibboleth/configs-and-secrets/midpoint/httpd/host-key.pem b/demo/shibboleth/configs-and-secrets/midpoint/httpd/host-key.pem
deleted file mode 100644
index 5746e59..0000000
--- a/demo/shibboleth/configs-and-secrets/midpoint/httpd/host-key.pem
+++ /dev/null
@@ -1,28 +0,0 @@
------BEGIN PRIVATE KEY-----
-MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCmP9vswRRJ+7eh
-cx82BHBOx7trlRXsmzB/Uz9k39lmQCQjE0F69mCjON6y8s9auaxOA42LteKAlQm8
-KN2OaVb14MyWuL+uQPwe45HUNAJUov2e+hLZzcPuyrkSZ1rdXxOWPzZWp8SZ493e
-xqPHuZxN9sfyPAAv02GQL5YyJvkimMsakbQUQALSFrsvFv7uMiKodUlqotckYLIY
-3iaHpzVD1LV/xFVOJbZrzHbYb73CdlhuSIDYrGWzXvuKYeWFLPwR29XgikbDVqas
-RaGG4MS6bsG9nXFAMtq2BGqHioAoshVh5GcnwfUV6Uxr3SoHgbTwwg+J+ZOxDCon
-IFhoR2BZAgMBAAECggEAEIRBpjjceiku6jRUwnoYaks/nIWYQwR8AfpUTwJKR/VR
-Yca097Fokm7A+UhUP3A45RtHQb0VPq8P44iv0kk24YCu8r5yFK7SHYOAZnOwU5ZJ
-2jSAEPF3aM7tKh3okhuzB3dKP7u1NZDE5zAW723KUJiW7sL1RcsbY0bHBj6G+9/H
-NplmsjuGt684vRBB0qOBfKF7EiG7mT69tHuNj4gRza9SMY31UtKbZdt2fNY6mp5V
-HscMba7egZP+Ke0pVX4+go9j7K8GG8hYaQDLjrzlPqrxZ2c5X9cC+CRDI/CHuL/s
-V/2yGZJ6n6UabwZoH83RdFrbQ94rU8Hkli6EvxXvMQKBgQDRpheNW5jDG5TfeJKh
-yfKTDQqH2Tk3BsBYYBN7Hf3m7vbkzlxnAKJAoSLmtRMuoeXvI5MrhzaHGsNIUS76
-LDIZnvB7DLUxhFUZsCPkpAA1QHuTWY96oR3PHnPjpk8lSUvtbOPwDLdzVApeFJgZ
-VqMNArZ7AHsK3Kkyi+f4WVQjbQKBgQDLAWiGb5dx6fAM2W6B6HjNmzjBWOuVEXa2
-76to9jzupBZmETfZgxtWUaWUDuNS+f7dtVUTE+p6v/w8clrHEhEZYkqunIOLo/UA
-LFPiuoTfEsWb1rh+nsCjCgy4uimixj/bSkf7NC6NyKTvCygA1mGnVVJUEPegYlDy
-LXCkaKWxHQKBgQCmyHSKL2lrJkEcOwakEU2acNCE3Gno/cT9SYmV83kvQ8JEqmrW
-QqnRsp9aXIljGscapPmKsmnNt5vNp1AxFAHTYh88NRLczsMIyZj0ZwgHVUI6KhC7
-5Psa78YQQBlMt2/g9TSsnuE+rYgF6mpKFiNm0Vasqeg47uzn2mdzqlUGTQKBgE04
-JutkTUY+h1pL5vYxWKpVDfy19z7H2tFxT1FowPrBneeLSyRI88Ac5I/yLdRlVeY9
-0LOmEr5Igwj3MsKgg7KVKfVLgdo/LrW3Jt2Kt3onKNXDkoBPoNUjwH0QC0Boiue+
-VK0gR0kVdm+bXccbxR+im+NwZNE0NLg6Qqu3RredAoGBALuVoqbPPmTCZXYG328H
-bzOs2aiR7BzPSVByV+qG6jW7w03RAnFPJZp7HMU+ViI5VY0wabUscMSvz5163+gM
-4KwY3v9ZjZzZGukIfLuudkdqtaiVOx/KeAC0n+nG21YU+wpZww8gkfHh1/sa2CME
-CWYCgOnmiTHcj83UaTqEXtmv
------END PRIVATE KEY-----
diff --git a/demo/shibboleth/configs-and-secrets/midpoint/httpd/midpoint-shib.conf b/demo/shibboleth/configs-and-secrets/midpoint/httpd/midpoint-shib.conf
deleted file mode 100644
index a383349..0000000
--- a/demo/shibboleth/configs-and-secrets/midpoint/httpd/midpoint-shib.conf
+++ /dev/null
@@ -1,14 +0,0 @@
-
- AuthType shibboleth
- ShibRequestSetting requireSession 1
- ShibRequireSession on
- ShibUseHeaders On
- require shibboleth
-
-
-
- AuthType shibboleth
- ShibRequestSetting requireSession false
- ShibUseHeaders On
- require shibboleth
-
diff --git a/demo/shibboleth/configs-and-secrets/midpoint/httpd/vhosts.conf b/demo/shibboleth/configs-and-secrets/midpoint/httpd/vhosts.conf
deleted file mode 100644
index a434bd8..0000000
--- a/demo/shibboleth/configs-and-secrets/midpoint/httpd/vhosts.conf
+++ /dev/null
@@ -1 +0,0 @@
-RewriteRule "^/midpoint/$" "/midpoint/auth/shib" [R]
diff --git a/demo/shibboleth/configs-and-secrets/midpoint/shibboleth/shibboleth_sp_keys.jks b/demo/shibboleth/configs-and-secrets/midpoint/shibboleth/shibboleth_sp_keys.jks
deleted file mode 100644
index af2e8f4..0000000
Binary files a/demo/shibboleth/configs-and-secrets/midpoint/shibboleth/shibboleth_sp_keys.jks and /dev/null differ
diff --git a/demo/shibboleth/configs-and-secrets/shibboleth/shibboleth2.xml b/demo/shibboleth/configs-and-secrets/shibboleth/shibboleth2.xml
deleted file mode 100644
index ee05a97..0000000
--- a/demo/shibboleth/configs-and-secrets/shibboleth/shibboleth2.xml
+++ /dev/null
@@ -1,139 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- SAML2
-
-
-
- SAML2 Local
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/demo/shibboleth/configs-and-secrets/shibboleth/sp-encrypt-cert.pem b/demo/shibboleth/configs-and-secrets/shibboleth/sp-encrypt-cert.pem
deleted file mode 100644
index 7a66196..0000000
--- a/demo/shibboleth/configs-and-secrets/shibboleth/sp-encrypt-cert.pem
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIID/TCCAmWgAwIBAgIJAINng1bI63LGMA0GCSqGSIb3DQEBCwUAMB0xGzAZBgNV
-BAMTEnNwdGVzdC5leGFtcGxlLmVkdTAeFw0xODEyMjAyMjM4MDJaFw0yODEyMTcy
-MjM4MDJaMB0xGzAZBgNVBAMTEnNwdGVzdC5leGFtcGxlLmVkdTCCAaIwDQYJKoZI
-hvcNAQEBBQADggGPADCCAYoCggGBAOjmPSBzRsjbPBBA6jYVW+QtsYM5fvIuNErG
-VDRvKHyCTNbmdFZ37qEl/fwsrdF4hn4V7fAZ6jW6R1aMGFl1vQyJ289B8l5HOPjf
-GuB2gL9IxulOmrkYVN8nfgjlbFNNktMQJ8NprYEyl3o786xCCxx3AiA5Mgdv400L
-6vlmEfNHIwsOHAUTNRyCwMS9P6jBJ5IIxD0Mef+3oUjAvVsPZu24EJnzTUasZnI0
-F8aC/YzVbxObBNcymtA2Ipec/gLe1B09eDZUduXPL/as57QWvgJrWj8bCK+Ldj0P
-MPSvWzr4BnN58dxaYgCgRH7tnhZudPvCjBakQzkxo/njsRIKtm3lN9UmUYiXbl+e
-bu0DSQFUaFfO2hOOUTNAr/QuC+GQL+U7VAdybTbP+KcH5LbNUSqYkxSwhbFz5aym
-o5KppnYB9K5iySRWvGIhnwXHNv5yFrmUbet2BPJlMzv7NaePaZ76ypobzNjjNBbg
-aNECsQ1ZD9fe2Q8UBe0m2gQP5Yux5QIDAQABo0AwPjAdBgNVHREEFjAUghJzcHRl
-c3QuZXhhbXBsZS5lZHUwHQYDVR0OBBYEFGcLIl5kg+GFIh9HXeZyLzsv5e7qMA0G
-CSqGSIb3DQEBCwUAA4IBgQAf8/iZXUWtWGMBw2OfonDDWbuhgLnNWddpllcVx7v/
-Yu75+wgfIdNXg6XM4WkGkpbhlkpDLRt2c6rMQpxrQtq/5G3OKEXKyjUOl5pZsYkG
-asVENYPSCfuu3rlK85XaW3H1SSJqSax/UKcYXyB1TIW6mNy3OxuvHak6y4LzFnug
-CO7p/W2jvffwmxfqjbO7wQfXUQz3SZS04sHMqQoStOwy2N5xxQ3uTF34EoXBto+n
-XIEOptKPhV2NkEzj+UUIi1588dck8T0SstbSElbTnJ4sNZFriX6JOPFNW08fezot
-izerOHuAFpFQvtugWoZT87YYaFwG+Zr5QNa4fNOcAL+FHvbOfEqIGs+H6GSf0dZV
-lkcJyzWZvuK/4RGqWbLvfAYRm0PAGTQSLdO8QJSYWdJtJvZFEMgddQ2HoIzeO5wo
-B42FKDSHottI9avilApQBdRCtust8XRPtEAzDB/t/1jbO7u2tkzgY3614mX5xgut
-Ileaae5eVCjw4uYbkh+Mt5M=
------END CERTIFICATE-----
diff --git a/demo/shibboleth/configs-and-secrets/shibboleth/sp-encrypt-key.pem b/demo/shibboleth/configs-and-secrets/shibboleth/sp-encrypt-key.pem
deleted file mode 100644
index 1622ef3..0000000
--- a/demo/shibboleth/configs-and-secrets/shibboleth/sp-encrypt-key.pem
+++ /dev/null
@@ -1,40 +0,0 @@
------BEGIN PRIVATE KEY-----
-MIIG/gIBADANBgkqhkiG9w0BAQEFAASCBugwggbkAgEAAoIBgQDo5j0gc0bI2zwQ
-QOo2FVvkLbGDOX7yLjRKxlQ0byh8gkzW5nRWd+6hJf38LK3ReIZ+Fe3wGeo1ukdW
-jBhZdb0MidvPQfJeRzj43xrgdoC/SMbpTpq5GFTfJ34I5WxTTZLTECfDaa2BMpd6
-O/OsQgscdwIgOTIHb+NNC+r5ZhHzRyMLDhwFEzUcgsDEvT+owSeSCMQ9DHn/t6FI
-wL1bD2btuBCZ801GrGZyNBfGgv2M1W8TmwTXMprQNiKXnP4C3tQdPXg2VHblzy/2
-rOe0Fr4Ca1o/Gwivi3Y9DzD0r1s6+AZzefHcWmIAoER+7Z4WbnT7wowWpEM5MaP5
-47ESCrZt5TfVJlGIl25fnm7tA0kBVGhXztoTjlEzQK/0LgvhkC/lO1QHcm02z/in
-B+S2zVEqmJMUsIWxc+WspqOSqaZ2AfSuYskkVrxiIZ8Fxzb+cha5lG3rdgTyZTM7
-+zWnj2me+sqaG8zY4zQW4GjRArENWQ/X3tkPFAXtJtoED+WLseUCAwEAAQKCAYBM
-3eCC20kbdbAnNSWX4AjKEIKr6sgJKlK78yVLgPx9y4uMydbPyxmJOj7PgfeEUSEi
-cB5txj/Up7xvxiErNX7FqqJPj1Zs41jcWtZGCxaHC4AK9JSATpWEaUZhrUbJX6r7
-2jMlfbV0FLyF7U+JJOsB5A1hkT7/0V/Vx/8vfQ6jmnDobym0SxiWZlk1Fbjy+30R
-567M71c8nOCwYFyet0CjaMKh7PkuQCw3uRW3wPfqCW91qw438E3ENnnITFpRnDUI
-iZIXJSj3Sqcx/W7Q6xei+y95U4tksT3/SQ7hVXp+BhfyjXdK/k0vNzxZfWk9nCD8
-h7HeiQuLPENzrlOwuWtI+gLDIdFplXUJ+/piK3okdstdHJcWcNUelW8yr7JSpv1I
-a2KMgHI2F4UVcTYLZrevzxd5a0cpvFW7vmvdw2vFrCb5JsVsmqBu5OLeaVGDIbIA
-2SLfJqq12fi2rxk28VtwXXgaCTttSM+8VY7dlT/mPCqX3Sx2eM7EPt6RVHuri4EC
-gcEA+3q6Vht60YXNaw7m4BFISntVm4Z2gGFNswLlrgPRHOacaQVMKhpqt3HmNKAT
-1MD/a5C60HkUjMB95m2nE4k1Iade8EzUPXD1FvFbE9/+ifNx2OrC8pKrEmRiTmCY
-oel45uoXsksNGJynfuRp2TpAVSZrXaIbGKZiMJZv0QZAilVBurZnZyV0jKQYkSFM
-FOt60PDJJEqZzG01dvDJxsIYQURtjNscO0R2ncloLXm7qu1/fcP7CAawWgFYyer2
-WEdVAoHBAO0WAhxCvFoev348Wf33lQi9c6w7WN/WEkhNOJ5p4PKsJphSZbt2bjCt
-RdRmvahSXeiGrDPuaxoWaQqcXprcu3ndFYBcK2xZpIl/mf0wr1QTEHCkRXzfxRjC
-Mmy+yTeKT4L18xKgg6pJn+wC3hwsv2BQPkp+NPJhD2bmVUWorqXq5fiBV2b7lTg0
-q1HHXYtxk22bw7xtstFENGTqa22KwD5Wd6nj9DamLzKhUhOdcJ7yGVu9se7YcGGh
-pg57muigUQKBwQD5feH96Zdo5UFN9GPTavH4ivH8sWNBrMeEUNyDTuAYtyX3/zx4
-DOtRAhwsm5/xFGSTV+wvReDAX3zIroLym85ti/phlyd9qWJOl7cPOcvzGuYZGZe9
-RwuX3KW3MphbEiFTnm1SAqmEgG6gMoZc8DDBCbO9GkWdp/yETcuzaWuAkmL6lVpy
-97LwkSCaY5lyq8iWIDy915FMQhCn5u2YVhnwLq4s73jLx/mSQy4q57nrM2Kn6FZV
-uSUetnVbJdOu810CgcBNCzbaWjF9E7rk2dXguwD6Wx5o3MxPyPAeAMIicIPCOIE+
-RKB8n8rFFLm5gT2mokWUF5eENLknPBsccJ4pswtVWavwD4Oo7SST7hxrc9O1/Y/9
-GtTd9JXHKuxZ/FHFM7QM+cHozrKattw6ROBKxZvXP5xOdt7b2QC5TqZtQZinoELl
-U5rEg4MFRdBafe//LYRcPR8Jb5iJeqGQHcGVUl6Qo2a1lbc5vx1dVaEncKU1cbUd
-4/IbjMhQYchlsnMvn1ECgcEAxwT/UvLwhYeFK6UHRwJ/z1eKGAC8R2B9tlmgddZx
-T93qbVq4lZXKw3osqdi+pgWvvmg9aK9r/dO1E93S11msnoTI+W9xTr+y5y9dN/hx
-5deQMUK+3woLog6LsGiKE2IamCNQBFkgd4VvhXgG+2pTPYJ9nyuEA+na+tfE6bSa
-foJ8KQT1rmRFQYRboBY/xxqtsl6Nh84JK7kCw27NNdhssyuiipfa8NLM4m+yeA6n
-/oz8xKl5PKwOrvk2DH+FwaAg
------END PRIVATE KEY-----
diff --git a/demo/shibboleth/configs-and-secrets/shibboleth/sp-signing-cert.pem b/demo/shibboleth/configs-and-secrets/shibboleth/sp-signing-cert.pem
deleted file mode 100644
index 73aaaab..0000000
--- a/demo/shibboleth/configs-and-secrets/shibboleth/sp-signing-cert.pem
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIID/TCCAmWgAwIBAgIJAJZqOL69C6nRMA0GCSqGSIb3DQEBCwUAMB0xGzAZBgNV
-BAMTEnNwdGVzdC5leGFtcGxlLmVkdTAeFw0xODEyMjAyMjM4NDhaFw0yODEyMTcy
-MjM4NDhaMB0xGzAZBgNVBAMTEnNwdGVzdC5leGFtcGxlLmVkdTCCAaIwDQYJKoZI
-hvcNAQEBBQADggGPADCCAYoCggGBANJ1OC6Ql4te2/7PArBkuM/EF1NcQILv7bJa
-ecJDGYBVoWgL0a2KQ0XMESusgkVmVjj/jcbtvwIiXI/6BEu815OF6eSZIwxWdQBp
-eKbrWTbt07GiGgdXoXot6oMs5a9YXuWLt8pTXrFVMmwXU+ZfWJtuU8OIgm9esAEI
-QBHvDVOJtdKdBMWJFa5nUzkaVvA0Fr8r+/FHUvSCnlKOMaUIfTgtoS9AQnaRQ1dV
-l39Z2KAh87JYvRIxvbaPaKgar2eGQ+PQD8rqsB5K5wgnADAxYM9Vo0YXSpPH+Fvw
-N3EJgURUSEY2E0Jx8JOx368ERNLXx3kfnRxCiZRDkTZF9WP6lBnDwc1WXRwpVCDT
-RnF+SIh6IC1Bj/qpkpCD3nri7tycejoeAtVj1YZHWarf9iqdcLYOAWmeyGbFl3hj
-v6qcXnIfy1KyHLCAdIrg1TymLovXXKW09pEbVLdsHmLz0h+DxPs4FsinK2AQBMn1
-6u8BJJ/+spCzIQ2QNPcGORh6XemBpQIDAQABo0AwPjAdBgNVHREEFjAUghJzcHRl
-c3QuZXhhbXBsZS5lZHUwHQYDVR0OBBYEFPC8rkASWHQxrtCQ4wwtnsJRy6K5MA0G
-CSqGSIb3DQEBCwUAA4IBgQCks2nY7YzdIKV02NHD9STWD3yPtEwPYZZ3NBno0WW2
-0rS6cU+fxFx37nY8ULve4cFQkLR8fOO44e1qIuTgLGCauSGTx/Ts/tbmZXbpGTwV
-7cjZDCfC7yEFAVrfQFOMNKeQEssuLFj+d4STGLorxsM+2YygdOgohJz0e3xOcmCN
-HqEuC9RbzrnLc/A4/mOHKwnwCCg71zA1/Ew9NUoRm2n8IfaONIUaMg9opNiHxX4e
-u3UFaaPmn/mInuWYYMXzbIbdlU/XhKvXrujWYWj7anTDWvGQmNEecsQH92SrO0pf
-+9WwcWUQTQiWUdq8/OxjXfzs1PrQnSlp0eizgcdKHDKbCUaSuK1i2wdxfEsu5sbZ
-AIW0+dXJ2IyzM+0sv2g4DOsXsnSvinGqjr82A54mXGSr7edhPdlQhILFkJfhTwLq
-+mjnyQSNe3s24VNeGc76jbHIrkEWuA460QGqz1Fa2CsQo5SH1IkxNIKpBZWt+w2L
-dAza/NzYyDruY5IJCrZa9Qw=
------END CERTIFICATE-----
diff --git a/demo/shibboleth/configs-and-secrets/shibboleth/sp-signing-key.pem b/demo/shibboleth/configs-and-secrets/shibboleth/sp-signing-key.pem
deleted file mode 100644
index 9e979fe..0000000
--- a/demo/shibboleth/configs-and-secrets/shibboleth/sp-signing-key.pem
+++ /dev/null
@@ -1,40 +0,0 @@
------BEGIN PRIVATE KEY-----
-MIIG/gIBADANBgkqhkiG9w0BAQEFAASCBugwggbkAgEAAoIBgQDSdTgukJeLXtv+
-zwKwZLjPxBdTXECC7+2yWnnCQxmAVaFoC9GtikNFzBErrIJFZlY4/43G7b8CIlyP
-+gRLvNeThenkmSMMVnUAaXim61k27dOxohoHV6F6LeqDLOWvWF7li7fKU16xVTJs
-F1PmX1ibblPDiIJvXrABCEAR7w1TibXSnQTFiRWuZ1M5GlbwNBa/K/vxR1L0gp5S
-jjGlCH04LaEvQEJ2kUNXVZd/WdigIfOyWL0SMb22j2ioGq9nhkPj0A/K6rAeSucI
-JwAwMWDPVaNGF0qTx/hb8DdxCYFEVEhGNhNCcfCTsd+vBETS18d5H50cQomUQ5E2
-RfVj+pQZw8HNVl0cKVQg00ZxfkiIeiAtQY/6qZKQg9564u7cnHo6HgLVY9WGR1mq
-3/YqnXC2DgFpnshmxZd4Y7+qnF5yH8tSshywgHSK4NU8pi6L11yltPaRG1S3bB5i
-89Ifg8T7OBbIpytgEATJ9ervASSf/rKQsyENkDT3BjkYel3pgaUCAwEAAQKCAYEA
-kmBxGQH8RTVO8eTtS95iJC+QwavyOp/BxUDkWtbsj7P/NSyzQ25c59jNQIEVgktx
-QOeNpoSJS2S22HTeNAc+MR781MAl/ljLu+OfxQj/3hKAIJZMYDr01tPEvkOl5NUj
-+6e3xwNBYzmMfl2jPyGlsUWFAQSbI/bJl44zccXAkQ/A5KHNRc7Yw5qd6aOGQD8a
-axCehOxEqEeI8oZvxQcogMBL0V9yWqEiI0Ymvq6w2n+CzdKmflcWSjloYzNcODbL
-Ef2+8/fBZhHTS0GLCIqQpK+tZxt4K77DK2p2L9dYuHK7vtWn1j0YIwPqD+QVVtuT
-d7BOOmakPj2E7EXq/GvFw8gB/gRLoLuJSq5vvhPrSVuJqWdxDuxSutGgIoN3mQxd
-2AjuBXvqwYaZ3UGHZlBYAQx5ICiAGjxv/1zmKp+9OJHge/a1e6Z8jgQcpS7OWNhU
-dj6qfs+IiWKEaMM7D8dj4ncoArBpE7/BzlVuJ377cqRx35alMcKlawQWF1YqSDrB
-AoHBAPSipCLz4sr3U2jluXehntYsKevWcBtFkEd49Ay5uZTu/aweKWIozjDt7T3L
-mjYi+QGpt28MdNmpoofYOmpt+lrc0HWrv+UB9k/qFxfwgZKaXa1nm/VLfK77L4IB
-8I9dpjvDi724Xg/JJ1jsGM13+jGEfTQTl4Hi0lZwMydUO+O4oWB4kG9qhF8C+yQc
-12CCFH+Da8uwcwM+zCJwRm3qMKceifhEGAuFJ430Rp7cuqlJYfQZ4pVhRxwP6vns
-cLCz+QKBwQDcPB5bCjci/HMe0V19HxPrKh0hGPLIRCPAakT8Mz8N2lVAtWDXFL5q
-eHskl6cf8RQLfrcUiL+jQvD5VV8I7BkolCv0GZT/q36I/Z1QKlQC1O0IGG/hNqwt
-PS85YM6yC84YIKx0rN6O03/nYcslRv19q+MNiR9sZEeN6cScUc6aUINhWjzQ4mb8
-Z9ErguJrq0sCoAVU+t/yRo/YB/d2xdN9XLe+2cgsM6s0TiHo4v2SeFHKewBw+RLp
-yrShY6COzg0CgcEA0EFwt2ylgiGgeSkvhV8qJ6s7GNDZaO4EUEPwhrDJAredbhvT
-IQQZ29+AWl3sbu/AySCgzsFs7CsT+M8jk50CRr26HKJUXvEXrZpbhH6y34nX+5m7
-U8uqXg/ptqROFM4liLUETkMYmBmnDHUY/DmJ3QOrzlxrWyAr7XfgpDd6MHbpsoWQ
-d7jW7UdNYsXGuBqktpS7fJA+qOGZyCuKWWHHf01pKNdXHN+C976fK/g+U4TsBXDP
-ylkgvwvx/kbA/DyJAoHAQxXA/WRYNT0G6B1ISAO+coTKiLlrwtsWtNbqGpSVoWef
-Tm2xiPKVqiL3B8d2LgGmZHX92LBrB5UtiBWcNECOzVCNLvbX7yVTDvGKCNBL9Ozd
-Ivkmo0ifG8ymZOj7LTrxVWImhgfeZ00/icC9O6arMqu4Jvhc7QyCy1SpAiDdOR5L
-Vs1A9zPvwPTyvzlINRnhaHRMC32717XsvRZ4J+LMsEQc6HK4SdaXUQB3zdPO/93M
-tEvRb5g/TZ3kdcC+OKHFAoHAO9R3y6ZjUM8T8/4XcyRD968V4sZIvVQfpSaH86GO
-TrECZp5SqSWUTqAWTJWS0yIctAML60nWF+OPRUlrq0yk2veN9Re6eWfyoyQOFd92
-U+bxh3QEue5LGOwpqrPV/1cJSFdv88eS+F8q7i/dD765Tio6kJjKzXPN3FJqAvNB
-lAnaO4Apbuzob25Qkmm0NVQHap+TJGJMvX2vVX9CjE6haVWq1lJMakkoQOeIlyi5
-iDjt9rDlIwDYeGWk4KFgsKM7
------END PRIVATE KEY-----
diff --git a/demo/shibboleth/directory/Dockerfile b/demo/shibboleth/directory/Dockerfile
deleted file mode 100644
index ada659b..0000000
--- a/demo/shibboleth/directory/Dockerfile
+++ /dev/null
@@ -1,30 +0,0 @@
-FROM centos:centos7
-
-LABEL author="tier-packaging@internet2.edu "
-
-RUN yum install -y epel-release \
- && yum update -y \
- && yum install -y 389-ds-base 389-admin 389-adminutil \
- && yum clean all \
- && rm -rf /var/cache/yum
-
-COPY container_files/seed-data/ /seed-data/
-
-RUN useradd ldapadmin \
- && rm -fr /var/lock /usr/lib/systemd/system \
- # The 389-ds setup will fail because the hostname can't reliable be determined, so we'll bypass it and then install. \
- && sed -i 's/checkHostname {/checkHostname {\nreturn();/g' /usr/lib64/dirsrv/perl/DSUtil.pm \
- # Not doing SELinux \
- && sed -i 's/updateSelinuxPolicy($inf);//g' /usr/lib64/dirsrv/perl/* \
- # Do not restart at the end \
- && sed -i '/if (@errs = startServer($inf))/,/}/d' /usr/lib64/dirsrv/perl/* \
- && setup-ds.pl --silent --file /seed-data/ds-setup.inf \
- && /usr/sbin/ns-slapd -D /etc/dirsrv/slapd-dir \
- && while ! curl -s ldap://localhost:389 > /dev/null; do echo waiting for ldap to start; sleep 1; done; \
- ldapadd -H ldap:/// -f /seed-data/users.ldif -x -D "cn=Directory Manager" -w password
-
-EXPOSE 389
-
-# temporary!
-
-CMD rm -rf /var/lock/dirsrv/slapd-dir/server/* && /usr/sbin/ns-slapd -D /etc/dirsrv/slapd-dir && sleep infinity
diff --git a/demo/shibboleth/directory/container_files/seed-data/ds-setup.inf b/demo/shibboleth/directory/container_files/seed-data/ds-setup.inf
deleted file mode 100644
index 96c29a1..0000000
--- a/demo/shibboleth/directory/container_files/seed-data/ds-setup.inf
+++ /dev/null
@@ -1,28 +0,0 @@
-[General]
-AdminDomain = internet2.edu
-ConfigDirectoryAdminID = admin
-ConfigDirectoryAdminPwd = admin
-ConfigDirectoryLdapURL = ldap://localhost:389/o=NetscapeRoot
-FullMachineName = localhost
-ServerRoot = /usr/lib64/dirsrv
-SuiteSpotGroup = nobody
-SuiteSpotUserID = nobody
-
-[admin]
-Port = 9830
-ServerAdminID = admin
-ServerAdminPwd = admin
-ServerIpAddress = 0.0.0.0
-SysUser = nobody
-
-[slapd]
-AddOrgEntries = No
-AddSampleEntries = No
-InstallLdifFile = suggest
-RootDN = cn=Directory Manager
-RootDNPwd = password
-ServerIdentifier = dir
-ServerPort = 389
-SlapdConfigForMC = yes
-Suffix = dc=internet2,dc=edu
-UseExistingMC = No
diff --git a/demo/shibboleth/directory/container_files/seed-data/users.ldif b/demo/shibboleth/directory/container_files/seed-data/users.ldif
deleted file mode 100644
index 1d57238..0000000
--- a/demo/shibboleth/directory/container_files/seed-data/users.ldif
+++ /dev/null
@@ -1,24 +0,0 @@
-dn: cn=admin,dc=internet2,dc=edu
-objectClass: simpleSecurityObject
-objectClass: organizationalRole
-cn: admin
-userPassword: password
-description: LDAP administrator
-
-dn: cn=users,ou=Groups,dc=internet2,dc=edu
-objectClass: groupOfUniqueNames
-objectClass: top
-uniqueMember: uid=banderson,ou=People,dc=internet2,dc=edu
-uniqueMember: uid=jsmith,ou=People,dc=internet2,dc=edu
-cn: users
-
-dn: uid=administrator,ou=People,dc=internet2,dc=edu
-objectClass: organizationalPerson
-objectClass: person
-objectClass: top
-objectClass: inetOrgPerson
-givenName: Administrator
-uid: administrator
-sn: Administrator
-cn: Administrator
-userPassword: password
diff --git a/demo/shibboleth/docker-compose-tests.yml b/demo/shibboleth/docker-compose-tests.yml
deleted file mode 100644
index 5f58d39..0000000
--- a/demo/shibboleth/docker-compose-tests.yml
+++ /dev/null
@@ -1,162 +0,0 @@
-# Version for running Bats tests.
-# Minimizes the number of ports mapped to localhost, to avoid collisions during testing.
-
-version: "3.3"
-
-services:
- data_init:
- image: i2incommon/midpoint:${tag:-4.8.2}
- command: >
- bash -c "
- chmod 777 /opt/mp-pw/ ;
- touch /opt/mp-pw/db_init_in_progress ;
- echo -e '#!/bin/sh\ntouch /opt/mp-pw/db_init' >/opt/db-init/000-start.sh ;
- echo -e '#!/bin/sh\necho DB structure init process has finished...\nrm -f /opt/mp-pw/db_init_in_progress /opt/mp-pw/db_init' > /opt/db-init/999-finish.sh ;
- /opt/midpoint/bin/midpoint.sh init-native
- "
- environment:
- - MP_INIT_DB_CONCAT=/opt/db-init/init.sql
- - MP_DB_PW=/opt/mp-pw/dbpassword
- - MP_PW_DEF=/opt/mp-pw/keystorepw
- volumes:
- - db_init:/opt/db-init
- - mp_pw:/opt/mp-pw
-
- midpoint_data:
- image: postgres:13-alpine
- command: >
- bash -c "
- rm -f /var/lib/postgresql/data/postmaster.pid ;
- while [ ! -s /opt/mp-pw/dbpassword -o -e /opt/mp-pw/init_in_progress ] ; do
- echo 'Waiting to the end of the init process...';
- sleep 1;
- done ;
- {
- sleep 2 ;
- if [ ! -e /opt/mp-pw/db_init -a -e /opt/mp-pw/db_init_in_progress ] ;
- then echo 'DB init did not start...' ;
- rm -f /opt/mp-pw/db_ini*;
- echo 'The lock files has been removed...';
- fi ;
- } &
- docker-entrypoint.sh postgres
- "
- user: "70:70"
- depends_on:
- - data_init
- environment:
- - POSTGRES_PASSWORD_FILE=/opt/mp-pw/dbpassword
- - POSTGRES_USER=midpoint
- - POSTGRES_INITDB_ARGS=--lc-collate=en_US.utf8 --lc-ctype=en_US.utf8
- ports:
- - 5432:5432
- networks:
- - net
- volumes:
- - midpoint_data:/var/lib/postgresql/data
- - db_init:/docker-entrypoint-initdb.d/
- - mp_pw:/opt/mp-pw
-
- midpoint_server:
- build:
- context: ./midpoint_server/
- args:
- tag: ${tag:-4.8.2}
- command: /usr/local/bin/startup.sh
- depends_on:
- - data_init
- - midpoint_data
- ports:
- - 8443:443
- environment:
- - ENV
- - USERTOKEN
- - MP_SET_midpoint_administrator_initialPassword=Password1
- - MP_SET_midpoint_repository_jdbcUsername=midpoint
- - MP_SET_midpoint_repository_jdbcPassword_FILE=/opt/mp-pw/dbpassword
- - MP_SET_midpoint_repository_jdbcUrl=jdbc:postgresql://midpoint_data:5432/midpoint
- - MP_SET_midpoint_keystore_keyStorePassword_FILE=/opt/mp-pw/keystorepw
- - MP_SET_server_tomcat_ajp_enabled=true
- - MP_SET_server_tomcat_ajp_port=9090
- - MP_SET_server_tomcat_ajp_secret=s3cr3t
- - MP_SET_logging_path=/tmp/logtomcat
- - MP_UNSET_midpoint_repository_hibernateHbm2ddl=1
- - MP_NO_ENV_COMPAT=1
- - MP_MEM_MAX
- - MP_MEM_INIT
- - MP_JAVA_OPTS
- - TIER_BEACON_OPT_OUT
- - TIMEZONE
- networks:
- net:
- aliases:
- - midpoint-server
- secrets:
- - mp_host-key.pem
- - mp_shibboleth_sp_keys.jks
- volumes:
- - midpoint_home:/opt/midpoint/var
- - type: bind
- source: ./configs-and-secrets/midpoint/shibboleth/idp-metadata.xml
- target: /etc/shibboleth/idp-metadata.xml
- - type: bind
- source: ./configs-and-secrets/midpoint/shibboleth/shibboleth2.xml
- target: /etc/shibboleth/shibboleth2.xml
- - type: bind
- source: ./configs-and-secrets/midpoint/shibboleth/attribute-map.xml
- target: /etc/shibboleth/attribute-map.xml
- - type: bind
- source: ./configs-and-secrets/midpoint/httpd/host-cert.pem
- target: /etc/pki/tls/certs/host-cert.pem
- - type: bind
- source: ./configs-and-secrets/midpoint/httpd/host-cert.pem
- target: /etc/pki/tls/certs/cachain.pem
- - type: bind
- source: ./configs-and-secrets/midpoint/httpd/00-shib.conf
- target: /etc/httpd/conf.modules.d/00-shib.conf
- - type: bind
- source: ./configs-and-secrets/midpoint/httpd/midpoint-shib.conf
- target: /etc/httpd/conf.d/midpoint-shib.conf
- - type: bind
- source: ./configs-and-secrets/midpoint/httpd/vhosts.conf
- target: /etc/httpd/conf.d/vhosts/vhosts.conf
- - mp_pw:/opt/mp-pw
-
- directory:
- build: ./directory/
- ports:
- - 389:389
- networks:
- - net
- volumes:
- - ldap:/var/lib/dirsrv
-
- idp:
- build: ./idp/
- depends_on:
- - directory
- ports:
- - 443:443
- environment:
- - JETTY_MAX_HEAP=64m
- - JETTY_BROWSER_SSL_KEYSTORE_PASSWORD=password
- - JETTY_BACKCHANNEL_SSL_KEYSTORE_PASSWORD=password
- networks:
- - net
-
-networks:
- net:
- driver: bridge
-
-secrets:
- mp_host-key.pem:
- file: ./configs-and-secrets/midpoint/httpd/host-key.pem
- mp_shibboleth_sp_keys.jks:
- file: ./configs-and-secrets/midpoint/shibboleth/shibboleth_sp_keys.jks
-
-volumes:
- db_init:
- mp_pw:
- midpoint_data:
- midpoint_home:
- ldap:
diff --git a/demo/shibboleth/docker-compose.yml b/demo/shibboleth/docker-compose.yml
deleted file mode 100644
index e083b78..0000000
--- a/demo/shibboleth/docker-compose.yml
+++ /dev/null
@@ -1,159 +0,0 @@
-version: "3.3"
-
-services:
- data_init:
- image: i2incommon/midpoint:${tag:-4.8.2}
- command: >
- bash -c "
- chmod 777 /opt/mp-pw/ ;
- touch /opt/mp-pw/db_init_in_progress ;
- echo -e '#!/bin/sh\ntouch /opt/mp-pw/db_init' >/opt/db-init/000-start.sh ;
- echo -e '#!/bin/sh\necho DB structure init process has finished...\nrm -f /opt/mp-pw/db_init_in_progress /opt/mp-pw/db_init' > /opt/db-init/999-finish.sh ;
- /opt/midpoint/bin/midpoint.sh init-native
- "
- environment:
- - MP_INIT_DB_CONCAT=/opt/db-init/init.sql
- - MP_DB_PW=/opt/mp-pw/dbpassword
- - MP_PW_DEF=/opt/mp-pw/keystorepw
- volumes:
- - db_init:/opt/db-init
- - mp_pw:/opt/mp-pw
-
- midpoint_data:
- image: postgres:13-alpine
- command: >
- bash -c "
- rm -f /var/lib/postgresql/data/postmaster.pid ;
- while [ ! -s /opt/mp-pw/dbpassword -o -e /opt/mp-pw/init_in_progress ] ; do
- echo 'Waiting to the end of the init process...';
- sleep 1;
- done ;
- {
- sleep 2 ;
- if [ ! -e /opt/mp-pw/db_init -a -e /opt/mp-pw/db_init_in_progress ] ;
- then echo 'DB init did not start...' ;
- rm -f /opt/mp-pw/db_ini*;
- echo 'The lock files has been removed...';
- fi ;
- } &
- docker-entrypoint.sh postgres
- "
- user: "70:70"
- depends_on:
- - data_init
- environment:
- - POSTGRES_PASSWORD_FILE=/opt/mp-pw/dbpassword
- - POSTGRES_USER=midpoint
- - POSTGRES_INITDB_ARGS=--lc-collate=en_US.utf8 --lc-ctype=en_US.utf8
- ports:
- - 5432:5432
- networks:
- - net
- volumes:
- - midpoint_data:/var/lib/postgresql/data
- - db_init:/docker-entrypoint-initdb.d/
- - mp_pw:/opt/mp-pw
-
- midpoint_server:
- build:
- context: ./midpoint_server/
- args:
- tag: ${tag:-4.8.2}
- command: /usr/local/bin/startup.sh
- depends_on:
- - data_init
- - midpoint_data
- ports:
- - 8443:443
- environment:
- - ENV
- - USERTOKEN
- - MP_SET_midpoint_administrator_initialPassword=Password1
- - MP_SET_midpoint_repository_jdbcUsername=midpoint
- - MP_SET_midpoint_repository_jdbcPassword_FILE=/opt/mp-pw/dbpassword
- - MP_SET_midpoint_repository_jdbcUrl=jdbc:postgresql://midpoint_data:5432/midpoint
- - MP_SET_midpoint_keystore_keyStorePassword_FILE=/opt/mp-pw/keystorepw
- - MP_SET_server_tomcat_ajp_enabled=true
- - MP_SET_server_tomcat_ajp_port=9090
- - MP_SET_server_tomcat_ajp_secret=s3cr3t
- - MP_SET_logging_path=/tmp/logtomcat
- - MP_UNSET_midpoint_repository_hibernateHbm2ddl=1
- - MP_NO_ENV_COMPAT=1
- - MP_MEM_MAX
- - MP_MEM_INIT
- - MP_JAVA_OPTS
- - TIER_BEACON_OPT_OUT
- - TIMEZONE
- networks:
- net:
- aliases:
- - midpoint-server
- secrets:
- - mp_host-key.pem
- - mp_shibboleth_sp_keys.jks
- volumes:
- - midpoint_home:/opt/midpoint/var
- - type: bind
- source: ./configs-and-secrets/midpoint/shibboleth/idp-metadata.xml
- target: /etc/shibboleth/idp-metadata.xml
- - type: bind
- source: ./configs-and-secrets/midpoint/shibboleth/shibboleth2.xml
- target: /etc/shibboleth/shibboleth2.xml
- - type: bind
- source: ./configs-and-secrets/midpoint/shibboleth/attribute-map.xml
- target: /etc/shibboleth/attribute-map.xml
- - type: bind
- source: ./configs-and-secrets/midpoint/httpd/host-cert.pem
- target: /etc/pki/tls/certs/host-cert.pem
- - type: bind
- source: ./configs-and-secrets/midpoint/httpd/host-cert.pem
- target: /etc/pki/tls/certs/cachain.pem
- - type: bind
- source: ./configs-and-secrets/midpoint/httpd/00-shib.conf
- target: /etc/httpd/conf.modules.d/00-shib.conf
- - type: bind
- source: ./configs-and-secrets/midpoint/httpd/midpoint-shib.conf
- target: /etc/httpd/conf.d/midpoint-shib.conf
- - type: bind
- source: ./configs-and-secrets/midpoint/httpd/vhosts.conf
- target: /etc/httpd/conf.d/vhosts/vhosts.conf
- - mp_pw:/opt/mp-pw
-
- directory:
- build: ./directory/
- ports:
- - 389:389
- networks:
- - net
- volumes:
- - ldap:/var/lib/dirsrv
-
- idp:
- build: ./idp/
- depends_on:
- - directory
- ports:
- - 443:443
- environment:
- - JETTY_MAX_HEAP=64m
- - JETTY_BROWSER_SSL_KEYSTORE_PASSWORD=password
- - JETTY_BACKCHANNEL_SSL_KEYSTORE_PASSWORD=password
- networks:
- - net
-
-networks:
- net:
- driver: bridge
-
-secrets:
- mp_host-key.pem:
- file: ./configs-and-secrets/midpoint/httpd/host-key.pem
- mp_shibboleth_sp_keys.jks:
- file: ./configs-and-secrets/midpoint/shibboleth/shibboleth_sp_keys.jks
-
-volumes:
- db_init:
- mp_pw:
- midpoint_data:
- midpoint_home:
- ldap:
diff --git a/demo/shibboleth/idp/Dockerfile b/demo/shibboleth/idp/Dockerfile
deleted file mode 100644
index 4968448..0000000
--- a/demo/shibboleth/idp/Dockerfile
+++ /dev/null
@@ -1,5 +0,0 @@
-FROM tier/shib-idp:3.4.6_20191002
-
-LABEL author="tier-packaging@internet2.edu "
-
-COPY shibboleth-idp/ /opt/shibboleth-idp/
diff --git a/demo/shibboleth/idp/shibboleth-idp/credentials/idp-backchannel.crt b/demo/shibboleth/idp/shibboleth-idp/credentials/idp-backchannel.crt
deleted file mode 100644
index c1f8fab..0000000
--- a/demo/shibboleth/idp/shibboleth-idp/credentials/idp-backchannel.crt
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDEzCCAfugAwIBAgIUS9SuTXwsFVVG+LjOEAbLqqT/el0wDQYJKoZIhvcNAQEL
-BQAwFTETMBEGA1UEAwwKaWRwdGVzdGJlZDAeFw0xNTEyMTEwMjIwMjZaFw0zNTEy
-MTEwMjIwMjZaMBUxEzARBgNVBAMMCmlkcHRlc3RiZWQwggEiMA0GCSqGSIb3DQEB
-AQUAA4IBDwAwggEKAoIBAQCMAoDHx8xCIfv/6QKqt9mcHYmEJ8y2dKprUbpdcOjH
-YvNPIl/lHPsUyrb+Nc+q2CDeiWjVk1mWYq0UpIwpBMuw1H6+oOqr4VQRi65pin0M
-SfE0MWIaFo5FPvpvoptkHD4gvREbm4swyXGMczcMRfqgalFXhUD2wz8W3XAM5Cq2
-03XeJbj6TwjvKatG5XPdeUe2FBGuOO2q54L1hcIGnLMCQrg7D31lR13PJbjnJ0No
-5C3k8TPuny6vJsBC03GNLNKfmrKVTdzr3VKp1uay1G3DL9314fgmbl8HA5iRQmy+
-XInUU6/8NXZSF59p3ITAOvZQeZsbJjg5gGDip5OZo9YlAgMBAAGjWzBZMB0GA1Ud
-DgQWBBRPlM4VkKZ0U4ec9GrIhFQl0hNbLDA4BgNVHREEMTAvggppZHB0ZXN0YmVk
-hiFodHRwczovL2lkcHRlc3RiZWQvaWRwL3NoaWJib2xldGgwDQYJKoZIhvcNAQEL
-BQADggEBAIZ0a1ov3my3ljJG588I/PHx+TxAWONWmpKbO9c/qI3Drxk4oRIffiac
-ANxdvtabgIzrlk5gMMisD7oyqHJiWgKv5Bgctd8w3IS3lLl7wHX65mTKQRXniG98
-NIjkvfrhe2eeJxecOqnDI8GOhIGCIqZUn8ShdM/yHjhQ2Mh0Hj3U0LlKvnmfGSQl
-j0viGwbFCaNaIP3zc5UmCrdE5h8sWL3Fu7ILKM9RyFa2ILHrJScV9t623IcHffHP
-IeaY/WtuapsrqRFxuQL9QFWN0FsRIdLmjTq+00+B/XnnKRKFBuWfjhHLF/uu8f+E
-t6Lf23Kb8yD6ZR7dihMZAGHnYQ/hlhM=
------END CERTIFICATE-----
diff --git a/demo/shibboleth/idp/shibboleth-idp/credentials/idp-backchannel.p12 b/demo/shibboleth/idp/shibboleth-idp/credentials/idp-backchannel.p12
deleted file mode 100644
index 112540a..0000000
Binary files a/demo/shibboleth/idp/shibboleth-idp/credentials/idp-backchannel.p12 and /dev/null differ
diff --git a/demo/shibboleth/idp/shibboleth-idp/credentials/idp-browser.p12 b/demo/shibboleth/idp/shibboleth-idp/credentials/idp-browser.p12
deleted file mode 100644
index 032be0b..0000000
Binary files a/demo/shibboleth/idp/shibboleth-idp/credentials/idp-browser.p12 and /dev/null differ
diff --git a/demo/shibboleth/idp/shibboleth-idp/credentials/idp-encryption.crt b/demo/shibboleth/idp/shibboleth-idp/credentials/idp-encryption.crt
deleted file mode 100644
index 15d764f..0000000
--- a/demo/shibboleth/idp/shibboleth-idp/credentials/idp-encryption.crt
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDEzCCAfugAwIBAgIUG6Nn1rlERS1vsi88tcdzSYX0oqAwDQYJKoZIhvcNAQEL
-BQAwFTETMBEGA1UEAwwKaWRwdGVzdGJlZDAeFw0xNTEyMTEwMjIwMTRaFw0zNTEy
-MTEwMjIwMTRaMBUxEzARBgNVBAMMCmlkcHRlc3RiZWQwggEiMA0GCSqGSIb3DQEB
-AQUAA4IBDwAwggEKAoIBAQCBXv0o3fmT8iluyLjJ4lBAVCW+ZRVyEXPYQuRi7vfD
-cO4a6d1kxiJLsaK0W88VNxjFQRr8PgDkWr28vwoH1rgk4pLsszLD48DBzD942peJ
-l/S6FnsIJjmaHcBh4pbNhU4yowu63iKkvttrcZAEbpEro6Z8CziWEx8sywoaYEQG
-ifPkr9ORV6Cn3txq+9gMBePG41GrtZrUGIu+xrndL0Shh4Pq0eq/9MAsVlIIXEa8
-9WfH8J2kFcTOfoWtIc70b7TLZQsx4YnNcnrGLSUEcstFyPLX+Xtv5SNZF89OOIxX
-VNjNvgE5DbJb9hMM4UAFqI+1bo9QqtxwThjc/sOvIxzNAgMBAAGjWzBZMB0GA1Ud
-DgQWBBStTyogRPuAVG6q7yPyav1uvE+7pTA4BgNVHREEMTAvggppZHB0ZXN0YmVk
-hiFodHRwczovL2lkcHRlc3RiZWQvaWRwL3NoaWJib2xldGgwDQYJKoZIhvcNAQEL
-BQADggEBAFMfoOv+oISGjvamq7+Y4G7ep5vxlAPeK3RATYPYvAmyH946qZXh98ni
-QXyuqZW5P5eEt86toY45IwDU5r09SKwHughEe99iiEkxh0mb2qo84qX9/qcg+kyN
-jeLd/OSyolpUCEFNwOFcog7pj7Eer+6AHbwTn1Mjb5TBsKwtDMJsaxPvdj0u7M5r
-xL/wHkFhn1rCo2QiojzjSlV3yLTh49iTyhE3cG+RxaNKDCxhp0jSSLX1BW/ZoPA8
-+PMJEA+Q0QbyRD8aJOHN5O8jGxCa/ZzcOnYVL6AsEXoDiY3vAUYh1FUonOWw0m9H
-p+tGUbGS2l873J5PrsbpeKEVR/IIoKo=
------END CERTIFICATE-----
diff --git a/demo/shibboleth/idp/shibboleth-idp/credentials/idp-encryption.key b/demo/shibboleth/idp/shibboleth-idp/credentials/idp-encryption.key
deleted file mode 100644
index 8bb5cc6..0000000
--- a/demo/shibboleth/idp/shibboleth-idp/credentials/idp-encryption.key
+++ /dev/null
@@ -1,27 +0,0 @@
------BEGIN RSA PRIVATE KEY-----
-MIIEpAIBAAKCAQEAgV79KN35k/Ipbsi4yeJQQFQlvmUVchFz2ELkYu73w3DuGund
-ZMYiS7GitFvPFTcYxUEa/D4A5Fq9vL8KB9a4JOKS7LMyw+PAwcw/eNqXiZf0uhZ7
-CCY5mh3AYeKWzYVOMqMLut4ipL7ba3GQBG6RK6OmfAs4lhMfLMsKGmBEBonz5K/T
-kVegp97cavvYDAXjxuNRq7Wa1BiLvsa53S9EoYeD6tHqv/TALFZSCFxGvPVnx/Cd
-pBXEzn6FrSHO9G+0y2ULMeGJzXJ6xi0lBHLLRcjy1/l7b+UjWRfPTjiMV1TYzb4B
-OQ2yW/YTDOFABaiPtW6PUKrccE4Y3P7DryMczQIDAQABAoIBAF/IflMllcUtw/Nb
-9USzpIscQh2nJaugtE5nqER/fT1cfU273Mjh0T6NtFMorjec5WAWBe6/0VVAwb3f
-C4QmO4xDnFhXjLxwAaT6nfvSi+O5d93XCxxLgNZUNL3ET7a2feELyoF+OdQT4sy3
-9dLyMdVHgtnQTQMAAVLeuQoyP+s+Zax4Gca6ln8QxIIvDoD7NITnpl8887Hghhzl
-CvKtRiPRtoI2JTXWgWuLI6xXfVsDvFT+Up+ki9TMLWLACcmMU1d+lUBOKIqhhQHG
-+np9iKxVausJwYaLwwT3h8SItNon7ltbV6kcqyZxMAA+uN8CVgIb5UaUrlW7Nvze
-1iUNudkCgYEAxpnBg8YxdEHFSMTqjEOYapn18cs3n32EBPtvPaUcvw3mGC1+ZVx1
-9WqnVsgykBOWI0qSBVF7Kke8yOqgqWtYQUFqLiMgCC9e/QcXnrm/bzAmKDgLVcCR
-KzgqU2ECQDkNSS0qeODjLGX4SEabDbLhN59WykHKM0i/RcrbhuvT1BcCgYEApsMD
-TFQBaiaEmLVm252piZf8b5g3DrUHeqGktHkHXTW4Iyyn8zEknoiCosk/Tej73zga
-cTT3zQgEh63DMC9Ag8IbIJiDpYLMkt1QvZYtq95E/94GVEfRRok6/pyagGYB351R
-PXcykrDyy26FSofmtaXU37Wxaj3ow+WROaPgULsCgYEArFoFScG3a2gkuRlDX8TN
-wj2o5lTxCbWY2+YEzR+8icWbGQJqPbb3G6uaW8LTtpt44Vm2zWzAEZo+KLMOCNmC
-tub5Kd8Lzm6l5brA8dvLWcgUZTT2CU5b7YEJomB+3pNkh0vuHwczv3Ui+j5kE4hY
-0bezT0W3H7iTXhNFXprMs7MCgYEAlIZn75l6URLRUjluzPdVQoktei72CpFNgflp
-+ps45dmskRd61mzUkqY+w8G+MiPqANu1IVLtyZz0e+tVRxsuuKsvAg8UYVtn3P5k
-pRaWwtaKWeFjfbkhOVOMSa0tJmK0FHfHHZmGX4ReGrXq3YDBCNQUDtOCmn9dSuyy
-NcYxSXUCgYB+yo6dg8nyHDSqKDdrQQiAKv7jNsbecQ/rYrt8l0n9FBiwn5R7v6kp
-afsimCVou5i06L2Cr5Xs+XSf11KVkDh+qM70ZFubWEsHCDrS1KrxUzfFbrQczKof
-qX7ZsBuOT72RwVEa8fpT6IZ6IpOOEPmUid/f2VM2aAcXgaF//vMjxA==
------END RSA PRIVATE KEY-----
diff --git a/demo/shibboleth/idp/shibboleth-idp/credentials/idp-signing.crt b/demo/shibboleth/idp/shibboleth-idp/credentials/idp-signing.crt
deleted file mode 100644
index 6a032c1..0000000
--- a/demo/shibboleth/idp/shibboleth-idp/credentials/idp-signing.crt
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDFDCCAfygAwIBAgIVAN3vv+b7KN5Se9m1RZsCllp/B/hdMA0GCSqGSIb3DQEB
-CwUAMBUxEzARBgNVBAMMCmlkcHRlc3RiZWQwHhcNMTUxMjExMDIyMDE0WhcNMzUx
-MjExMDIyMDE0WjAVMRMwEQYDVQQDDAppZHB0ZXN0YmVkMIIBIjANBgkqhkiG9w0B
-AQEFAAOCAQ8AMIIBCgKCAQEAh91caeY0Q85uhaUyqFwP2bMjwMFxMzRlAoqBHd7g
-u6eo4duaeLz1BaoR2XTBpNNvFR5oHH+TkKahVDGeH5+kcnIpxI8JPdsZml1srvf2
-Z6dzJsulJZUdpqnngycTkGtZgEoC1vmYVky2BSAIIifmdh6s0epbHnMGLsHzMKfJ
-Cb/Q6dYzRWTCPtzE2VMuQqqWgeyMr7u14x/Vqr9RPEFsgY8GIu5jzB6AyUIwrLg+
-MNkv6aIdcHwxYTGL7ijfy6rSWrgBflQoYRYNEnseK0ZHgJahz4ovCag6wZAoPpBs
-uYlY7lEr89Ucb6NHx3uqGMsXlDFdE4QwfDLLhCYHPvJ0uwIDAQABo1swWTAdBgNV
-HQ4EFgQUAkOgED3iYdmvQEOMm6u/JmD/UTQwOAYDVR0RBDEwL4IKaWRwdGVzdGJl
-ZIYhaHR0cHM6Ly9pZHB0ZXN0YmVkL2lkcC9zaGliYm9sZXRoMA0GCSqGSIb3DQEB
-CwUAA4IBAQBIdd4YWlnvJjql8+zKKgmWgIY7U8DA8e6QcbAf8f8cdE33RSnjI63X
-sv/y9GfmbAVAD6RIAXPFFeRYJ08GOxGI9axfNaKdlsklJ9bk4ducHqgCSWYVer3s
-RQBjxyOfSTvk9YCJvdJVQRJLcCvxwKakFCsOSnV3t9OvN86Ak+fKPVB5j2fM/0fZ
-Kqjn3iqgdNPTLXPsuJLJO5lITRiBa4onmVelAiCstI9PQiaEck+oAHnMTnC9JE/B
-DHv3e4rwq3LznlqPw0GSd7xqNTdMDwNOWjkuOr3sGpWS8ms/ZHHXV1Vd22uPe70i
-s00xrv14zLifcc8oj5DYzOhYRifRXgHX
------END CERTIFICATE-----
diff --git a/demo/shibboleth/idp/shibboleth-idp/credentials/idp-signing.key b/demo/shibboleth/idp/shibboleth-idp/credentials/idp-signing.key
deleted file mode 100644
index 011c27c..0000000
--- a/demo/shibboleth/idp/shibboleth-idp/credentials/idp-signing.key
+++ /dev/null
@@ -1,27 +0,0 @@
------BEGIN RSA PRIVATE KEY-----
-MIIEowIBAAKCAQEAh91caeY0Q85uhaUyqFwP2bMjwMFxMzRlAoqBHd7gu6eo4dua
-eLz1BaoR2XTBpNNvFR5oHH+TkKahVDGeH5+kcnIpxI8JPdsZml1srvf2Z6dzJsul
-JZUdpqnngycTkGtZgEoC1vmYVky2BSAIIifmdh6s0epbHnMGLsHzMKfJCb/Q6dYz
-RWTCPtzE2VMuQqqWgeyMr7u14x/Vqr9RPEFsgY8GIu5jzB6AyUIwrLg+MNkv6aId
-cHwxYTGL7ijfy6rSWrgBflQoYRYNEnseK0ZHgJahz4ovCag6wZAoPpBsuYlY7lEr
-89Ucb6NHx3uqGMsXlDFdE4QwfDLLhCYHPvJ0uwIDAQABAoIBAGpInLarQ0+X+ZXK
-+aoC+tNO9DUiHq/z2OD4ALGhXSTvr4mgBWNWTkc0F+qJD8MlM8zNkJxaoNGTyLjY
-Z95NQJPXAx2k15HwCENdulvV1oiX0dkTjgmscRmj6FwNAZ0EnWtien45mxZHxEyW
-FkbB9+OHc6JzNvzG9ps1Vk1FtFtO8w4exXuJVATJeArQmMvAUHMJYPb7Qs+/NX9R
-RlDvFfXDzQv5eAzudT1SyFSa5W+Bsw6BtEoeiqdp+xQh4yc733nwN7KG2Z/TpGse
-jVe6akbULuCXOe9uPa7kv8hnQEUH38QVlIw8pK1SsgNq7S0U44WU5uF8gbDBYle/
-OoPBvSECgYEAvCwVEa8ryLzee5FaX4PBxk10lEl/Yp9jC88wPUQ+ZpfniIIQIfwl
-csRE9D3/dJOVAxw/Ac32F72SLVDzLabAhlBRINYLB0ZkVuJi1CIoDHIf9nfh/pOx
-b96VMUe/mpAL4hZnZkmBKjesX5URPEKtBD0aSeCw9aFqhORjRrxCJg0CgYEAuNaD
-LOuTPKsC6nxRtiL9r0CA5gCCdpALxwJA7wHAeh03i5xmy61i4iOMaunxKZhG+nzz
-PhcI8Uhwwk+l3tbYAf1rrtmMKNcyjy+UqWXGt4ZkWFlIyIungyLiH9L32IMhXNF0
-fBgOZNtFTmQBU18a78uIir9xASUbtaakzOtJ2+cCgYAgfawVpZ11x8bSp0Jng6SN
-zQn4IMiyCrtbaqb1rTbpGAmOdIa8l4EP0/vkAGB/jIwKQXJPqXR4nO8EjBmxJD3R
-80RO2yaEVw80QVq3Lj6kB4ClWgXXo0DcBB7Wp4DZ+01R+HRaIQ8AbySATIjxUsH1
-HWfQoc9sWja+Q4Ew0YjKcQKBgGLoPsdBw8b6B5RsM9lPvgoSbScmbKl/CR5TwWVj
-vZhanAd0CLnCrSAvP4tSZf8JAio1xH+cGefrCJOhxTOKKYpfDklBFjQge2iNYHKJ
-CJ3aJ0XzePP/bwLIHtJCtOdBvA+L8VYaFVG418xLzT3MrYBVnFoKeTDQp5Q7eQJC
-gYJPAoGBAKHcuXWzvXoHKnOg8Ljg2xZ6/SfjwNDIIrpXVTAQifmK3q4+Ua2Q+Cjq
-97tPMxF2bVRcbnCSNKpTMOTrsWs8Z3GpMyCh6XgYMSlclXusDVUkRkPpWj8hVTR4
-opm/rxS83hCrTsIX3Il3T8Fpb97kdF+unCiWEaxrPEurjW8lB506
------END RSA PRIVATE KEY-----
diff --git a/demo/shibboleth/idp/shibboleth-idp/credentials/sealer.jks b/demo/shibboleth/idp/shibboleth-idp/credentials/sealer.jks
deleted file mode 100644
index 89957e0..0000000
Binary files a/demo/shibboleth/idp/shibboleth-idp/credentials/sealer.jks and /dev/null differ
diff --git a/demo/shibboleth/idp/shibboleth-idp/credentials/sealer.kver b/demo/shibboleth/idp/shibboleth-idp/credentials/sealer.kver
deleted file mode 100644
index d64b0e4..0000000
--- a/demo/shibboleth/idp/shibboleth-idp/credentials/sealer.kver
+++ /dev/null
@@ -1,2 +0,0 @@
-#Fri Dec 11 02:20:32 UTC 2015
-CurrentVersion=1
diff --git a/demo/shibboleth/idp/shibboleth-idp/metadata/idp-metadata.xml b/demo/shibboleth/idp/shibboleth-idp/metadata/idp-metadata.xml
deleted file mode 100644
index 65db47e..0000000
--- a/demo/shibboleth/idp/shibboleth-idp/metadata/idp-metadata.xml
+++ /dev/null
@@ -1,207 +0,0 @@
-
-
-
-
-
-
-
- example.org
-
-
-
-
-
-
-
-MIIDEzCCAfugAwIBAgIUS9SuTXwsFVVG+LjOEAbLqqT/el0wDQYJKoZIhvcNAQEL
-BQAwFTETMBEGA1UEAwwKaWRwdGVzdGJlZDAeFw0xNTEyMTEwMjIwMjZaFw0zNTEy
-MTEwMjIwMjZaMBUxEzARBgNVBAMMCmlkcHRlc3RiZWQwggEiMA0GCSqGSIb3DQEB
-AQUAA4IBDwAwggEKAoIBAQCMAoDHx8xCIfv/6QKqt9mcHYmEJ8y2dKprUbpdcOjH
-YvNPIl/lHPsUyrb+Nc+q2CDeiWjVk1mWYq0UpIwpBMuw1H6+oOqr4VQRi65pin0M
-SfE0MWIaFo5FPvpvoptkHD4gvREbm4swyXGMczcMRfqgalFXhUD2wz8W3XAM5Cq2
-03XeJbj6TwjvKatG5XPdeUe2FBGuOO2q54L1hcIGnLMCQrg7D31lR13PJbjnJ0No
-5C3k8TPuny6vJsBC03GNLNKfmrKVTdzr3VKp1uay1G3DL9314fgmbl8HA5iRQmy+
-XInUU6/8NXZSF59p3ITAOvZQeZsbJjg5gGDip5OZo9YlAgMBAAGjWzBZMB0GA1Ud
-DgQWBBRPlM4VkKZ0U4ec9GrIhFQl0hNbLDA4BgNVHREEMTAvggppZHB0ZXN0YmVk
-hiFodHRwczovL2lkcHRlc3RiZWQvaWRwL3NoaWJib2xldGgwDQYJKoZIhvcNAQEL
-BQADggEBAIZ0a1ov3my3ljJG588I/PHx+TxAWONWmpKbO9c/qI3Drxk4oRIffiac
-ANxdvtabgIzrlk5gMMisD7oyqHJiWgKv5Bgctd8w3IS3lLl7wHX65mTKQRXniG98
-NIjkvfrhe2eeJxecOqnDI8GOhIGCIqZUn8ShdM/yHjhQ2Mh0Hj3U0LlKvnmfGSQl
-j0viGwbFCaNaIP3zc5UmCrdE5h8sWL3Fu7ILKM9RyFa2ILHrJScV9t623IcHffHP
-IeaY/WtuapsrqRFxuQL9QFWN0FsRIdLmjTq+00+B/XnnKRKFBuWfjhHLF/uu8f+E
-t6Lf23Kb8yD6ZR7dihMZAGHnYQ/hlhM=
-
-
-
-
-
-
-
-
-
-MIIDFDCCAfygAwIBAgIVAN3vv+b7KN5Se9m1RZsCllp/B/hdMA0GCSqGSIb3DQEB
-CwUAMBUxEzARBgNVBAMMCmlkcHRlc3RiZWQwHhcNMTUxMjExMDIyMDE0WhcNMzUx
-MjExMDIyMDE0WjAVMRMwEQYDVQQDDAppZHB0ZXN0YmVkMIIBIjANBgkqhkiG9w0B
-AQEFAAOCAQ8AMIIBCgKCAQEAh91caeY0Q85uhaUyqFwP2bMjwMFxMzRlAoqBHd7g
-u6eo4duaeLz1BaoR2XTBpNNvFR5oHH+TkKahVDGeH5+kcnIpxI8JPdsZml1srvf2
-Z6dzJsulJZUdpqnngycTkGtZgEoC1vmYVky2BSAIIifmdh6s0epbHnMGLsHzMKfJ
-Cb/Q6dYzRWTCPtzE2VMuQqqWgeyMr7u14x/Vqr9RPEFsgY8GIu5jzB6AyUIwrLg+
-MNkv6aIdcHwxYTGL7ijfy6rSWrgBflQoYRYNEnseK0ZHgJahz4ovCag6wZAoPpBs
-uYlY7lEr89Ucb6NHx3uqGMsXlDFdE4QwfDLLhCYHPvJ0uwIDAQABo1swWTAdBgNV
-HQ4EFgQUAkOgED3iYdmvQEOMm6u/JmD/UTQwOAYDVR0RBDEwL4IKaWRwdGVzdGJl
-ZIYhaHR0cHM6Ly9pZHB0ZXN0YmVkL2lkcC9zaGliYm9sZXRoMA0GCSqGSIb3DQEB
-CwUAA4IBAQBIdd4YWlnvJjql8+zKKgmWgIY7U8DA8e6QcbAf8f8cdE33RSnjI63X
-sv/y9GfmbAVAD6RIAXPFFeRYJ08GOxGI9axfNaKdlsklJ9bk4ducHqgCSWYVer3s
-RQBjxyOfSTvk9YCJvdJVQRJLcCvxwKakFCsOSnV3t9OvN86Ak+fKPVB5j2fM/0fZ
-Kqjn3iqgdNPTLXPsuJLJO5lITRiBa4onmVelAiCstI9PQiaEck+oAHnMTnC9JE/B
-DHv3e4rwq3LznlqPw0GSd7xqNTdMDwNOWjkuOr3sGpWS8ms/ZHHXV1Vd22uPe70i
-s00xrv14zLifcc8oj5DYzOhYRifRXgHX
-
-
-
-
-
-
-
-
-
-MIIDEzCCAfugAwIBAgIUG6Nn1rlERS1vsi88tcdzSYX0oqAwDQYJKoZIhvcNAQEL
-BQAwFTETMBEGA1UEAwwKaWRwdGVzdGJlZDAeFw0xNTEyMTEwMjIwMTRaFw0zNTEy
-MTEwMjIwMTRaMBUxEzARBgNVBAMMCmlkcHRlc3RiZWQwggEiMA0GCSqGSIb3DQEB
-AQUAA4IBDwAwggEKAoIBAQCBXv0o3fmT8iluyLjJ4lBAVCW+ZRVyEXPYQuRi7vfD
-cO4a6d1kxiJLsaK0W88VNxjFQRr8PgDkWr28vwoH1rgk4pLsszLD48DBzD942peJ
-l/S6FnsIJjmaHcBh4pbNhU4yowu63iKkvttrcZAEbpEro6Z8CziWEx8sywoaYEQG
-ifPkr9ORV6Cn3txq+9gMBePG41GrtZrUGIu+xrndL0Shh4Pq0eq/9MAsVlIIXEa8
-9WfH8J2kFcTOfoWtIc70b7TLZQsx4YnNcnrGLSUEcstFyPLX+Xtv5SNZF89OOIxX
-VNjNvgE5DbJb9hMM4UAFqI+1bo9QqtxwThjc/sOvIxzNAgMBAAGjWzBZMB0GA1Ud
-DgQWBBStTyogRPuAVG6q7yPyav1uvE+7pTA4BgNVHREEMTAvggppZHB0ZXN0YmVk
-hiFodHRwczovL2lkcHRlc3RiZWQvaWRwL3NoaWJib2xldGgwDQYJKoZIhvcNAQEL
-BQADggEBAFMfoOv+oISGjvamq7+Y4G7ep5vxlAPeK3RATYPYvAmyH946qZXh98ni
-QXyuqZW5P5eEt86toY45IwDU5r09SKwHughEe99iiEkxh0mb2qo84qX9/qcg+kyN
-jeLd/OSyolpUCEFNwOFcog7pj7Eer+6AHbwTn1Mjb5TBsKwtDMJsaxPvdj0u7M5r
-xL/wHkFhn1rCo2QiojzjSlV3yLTh49iTyhE3cG+RxaNKDCxhp0jSSLX1BW/ZoPA8
-+PMJEA+Q0QbyRD8aJOHN5O8jGxCa/ZzcOnYVL6AsEXoDiY3vAUYh1FUonOWw0m9H
-p+tGUbGS2l873J5PrsbpeKEVR/IIoKo=
-
-
-
-
-
-
- urn:mace:shibboleth:1.0:nameIdentifier
- urn:oasis:names:tc:SAML:2.0:nameid-format:transient
-
-
-
-
-
-
-
-
-
-
-
-
- localhost
-
-
-
-
-
-
-MIIDEzCCAfugAwIBAgIUS9SuTXwsFVVG+LjOEAbLqqT/el0wDQYJKoZIhvcNAQEL
-BQAwFTETMBEGA1UEAwwKaWRwdGVzdGJlZDAeFw0xNTEyMTEwMjIwMjZaFw0zNTEy
-MTEwMjIwMjZaMBUxEzARBgNVBAMMCmlkcHRlc3RiZWQwggEiMA0GCSqGSIb3DQEB
-AQUAA4IBDwAwggEKAoIBAQCMAoDHx8xCIfv/6QKqt9mcHYmEJ8y2dKprUbpdcOjH
-YvNPIl/lHPsUyrb+Nc+q2CDeiWjVk1mWYq0UpIwpBMuw1H6+oOqr4VQRi65pin0M
-SfE0MWIaFo5FPvpvoptkHD4gvREbm4swyXGMczcMRfqgalFXhUD2wz8W3XAM5Cq2
-03XeJbj6TwjvKatG5XPdeUe2FBGuOO2q54L1hcIGnLMCQrg7D31lR13PJbjnJ0No
-5C3k8TPuny6vJsBC03GNLNKfmrKVTdzr3VKp1uay1G3DL9314fgmbl8HA5iRQmy+
-XInUU6/8NXZSF59p3ITAOvZQeZsbJjg5gGDip5OZo9YlAgMBAAGjWzBZMB0GA1Ud
-DgQWBBRPlM4VkKZ0U4ec9GrIhFQl0hNbLDA4BgNVHREEMTAvggppZHB0ZXN0YmVk
-hiFodHRwczovL2lkcHRlc3RiZWQvaWRwL3NoaWJib2xldGgwDQYJKoZIhvcNAQEL
-BQADggEBAIZ0a1ov3my3ljJG588I/PHx+TxAWONWmpKbO9c/qI3Drxk4oRIffiac
-ANxdvtabgIzrlk5gMMisD7oyqHJiWgKv5Bgctd8w3IS3lLl7wHX65mTKQRXniG98
-NIjkvfrhe2eeJxecOqnDI8GOhIGCIqZUn8ShdM/yHjhQ2Mh0Hj3U0LlKvnmfGSQl
-j0viGwbFCaNaIP3zc5UmCrdE5h8sWL3Fu7ILKM9RyFa2ILHrJScV9t623IcHffHP
-IeaY/WtuapsrqRFxuQL9QFWN0FsRIdLmjTq+00+B/XnnKRKFBuWfjhHLF/uu8f+E
-t6Lf23Kb8yD6ZR7dihMZAGHnYQ/hlhM=
-
-
-
-
-
-
-
-
-
-MIIDFDCCAfygAwIBAgIVAN3vv+b7KN5Se9m1RZsCllp/B/hdMA0GCSqGSIb3DQEB
-CwUAMBUxEzARBgNVBAMMCmlkcHRlc3RiZWQwHhcNMTUxMjExMDIyMDE0WhcNMzUx
-MjExMDIyMDE0WjAVMRMwEQYDVQQDDAppZHB0ZXN0YmVkMIIBIjANBgkqhkiG9w0B
-AQEFAAOCAQ8AMIIBCgKCAQEAh91caeY0Q85uhaUyqFwP2bMjwMFxMzRlAoqBHd7g
-u6eo4duaeLz1BaoR2XTBpNNvFR5oHH+TkKahVDGeH5+kcnIpxI8JPdsZml1srvf2
-Z6dzJsulJZUdpqnngycTkGtZgEoC1vmYVky2BSAIIifmdh6s0epbHnMGLsHzMKfJ
-Cb/Q6dYzRWTCPtzE2VMuQqqWgeyMr7u14x/Vqr9RPEFsgY8GIu5jzB6AyUIwrLg+
-MNkv6aIdcHwxYTGL7ijfy6rSWrgBflQoYRYNEnseK0ZHgJahz4ovCag6wZAoPpBs
-uYlY7lEr89Ucb6NHx3uqGMsXlDFdE4QwfDLLhCYHPvJ0uwIDAQABo1swWTAdBgNV
-HQ4EFgQUAkOgED3iYdmvQEOMm6u/JmD/UTQwOAYDVR0RBDEwL4IKaWRwdGVzdGJl
-ZIYhaHR0cHM6Ly9pZHB0ZXN0YmVkL2lkcC9zaGliYm9sZXRoMA0GCSqGSIb3DQEB
-CwUAA4IBAQBIdd4YWlnvJjql8+zKKgmWgIY7U8DA8e6QcbAf8f8cdE33RSnjI63X
-sv/y9GfmbAVAD6RIAXPFFeRYJ08GOxGI9axfNaKdlsklJ9bk4ducHqgCSWYVer3s
-RQBjxyOfSTvk9YCJvdJVQRJLcCvxwKakFCsOSnV3t9OvN86Ak+fKPVB5j2fM/0fZ
-Kqjn3iqgdNPTLXPsuJLJO5lITRiBa4onmVelAiCstI9PQiaEck+oAHnMTnC9JE/B
-DHv3e4rwq3LznlqPw0GSd7xqNTdMDwNOWjkuOr3sGpWS8ms/ZHHXV1Vd22uPe70i
-s00xrv14zLifcc8oj5DYzOhYRifRXgHX
-
-
-
-
-
-
-
-
-
-MIIDEzCCAfugAwIBAgIUG6Nn1rlERS1vsi88tcdzSYX0oqAwDQYJKoZIhvcNAQEL
-BQAwFTETMBEGA1UEAwwKaWRwdGVzdGJlZDAeFw0xNTEyMTEwMjIwMTRaFw0zNTEy
-MTEwMjIwMTRaMBUxEzARBgNVBAMMCmlkcHRlc3RiZWQwggEiMA0GCSqGSIb3DQEB
-AQUAA4IBDwAwggEKAoIBAQCBXv0o3fmT8iluyLjJ4lBAVCW+ZRVyEXPYQuRi7vfD
-cO4a6d1kxiJLsaK0W88VNxjFQRr8PgDkWr28vwoH1rgk4pLsszLD48DBzD942peJ
-l/S6FnsIJjmaHcBh4pbNhU4yowu63iKkvttrcZAEbpEro6Z8CziWEx8sywoaYEQG
-ifPkr9ORV6Cn3txq+9gMBePG41GrtZrUGIu+xrndL0Shh4Pq0eq/9MAsVlIIXEa8
-9WfH8J2kFcTOfoWtIc70b7TLZQsx4YnNcnrGLSUEcstFyPLX+Xtv5SNZF89OOIxX
-VNjNvgE5DbJb9hMM4UAFqI+1bo9QqtxwThjc/sOvIxzNAgMBAAGjWzBZMB0GA1Ud
-DgQWBBStTyogRPuAVG6q7yPyav1uvE+7pTA4BgNVHREEMTAvggppZHB0ZXN0YmVk
-hiFodHRwczovL2lkcHRlc3RiZWQvaWRwL3NoaWJib2xldGgwDQYJKoZIhvcNAQEL
-BQADggEBAFMfoOv+oISGjvamq7+Y4G7ep5vxlAPeK3RATYPYvAmyH946qZXh98ni
-QXyuqZW5P5eEt86toY45IwDU5r09SKwHughEe99iiEkxh0mb2qo84qX9/qcg+kyN
-jeLd/OSyolpUCEFNwOFcog7pj7Eer+6AHbwTn1Mjb5TBsKwtDMJsaxPvdj0u7M5r
-xL/wHkFhn1rCo2QiojzjSlV3yLTh49iTyhE3cG+RxaNKDCxhp0jSSLX1BW/ZoPA8
-+PMJEA+Q0QbyRD8aJOHN5O8jGxCa/ZzcOnYVL6AsEXoDiY3vAUYh1FUonOWw0m9H
-p+tGUbGS2l873J5PrsbpeKEVR/IIoKo=
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/demo/shibboleth/midpoint_server/Dockerfile b/demo/shibboleth/midpoint_server/Dockerfile
deleted file mode 100644
index 11ab497..0000000
--- a/demo/shibboleth/midpoint_server/Dockerfile
+++ /dev/null
@@ -1,11 +0,0 @@
-ARG tag=4.8.2
-
-FROM i2incommon/midpoint:${tag}
-
-MAINTAINER info@evolveum.com
-
-ENV MP_DIR /opt/midpoint
-
-VOLUME ${MP_DIR}/var
-
-COPY container_files/mp-home/ ${MP_DIR}/var/
diff --git a/demo/shibboleth/midpoint_server/container_files/httpd/host-cert.pem b/demo/shibboleth/midpoint_server/container_files/httpd/host-cert.pem
deleted file mode 100644
index 9b1021b..0000000
--- a/demo/shibboleth/midpoint_server/container_files/httpd/host-cert.pem
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDqDCCApCgAwIBAgIJAMOSkn4oS2aAMA0GCSqGSIb3DQEBCwUAMGkxCzAJBgNV
-BAYTAlVTMQswCQYDVQQIDAJNSTESMBAGA1UEBwwJQW5uIEFyYm9yMRcwFQYDVQQK
-DA5JbnRlcm5ldDIvVElFUjEgMB4GA1UEAwwXbWlkcG9pbnQuc3AuZXhhbXBsZS5v
-cmcwHhcNMTgwOTE0MDU1OTQ1WhcNMTkwOTE0MDU1OTQ1WjBpMQswCQYDVQQGEwJV
-UzELMAkGA1UECAwCTUkxEjAQBgNVBAcMCUFubiBBcmJvcjEXMBUGA1UECgwOSW50
-ZXJuZXQyL1RJRVIxIDAeBgNVBAMMF21pZHBvaW50LnNwLmV4YW1wbGUub3JnMIIB
-IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApj/b7MEUSfu3oXMfNgRwTse7
-a5UV7Jswf1M/ZN/ZZkAkIxNBevZgozjesvLPWrmsTgONi7XigJUJvCjdjmlW9eDM
-lri/rkD8HuOR1DQCVKL9nvoS2c3D7sq5Emda3V8Tlj82VqfEmePd3sajx7mcTfbH
-8jwAL9NhkC+WMib5IpjLGpG0FEAC0ha7Lxb+7jIiqHVJaqLXJGCyGN4mh6c1Q9S1
-f8RVTiW2a8x22G+9wnZYbkiA2Kxls177imHlhSz8EdvV4IpGw1amrEWhhuDEum7B
-vZ1xQDLatgRqh4qAKLIVYeRnJ8H1FelMa90qB4G08MIPifmTsQwqJyBYaEdgWQID
-AQABo1MwUTAdBgNVHQ4EFgQUqb9BteODF6wv5R57aEON/wGXMiowHwYDVR0jBBgw
-FoAUqb9BteODF6wv5R57aEON/wGXMiowDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG
-9w0BAQsFAAOCAQEAAcKhxI+tSItrXmqC0PSmgWyAYpqbkz6W/cefTutXqhIgY09f
-h0LSv7ogTahoGpyiZk9vy6u3OE9bYwxapEfa4KBjO6HxBMIVBBb3RegVjoPzjElN
-BDwAx0VGFcZTXwMxDWycWdG8ql7rCZBvS50w04uTaIgnGmqXAdWWmBgfJ9cRbxW+
-JwO/mOl1QM1lR/5142NpvuUVWlmZSKEGydE5A1qPz2wpDbBR1ym1BQNS4NEqw6Kp
-GSB8jKyCS1Ve0v2wVze2038Wukz02dq9uKPTIO3T+B+ibZmxn6Op/kFCc1/kK5NS
-Q6JdO1B6KquGAYdGmKAcQ19mv+jqGktqWEEf0g==
------END CERTIFICATE-----
diff --git a/demo/shibboleth/midpoint_server/container_files/httpd/host-key.pem b/demo/shibboleth/midpoint_server/container_files/httpd/host-key.pem
deleted file mode 100644
index 5746e59..0000000
--- a/demo/shibboleth/midpoint_server/container_files/httpd/host-key.pem
+++ /dev/null
@@ -1,28 +0,0 @@
------BEGIN PRIVATE KEY-----
-MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCmP9vswRRJ+7eh
-cx82BHBOx7trlRXsmzB/Uz9k39lmQCQjE0F69mCjON6y8s9auaxOA42LteKAlQm8
-KN2OaVb14MyWuL+uQPwe45HUNAJUov2e+hLZzcPuyrkSZ1rdXxOWPzZWp8SZ493e
-xqPHuZxN9sfyPAAv02GQL5YyJvkimMsakbQUQALSFrsvFv7uMiKodUlqotckYLIY
-3iaHpzVD1LV/xFVOJbZrzHbYb73CdlhuSIDYrGWzXvuKYeWFLPwR29XgikbDVqas
-RaGG4MS6bsG9nXFAMtq2BGqHioAoshVh5GcnwfUV6Uxr3SoHgbTwwg+J+ZOxDCon
-IFhoR2BZAgMBAAECggEAEIRBpjjceiku6jRUwnoYaks/nIWYQwR8AfpUTwJKR/VR
-Yca097Fokm7A+UhUP3A45RtHQb0VPq8P44iv0kk24YCu8r5yFK7SHYOAZnOwU5ZJ
-2jSAEPF3aM7tKh3okhuzB3dKP7u1NZDE5zAW723KUJiW7sL1RcsbY0bHBj6G+9/H
-NplmsjuGt684vRBB0qOBfKF7EiG7mT69tHuNj4gRza9SMY31UtKbZdt2fNY6mp5V
-HscMba7egZP+Ke0pVX4+go9j7K8GG8hYaQDLjrzlPqrxZ2c5X9cC+CRDI/CHuL/s
-V/2yGZJ6n6UabwZoH83RdFrbQ94rU8Hkli6EvxXvMQKBgQDRpheNW5jDG5TfeJKh
-yfKTDQqH2Tk3BsBYYBN7Hf3m7vbkzlxnAKJAoSLmtRMuoeXvI5MrhzaHGsNIUS76
-LDIZnvB7DLUxhFUZsCPkpAA1QHuTWY96oR3PHnPjpk8lSUvtbOPwDLdzVApeFJgZ
-VqMNArZ7AHsK3Kkyi+f4WVQjbQKBgQDLAWiGb5dx6fAM2W6B6HjNmzjBWOuVEXa2
-76to9jzupBZmETfZgxtWUaWUDuNS+f7dtVUTE+p6v/w8clrHEhEZYkqunIOLo/UA
-LFPiuoTfEsWb1rh+nsCjCgy4uimixj/bSkf7NC6NyKTvCygA1mGnVVJUEPegYlDy
-LXCkaKWxHQKBgQCmyHSKL2lrJkEcOwakEU2acNCE3Gno/cT9SYmV83kvQ8JEqmrW
-QqnRsp9aXIljGscapPmKsmnNt5vNp1AxFAHTYh88NRLczsMIyZj0ZwgHVUI6KhC7
-5Psa78YQQBlMt2/g9TSsnuE+rYgF6mpKFiNm0Vasqeg47uzn2mdzqlUGTQKBgE04
-JutkTUY+h1pL5vYxWKpVDfy19z7H2tFxT1FowPrBneeLSyRI88Ac5I/yLdRlVeY9
-0LOmEr5Igwj3MsKgg7KVKfVLgdo/LrW3Jt2Kt3onKNXDkoBPoNUjwH0QC0Boiue+
-VK0gR0kVdm+bXccbxR+im+NwZNE0NLg6Qqu3RredAoGBALuVoqbPPmTCZXYG328H
-bzOs2aiR7BzPSVByV+qG6jW7w03RAnFPJZp7HMU+ViI5VY0wabUscMSvz5163+gM
-4KwY3v9ZjZzZGukIfLuudkdqtaiVOx/KeAC0n+nG21YU+wpZww8gkfHh1/sa2CME
-CWYCgOnmiTHcj83UaTqEXtmv
------END PRIVATE KEY-----
diff --git a/demo/shibboleth/midpoint_server/container_files/mp-home/config.xml b/demo/shibboleth/midpoint_server/container_files/mp-home/config.xml
deleted file mode 100644
index 0fc3410..0000000
--- a/demo/shibboleth/midpoint_server/container_files/mp-home/config.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-
-
-
-
-
-
-
- ${midpoint.home}/import
-
-
- native
- jdbc:postgresql://localhost:5432/midpoint
- midpoint
- password
-
-
-
- com.evolveum.midpoint.audit.impl.LoggerAuditServiceFactory
-
-
- com.evolveum.midpoint.repo.sqale.audit.SqaleAuditServiceFactory
-
-
-
- true
- ${midpoint.home}/icf-connectors
-
-
- ${midpoint.home}/keystore.jceks
- changeit
- default
-
-
-
diff --git a/demo/shibboleth/tests/main.bats b/demo/shibboleth/tests/main.bats
deleted file mode 100755
index e48527e..0000000
--- a/demo/shibboleth/tests/main.bats
+++ /dev/null
@@ -1,70 +0,0 @@
-#!/usr/bin/env bats
-
-load ../../../common
-load ../../../library
-
-@test "000 Cleanup before running the tests" {
- (cd ../simple ; docker-compose down -v)
- (cd ../grouper ; docker-compose down -v)
- run docker-compose down -v
-}
-
-@test "010 Initialize and start containers" {
- docker-compose -f docker-compose-tests.yml build --pull midpoint_data directory idp
- # Sometimes the tier/midpoint:xyz is not yet in the repository, causing issues with --pull
- docker-compose -f docker-compose-tests.yml build midpoint_server
- docker-compose -f docker-compose-tests.yml up -d
-}
-
-@test "012 Wait for Shibboleth to start up" {
- wait_for_shibboleth_idp_start shibboleth_idp_1
-}
-
-@test "014 Wait for midPoint to start up" {
- wait_for_midpoint_start shibboleth_midpoint_server_1
-}
-
-@test "030 Check health (midPoint)" {
-# docker logs shibboleth_midpoint_server_1
- check_health
-}
-
-@test "035 Check health (Shibboleth IdP)" {
- check_health_shibboleth_idp
-}
-
-@test "040 Check internal SAML redirection (/midpoint/auth/saml-internal)" {
- curl -k --write-out %{redirect_url} --silent --output /dev/null https://localhost:8443/midpoint/auth/saml-internal/ | grep 'https:\/\/localhost:8443\/midpoint\/auth\/saml-internal\/mySamlSso\/authenticate\/midpointdemo-shibboleth'
-}
-
-@test "041 Check internal SAML redirection action (midpoint/..../discovery?...)" {
- TMPFILE=$(mktemp /tmp/samlForm.XXXXXX)
- curl -k https:\/\/localhost:8443\/midpoint\/auth\/saml-internal\/mySamlSso\/authenticate\/midpointdemo-shibboleth >$TMPFILE || (rm $TMPFILE ; return 1)
- if (grep -q "
- bash -c "
- chmod 777 /opt/mp-pw/ ;
- touch /opt/mp-pw/db_init_in_progress ;
- echo -e '#!/bin/sh\ntouch /opt/mp-pw/db_init' >/opt/db-init/000-start.sh ;
- echo -e '#!/bin/sh\necho DB structure init process has finished...\nrm -f /opt/mp-pw/db_init_in_progress /opt/mp-pw/db_init' > /opt/db-init/999-finish.sh ;
- /opt/midpoint/bin/midpoint.sh init-native
- "
+ midpoint_data:
+ image: postgres:16-alpine
environment:
- - MP_INIT_CFG=/opt/mp-home
- - MP_INIT_DB_CONCAT=/opt/db-init/init.sql
- - MP_DB_PW=/opt/mp-pw/dbpassword
- - MP_PW_DEF=/opt/mp-pw/keystorepw
+ - POSTGRES_PASSWORD=db.secret.pw.007
+ - POSTGRES_USER=midpoint
+ - POSTGRES_INITDB_ARGS=--lc-collate=en_US.utf8 --lc-ctype=en_US.utf8
+ networks:
+ - net
volumes:
- - db_init:/opt/db-init
- - mp_pw:/opt/mp-pw
- - midpoint_home:/opt/mp-home
+ - midpoint_data:/var/lib/postgresql/data
- midpoint_data:
- image: postgres:13-alpine
+ data_init:
+ image: evolveum/midpoint:${MP_VER:-4.8.3}-rockylinux
command: >
- bash -c "
- rm -f /var/lib/postgresql/data/postmaster.pid ;
- while [ ! -s /opt/mp-pw/dbpassword -o -e /opt/mp-pw/init_in_progress ] ; do
- echo 'Waiting to the end of the init process...';
- sleep 1;
- done ;
- {
- sleep 2 ;
- if [ ! -e /opt/mp-pw/db_init -a -e /opt/mp-pw/db_init_in_progress ] ;
- then echo 'DB init did not start...' ;
- rm -f /opt/mp-pw/db_ini*;
- echo 'The lock files has been removed...';
- fi ;
- } &
- docker-entrypoint.sh postgres
- "
- user: "70:70"
+ bash -c "
+ cd /opt/midpoint ;
+ bin/midpoint.sh init-native ;
+ echo ' - - - - - - ' ;
+ bin/ninja.sh -B info >/dev/null 2>/tmp/ninja.log ;
+ grep -q \"ERROR\" /tmp/ninja.log && (
+ bin/ninja.sh run-sql --create --mode REPOSITORY ;
+ bin/ninja.sh run-sql --create --mode AUDIT
+ ) ||
+ echo -e '\\n Repository init is not needed...' ;
+ "
depends_on:
- - data_init
+ - midpoint_data
environment:
- - POSTGRES_PASSWORD_FILE=/opt/mp-pw/dbpassword
- - POSTGRES_USER=midpoint
- - POSTGRES_INITDB_ARGS=--lc-collate=en_US.utf8 --lc-ctype=en_US.utf8
- ports:
- - 5432:5432
+ - MP_SET_midpoint_repository_jdbcUsername=midpoint
+ - MP_SET_midpoint_repository_jdbcPassword=db.secret.pw.007
+ - MP_SET_midpoint_repository_jdbcUrl=jdbc:postgresql://midpoint_data:5432/midpoint
+ - MP_SET_midpoint_repository_database=postgresql
+ - MP_INIT_CFG=/opt/midpoint/var
networks:
- net
volumes:
- - midpoint_data:/var/lib/postgresql/data
- - db_init:/docker-entrypoint-initdb.d/
- - mp_pw:/opt/mp-pw
+ - midpoint_home:/opt/midpoint/var
midpoint_server:
- image: i2incommon/midpoint:${tag:-4.8.2}
+ image: evolveum/midpoint:${MP_VER:-4.8.3}-rockylinux
+ container_name: midpoint_server
+ hostname: midpoint-container
depends_on:
- - data_init
- - midpoint_data
+ data_init:
+ condition: service_completed_successfully
+ midpoint_data:
+ condition: service_started
+ command: [ "/opt/midpoint/bin/midpoint.sh", "container" ]
ports:
- - 8443:443
+ - 8080:8080
environment:
- - ENV
- - USERTOKEN
- - MP_SET_midpoint_administrator_initialPassword=Password1
- MP_SET_midpoint_repository_jdbcUsername=midpoint
- - MP_SET_midpoint_repository_jdbcPassword_FILE=/opt/mp-pw/dbpassword
+ - MP_SET_midpoint_repository_jdbcPassword=db.secret.pw.007
- MP_SET_midpoint_repository_jdbcUrl=jdbc:postgresql://midpoint_data:5432/midpoint
- - MP_SET_midpoint_keystore_keyStorePassword_FILE=/opt/mp-pw/keystorepw
- - MP_SET_server_tomcat_ajp_enabled=true
- - MP_SET_server_tomcat_ajp_port=9090
- - MP_SET_server_tomcat_ajp_secret=s3cr3t
- - MP_SET_logging_path=/tmp/logtomcat
+ - MP_SET_midpoint_repository_database=postgresql
+ - MP_SET_midpoint_administrator_initialPassword=Test5ecr3t
- MP_UNSET_midpoint_repository_hibernateHbm2ddl=1
- MP_NO_ENV_COMPAT=1
- - MP_MEM_MAX
- - MP_MEM_INIT
- - MP_JAVA_OPTS
- - TIER_BEACON_OPT_OUT
- - TIMEZONE
+ - MP_ENTRY_POINT=/opt/midpoint-dirs-docker-entrypoint
networks:
- net:
- aliases:
- - midpoint-server
- secrets:
- - mp_host-key.pem
+ - net
volumes:
- midpoint_home:/opt/midpoint/var
- - type: bind
- source: ./configs-and-secrets/midpoint/httpd/host-cert.pem
- target: /etc/pki/tls/certs/host-cert.pem
- - type: bind
- source: ./configs-and-secrets/midpoint/httpd/host-cert.pem
- target: /etc/pki/tls/certs/cachain.pem
- - mp_pw:/opt/mp-pw
networks:
net:
driver: bridge
-secrets:
- mp_host-key.pem:
- file: ./configs-and-secrets/midpoint/httpd/host-key.pem
-
volumes:
- db_init:
- mp_pw:
midpoint_data:
midpoint_home:
diff --git a/demo/simple/tests/main.bats b/demo/simple/tests/main.bats
deleted file mode 100755
index 2445dd5..0000000
--- a/demo/simple/tests/main.bats
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/usr/bin/env bats
-
-load ../../../common
-load ../../../library
-
-@test "000 Cleanup before running the tests" {
- (cd ../grouper ; docker-compose down -v)
- (cd ../shibboleth ; docker-compose down -v)
- docker-compose down -v
-}
-
-@test "010 Initialize and start midPoint" {
- docker-compose up -d
- wait_for_midpoint_start simple_midpoint_server_1
-}
-
-@test "010 Check health" {
- check_health
-}
-
-@test "100 Get 'administrator'" {
- check_health
- get_and_check_object users 00000000-0000-0000-0000-000000000002 administrator
-}
-
-@test "110 And and get 'test110'" {
- check_health
- echo "test110" >/tmp/test110.xml
- add_object users /tmp/test110.xml
- rm /tmp/test110.xml
- search_and_check_object users test110
-}
-
-@test "300 Check repository preserved between restarts" {
- check_health
-
- echo "Creating user test300 and checking its existence"
- echo "test300" >/tmp/test300.xml
- add_object users /tmp/test300.xml
- rm /tmp/test300.xml
- search_and_check_object users test300
-
- echo "Bringing the containers down"
- docker-compose down
-
- echo "Re-creating the containers"
- docker-compose up --no-start
- docker-compose start
- wait_for_midpoint_start simple_midpoint_server_1
-
- echo "Searching for the user again"
- search_and_check_object users test300
-}
-
-@test "999 Clean up" {
- docker-compose down -v
-}
diff --git a/download-midpoint.sh b/download-midpoint.sh
deleted file mode 100755
index 7ebc712..0000000
--- a/download-midpoint.sh
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/bin/bash
-
-DIR=`dirname "$0"`
-source $DIR/common.bash
-if [[ -n "$1" ]]; then
- MP_VERSION=$1
-else
- if [[ $tag == "latest" ]]; then
- # Normally we use last released midPoint version number here, e.g. "4.1".
- # But if we need to incorporate interim changes to I2 distribution during
- # midPoint development cycle, we can specify concrete file from "midpoint-tier"
- # download directory by using its name (like "latest-stable").
- MP_VERSION="4.8.2"
- else
- MP_VERSION=$tag
- fi
-fi
-
-if [[ $MP_VERSION =~ ^[0-9]+(\.[0-9]+)+$ ]]; then
- URL_BASE="https://download.evolveum.com/midpoint/$MP_VERSION/"
-else
- URL_BASE="https://download.evolveum.com/midpoint-tier/"
-fi
-
-echo "Downloading midPoint $MP_VERSION from $URL_BASE"
-echo "-----------------------------------------"
-curl --output $DIR/midpoint-dist.tar.gz "$URL_BASE/midpoint-$MP_VERSION-dist.tar.gz"
-echo "-----------------------------------------"
-echo "Checking the download..."
-if tar -tf $DIR/midpoint-dist.tar.gz >/dev/null; then
- echo "OK"
- exit 0
-else
- echo "The file was not downloaded correctly"
- exit 1
-fi
diff --git a/library.bash b/library.bash
deleted file mode 100644
index 7254b64..0000000
--- a/library.bash
+++ /dev/null
@@ -1,596 +0,0 @@
-#!/bin/bash
-
-#
-# Contains common functions usable for midPoint system tests
-#
-
-MP_USERPWD='administrator:Password1'
-
-# do not use from outside (ugly signature)
-function generic_wait_for_log () {
- CONTAINER_NAME=$1
- MESSAGE="$2"
- WAITING_FOR="$3"
- FAILURE="$4"
- ADDITIONAL_CONTAINER_NAME=$5
- ATTEMPT=0
- MAX_ATTEMPTS=30
- DELAY=10
-
- until [[ $ATTEMPT = $MAX_ATTEMPTS ]]; do
- ATTEMPT=$((ATTEMPT+1))
- docker ps
- ( docker logs $CONTAINER_NAME 2>&1 | grep -F "$MESSAGE" ) && return 0
- echo "Waiting $DELAY seconds for $WAITING_FOR (attempt $ATTEMPT) ..."
- sleep $DELAY
- done
-
- echo "$FAILURE" in $(( $MAX_ATTEMPTS * $DELAY )) seconds in $CONTAINER_NAME
- echo "========== Container log =========="
- docker logs $CONTAINER_NAME 2>&1
- echo "========== End of the container log =========="
- if [ -n "$ADDITIONAL_CONTAINER_NAME" ]; then
- echo "========== Container log ($ADDITIONAL_CONTAINER_NAME) =========="
- docker logs $ADDITIONAL_CONTAINER_NAME 2>&1
- echo "========== End of the container log ($DATABASE_CONTAINER_NAME) =========="
- fi
- return 1
-}
-
-
-function wait_for_log_message () {
- generic_wait_for_log $1 "$2" "log message" "log message has not appeared"
-}
-
-# Waits until midPoint starts
-function wait_for_midpoint_start () {
- generic_wait_for_log $1 "INFO (com.evolveum.midpoint.web.boot.MidPointSpringApplication): Started MidPointSpringApplication in" "midPoint to start" "midPoint did not start" $2
-}
-
-# Waits until Shibboleth IDP starts
-function wait_for_shibboleth_idp_start_old () {
- generic_wait_for_log $1 "INFO:oejs.Server:main: Started" "shibboleth idp to start" "shibboleth idp did not start" $2
-}
-
-# Waits until Shibboleth IDP starts
-function wait_for_shibboleth_idp_start () {
- generic_wait_for_log $1 "[main] INFO org.apache.catalina.startup.Catalina- Server startup in" "shibboleth idp to start" "shibboleth idp did not start" $2
-}
-
-# Waits until Grouper UI starts
-function wait_for_grouper_ui_start () {
- generic_wait_for_log $1 "INFO org.apache.catalina.startup.Catalina- Server startup in" "grouper ui to start" "grouper ui did not start" $2
-}
-
-# Checks the health of midPoint server
-function check_health () {
- echo Checking health...
- (set -o pipefail ; curl -k -f https://localhost:8443/midpoint/actuator/health | tr -d '[:space:]' | grep -q "\"status\":\"UP\"")
- status=$?
- if [ $status -ne 0 ]; then
- echo Error: $status
- docker ps
- return 1
- else
- echo OK
- return 0
- fi
-}
-
-# Checks the health of Shibboleth IDP server
-function check_health_shibboleth_idp_old () {
- echo Checking health of shibboleth idp...
- status="$(curl -k --write-out %{http_code} --silent --output /dev/null https://localhost:4443/idp/)"
- if [ $status -ne 200 ]; then
- echo Error: Http code of response is $status
- docker ps
- return 1
- else
- echo OK
- return 0
- fi
-}
-
-function check_health_shibboleth_idp () {
- echo Checking health of shibboleth idp...
- status="$(curl -k --write-out %{http_code} --silent --output /dev/null https://localhost/idp/)"
- if [ $status -ne 200 ]; then
- echo Error: Http code of response is $status
- docker ps
- return 1
- else
- echo OK
- return 0
- fi
-}
-
-# Result is in OUTFILE
-function get_object () {
- local TYPE=$1
- local OID=$2
- OUTFILE=$(mktemp /tmp/get.XXXXXX)
- echo out file is $OUTFILE
- #FIXME workaround for MID-6721 bug
- if [ "$TYPE" == "tasks" ]; then
- PARAM='?include=result'
- fi
-
- curl -k --user $MP_USERPWD -H "Content-Type: application/xml" -X GET "https://localhost:8443/midpoint/ws/rest/$TYPE/$OID$PARAM" >$OUTFILE || (rm $OUTFILE ; return 1)
- return 0
-}
-
-# Retrieves XML object and checks if the name matches
-# Object is deleted before return
-function get_and_check_object () {
- local TYPE=$1
- local OID=$2
- local NAME=$3
- local TMPFILE=$(mktemp /tmp/get.XXXXXX)
- echo tmp file is $TMPFILE
- curl -k --user $MP_USERPWD -H "Content-Type: application/xml" -X GET "https://localhost:8443/midpoint/ws/rest/$TYPE/$OID" >$TMPFILE || (rm $TMPFILE ; return 1)
- if (grep -q "$NAME" <$TMPFILE); then
- echo "Object $TYPE/$OID '$NAME' is OK"
- rm $TMPFILE
- return 0
- else
- echo "Object $TYPE/$OID '$NAME' was not found or not retrieved correctly:"
- cat $TMPFILE
- rm $TMPFILE
- return 1
- fi
-}
-
-# Adds object from a given file
-function add_object () {
- local TYPE=$1
- local FILE=$2
- TMPFILE=$(mktemp /tmp/addobject.XXXXXX)
- echo "Adding to $TYPE from $FILE..."
-
- curl -k -sD - --silent --write-out "%{http_code}" --user $MP_USERPWD -H "Content-Type: application/xml" -X POST "https://localhost:8443/midpoint/ws/rest/$TYPE" -d @$FILE >$TMPFILE
- local HTTP_CODE=$(sed '$!d' $TMPFILE)
- sed -i '$ d' $TMPFILE
-
- if [ "$HTTP_CODE" -eq 201 ] || [ "$HTTP_CODE" -eq 202 ]; then
-
- OID=$(grep -oP "Location: \K.*" $TMPFILE | awk -F "$TYPE/" '{print $2}') || (echo "Couldn't extract oid from file:" ; cat $TMPFILE ; rm $TMPFILE; return 1)
-
- echo "OID of created object: $OID"
- rm $TMPFILE
- return 0
- else
- echo "Error code: $HTTP_CODE"
- if [ "$HTTP_CODE" -ge 500 ]; then
- echo "Error message: Internal server error. Unexpected error occurred, if necessary please contact system administrator."
- else
- echo $(sed '1,/^\s*$/d' $TMPFILE) >$TMPFILE
- local ERROR_MESSAGE=$(xmllint --xpath "/*/*[local-name()='message']/text()" $TMPFILE) || (echo "Couldn't extract error message from file:" ; cat $TMPFILE ; rm $TMPFILE; return 1)
- echo "Error message: $ERROR_MESSAGE"
- fi
- rm $TMPFILE
- return 1
- fi
-}
-
-# parameter $2 (CONTAINER) is just for diagnostics: it is the container whose logs we want to dump on error (might be omitted)
-function execute_bulk_action () {
- local FILE=$1
- local CONTAINER=$2
- echo "Executing bulk action from $FILE..."
- TMPFILE=$(mktemp /tmp/execbulkaction.XXXXXX)
-
- (curl -k --silent --write-out "%{http_code}" --user $MP_USERPWD -H "Content-Type: application/xml" -X POST "https://localhost:8443/midpoint/ws/rest/rpc/executeScript" -d @$FILE >$TMPFILE) || (echo "Midpoint logs: " ; ([[ -n "$CONTAINER" ]] && docker logs $CONTAINER ) ; return 1)
- local HTTP_CODE=$(sed '$!d' $TMPFILE)
- sed -i '$ d' $TMPFILE
-
- if [ "$HTTP_CODE" -eq 200 ]; then
-
- local STATUS=$(xmllint --xpath "/*/*/*[local-name()='status']/text()" $TMPFILE) || (echo "Couldn't extract status from file:" ; cat $TMPFILE ; rm $TMPFILE; return 1)
- if [ $STATUS = "success" ]; then
- local CONSOLE_OUTPUT=$(xmllint --xpath "/*/*/*[local-name()='consoleOutput']/text()" $TMPFILE) || (echo "Couldn't extract console output from file:" ; cat $TMPFILE ; rm $TMPFILE; return 1)
- echo "Console output: $CONSOLE_OUTPUT"
- rm $TMPFILE
- return 0
- else
- echo "Bulk action status is not OK: $STATUS"
- local CONSOLE_OUTPUT=$(xmllint --xpath "/*/*/*[local-name()='consoleOutput']/text()" $TMPFILE) || (echo "Couldn't extract console output from file:" ; cat $TMPFILE ; rm $TMPFILE; return 1)
- echo "Console output: $CONSOLE_OUTPUT"
- rm $TMPFILE
- return 1
- fi
-
- else
- echo "Error code: $HTTP_CODE"
- if [[ $HTTP_CODE -ge 500 ]]; then
- echo "Error message: Internal server error. Unexpected error occurred, if necessary please contact system administrator."
- else
- local ERROR_MESSAGE=$(xmllint --xpath "/*/*[local-name()='message']/text()" $TMPFILE) || (echo "Couldn't extract error message from file:" ; cat $TMPFILE ; rm $TMPFILE; return 1)
- echo "Error message: $ERROR_MESSAGE"
- fi
- rm $TMPFILE
- return 1
- fi
-}
-
-# parameter $2 (CONTAINER) is just for diagnostics: it is the container whose logs we want to dump on error (might be omitted)
-function run_task_now () {
- local OID=$1
- local CONTAINER=$2
- echo "Running task $1 now..."
- TMPFILE=$(mktemp /tmp/runtasknow.XXXXXX)
-
- (curl -k --silent --write-out "%{http_code}" --user $MP_USERPWD -H "Content-Type: application/xml" -X POST "https://localhost:8443/midpoint/ws/rest/tasks/$OID/run" >$TMPFILE) || (echo "Midpoint logs: " ; ([[ -n "$CONTAINER" ]] && docker logs $CONTAINER ) ; return 1)
- local HTTP_CODE=$(sed '$!d' $TMPFILE)
- sed -i '$ d' $TMPFILE
-
- if [[ $HTTP_CODE -ge 200 && $HTTP_CODE -lt 300 ]]; then
- rm $TMPFILE
- return 0
- else
- echo "Error code: $HTTP_CODE"
- cat $TMPFILE
- rm $TMPFILE
- return 1
- fi
-}
-
-# parameter $2 (CONTAINER) is just for diagnostics: it is the container whose logs we want to dump on error (might be omitted)
-function suspend_task () {
- local OID=$1
- local CONTAINER=$2
- echo "Suspending task $OID..."
- TMPFILE=$(mktemp /tmp/suspendtask.XXXXXX)
-
- (curl -k --silent --write-out "%{http_code}" --user $MP_USERPWD -H "Content-Type: application/xml" -X POST "https://localhost:8443/midpoint/ws/rest/tasks/$OID/suspend" >$TMPFILE) || (echo "Midpoint logs: " ; ([[ -n "$CONTAINER" ]] && docker logs $CONTAINER ) ; return 1)
- local HTTP_CODE=$(sed '$!d' $TMPFILE)
- sed -i '$ d' $TMPFILE
-
- if [[ $HTTP_CODE -ge 200 && $HTTP_CODE -lt 300 ]]; then
- rm $TMPFILE
- return 0
- else
- echo "Error code: $HTTP_CODE"
- cat $TMPFILE
- rm $TMPFILE
- return 1
- fi
-}
-
-function delete_object_by_name () {
- local TYPE=$1
- local NAME=$2
- search_objects_by_name users $NAME
- local OID=$(xmllint --xpath "/*/*[local-name()='object']/@oid" $SEARCH_RESULT_FILE | awk -F"\"" '{print $2}' ) || (echo "Couldn't extract oid from file:" ; cat $SEARCH_RESULT_FILE ; rm $SEARCH_RESULT_FILE; return 1)
- delete_object $TYPE $OID
-}
-
-function delete_object () {
- local TYPE=$1
- local OID=$2
- echo "Deleting object with type $TYPE and oid $OID..."
- TMPFILE=$(mktemp /tmp/delete.XXXXXX)
-
- curl -k --silent --write-out "%{http_code}" --user $MP_USERPWD -H "Content-Type: application/xml" -X DELETE "https://localhost:8443/midpoint/ws/rest/$TYPE/$OID" >$TMPFILE
- local HTTP_CODE=$(sed '$!d' $TMPFILE)
- sed -i '$ d' $TMPFILE
-
- if [ "$HTTP_CODE" -eq 204 ]; then
- echo "Object with type $TYPE and oid $OID was deleted"
- rm $TMPFILE
- return 0
- else
- echo "Error code: $HTTP_CODE"
- if [[ $HTTP_CODE -ge 500 ]]; then
- echo "Error message: Internal server error. Unexpected error occurred, if necessary please contact system administrator."
- else
- local ERROR_MESSAGE=$(xmllint --xpath "/*/*[local-name()='message']/text()" $TMPFILE) || (echo "Couldn't extract error message from file:" ; cat $TMPFILE ; rm $TMPFILE; return 1)
- echo "Error message: $ERROR_MESSAGE"
- fi
- #rm $TMPFILE
- return 1
- fi
-}
-
-# Tries to find an object with a given name
-# Results of the search are in the $SEARCH_RESULT_FILE
-# TODO check if the result is valid (i.e. not an error) - return 1 if invalid, otherwise return 0 ("no objects" is considered OK here)
-function search_objects_by_name () {
- local TYPE=$1
- local NAME="$2"
- TMPFILE=$(mktemp /tmp/search.XXXXXX)
-
- curl -k --write-out %{http_code} --user $MP_USERPWD -H "Content-Type: application/xml" -X POST "https://localhost:8443/midpoint/ws/rest/$TYPE/search" -d @- << EOF >$TMPFILE || (rm $TMPFILE ; return 1)
-
-
-
- name
- $NAME
-
-
-
-EOF
- local HTTP_CODE=$(sed '$!d' <<<"$(cat $TMPFILE)")
- sed -i '$ d' $TMPFILE
- # cat $TMPFILE
-
- if [ "$HTTP_CODE" -eq 200 ]; then
- SEARCH_RESULT_FILE=$TMPFILE
- return 0
- else
- echo "Error code: $HTTP_CODE"
- if [[ $HTTP_CODE -ge 500 ]]; then
- echo "Error message: Internal server error. Unexpected error occurred, if necessary please contact system administrator."
- else
- local ERROR_MESSAGE
- ERROR_MESSAGE=$(xmllint --xpath "/*/*/*/*[local-name()='message']/text()" $TMPFILE) || (echo "Couldn't extract error message from file:" ; cat $TMPFILE ; rm $TMPFILE; return 1)
- echo "Error message: $ERROR_MESSAGE"
- fi
- rm $SEARCH_RESULT_FILE
- return 1
- fi
-}
-
-# Searches for object with a given name and verifies it was found
-function search_and_check_object () {
- local TYPE=$1
- local NAME="$2"
- search_objects_by_name $TYPE "$NAME" || return 1
- if (grep -q "$NAME" <$SEARCH_RESULT_FILE); then
- echo "Object $TYPE/'$NAME' is OK"
- rm $SEARCH_RESULT_FILE
- return 0
- else
- echo "Object $TYPE/'$NAME' was not found or not retrieved correctly:"
- cat $SEARCH_RESULT_FILE
- rm $SEARCH_RESULT_FILE
- return 1
- fi
-}
-
-# Tests a resource
-function test_resource () {
- local OID=$1
- local TMPFILE=$(mktemp /tmp/test.resource.XXXXXX)
-
- curl -k --silent --user $MP_USERPWD -H "Content-Type: application/xml" -X POST "https://localhost:8443/midpoint/ws/rest/resources/$OID/test" >$TMPFILE || (rm $TMPFILE ; return 1)
- if [[ $(xmllint --xpath "/*/*[local-name()='status']/text()" $TMPFILE) == "success" ]]; then
- echo "Resource $OID test succeeded"
- rm $TMPFILE
- return 0
- else
- echo "Resource $OID test failed"
- cat $TMPFILE
- rm $TMPFILE
- return 1
- fi
-}
-
-function recompute () {
- local TYPE=$1
- local OID=$2
- local TMPFILE=$(mktemp /tmp/recompute.XXXXXX)
-
- curl -k --silent --write-out "%{http_code}" --user $MP_USERPWD -H "Content-Type: application/xml" -X POST "https://localhost:8443/midpoint/ws/rest/$TYPE/$OID" -d @- << EOF >$TMPFILE || (rm $TMPFILE ; return 1)
-
-EOF
- local HTTP_CODE=$(sed '$!d' $TMPFILE)
- sed -i '$ d' $TMPFILE
- if [[ $HTTP_CODE -ge 200 && $HTTP_CODE -lt 300 ]]; then
- echo "Object $TYPE/$OID recomputation succeeded"
- rm $TMPFILE
- return 0
- else
- echo "Object $TYPE/$OID recomputation failed: $HTTP_CODE"
- cat $TMPFILE
- rm $TMPFILE
- return 1
- fi
-}
-
-function assert_task_success () {
- local OID=$1
- get_object tasks $OID
- TASK_STATUS=$(xmllint --xpath "/*/*[local-name()='resultStatus']/text()" $OUTFILE) || (echo "Couldn't extract task status from task $OID" ; cat $OUTFILE ; rm $OUTFILE ; return 1)
- if [[ $TASK_STATUS = "success" ]]; then
- echo "Task $OID status is OK"
- rm $OUTFILE
- return 0
- else
- echo "Task $OID status is not OK: $TASK_STATUS"
- cat $OUTFILE
- rm $OUTFILE
- return 1
- fi
-}
-
-function wait_for_task_completion () {
- local OID=$1
- local ATTEMPT=0
- local MAX_ATTEMPTS=$2
- local DELAY=$3
-
- until [[ $ATTEMPT = $MAX_ATTEMPTS ]]; do
- ATTEMPT=$((ATTEMPT+1))
- echo "Waiting $DELAY seconds for task with oid $OID to finish (attempt $ATTEMPT) ..."
- sleep $DELAY
- get_object tasks $OID
- TASK_EXECUTION_STATUS=$(xmllint --xpath "/*/*[local-name()='executionState']/text()" $OUTFILE) || (echo "Couldn't extract task status from task $OID" ; cat $OUTFILE ; rm $OUTFILE ; return 1)
- if [[ $TASK_EXECUTION_STATUS = "suspended" ]] || [[ $TASK_EXECUTION_STATUS = "closed" ]]; then
- echo "Task $OID is finished"
- rm $OUTFILE
- return 0
- fi
- done
- rm $OUTFILE
- echo Task with $OID did not finish in $(( $MAX_ATTEMPTS * $DELAY )) seconds
- return 1
-}
-
-function get_task_execution_status () {
- local NAME=$1
-
- search_objects_by_name tasks "$NAME"
- TASK_EXECUTION_STATUS=$(xmllint --xpath "/*/*/*[local-name()='executionStatus']/text()" $SEARCH_RESULT_FILE) || (echo "Couldn't extract task status from task $NAME" ; cat $SEARCH_RESULT_FILE ; rm $SEARCH_RESULT_FILE ; return 1)
- echo "Task execution status: $TASK_EXECUTION_STATUS"
- return 0
-}
-
-function search_ldap_object_by_filter () {
- local BASE_CONTEXT_FOR_SEARCH=$1
- local FILTER="$2"
- local LDAP_CONTAINER=$3
- TMPFILE=$(mktemp /tmp/ldapsearch.XXXXXX)
-
- docker exec $LDAP_CONTAINER ldapsearch -h localhost -p 389 -D "cn=Directory Manager" -w password -b "$BASE_CONTEXT_FOR_SEARCH" "($FILTER)" >$TMPFILE || (echo "Couldn't search $FILTER" ;rm $TMPFILE ; return 1)
- LDAPSEARCH_RESULT_FILE=$TMPFILE
- return 0
-}
-
-function get_ldap_user () {
- local USER_UID="$1"
- local LDAP_CONTAINER=$2
- search_ldap_object_by_filter "ou=people,dc=internet2,dc=edu" "uid=$USER_UID" $LDAP_CONTAINER || return 1
- if ! grep -F "uid: $USER_UID" $LDAPSEARCH_RESULT_FILE; then
- echo "Couldn't find user '$USER_UID'"
- rm $LDAPSEARCH_RESULT_FILE
- return 1
- else
- return 0
- fi
-}
-
-function assert_ldap_user_has_value () {
- local USER_UID="$1"
- local TYPE=$2 # Entitlement or Affiliation
- local VALUE="$3"
- local LDAP_CONTAINER=$4
- get_ldap_user "$USER_UID" $LDAP_CONTAINER || return 1
- if ! grep -F "eduPerson$TYPE: $VALUE" $LDAPSEARCH_RESULT_FILE; then
- echo "'$USER_UID' has no $TYPE of '$VALUE'"
- cat $LDAPSEARCH_RESULT_FILE
- rm $LDAPSEARCH_RESULT_FILE
- return 1
- else
- rm $LDAPSEARCH_RESULT_FILE
- return 0
- fi
-}
-
-function assert_ldap_user_has_no_value () {
- local USER_UID="$1"
- local TYPE=$2 # Entitlement or Affiliation
- local VALUE="$3"
- local LDAP_CONTAINER=$4
- get_ldap_user "$USER_UID" $LDAP_CONTAINER || return 1
- if grep -F "eduPerson$TYPE: $VALUE" $LDAPSEARCH_RESULT_FILE; then
- echo "'$USER_UID' has an $TYPE of '$VALUE' although it should not have one"
- cat $LDAPSEARCH_RESULT_FILE
- rm $LDAPSEARCH_RESULT_FILE
- return 1
- else
- rm $LDAPSEARCH_RESULT_FILE
- return 0
- fi
-}
-
-function check_ldap_account_by_user_name () {
- local NAME="$1"
- local LDAP_CONTAINER=$2
- search_ldap_object_by_filter "ou=people,dc=internet2,dc=edu" "uid=$NAME" $LDAP_CONTAINER
- search_objects_by_name users $NAME
-
- local MP_FULL_NAME=$(xmllint --xpath "/*/*/*[local-name()='fullName']/text()" $SEARCH_RESULT_FILE) || (echo "Couldn't extract user fullName from file:" ; cat $SEARCH_RESULT_FILE ; rm $SEARCH_RESULT_FILE ; rm $LDAPSEARCH_RESULT_FILE ; return 1)
- local MP_GIVEN_NAME=$(xmllint --xpath "/*/*/*[local-name()='givenName']/text()" $SEARCH_RESULT_FILE) || (echo "Couldn't extract user givenName from file:" ; cat $SEARCH_RESULT_FILE ; rm $SEARCH_RESULT_FILE ; rm $LDAPSEARCH_RESULT_FILE ; return 1)
- local MP_FAMILY_NAME=$(xmllint --xpath "/*/*/*[local-name()='familyName']/text()" $SEARCH_RESULT_FILE) || (echo "Couldn't extract user familyName from file:" ; cat $SEARCH_RESULT_FILE ; rm $SEARCH_RESULT_FILE ; rm $LDAPSEARCH_RESULT_FILE ; return 1)
-
- local LDAP_CN=$(grep -oP "cn: \K.*" $LDAPSEARCH_RESULT_FILE) || (echo "Couldn't extract user cn from file:" ; cat $LDAPSEARCH_RESULT_FILE ; rm $SEARCH_RESULT_FILE ; rm $LDAPSEARCH_RESULT_FILE ; return 1)
- local LDAP_GIVEN_NAME=$(grep -oP "givenName: \K.*" $LDAPSEARCH_RESULT_FILE) || (echo "Couldn't extract user givenName from file:" ; cat $LDAPSEARCH_RESULT_FILE ; rm $SEARCH_RESULT_FILE ; rm $LDAPSEARCH_RESULT_FILE ; return 1)
- local LDAP_SN=$(grep -oP "sn: \K.*" $LDAPSEARCH_RESULT_FILE) || (echo "Couldn't extract user sn from file:" ; cat $LDAPSEARCH_RESULT_FILE ; rm $SEARCH_RESULT_FILE ; rm $LDAPSEARCH_RESULT_FILE ; return 1)
-
- rm $SEARCH_RESULT_FILE
- rm $LDAPSEARCH_RESULT_FILE
-
- if [[ $MP_FULL_NAME = $LDAP_CN ]] && [[ $MP_GIVEN_NAME = $LDAP_GIVEN_NAME ]] && [[ $MP_FAMILY_NAME = $LDAP_SN ]]; then
- return 0
- fi
-
- echo "User in Midpoint and LDAP Account with uid $NAME are not same"
- return 1
-}
-
-function check_ldap_courses_by_name () {
- local NAME="$1"
- local LDAP_CONTAINER=$2
- search_objects_by_name orgs $NAME
-
- local MP_ORG_IDENTIFIER=$(xmllint --xpath "/*/*/*[local-name()='identifier']/text()" $SEARCH_RESULT_FILE) || (echo "Couldn't extract user identifier from file:" ; cat $SEARCH_RESULT_FILE ; rm $SEARCH_RESULT_FILE ; return 1)
-
- search_ldap_object_by_filter "ou=courses,ou=groups,dc=internet2,dc=edu" "cn=$MP_ORG_IDENTIFIER" $LDAP_CONTAINER
-
- local LDAP_CN=$(grep -oP "cn: \K.*" $LDAPSEARCH_RESULT_FILE) || (echo "Couldn't extract user cn from file:" ; cat $LDAPSEARCH_RESULT_FILE ; rm $SEARCH_RESULT_FILE ; rm $LDAPSEARCH_RESULT_FILE ; return 1)
-
- rm $SEARCH_RESULT_FILE
- rm $LDAPSEARCH_RESULT_FILE
- if [[ $MP_ORG_IDENTIFIER = $LDAP_CN ]]; then
- return 0
- fi
-
- echo "Orgs $NAME in Midpoint and LDAP Group(Course) with cn $MP_ORG_IDENTIFIER are not same"
- return 1
-}
-
-
-function check_of_ldap_membership () {
- local NAME_OF_USER="$1"
- local BASE_CONTEXT_FOR_GROUP="$2"
- local NAME_OF_GROUP="$3"
- local LDAP_CONTAINER=$4
- search_ldap_object_by_filter "ou=people,dc=internet2,dc=edu" "uid=$NAME_OF_USER" $LDAP_CONTAINER
-
- local LDAP_ACCOUNT_DN=$(grep -oP "dn: \K.*" $LDAPSEARCH_RESULT_FILE) || (echo "Couldn't extract user dn from file:" ; cat $LDAPSEARCH_RESULT_FILE ; rm $LDAPSEARCH_RESULT_FILE ; return 1)
-
- search_ldap_object_by_filter "$BASE_CONTEXT_FOR_GROUP" "cn=$NAME_OF_GROUP" $LDAP_CONTAINER
-
- local LDAP_MEMBERS_DNS=$(grep -oP "uniqueMember: \K.*" $LDAPSEARCH_RESULT_FILE) || (echo "Couldn't extract user uniqueMember from file:" ; cat $LDAPSEARCH_RESULT_FILE ; rm $LDAPSEARCH_RESULT_FILE ; return 1)
-
- rm $LDAPSEARCH_RESULT_FILE
-
- if [[ $LDAP_MEMBERS_DNS =~ $LDAP_ACCOUNT_DN ]]; then
- return 0
- fi
-
- echo "LDAP Account with uid $NAME_OF_USER is not member of LDAP Group $NAME_OF_GROUP in base context $BASE_CONTEXT_FOR_GROUP"
- return 1
-}
-
-function get_messages () {
- local QUEUE="$1"
- MESSAGES=$(curl -s -i -u guest:guest "http://localhost:15672/api/queues/%2f/$QUEUE" | sed 's/,/\n/g' | grep '"messages"' | sed 's/"messages"://g')
- if [ -z "$MESSAGES" ]; then
- echo "Unable to get number of messages in $QUEUE"
- return 1
- fi
- return 0
-}
-
-function upload_from_file () {
- local FILENAME=$1
- local OPTIONS_TO_ADD=$2
- local REGEX="midpoint-objects.*/(.*)/(.*)"
- if [[ $FILENAME =~ $REGEX ]]
- then
- TYPE="${BASH_REMATCH[1]}"
- OID=`cat $FILENAME | sed -n 's:.*oid=\"\([A-Za-z0-9\-]*\)\".*:\1:p' | sed -n '1 p'`
- echo "Uploading $FILENAME ($TYPE, $OID)"
- curl -k --user $MP_USERPWD -H "Content-Type: application/xml" -X PUT "https://localhost:8443/midpoint/ws/rest/$TYPE/$OID?options=overwrite$OPTIONS_TO_ADD" --data-binary @$FILENAME
- else
- echo "Skipping $FILENAME"
- fi
-}
-
-function execute_gsh () {
- local CONTAINER=$1
- local FILE=$2
- docker cp $FILE $CONTAINER:/tmp/
- docker exec $CONTAINER bash -c "/opt/grouper/grouper.apiBinary/bin/gsh /tmp/$FILE"
-}
diff --git a/tests/main.bats b/tests/main.bats
deleted file mode 100755
index d04ed36..0000000
--- a/tests/main.bats
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/usr/bin/env bats
-
-load ../common
-
-@test "010 Image is present" {
- docker image inspect $maintainer/$imagename:$tag
-}
-
-@test "020 Check basic components" {
- docker run -i $maintainer/$imagename:$tag \
- find \
- /usr/local/bin/startup.sh \
- /opt/midpoint/var/ \
- /etc/shibboleth/ \
- /etc/httpd/
-}
-
-@test "100 Cleanup before further tests - demo/simple" {
- docker ps -a
- cd demo/simple ; docker-compose down -v ; true
-}
-
-@test "110 Cleanup before further tests - demo/shibboleth" {
- docker ps -a
- cd demo/shibboleth ; docker-compose down -v ; true
-}
-
-@test "130 Cleanup before further tests - demo/grouper" {
- docker ps -a
- cd demo/grouper ; docker-compose down -v ; true
-}
-
-# not much more to check here, as we cannot start midpoint container without having a repository
-# so continuing with tests in demo/plain directory