Skip to content

Commit fec2f3c

Browse files
committed
Add support to Keycloak plugin in 1.3 docker
1 parent 65c141a commit fec2f3c

4 files changed

Lines changed: 49 additions & 11 deletions

File tree

1.3/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ ENV LOGLEVEL=info
1010

1111
RUN apt-get update && \
1212
apt-get install -y libmemcached-dev gosu && \
13-
pip install --no-cache-dir social-auth-app-django "gunicorn==19.3.0" "psycopg2==2.6" pylibmc pysolr "elasticsearch==2.4.1" && \
13+
pip install --no-cache-dir social-auth-app-django "gunicorn==19.3.0" "psycopg2==2.6" pylibmc pysolr "elasticsearch==2.4.1" wirecloud-keycloak && \
1414
rm -rf /var/lib/apt/lists/* && \
1515
gosu nobody true
1616

1.3/docker-compose.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,13 @@ services:
5757
#- FIWARE_IDM_SERVER=${FIWARE_IDM_SERVER}
5858
#- SOCIAL_AUTH_FIWARE_KEY=${SOCIAL_AUTH_FIWARE_KEY}
5959
#- SOCIAL_AUTH_FIWARE_SECRET=${SOCIAL_AUTH_FIWARE_SECRET}
60+
# Uncomment the following environment variables to enable Keycloak IDM Integration
61+
#- KEYCLOAK_IDM_SERVER=${KEYCLOAK_IDM_SERVER}
62+
#- KEYCLOAK_REALM=${KEYCLOAK_REALM}
63+
#- KEYCLOAK_KEY=${KEYCLOAK_KEY}
64+
#- KEYCLOAK_GLOBAL_ROLE=${KEYCLOAK_GLOBAL_ROLE}
65+
#- SOCIAL_AUTH_KEYCLOAK_KEY=${SOCIAL_AUTH_KEYCLOAK_KEY}
66+
#- SOCIAL_AUTH_KEYCLOAK_SECRET=${SOCIAL_AUTH_KEYCLOAK_SECRET}
6067
volumes:
6168
- ./wirecloud-data:/opt/wirecloud_instance/data
6269
- ./wirecloud-static:/var/www/static

1.3/settings.py

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -127,15 +127,33 @@
127127
WSGI_APPLICATION = 'wirecloud_instance.wsgi.application'
128128

129129
# FIWARE IdM configuration
130-
FIWARE_IDM_SERVER = os.environ.get('FIWARE_IDM_SERVER', '').strip()
131-
FIWARE_IDM_PUBLIC_URL = os.environ.get('FIWARE_IDM_PUBLIC_URL', FIWARE_IDM_SERVER).strip()
132-
SOCIAL_AUTH_FIWARE_KEY = os.environ.get('SOCIAL_AUTH_FIWARE_KEY', '').strip()
133-
SOCIAL_AUTH_FIWARE_SECRET = os.environ.get('SOCIAL_AUTH_FIWARE_SECRET', '').strip()
134-
IDM_AUTH_ENABLED = FIWARE_IDM_SERVER and SOCIAL_AUTH_FIWARE_KEY and SOCIAL_AUTH_FIWARE_SECRET
135-
136-
if IDM_AUTH_ENABLED:
130+
IDM_AUTH = None
131+
if os.environ.get('FIWARE_IDM_SERVER', '').strip() != '':
132+
FIWARE_IDM_SERVER = os.environ.get('FIWARE_IDM_SERVER', '').strip()
133+
FIWARE_IDM_PUBLIC_URL = os.environ.get('FIWARE_IDM_PUBLIC_URL', FIWARE_IDM_SERVER).strip()
134+
SOCIAL_AUTH_FIWARE_KEY = os.environ.get('SOCIAL_AUTH_FIWARE_KEY', '').strip()
135+
SOCIAL_AUTH_FIWARE_SECRET = os.environ.get('SOCIAL_AUTH_FIWARE_SECRET', '').strip()
136+
IDM_AUTH = 'fiware' if FIWARE_IDM_SERVER and SOCIAL_AUTH_FIWARE_KEY and SOCIAL_AUTH_FIWARE_SECRET else None
137+
138+
elif os.environ.get('KEYCLOAK_IDM_SERVER', '').strip() != '':
139+
KEYCLOAK_IDM_SERVER = os.environ.get('KEYCLOAK_IDM_SERVER', '').strip()
140+
KEYCLOAK_REALM = os.environ.get('KEYCLOAK_REALM', '').strip()
141+
KEYCLOAK_KEY = os.environ.get('KEYCLOAK_KEY', '').strip()
142+
KEYCLOAK_GLOBAL_ROLE = os.environ.get('KEYCLOAK_GLOBAL_ROLE', '').strip() == 'True'
143+
SOCIAL_AUTH_KEYCLOAK_KEY = os.environ.get('SOCIAL_AUTH_KEYCLOAK_KEY', '').strip()
144+
SOCIAL_AUTH_KEYCLOAK_SECRET = os.environ.get('SOCIAL_AUTH_KEYCLOAK_SECRET', '').strip()
145+
IDM_AUTH = 'keycloak' if KEYCLOAK_IDM_SERVER and KEYCLOAK_REALM and KEYCLOAK_KEY and SOCIAL_AUTH_KEYCLOAK_KEY and SOCIAL_AUTH_KEYCLOAK_SECRET else None
146+
147+
if IDM_AUTH == 'fiware':
148+
INSTALLED_APPS += (
149+
'wirecloud.fiware',
150+
'social_django',
151+
'haystack',
152+
)
153+
elif IDM_AUTH == 'keycloak':
137154
INSTALLED_APPS += (
138155
'wirecloud.fiware',
156+
'wirecloud.keycloak',
139157
'social_django',
140158
'haystack',
141159
)
@@ -192,10 +210,14 @@
192210
USE_X_FORWARDED_PORT = True
193211

194212
# Auth configuration
195-
if IDM_AUTH_ENABLED:
213+
if IDM_AUTH == 'fiware':
196214
AUTHENTICATION_BACKENDS = (
197215
'wirecloud.fiware.social_auth_backend.FIWAREOAuth2',
198216
)
217+
elif IDM_AUTH == 'keycloak':
218+
AUTHENTICATION_BACKENDS = (
219+
'wirecloud.keycloak.social_auth_backend.KeycloakOAuth2',
220+
)
199221
else:
200222
AUTHENTICATION_BACKENDS = (
201223
'django.contrib.auth.backends.ModelBackend',

1.3/urls.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,19 @@
88

99
from wirecloud.commons import authentication as wc_auth
1010
from wirecloud.fiware import views as wc_fiware
11+
from wirecloud.keycloak import views as wc_keycloak
12+
1113
import wirecloud.platform.urls
1214

1315
admin.autodiscover()
1416

17+
login_method = django_auth.login
18+
if settings.IDM_AUTH == 'fiware':
19+
login_method = wc_fiware.login
20+
21+
if settings.IDM_AUTH == 'keycloak':
22+
login_method = wc_keycloak.login
23+
1524
urlpatterns = (
1625

1726
# Catalogue
@@ -21,15 +30,15 @@
2130
url(r'^cdp/', include('wirecloud.proxy.urls')),
2231

2332
# Login/logout
24-
url(r'^login/?$', wc_fiware.login if settings.IDM_AUTH_ENABLED else django_auth.login, name="login"),
33+
url(r'^login/?$', login_method, name="login"),
2534
url(r'^logout/?$', wc_auth.logout, name="logout"),
2635
url(r'^admin/logout/?$', wc_auth.logout),
2736

2837
# Admin interface
2938
url(r'^admin/', include(admin.site.urls)),
3039
)
3140

32-
if settings.IDM_AUTH_ENABLED:
41+
if settings.IDM_AUTH is not None:
3342
urlpatterns += (url('', include('social_django.urls', namespace='social')),)
3443

3544
urlpatterns += wirecloud.platform.urls.urlpatterns

0 commit comments

Comments
 (0)