Skip to content
Snippets Groups Projects
Commit 76785a58 authored by pabois's avatar pabois
Browse files

wip extranet sso

parent d66c9c38
No related branches found
No related tags found
No related merge requests found
Showing
with 64 additions and 30 deletions
......@@ -16,6 +16,5 @@
//= require_tree ./admin/commons
//= require_tree ./admin/plugins
//= require ./admin/communication/init
//= require ./admin/university/init
window.osuny = {};
window.osuny.university.edit = {
window.osuny.sso = {
init: function () {
'use strict';
this.hasSsoInput = document.querySelector('input[type="checkbox"][name="university[has_sso]"]');
this.hasSsoInput = document.querySelector('input[type="checkbox"][name$="[has_sso]"]');
this.hasSsoInput.addEventListener('change', this.onHasSsoChange.bind(this));
this.ssoFields = document.querySelectorAll('.sso-inputs');
this.onHasSsoChange();
......@@ -30,10 +30,7 @@ window.osuny.university.edit = {
window.addEventListener('DOMContentLoaded', function () {
'use strict';
if (document.body.classList.contains('universities-new')
|| document.body.classList.contains('universities-create')
|| document.body.classList.contains('universities-edit')
|| document.body.classList.contains('universities-update')) {
window.osuny.university.edit.init();
if (document.querySelector('[name$="[has_sso]"]')) {
window.osuny.sso.init();
}
});
//= require_self
//= require ./edit
window.osuny.university = {};
......@@ -13,7 +13,7 @@
# sso_mapping :jsonb
# sso_name_identifier_format :string
# sso_provider :integer default("saml")
# sso_target_url :integer default(0)
# sso_target_url :string
# created_at :datetime not null
# updated_at :datetime not null
# about_id :uuid indexed => [about_type]
......
......@@ -30,6 +30,23 @@
</div>
</div>
</div>
<h3 class="mt-5"><%= t('university.sso') %></h3>
<div class="row">
<div class="col-md-6">
<%= 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>
</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>
</div>
</div>
<% content_for :action_bar_right do %>
<%= submit f %>
......
......@@ -44,7 +44,7 @@
<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 'sso_mapping', university: university %>
<%= render 'sso_mapping', kind: 'university', object: university %>
</div>
</div>
......
<% mapping_keys = ['email', 'first_name', 'last_name', 'role', 'mobile_phone', 'language', 'picture_url'] %>
<%
if kind == 'university'
mapping_keys = ['email', 'first_name', 'last_name', 'role', 'mobile_phone', 'language', 'picture_url']
else
mapping_keys = ['email', 'first_name', 'last_name', 'mobile_phone', 'language', 'picture_url']
end
%>
<%# Include vue.js before call Vue.createApp %>
<%= javascript_include_tag 'vue' %>
......@@ -40,15 +46,17 @@
<option v-for="(label, key) in keys" :value="key">{{ label }}</option>
</select>
</div>
<div v-if="field.internal_key === 'role'">
<hr class="mt-4">
<% User.roles.keys.each do |role| %>
<div class="form-group">
<label for="" class="form-label"><%= t("activerecord.attributes.user.roles.#{role}") %></label>
<input v-model="field.roles.<%= role %>" type="text" class="form-control">
</div>
<% end %>
</div>
<% if kind == 'university' %>
<div v-if="field.internal_key === 'role'">
<hr class="mt-4">
<% User.roles.keys.each do |role| %>
<div class="form-group">
<label for="" class="form-label"><%= t("activerecord.attributes.user.roles.#{role}") %></label>
<input v-model="field.roles.<%= role %>" type="text" class="form-control">
</div>
<% end %>
</div>
<% end %>
</div>
</div>
</div>
......@@ -59,7 +67,7 @@
</a>
</div>
<textarea name="university[sso_mapping]" id="university_sso_mapping" rows="20" cols="200" class="d-none">
<textarea name="<%= kind %>[sso_mapping]" id="<%= kind %>_sso_mapping" rows="20" cols="200" class="d-none">
{{ JSON.stringify(fields) }}
</textarea>
......@@ -72,7 +80,7 @@
},
data() {
return {
fields: <%= university.sso_mapping.blank? ? '[]' : university.sso_mapping.to_json.html_safe %>,
fields: <%= object.sso_mapping.blank? ? '[]' : object.sso_mapping.to_json.html_safe %>,
keys: <%= mapping_keys.map { |key| [key, User.human_attribute_name(key)] }.to_h.to_json.html_safe %>
}
}
......
......@@ -49,8 +49,14 @@ en:
about_Research::Laboratory: Laboratory extranet
about_type: About
domain: Domain
has_sso: Has SSO?
name: Name
registration_contact: Contact mail for registrations problems
sso_cert: Certificate
sso_inherit_from_university: SSO inherited from University
sso_mapping: Mapping
sso_name_identifier_format: Name Identifier Format
sso_target_url: Target URL
communication/website:
about: About
about_: Independent website
......
......@@ -49,8 +49,14 @@ fr:
about_Research::Laboratory: Extranet d'un laboratoire
about_type: Type d'extranet
domain: Domaine
has_sso: A un SSO ?
name: Nom
registration_contact: Mail de contact pour les problèmes d'inscription
sso_cert: Certificat
sso_inherit_from_university: SSO hérité de l'Université
sso_mapping: Mapping
sso_name_identifier_format: Name Identifier Format
sso_target_url: URL cible
communication/website:
about: Sujet du site
about_: Site indépendant
......
class ChangeExtranetSsoTargetUrlKind < ActiveRecord::Migration[6.1]
def change
change_column :communication_extranets, :sso_target_url, :string, default: nil
end
end
......@@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 2022_10_20_102138) do
ActiveRecord::Schema.define(version: 2022_10_20_124935) do
# These are extensions that must be enabled in order to support this database
enable_extension "pgcrypto"
......@@ -109,7 +109,7 @@ ActiveRecord::Schema.define(version: 2022_10_20_102138) do
t.jsonb "sso_mapping"
t.string "sso_name_identifier_format"
t.integer "sso_provider", default: 0
t.integer "sso_target_url", default: 0
t.string "sso_target_url"
t.index ["about_type", "about_id"], name: "index_communication_extranets_on_about"
t.index ["university_id"], name: "index_communication_extranets_on_university_id"
end
......
......@@ -13,7 +13,7 @@
# sso_mapping :jsonb
# sso_name_identifier_format :string
# sso_provider :integer default("saml")
# sso_target_url :integer default(0)
# sso_target_url :string
# created_at :datetime not null
# updated_at :datetime not null
# about_id :uuid indexed => [about_type]
......
......@@ -13,7 +13,7 @@
# sso_mapping :jsonb
# sso_name_identifier_format :string
# sso_provider :integer default("saml")
# sso_target_url :integer default(0)
# sso_target_url :string
# created_at :datetime not null
# updated_at :datetime not null
# about_id :uuid indexed => [about_type]
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment