Skip to content

Commit 3d92bf2

Browse files
authored
Merge branch 'JanssenProject:master' into master
2 parents 9a6b233 + c5ab709 commit 3d92bf2

8 files changed

Lines changed: 187 additions & 13 deletions

File tree

Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
# Please do not attempt to edit this flow without the direct consent from the DevOps team. This file is managed centrally.
2+
# Contact @moabu
3+
# Sonar cloud https://sonarcloud.io/organizations/janssenproject/projects
4+
name: Code quality check
5+
6+
on:
7+
push:
8+
branches:
9+
- '**'
10+
pull_request:
11+
branches:
12+
- master
13+
workflow_dispatch:
14+
jobs:
15+
build:
16+
runs-on: ubuntu-latest
17+
env:
18+
JVM_PROJECTS: |
19+
JanssenProject/jans-auth-server
20+
JanssenProject/jans-orm
21+
JanssenProject/jans-config-api
22+
JanssenProject/jans-client-api
23+
JanssenProject/jans-scim
24+
JanssenProject/jans-core
25+
JanssenProject/jans-notify
26+
JanssenProject/jans-fido2
27+
JanssenProject/jans-eleven
28+
NON_JVM_PROJECTS: |
29+
JanssenProject/jans-setup
30+
JanssenProject/jans-cli
31+
JanssenProject/docker-jans-persistence-loader
32+
JanssenProject/docker-jans-client-api
33+
JanssenProject/jans-pycloudlib
34+
JanssenProject/docker-jans-auth-server
35+
JanssenProject/docker-jans-fido2
36+
JanssenProject/docker-jans-scim
37+
JanssenProject/docker-jans-config-api
38+
JanssenProject/docker-jans-certmanager
39+
JanssenProject/docker-jans-configuration-manager
40+
JanssenProject/jans-cloud-native
41+
steps:
42+
- uses: actions/checkout@v2
43+
with:
44+
fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of sonarqube analysis
45+
46+
- name: Set up JDK 11
47+
if: contains(env.JVM_PROJECTS, github.repository)
48+
uses: actions/setup-java@v2
49+
with:
50+
java-version: '11'
51+
distribution: 'adopt'
52+
53+
- name: Build with Maven
54+
if: contains(env.JVM_PROJECTS, github.repository)
55+
run: |
56+
case "$GITHUB_REPOSITORY" in
57+
"JanssenProject/jans-auth-server")
58+
echo "Run maven build for jans-auth-server "
59+
mvn clean -fae -X -pl \!client,\!static,\!server,\!rp-spring-boot jacoco:prepare-agent test install jacoco:report
60+
;;
61+
"JanssenProject/jans-client-api")
62+
echo "Run maven build for jans-client-api"
63+
mvn clean -fae -pl \!server jacoco:prepare-agent test install jacoco:report
64+
;;
65+
"JanssenProject/jans-scim")
66+
echo "Run maven build for jans-scim"
67+
mvn clean -fae -pl \!client jacoco:prepare-agent test install jacoco:report
68+
;;
69+
"JanssenProject/jans-eleven")
70+
echo "Run maven build for jans-eleven"
71+
mvn clean -fae -pl \!client,\!server jacoco:prepare-agent test jacoco:report
72+
;;
73+
"JanssenProject/jans-config-api")
74+
echo "Run maven build for jans-config-api"
75+
mvn clean -fae -DskipTests=true jacoco:prepare-agent install jacoco:report
76+
;;
77+
*)
78+
echo "Run maven build for Java repository"
79+
mvn clean -fae jacoco:prepare-agent test install jacoco:report
80+
;;
81+
esac
82+
83+
- name: Cache SonarCloud packages for JVM based project
84+
if: contains(env.JVM_PROJECTS, github.repository)
85+
uses: actions/cache@v1
86+
with:
87+
path: ~/.sonar/cache
88+
key: ${{ runner.os }}-sonar
89+
restore-keys: ${{ runner.os }}-sonar
90+
91+
- name: Cache Maven packages
92+
if: contains(env.JVM_PROJECTS, github.repository)
93+
uses: actions/cache@v1
94+
with:
95+
path: ~/.m2
96+
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
97+
restore-keys: ${{ runner.os }}-m2
98+
99+
- name: Build and analyze JVM based project
100+
if: contains(env.JVM_PROJECTS, github.repository)
101+
env:
102+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any
103+
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
104+
run: |
105+
case "$GITHUB_REPOSITORY" in
106+
"JanssenProject/jans-auth-server")
107+
echo "Run Sonar analysis for jans-auth-server "
108+
mvn -B -pl \!client,\!static,\!server,\!rp-spring-boot verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar
109+
;;
110+
"JanssenProject/jans-client-api")
111+
echo "Run Sonar analysis for jans-client-api"
112+
mvn -B -pl \!server verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar
113+
;;
114+
"JanssenProject/jans-scim")
115+
echo "Run Sonar analysis for jans-scim"
116+
mvn -B -pl \!client verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar
117+
;;
118+
"JanssenProject/jans-eleven")
119+
echo "Run Sonar analysis for jans-scim"
120+
mvn -B -pl \!client,\!server verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar
121+
;;
122+
"JanssenProject/jans-config-api")
123+
echo "Run Sonar analysis for jans-config-api"
124+
mvn -B -DskipTests=true verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar
125+
;;
126+
*)
127+
echo "Run maven build for Java repository"
128+
mvn -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar
129+
;;
130+
esac
131+
132+
- name: Convert repo org name to lowercase for non JVM projects
133+
if: contains(env.NON_JVM_PROJECTS, github.repository)
134+
env:
135+
REPO_OWNER: ${{ github.repository_owner }}
136+
run: |
137+
echo "REPO_ORG=${REPO_OWNER,,}" >>${GITHUB_ENV}
138+
139+
- name: SonarCloud Scan for non-JVM project
140+
if: contains(env.NON_JVM_PROJECTS, github.repository)
141+
uses: SonarSource/sonarcloud-github-action@master
142+
with:
143+
args: >
144+
-Dsonar.organization=${{ env.REPO_ORG }}
145+
-Dsonar.projectKey=${{ github.repository_owner }}_${{ github.event.repository.name }}
146+
env:
147+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any
148+
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}

