Skip to content

Commit 973beca

Browse files
authored
feat: add casa and janssen integration (#25)
* chore: prepare v5.0.0 (jans-based) * chore: reorganize assets * chore: remove unused assets * chore: update build date * fix: set jansAttrs to empty hashmap * chore: remove unused assets * chore: introduce GLUU_SOURCE_URL env * feat: add option to use TLSv1.2 * feat: adjust permissions
1 parent 5d406da commit 973beca

25 files changed

+654
-781
lines changed

.dockerignore

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
*
33

44
# include required files/directories
5-
!certs
65
!scripts
76
!templates
87
!LICENSE
98
!requirements.txt
9+
!jetty

CHANGES.md

-17
This file was deleted.

Dockerfile

+108-98
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,29 @@
1-
FROM adoptopenjdk/openjdk11:jre-11.0.8_10-alpine
2-
3-
# symlink JVM
4-
RUN mkdir -p /usr/lib/jvm/default-jvm /usr/java/latest \
5-
&& ln -sf /opt/java/openjdk /usr/lib/jvm/default-jvm/jre \
6-
&& ln -sf /usr/lib/jvm/default-jvm/jre /usr/java/latest/jre
1+
FROM bellsoft/liberica-openjre-alpine:11
72

83
# ===============
94
# Alpine packages
105
# ===============
116

127
RUN apk update \
13-
&& apk add --no-cache py3-pip openssl tini \
14-
&& apk add --no-cache --virtual build-deps git wget
15-
16-
# ======
17-
# rclone
18-
# ======
19-
20-
ARG RCLONE_VERSION=v1.51.0
21-
RUN wget -q https://github.com/rclone/rclone/releases/download/${RCLONE_VERSION}/rclone-${RCLONE_VERSION}-linux-amd64.zip -O /tmp/rclone.zip \
22-
&& unzip -qq /tmp/rclone.zip -d /tmp \
23-
&& mv /tmp/rclone-${RCLONE_VERSION}-linux-amd64/rclone /usr/bin/ \
24-
&& rm -rf /tmp/rclone-${RCLONE_VERSION}-linux-amd64 /tmp/rclone.zip
8+
&& apk add --no-cache py3-pip openssl tini py3-cryptography py3-lxml py3-psycopg2 py3-grpcio \
9+
&& apk add --no-cache --virtual build-deps git wget \
10+
&& mkdir -p /usr/java/latest \
11+
&& ln -sf /usr/lib/jvm/jre /usr/java/latest/jre
2512

2613
# =====
2714
# Jetty
2815
# =====
2916

30-
ARG JETTY_VERSION=9.4.26.v20200117
17+
ARG JETTY_VERSION=10.0.6
3118
ARG JETTY_HOME=/opt/jetty
32-
ARG JETTY_BASE=/opt/gluu/jetty
19+
ARG JETTY_BASE=/opt/jans/jetty
3320
ARG JETTY_USER_HOME_LIB=/home/jetty/lib
3421

3522
# Install jetty
36-
RUN wget -q https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-distribution/${JETTY_VERSION}/jetty-distribution-${JETTY_VERSION}.tar.gz -O /tmp/jetty.tar.gz \
23+
RUN wget -q https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-home/${JETTY_VERSION}/jetty-home-${JETTY_VERSION}.tar.gz -O /tmp/jetty.tar.gz \
3724
&& mkdir -p /opt \
3825
&& tar -xzf /tmp/jetty.tar.gz -C /opt \
39-
&& mv /opt/jetty-distribution-${JETTY_VERSION} ${JETTY_HOME} \
26+
&& mv /opt/jetty-home-${JETTY_VERSION} ${JETTY_HOME} \
4027
&& rm -rf /tmp/jetty.tar.gz
4128

4229
# Ports required by jetty
@@ -46,38 +33,25 @@ EXPOSE 8080
4633
# Casa
4734
# ====
4835

49-
# @TODO: change this as soon as 4.2.2-SNAPSHOT is available
50-
ENV GLUU_VERSION=4.2.1.Final
51-
ENV GLUU_BUILD_DATE="2020-09-24 08:34"
36+
ENV GLUU_VERSION=5.0.0-SNAPSHOT
37+
ENV GLUU_BUILD_DATE="2022-01-08 18:32"
38+
ENV GLUU_SOURCE_URL=https://jenkins.gluu.org/maven/org/gluu/casa/${GLUU_VERSION}/casa-${GLUU_VERSION}.war
5239

5340
# Install Casa
54-
RUN wget -q https://ox.gluu.org/maven/org/gluu/casa/${GLUU_VERSION}/casa-${GLUU_VERSION}.war -O /tmp/casa.war \
41+
RUN wget -q ${GLUU_SOURCE_URL} -O /tmp/casa.war \
5542
&& mkdir -p ${JETTY_BASE}/casa/webapps/casa \
5643
&& unzip -qq /tmp/casa.war -d ${JETTY_BASE}/casa/webapps/casa \
57-
&& java -jar ${JETTY_HOME}/start.jar jetty.home=${JETTY_HOME} jetty.base=${JETTY_BASE}/casa --add-to-start=server,deploy,resources,http,http-forwarded,jsp \
58-
&& rm -f /tmp/casa.war
59-
60-
# ===========
61-
# Custom libs
62-
# ===========
63-
64-
RUN mkdir -p /usr/share/java
65-
66-
ARG TWILIO_VERSION=7.17.0
67-
RUN wget -q https://repo1.maven.org/maven2/com/twilio/sdk/twilio/${TWILIO_VERSION}/twilio-${TWILIO_VERSION}.jar -O /usr/share/java/twilio.jar
68-
69-
ARG JSMPP_VERSION=2.3.7
70-
RUN wget -q https://repo1.maven.org/maven2/org/jsmpp/jsmpp/${JSMPP_VERSION}/jsmpp-${JSMPP_VERSION}.jar -O /usr/share/java/jsmpp.jar
44+
&& java -jar ${JETTY_HOME}/start.jar jetty.home=${JETTY_HOME} jetty.base=${JETTY_BASE}/casa --add-module=server,deploy,resources,http,jsp,cdi-decorate \
45+
&& rm -f /tmp/casa.war \
46+
&& rm -f ${JETTY_BASE}/casa/webapps/casa/WEB-INF/jetty-web.xml
7147

7248
# ======
7349
# Python
7450
# ======
7551

76-
RUN apk add --no-cache py3-cryptography
7752
COPY requirements.txt /app/requirements.txt
78-
RUN pip3 install -U pip \
79-
&& pip3 install --no-cache-dir -r /app/requirements.txt \
80-
&& rm -rf /src/pygluu-containerlib/.git
53+
RUN pip3 install -U pip wheel \
54+
&& pip3 install -r /app/requirements.txt --no-cache-dir
8155

8256
# =======
8357
# Cleanup
@@ -97,67 +71,84 @@ COPY LICENSE /licenses/
9771
# Config ENV
9872
# ==========
9973

100-
ENV GLUU_CONFIG_ADAPTER=consul \
101-
GLUU_CONFIG_CONSUL_HOST=localhost \
102-
GLUU_CONFIG_CONSUL_PORT=8500 \
103-
GLUU_CONFIG_CONSUL_CONSISTENCY=stale \
104-
GLUU_CONFIG_CONSUL_SCHEME=http \
105-
GLUU_CONFIG_CONSUL_VERIFY=false \
106-
GLUU_CONFIG_CONSUL_CACERT_FILE=/etc/certs/consul_ca.crt \
107-
GLUU_CONFIG_CONSUL_CERT_FILE=/etc/certs/consul_client.crt \
108-
GLUU_CONFIG_CONSUL_KEY_FILE=/etc/certs/consul_client.key \
109-
GLUU_CONFIG_CONSUL_TOKEN_FILE=/etc/certs/consul_token \
110-
GLUU_CONFIG_KUBERNETES_NAMESPACE=default \
111-
GLUU_CONFIG_KUBERNETES_CONFIGMAP=gluu \
112-
GLUU_CONFIG_KUBERNETES_USE_KUBE_CONFIG=false
74+
ENV CN_CONFIG_ADAPTER=consul \
75+
CN_CONFIG_CONSUL_HOST=localhost \
76+
CN_CONFIG_CONSUL_PORT=8500 \
77+
CN_CONFIG_CONSUL_CONSISTENCY=stale \
78+
CN_CONFIG_CONSUL_SCHEME=http \
79+
CN_CONFIG_CONSUL_VERIFY=false \
80+
CN_CONFIG_CONSUL_CACERT_FILE=/etc/certs/consul_ca.crt \
81+
CN_CONFIG_CONSUL_CERT_FILE=/etc/certs/consul_client.crt \
82+
CN_CONFIG_CONSUL_KEY_FILE=/etc/certs/consul_client.key \
83+
CN_CONFIG_CONSUL_TOKEN_FILE=/etc/certs/consul_token \
84+
CN_CONFIG_CONSUL_NAMESPACE=jans \
85+
CN_CONFIG_KUBERNETES_NAMESPACE=default \
86+
CN_CONFIG_KUBERNETES_CONFIGMAP=jans \
87+
CN_CONFIG_KUBERNETES_USE_KUBE_CONFIG=false \
88+
CN_CONFIG_GOOGLE_SECRET_VERSION_ID=latest \
89+
CN_CONFIG_GOOGLE_SECRET_NAME_PREFIX=jans
11390

11491
# ==========
11592
# Secret ENV
11693
# ==========
11794

118-
ENV GLUU_SECRET_ADAPTER=vault \
119-
GLUU_SECRET_VAULT_SCHEME=http \
120-
GLUU_SECRET_VAULT_HOST=localhost \
121-
GLUU_SECRET_VAULT_PORT=8200 \
122-
GLUU_SECRET_VAULT_VERIFY=false \
123-
GLUU_SECRET_VAULT_ROLE_ID_FILE=/etc/certs/vault_role_id \
124-
GLUU_SECRET_VAULT_SECRET_ID_FILE=/etc/certs/vault_secret_id \
125-
GLUU_SECRET_VAULT_CERT_FILE=/etc/certs/vault_client.crt \
126-
GLUU_SECRET_VAULT_KEY_FILE=/etc/certs/vault_client.key \
127-
GLUU_SECRET_VAULT_CACERT_FILE=/etc/certs/vault_ca.crt \
128-
GLUU_SECRET_KUBERNETES_NAMESPACE=default \
129-
GLUU_SECRET_KUBERNETES_SECRET=gluu \
130-
GLUU_SECRET_KUBERNETES_USE_KUBE_CONFIG=false
95+
ENV CN_SECRET_ADAPTER=vault \
96+
CN_SECRET_VAULT_SCHEME=http \
97+
CN_SECRET_VAULT_HOST=localhost \
98+
CN_SECRET_VAULT_PORT=8200 \
99+
CN_SECRET_VAULT_VERIFY=false \
100+
CN_SECRET_VAULT_ROLE_ID_FILE=/etc/certs/vault_role_id \
101+
CN_SECRET_VAULT_SECRET_ID_FILE=/etc/certs/vault_secret_id \
102+
CN_SECRET_VAULT_CERT_FILE=/etc/certs/vault_client.crt \
103+
CN_SECRET_VAULT_KEY_FILE=/etc/certs/vault_client.key \
104+
CN_SECRET_VAULT_CACERT_FILE=/etc/certs/vault_ca.crt \
105+
CN_SECRET_VAULT_NAMESPACE=jans \
106+
CN_SECRET_KUBERNETES_NAMESPACE=default \
107+
CN_SECRET_KUBERNETES_SECRET=jans \
108+
CN_SECRET_KUBERNETES_USE_KUBE_CONFIG=false \
109+
CN_SECRET_GOOGLE_SECRET_MANAGER_PASSPHRASE=secret \
110+
CN_SECRET_GOOGLE_SECRET_VERSION_ID=latest \
111+
CN_SECRET_GOOGLE_SECRET_NAME_PREFIX=jans
131112

132113
# ===============
133114
# Persistence ENV
134115
# ===============
135116

136-
ENV GLUU_PERSISTENCE_TYPE=ldap \
137-
GLUU_PERSISTENCE_LDAP_MAPPING=default \
138-
GLUU_LDAP_URL=localhost:1636 \
139-
GLUU_COUCHBASE_URL=localhost \
140-
GLUU_COUCHBASE_USER=admin \
141-
GLUU_COUCHBASE_CERT_FILE=/etc/certs/couchbase.crt \
142-
GLUU_COUCHBASE_PASSWORD_FILE=/etc/gluu/conf/couchbase_password \
143-
GLUU_COUCHBASE_CONN_TIMEOUT=10000 \
144-
GLUU_COUCHBASE_CONN_MAX_WAIT=20000
117+
ENV CN_PERSISTENCE_TYPE=ldap \
118+
CN_PERSISTENCE_LDAP_MAPPING=default \
119+
CN_LDAP_URL=localhost:1636 \
120+
CN_LDAP_USE_SSL=true \
121+
CN_COUCHBASE_URL=localhost \
122+
CN_COUCHBASE_USER=admin \
123+
CN_COUCHBASE_CERT_FILE=/etc/certs/couchbase.crt \
124+
CN_COUCHBASE_PASSWORD_FILE=/etc/jans/conf/couchbase_password \
125+
CN_COUCHBASE_CONN_TIMEOUT=10000 \
126+
CN_COUCHBASE_CONN_MAX_WAIT=20000 \
127+
CN_COUCHBASE_SCAN_CONSISTENCY=not_bounded \
128+
CN_COUCHBASE_BUCKET_PREFIX=jans \
129+
CN_COUCHBASE_TRUSTSTORE_ENABLE=true \
130+
CN_COUCHBASE_KEEPALIVE_INTERVAL=30000 \
131+
CN_COUCHBASE_KEEPALIVE_TIMEOUT=2500 \
132+
CN_GOOGLE_SPANNER_INSTANCE_ID="" \
133+
CN_GOOGLE_SPANNER_DATABASE_ID=""
145134

146135
# ===========
147136
# Generic ENV
148137
# ===========
149138

150-
ENV GLUU_MAX_RAM_PERCENTAGE=75.0 \
151-
GLUU_WAIT_MAX_TIME=300 \
152-
GLUU_WAIT_SLEEP_DURATION=10 \
153-
GLUU_OXD_SERVER_URL=https://localhost:8443 \
154-
GLUU_OXAUTH_BACKEND=localhost:8081 \
155-
GLUU_JAVA_OPTIONS="" \
156-
GLUU_DOCUMENT_STORE_TYPE=LOCAL \
157-
GLUU_JACKRABBIT_URL=http://localhost:8080 \
158-
GLUU_JACKRABBIT_ADMIN_ID=admin \
159-
GLUU_JACKRABBIT_ADMIN_PASSWORD_FILE=/etc/gluu/conf/jackrabbit_admin_password \
160-
GLUU_SSL_CERT_FROM_SECRETS=false
139+
ENV CN_MAX_RAM_PERCENTAGE=75.0 \
140+
CN_WAIT_MAX_TIME=300 \
141+
CN_WAIT_SLEEP_DURATION=10 \
142+
PYTHON_HOME=/opt/jython \
143+
CN_DOCUMENT_STORE_TYPE=LOCAL \
144+
CN_JACKRABBIT_URL=http://localhost:8080 \
145+
CN_JACKRABBIT_ADMIN_ID=admin \
146+
CN_JACKRABBIT_ADMIN_PASSWORD_FILE=/etc/jans/conf/jackrabbit_admin_password \
147+
CN_JAVA_OPTIONS="" \
148+
CN_AUTH_SERVER_BACKEND=localhost:8081 \
149+
CN_SSL_CERT_FROM_SECRETS=false \
150+
GOOGLE_PROJECT_ID="" \
151+
GOOGLE_APPLICATION_CREDENTIALS=/etc/jans/conf/google-credentials.json
161152

162153
# ==========
163154
# misc stuff
@@ -166,24 +157,43 @@ ENV GLUU_MAX_RAM_PERCENTAGE=75.0 \
166157
LABEL name="Casa" \
167158
maintainer="Gluu Inc. <[email protected]>" \
168159
vendor="Gluu Federation" \
169-
version="4.2.2" \
160+
version="5.0.0" \
170161
release="dev" \
171162
summary="Gluu Casa" \
172163
description="Self-service portal for people to manage their account security preferences in the Gluu Server, like 2FA"
173164

174165
RUN mkdir -p /etc/certs \
175-
/etc/gluu/conf/casa \
176-
/opt/gluu/python/libs \
177-
/opt/gluu/jetty/casa/static \
178-
/opt/gluu/jetty/casa/plugins \
179-
/deploy \
166+
/etc/jans/conf/casa \
167+
/opt/jans/python/libs \
168+
/opt/jans/jetty/casa/static \
169+
/opt/jans/jetty/casa/plugins \
180170
/app/templates \
181171
/app/tmp
182172

173+
COPY jetty/jetty-env.xml ${JETTY_BASE}/casa/webapps/casa/WEB-INF/
174+
COPY jetty/log4j2.xml ${JETTY_BASE}/casa/resources/
175+
COPY jetty/casa_web_resources.xml ${JETTY_BASE}/casa/webapps/
183176
COPY templates /app/templates/
184177
COPY scripts /app/scripts
185-
RUN chmod +x /app/scripts/entrypoint.sh \
186-
&& cp /app/templates/casa_web_resources.xml /opt/gluu/jetty/casa/webapps/
178+
RUN chmod +x /app/scripts/entrypoint.sh
179+
180+
# create non-root user
181+
RUN adduser -s /bin/sh -D -G root -u 1000 jetty
182+
183+
# adjust ownership
184+
RUN chown -R 1000:1000 /opt/jans/jetty \
185+
&& chown -R 1000:1000 /opt/jetty \
186+
&& chown -R 1000:1000 /tmp \
187+
&& chgrp -R 0 /opt/jans/jetty && chmod -R g=u /opt/jans/jetty \
188+
&& chgrp -R 0 /opt/jetty && chmod -R g=u /opt/jetty \
189+
&& chgrp -R 0 /tmp && chmod -R g=u /tmp \
190+
&& chgrp -R 0 /etc/certs && chmod -R g=u /etc/certs \
191+
&& chgrp -R 0 /etc/jans && chmod -R g=u /etc/jans \
192+
&& chmod -R +w /usr/java/latest/jre/lib/security/cacerts && chgrp -R 0 /usr/java/latest/jre/lib/security/cacerts && chmod -R g=u /usr/java/latest/jre/lib/security/cacerts \
193+
&& chmod 664 /opt/jetty/etc/jetty.xml \
194+
&& chmod 664 /opt/jetty/etc/webdefault.xml
195+
196+
USER 1000
187197

188198
ENTRYPOINT ["tini", "-e", "143", "-g", "--"]
189199
CMD ["sh", "/app/scripts/entrypoint.sh"]

Makefile

+1-9
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,7 @@
1-
GLUU_VERSION=4.2.2
1+
GLUU_VERSION=5.0.0
22
IMAGE_NAME=gluufederation/casa
33
UNSTABLE_VERSION=dev
44

55
build-dev:
66
@echo "[I] Building Docker image ${IMAGE_NAME}:${GLUU_VERSION}_${UNSTABLE_VERSION}"
77
@docker build --rm --force-rm -t ${IMAGE_NAME}:${GLUU_VERSION}_${UNSTABLE_VERSION} .
8-
9-
trivy-scan:
10-
@echo "[I] Scanning Docker image ${IMAGE_NAME}:${GLUU_VERSION}_${UNSTABLE_VERSION} using trivy"
11-
@trivy -d image ${IMAGE_NAME}:${GLUU_VERSION}_${UNSTABLE_VERSION}
12-
13-
dockle-scan:
14-
@echo "[I] Scanning Docker image ${IMAGE_NAME}:${GLUU_VERSION}_${UNSTABLE_VERSION} using dockle"
15-
@dockle -d ${IMAGE_NAME}:${GLUU_VERSION}_${UNSTABLE_VERSION}

0 commit comments

Comments
 (0)