You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ma...@apache.org on 2018/08/14 19:51:46 UTC
[airavata-django-portal] 04/13: Preserving 'next' when logging in
via redirect
This is an automated email from the ASF dual-hosted git repository.
machristie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/airavata-django-portal.git
commit 5d338393d84c25004882424f37ba8843150f68e6
Author: Marcus Christie <ma...@iu.edu>
AuthorDate: Fri Aug 10 10:39:20 2018 -0400
Preserving 'next' when logging in via redirect
---
django_airavata/apps/auth/backends.py | 5 ++---
.../apps/auth/templates/django_airavata_auth/login.html | 10 ++++++++--
django_airavata/apps/auth/views.py | 9 ++++++---
3 files changed, 16 insertions(+), 8 deletions(-)
diff --git a/django_airavata/apps/auth/backends.py b/django_airavata/apps/auth/backends.py
index 17d37f0..3d7326a 100644
--- a/django_airavata/apps/auth/backends.py
+++ b/django_airavata/apps/auth/backends.py
@@ -69,18 +69,17 @@ class KeycloakBackend(object):
def _get_token_and_userinfo_redirect_flow(self, request):
authorization_code_url = request.build_absolute_uri()
- redirect_url = request.build_absolute_uri(
- reverse('django_airavata_auth:callback'))
client_id = settings.KEYCLOAK_CLIENT_ID
client_secret = settings.KEYCLOAK_CLIENT_SECRET
token_url = settings.KEYCLOAK_TOKEN_URL
userinfo_url = settings.KEYCLOAK_USERINFO_URL
verify_ssl = settings.KEYCLOAK_VERIFY_SSL
state = request.session['OAUTH2_STATE']
+ redirect_uri = request.session['OAUTH2_REDIRECT_URI']
logger.debug("state={}".format(state))
oauth2_session = OAuth2Session(client_id,
scope='openid',
- redirect_uri=redirect_url,
+ redirect_uri=redirect_uri,
state=state)
if hasattr(settings, 'KEYCLOAK_CA_CERTFILE'):
oauth2_session.verify = settings.KEYCLOAK_CA_CERTFILE
diff --git a/django_airavata/apps/auth/templates/django_airavata_auth/login.html b/django_airavata/apps/auth/templates/django_airavata_auth/login.html
index ede2663..80abbee 100644
--- a/django_airavata/apps/auth/templates/django_airavata_auth/login.html
+++ b/django_airavata/apps/auth/templates/django_airavata_auth/login.html
@@ -10,8 +10,14 @@
<div class="card-body">
<h5 class="card-title">Log in with your existing organizational login</h5>
{% for external in options.external %}
- <a href="{% url 'django_airavata_auth:redirect_login' external.idp_alias %}" class="btn btn-primary btn-block mt-3">
- Sign in with {{ external.name }}
+ <a
+ {% if next %}
+ href="{% url 'django_airavata_auth:redirect_login' external.idp_alias %}?next={{ next | urlencode }}"
+ {% else %}
+ href="{% url 'django_airavata_auth:redirect_login' external.idp_alias %}"
+ {% endif %}
+ class="btn btn-primary btn-block mt-3">
+ Sign in with {{ external.name }}
</a>
{% endfor %}
</div>
diff --git a/django_airavata/apps/auth/views.py b/django_airavata/apps/auth/views.py
index 0c7f719..39f9213 100644
--- a/django_airavata/apps/auth/views.py
+++ b/django_airavata/apps/auth/views.py
@@ -21,15 +21,18 @@ def redirect_login(request, idp_alias):
_validate_idp_alias(idp_alias)
client_id = settings.KEYCLOAK_CLIENT_ID
base_authorize_url = settings.KEYCLOAK_AUTHORIZE_URL
+ redirect_uri = request.build_absolute_uri(
+ reverse('django_airavata_auth:callback'))
+ if 'next' in request.GET:
+ redirect_uri += "?next=" + quote(request.GET['next'])
oauth2_session = OAuth2Session(
- client_id, scope='openid',
- redirect_uri=request.build_absolute_uri(
- reverse('django_airavata_auth:callback')))
+ client_id, scope='openid', redirect_uri=redirect_uri)
authorization_url, state = oauth2_session.authorization_url(
base_authorize_url)
authorization_url += '&kc_idp_hint=' + quote(idp_alias)
# Store state in session for later validation (see backends.py)
request.session['OAUTH2_STATE'] = state
+ request.session['OAUTH2_REDIRECT_URI'] = redirect_uri
return redirect(authorization_url)