Enable OpenID 64/70364/7
authorssmith <ssmith@iol.unh.edu>
Thu, 18 Jun 2020 22:30:39 +0000 (18:30 -0400)
committerssmith <ssmith@iol.unh.edu>
Tue, 23 Jun 2020 16:31:15 +0000 (12:31 -0400)
Signed-off-by: Sean Smith <ssmith@iol.unh.edu>
Change-Id: I4397976dbafce1d9d1cccc52f0e705891e59153a

config.env.sample
requirements.txt
src/account/views.py
src/laas_dashboard/settings.py
src/laas_dashboard/urls.py
src/templates/akraino/base.html
src/templates/akraino/dashboard/landing.html
src/templates/base/base.html
src/templates/base/dashboard/landing.html

index fadf0ed..137ecb0 100644 (file)
@@ -35,6 +35,14 @@ JIRA_URL=sample_url
 JIRA_USER_NAME=sample_jira_user
 JIRA_USER_PASSWORD=sample_jira_pass
 
+# LFID
+OIDC_CLIENT_ID=sample_id
+OIDC_CLIENT_SECRET=sample_secret
+
+OIDC_AUTHORIZATION_ENDPOINT=https://linuxfoundation-test.auth0.com/authorize
+OIDC_TOKEN_ENDPOINT=https://linuxfoundation-test.auth0.com/oauth/token
+OIDC_USER_ENDPOINT=https://linuxfoundation-test.auth0.com/userinfo
+
 # Rabbitmq
 RABBITMQ_DEFAULT_USER=opnfv
 RABBITMQ_DEFAULT_PASS=opnfvopnfv
index 7e2fbd1..b34dd1e 100644 (file)
@@ -15,3 +15,4 @@ requests==2.22.0
 django-fernet-fields==0.6
 pyyaml==3.13
 pytz==2018.5
+mozilla-django-oidc==1.2.3
index d1cc813..f883338 100644 (file)
@@ -28,6 +28,7 @@ from django.views.generic import RedirectView, TemplateView, UpdateView
 from django.shortcuts import render
 from jira import JIRA
 from rest_framework.authtoken.models import Token
+from mozilla_django_oidc.auth import OIDCAuthenticationBackend
 
 
 from account.forms import AccountSettingsForm
@@ -58,6 +59,20 @@ class AccountSettingsView(UpdateView):
         return context
 
 
+class MyOIDCAB(OIDCAuthenticationBackend):
+    def filter_users_by_claims(self, claims):
+        email = claims.get(email=email)
+        if not email:
+            return self.UserModel.objects.none()
+
+        try:
+            profile = Profile.objects.get(email=email)
+            return profile.user
+
+        except Profile.DoesNotExist:
+            return self.UserModel.objects.none()
+
+
 class JiraLoginView(RedirectView):
     def get_redirect_url(self, *args, **kwargs):
         consumer = oauth.Consumer(settings.OAUTH_CONSUMER_KEY, settings.OAUTH_CONSUMER_SECRET)