Dockerfile

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ RUN wget -q https://github.com/fabioz/PyDev.Debugger/archive/refs/tags/pydev_deb
5151
# ===========
5252

5353
ENV CN_VERSION=1.0.0-SNAPSHOT
54-
ENV CN_BUILD_DATE='2021-06-01 16:06'
54+
ENV CN_BUILD_DATE='2021-06-22 16:57'
5555
ENV CN_SOURCE_URL=https://maven.jans.io/maven/io/jans/jans-auth-server/${CN_VERSION}/jans-auth-server-${CN_VERSION}.war
5656

5757
# Install Jans Auth
@@ -156,7 +156,9 @@ ENV CN_PERSISTENCE_TYPE=ldap \
156156
CN_COUCHBASE_BUCKET_PREFIX=jans \
157157
CN_COUCHBASE_TRUSTSTORE_ENABLE=true \
158158
CN_COUCHBASE_KEEPALIVE_INTERVAL=30000 \
159-
CN_COUCHBASE_KEEPALIVE_TIMEOUT=2500
159+
CN_COUCHBASE_KEEPALIVE_TIMEOUT=2500 \
160+
CN_GOOGLE_SPANNER_INSTANCE_ID="" \
161+
CN_GOOGLE_SPANNER_DATABASE_ID=""
160162

161163
# ===========
162164
# Generic ENV
@@ -184,7 +186,7 @@ LABEL name="Janssen Authorization Server" \
184186
maintainer="Janssen Project <support@jans.io>" \
185187
vendor="Janssen Project" \
186188
version="1.0.0" \
187-
release="b5" \
189+
release="b6" \
188190
summary="Janssen Authorization Server" \
189191
description="OAuth 2.0 server and client; OpenID Connect Provider (OP) & UMA Authorization Server (AS)"
190192

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,3 +73,6 @@ The following environment variables are supported by the container:
7373
- `CN_SYNC_JKS_INTERVAL`: Interval of JKS sync in seconds (if needed); obsolete.
7474
- `GOOGLE_PROJECT_ID`: Google Project ID (default to empty string). Used when `CN_CONFIG_ADAPTER` or `CN_SECRET_ADAPTER` set to `google`.
7575
- `GOOGLE_APPLICATION_CREDENTIALS`: Path to Google credentials JSON file (default to `/etc/jans/conf/google-credentials.json`). Used when `CN_CONFIG_ADAPTER` or `CN_SECRET_ADAPTER` set to `google`.
76+
- `CN_GOOGLE_SPANNER_INSTANCE_ID`: Google Spanner instance ID.
77+
- `CN_GOOGLE_SPANNER_DATABASE_ID`: Google Spanner database ID.
78+
- `CN_JETTY_REQUEST_HEADER_SIZE`: Maximum size of request header accepted by Jetty (default to `8192`).

