From 88334fe03e5b0e87bb0d32a6bd3f868a4ca32b3a Mon Sep 17 00:00:00 2001
From: pabois <pierreandre.boissinot@noesya.coop>
Date: Thu, 20 Oct 2022 15:09:21 +0200
Subject: [PATCH] wip extranets sso

---
 app/assets/javascripts/admin/commons/sso.js   | 20 +++++++++++++++++++
 .../communication/extranets_controller.rb     |  5 ++++-
 .../communication/extranets/_form.html.erb    | 16 +++++++++------
 config/locales/communication/en.yml           |  6 ++++++
 config/locales/communication/fr.yml           |  6 ++++++
 5 files changed, 46 insertions(+), 7 deletions(-)

diff --git a/app/assets/javascripts/admin/commons/sso.js b/app/assets/javascripts/admin/commons/sso.js
index 1009ce910..558f53445 100644
--- a/app/assets/javascripts/admin/commons/sso.js
+++ b/app/assets/javascripts/admin/commons/sso.js
@@ -5,6 +5,13 @@ window.osuny.sso = {
         this.hasSsoInput.addEventListener('change', this.onHasSsoChange.bind(this));
         this.ssoFields = document.querySelectorAll('.sso-inputs');
         this.onHasSsoChange();
+
+        this.hasInheritedSsoInput = document.querySelector('input[type="checkbox"][name$="[sso_inherit_from_university]"]');
+        if (this.hasInheritedSsoInput) {
+            this.hasInheritedSsoInput.addEventListener('change', this.onHasInheritedSsoChange.bind(this));
+            this.ssoInheritedFields = document.querySelectorAll('.sso-inherited-inputs');
+            this.onHasInheritedSsoChange();
+        }
     },
 
     onHasSsoChange: function () {
@@ -20,6 +27,19 @@ window.osuny.sso = {
         }
     },
 
+    onHasInheritedSsoChange: function () {
+        'use strict';
+        var value = this.hasInheritedSsoInput.checked,
+            i;
+        for (i = 0; i < this.ssoInheritedFields.length; i += 1) {
+            if (value) {
+                this.ssoInheritedFields[i].classList.add('d-none');
+            } else {
+                this.ssoInheritedFields[i].classList.remove('d-none');
+            }
+        }
+    },
+
     invoke: function () {
         'use strict';
         return {
diff --git a/app/controllers/admin/communication/extranets_controller.rb b/app/controllers/admin/communication/extranets_controller.rb
index 2a1123239..56a12f992 100644
--- a/app/controllers/admin/communication/extranets_controller.rb
+++ b/app/controllers/admin/communication/extranets_controller.rb
@@ -64,6 +64,9 @@ class Admin::Communication::ExtranetsController < Admin::Communication::Applicat
 
   def extranet_params
     params.require(:communication_extranet)
-          .permit(:name, :domain, :about_type, :about_id, :registration_contact, :logo, :logo_delete)
+          .permit(:name, :domain, :about_type, :about_id,
+            :registration_contact, :logo, :logo_delete,
+            :has_sso, :sso_inherit_from_university, :sso_target_url, :sso_cert, :sso_name_identifier_format, :sso_mapping
+          )
   end
 end
diff --git a/app/views/admin/communication/extranets/_form.html.erb b/app/views/admin/communication/extranets/_form.html.erb
index c878aa055..44b31c367 100644
--- a/app/views/admin/communication/extranets/_form.html.erb
+++ b/app/views/admin/communication/extranets/_form.html.erb
@@ -36,15 +36,19 @@
         <%= f.input :has_sso %>
         <div class="sso-inputs">
           <%= f.input :sso_inherit_from_university if current_university.has_sso? %>
-          <%= f.input :sso_target_url, required: true %>
-          <%= f.input :sso_cert, required: true %>
-          <%= f.input :sso_name_identifier_format, required: true %>
+          <div class="sso-inherited-inputs">
+            <%= f.input :sso_target_url, required: true %>
+            <%= f.input :sso_cert, required: true %>
+            <%= f.input :sso_name_identifier_format, required: true %>
+          </div>
         </div>
       </div>
       <div class="col-md-6 sso-inputs">
-        <h4 class="mb-4"><%= University.human_attribute_name('sso_mapping') %></h4>
-        <%= f.error_notification message: f.object.errors[:sso_mapping].to_sentence if f.object.errors[:sso_mapping].present? %>
-        <%= render 'server/universities/sso_mapping', kind: 'extranet', object: extranet %>
+        <div class="sso-inherited-inputs">
+          <h4 class="mb-4"><%= University.human_attribute_name('sso_mapping') %></h4>
+          <%= f.error_notification message: f.object.errors[:sso_mapping].to_sentence if f.object.errors[:sso_mapping].present? %>
+          <%= render 'server/universities/sso_mapping', kind: 'extranet', object: extranet %>
+        </div>
       </div>
     </div>
   </div>
diff --git a/config/locales/communication/en.yml b/config/locales/communication/en.yml
index 1b4f745ec..3f28e9e1f 100644
--- a/config/locales/communication/en.yml
+++ b/config/locales/communication/en.yml
@@ -131,6 +131,12 @@ en:
         text: Text
         title: Title
         website: Website
+    errors:
+      models:
+        communication/extranet:
+          attributes:
+            sso_mapping:
+              missing_email: doesn't handle the email
   admin:
     communication:
       blocks:
diff --git a/config/locales/communication/fr.yml b/config/locales/communication/fr.yml
index 0646d6c9c..5b3e5b824 100644
--- a/config/locales/communication/fr.yml
+++ b/config/locales/communication/fr.yml
@@ -132,6 +132,12 @@ fr:
         text: Texte
         title: Titre
         website: Site Web
+    errors:
+      models:
+        communication/extranet:
+          attributes:
+            sso_mapping:
+              missing_email: ne gère pas l'adresse email
   admin:
     communication:
       blocks:
-- 
GitLab