index 62fc9ec..0b23960 100644 (file)
@@ -30,6 +30,7 @@ INSTALLED_APPS = [
     'api',
     'django.contrib.admin',
     'django.contrib.auth',
+    'mozilla_django_oidc',  # needs to be defined after auth
     'django.contrib.contenttypes',
     'django.contrib.sessions',
     'django.contrib.messages',
@@ -37,7 +38,7 @@ INSTALLED_APPS = [
     'django.contrib.humanize',
     'bootstrap4',
     'rest_framework',
-    'rest_framework.authtoken'
+    'rest_framework.authtoken',
 ]
 
 MIDDLEWARE = [
@@ -51,6 +52,20 @@ MIDDLEWARE = [
     'account.middleware.TimezoneMiddleware',
 ]
 
+AUTHENTICATION_BACKENDS = ['account.views.MyOIDCAB']
+
+
+# OpenID Authentications
+OIDC_RP_CLIENT_ID = os.environ['OIDC_CLIENT_ID']
+OIDC_RP_CLIENT_SECRET = os.environ['OIDC_CLIENT_SECRET']
+
+OIDC_OP_AUTHORIZATION_ENDPOINT = os.environ['OIDC_AUTHORIZATION_ENDPOINT']
+OIDC_OP_TOKEN_ENDPOINT = os.environ['OIDC_TOKEN_ENDPOINT']
+OIDC_OP_USER_ENDPOINT = os.environ['OIDC_USER_ENDPOINT']
+
+LOGIN_REDIRECT_URL = os.environ['DASHBOARD_URL']
+LOGOUT_REDIRECT_URL = os.environ['DASHBOARD_URL']
+
 ROOT_URLCONF = 'laas_dashboard.urls'
 
 TEMPLATE_OVERRIDE = os.environ.get("TEMPLATE_OVERRIDE_DIR", "")  # the user's custom template dir
index 17cbe84..7a37d7e 100644 (file)
@@ -41,7 +41,8 @@ urlpatterns = [
     url(r'^admin/', admin.site.urls),
     url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
     url(r'^api/', include('api.urls')),
-    url(r'^messages/', include('notifier.urls', namespace='notifier'))
+    url(r'^messages/', include('notifier.urls', namespace='notifier')),
+    url(r'^oidc/', include('mozilla_django_oidc.urls')),
 ]
 
 if settings.DEBUG is True:
index 1368476..b93dcd2 100644 (file)
 {% endblock logo %}
 {% block dropDown %}
 {% endblock dropDown %}
+
+{% block login %}
+    <div class="dropdown-menu dropdown-menu-right">
+        {% if user.is_authenticated %}
+        <a href="{% url 'account:settings' %}" class="text-dark dropdown-item">
+            <i class="fas fa-cog"></i>
+                Settings
+        </a>
+        <a href="{% url 'oidc_logout' %}" class="text-dark dropdown-item">
+            <i class="fas fa-sign-out-alt"></i>
+                Logout
+        </a>
+        {% else %}
+        <a href="{% url 'oidc_authentication_init' %}" class="text-dark dropdown-item">
+            <i class="fas fa-sign-in-alt"></i>
+                Login with LFID
+        </a>
+        {% endif %}
+    </div>
+{% endblock login %}
\ No newline at end of file
index d7f434b..39eebb6 100644 (file)
 <p>To get started, book a pod below:</p>
 <a class="btn btnAkr btn-lg d-flex flex-column justify-content-center align-content-center border text-white p-4" href="/booking/quick/">Book a Pod</a>
 {% endblock btnGrp %}
+
+{% block biglogin %}
+<h4 class="text-center">
+    To get started, please log in with <a href="{% url 'oidc_authentication_init' %}"> Linux Foundation ID</a>
+</h4>
+{% endblock biglogin %}
+
 {% block returningUsers %}
 {% endblock returningUsers %}
index cc6d38d..f86cff8 100644 (file)
@@ -44,6 +44,7 @@
                             {% endif %}
                             <i class="fas fa-caret-down rotate"></i>
                         </a>
+                        {% block login %}
                         <div class="dropdown-menu dropdown-menu-right">
                             {% if user.is_authenticated %}
                                 <a href="{% url 'account:settings' %}" class="text-dark dropdown-item">
@@ -61,6 +62,7 @@
                                 </a>
                             {% endif %}
                         </div>
+                        {% endblock login %}
                     </li>
                 </ul>
             </div>
index dd09dc4..c46b0fa 100644 (file)
     <div class="col-12 col-lg-6 mb-4">
         <h2 class="border-bottom">Get Started</h2>
         {% if request.user.is_anonymous %}
+        {% block biglogin %}
         <h4 class="text-center">
             To get started, please log in with your <a href="/accounts/login">Linux Foundation Jira account</a>
         </h4>
+        {% endblock biglogin %}
         {% else %}
         {% block btnGrp %}
         <p>To get started, book a server below:</p>