__version__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@
33
https://www.apache.org/licenses/LICENSE-2.0
44
This is only used by Github actions: release.yaml workflow.
55
"""
6-
__version__ = "1.0.0_b5"
7-
__previous_version__ = "1.0.0_b4"
6+
__version__ = "1.0.0_b6"
7+
__previous_version__ = "1.0.0_b5"

conf/jans-spanner.properties.tmpl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,8 @@ connection.pool.create-max-wait-time-millis=20000
2323
# Maximum allowed statement result set size
2424
statement.limit.default-maximum-result-size=1000
2525

26+
# Maximum allowed delete statement result set size
27+
statement.limit.maximum-result-delete-size=10000
28+
2629
binaryAttributes=objectGUID
2730
certificateAttributes=userCertificate

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
-e git+https://github.com/JanssenProject/jans-pycloudlib@a49f267f16a75965756d475d0e8102ad7cde2010#egg=jans-pycloudlib
1+
-e git+https://github.com/JanssenProject/jans-pycloudlib@a6ce9a098be01b4edcb69fbeee7f0bf745130c44#egg=jans-pycloudlib

scripts/bootstrap.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,15 @@ def modify_jetty_xml():
4545
flags=re.DOTALL | re.M,
4646
)
4747

48+
# set custom request header size
49+
req_header_size = os.environ.get("CN_JETTY_REQUEST_HEADER_SIZE", "8192")
50+
updates = re.sub(
51+
r'(<Set name="requestHeaderSize"><Property name="jetty.httpConfig.requestHeaderSize" deprecated="jetty.request.header.size" default=)"\d+"( /></Set>)',
52+
r'\1"{}"\2'.format(req_header_size),
53+
updates,
54+
flags=re.DOTALL | re.M,
55+
)
56+
4857
with open(fn, "w") as f:
4958
f.write(updates)
5059

scripts/keystore_mod.py

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from jans.pycloudlib.persistence.couchbase import get_couchbase_password
77
from jans.pycloudlib.persistence.ldap import LdapClient
88
from jans.pycloudlib.persistence.sql import SQLClient
9+
from jans.pycloudlib.persistence.spanner import SpannerClient
910

1011

1112
class BasePersistence:
@@ -112,11 +113,24 @@ def modify_auth_config(self, id_, rev, conf_dynamic):
112113
return modified
113114

114115

116+
class SpannerPersistence(SqlPersistence):
117+
def __init__(self, manager):
118+
self.client = SpannerClient()
119+
120+
121+
_backend_classes = {
122+
"ldap": LdapPersistence,
123+
"couchbase": CouchbasePersistence,
124+
"sql": SqlPersistence,
125+
"spanner": SpannerPersistence,
126+
}
127+
128+
115129
def modify_keystore_path(manager, path, jwks_uri):
116130
persistence_type = os.environ.get("CN_PERSISTENCE_TYPE", "ldap")
117131
ldap_mapping = os.environ.get("CN_PERSISTENCE_LDAP_MAPPING", "default")
118132

119-
if persistence_type in ("ldap", "couchbase", "sql"):
133+
if persistence_type in ("ldap", "couchbase", "sql", "spanner"):
120134
backend_type = persistence_type
121135
else:
122136
# persistence_type is hybrid
@@ -126,12 +140,7 @@ def modify_keystore_path(manager, path, jwks_uri):
126140
backend_type = "couchbase"
127141

128142
# resolve backend
129-
if backend_type == "ldap":
130-
backend = LdapPersistence(manager)
131-
elif backend_type == "couchbase":
132-
backend = CouchbasePersistence(manager)
133-
else:
134-
backend = SqlPersistence(manager)
143+
backend = _backend_classes[backend_type](manager)
135144

136145
config = backend.get_auth_config()
137146
if not config:

0 commit comments

Comments
 (0)