diff --git a/database/2.6.5-2.6.5.3.sql b/database/2.6.5-2.6.5.3.sql new file mode 100644 index 0000000000000000000000000000000000000000..db14f6cc8b14e535291d0c44328f6ee1420814d6 --- /dev/null +++ b/database/2.6.5-2.6.5.3.sql @@ -0,0 +1,6 @@ +# Run this when updating from version 2.6.5 to 2.6.5.3 + +DROP VIEW `federation_v`; +CREATE VIEW `federation_v` AS select `federation`.`code` AS `code`,`mds_data`.`reg_auth` AS `reg_auth`,`mds_data`.`metadata_url` AS `metadata_url`,`mds_data`.`status` AS `status`,`federation`.`fed_id` AS `fed_id`,`federation`.`europe` AS `europe`,`federation`.`contact_email` AS `contact_email`,`federation`.`url` AS `url`,`federation`.`policy_english` AS `policy_english`,`federation`.`policy_hardcopy` AS `policy_hardcopy`,`federation`.`policy_date` AS `policy_date`,`federation`.`membership_date` AS `membership_date`, IF((`federation`.`production_date` IS NULL OR `federation`.`production_date` = '0000-00-00') AND `mds_data`.`status` = 2, '2050-01-01', `federation`.`production_date`) AS `production_date`,`federation`.`name` AS `name`,`federation`.`policy_version` AS `policy_version`,`federation`.`suspension_type` AS `suspension_type`,`federation_status`.`valid_until` AS `valid_until`,`federation_status`.`last_notification` AS `last_notification`,`federation_status`.`feed_problem` AS `feed_problem`,`federation_status`.`new_profile_status` AS `new_profile_status`,`federation_status`.`new_profile_modified` AS `new_profile_modified`, `mds_data`.`whitelist_idp` AS `whitelist_idp` from ((`federation` left join `mds_data` on(`mds_data`.`code` = `federation`.`code`)) left join `federation_status` on(`federation`.`code` = `federation_status`.`code`)); + + diff --git a/database/edugain_schema.sql b/database/edugain_schema.sql index f1f1488bd21ceadae6f07993726352217958ce8c..221fbfd42adc68b099825b87da32a4706176855c 100644 --- a/database/edugain_schema.sql +++ b/database/edugain_schema.sql @@ -837,7 +837,7 @@ CREATE TABLE `temporary_entity_sha1` ( /*!50001 SET collation_connection = utf8_general_ci */; /*!50001 CREATE ALGORITHM=UNDEFINED */ /*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */ -/*!50001 VIEW `federation_v` AS select `federation`.`code` AS `code`,`mds_data`.`reg_auth` AS `reg_auth`,`mds_data`.`metadata_url` AS `metadata_url`,`mds_data`.`status` AS `status`,`federation`.`fed_id` AS `fed_id`,`federation`.`europe` AS `europe`,`federation`.`contact_email` AS `contact_email`,`federation`.`url` AS `url`,`federation`.`policy_english` AS `policy_english`,`federation`.`policy_hardcopy` AS `policy_hardcopy`,`federation`.`policy_date` AS `policy_date`,`federation`.`membership_date` AS `membership_date`,`federation`.`production_date` AS `production_date`,`federation`.`name` AS `name`,`federation`.`policy_version` AS `policy_version`, federation.suspension_type AS suspension_type, `federation_status`.`valid_until` AS `valid_until`,`federation_status`.`last_notification` AS `last_notification`,`federation_status`.`feed_problem` AS `feed_problem`,`federation_status`.`new_profile_status` AS `new_profile_status`,`federation_status`.`new_profile_modified` AS `new_profile_modified` from ((`federation` left join `mds_data` on((`mds_data`.`code` = `federation`.`code`))) left join `federation_status` on((`federation`.`code` = `federation_status`.`code`))) */; +/*!50001 VIEW `federation_v` AS select `federation`.`code` AS `code`,`mds_data`.`reg_auth` AS `reg_auth`,`mds_data`.`metadata_url` AS `metadata_url`,`mds_data`.`status` AS `status`,`federation`.`fed_id` AS `fed_id`,`federation`.`europe` AS `europe`,`federation`.`contact_email` AS `contact_email`,`federation`.`url` AS `url`,`federation`.`policy_english` AS `policy_english`,`federation`.`policy_hardcopy` AS `policy_hardcopy`,`federation`.`policy_date` AS `policy_date`,`federation`.`membership_date` AS `membership_date`,if((`federation`.`production_date` is null or `federation`.`production_date` = '0000-00-00') and `mds_data`.`status` = 2,'2050-01-01',`federation`.`production_date`) AS `production_date`,`federation`.`name` AS `name`,`federation`.`policy_version` AS `policy_version`,`federation`.`suspension_type` AS `suspension_type`,`federation_status`.`valid_until` AS `valid_until`,`federation_status`.`last_notification` AS `last_notification`,`federation_status`.`feed_problem` AS `feed_problem`,`federation_status`.`new_profile_status` AS `new_profile_status`,`federation_status`.`new_profile_modified` AS `new_profile_modified`,`mds_data`.`whitelist_idp` AS `whitelist_idp` from ((`federation` left join `mds_data` on(`mds_data`.`code` = `federation`.`code`)) left join `federation_status` on(`federation`.`code` = `federation_status`.`code`)) */; /*!50001 SET character_set_client = @saved_cs_client */; /*!50001 SET character_set_results = @saved_cs_results */; /*!50001 SET collation_connection = @saved_col_connection */; diff --git a/lib/eduGAIN_manage.php b/lib/eduGAIN_manage.php index 5c2180218579f4ce03bfbae5a6be04ecfa942cbc..b84e2af37637ed5fc8630d1f45c5c19c6271c88f 100644 --- a/lib/eduGAIN_manage.php +++ b/lib/eduGAIN_manage.php @@ -64,7 +64,7 @@ class eduGAIN_manage extends eduGAIN { } } - foreach ( ['url', 'metadata_url', 'reg_auth', 'security_contact_url_value',] as $key) { + foreach ( ['url', 'metadata_url', 'reg_auth', 'whitelist_idp', 'security_contact_url_value',] as $key) { if(!empty($postInput[$key])) { $output[$key] = filter_var($this->cleanInput($postInput[$key]), FILTER_SANITIZE_URL); } @@ -153,6 +153,7 @@ class eduGAIN_manage extends eduGAIN { Utils::debug(4, $table, "updateUniqueRecord: Table:", "\n"); Utils::debug(4, $fields, "updateUniqueRecord: Fields:", "\n"); Utils::debug(4, $this->changedFields, "updateUniqueRecord: Changed fields:", "\n"); + Utils::debug(4, $this->args, "updateUniqueRecord: Args:", "\n"); $update_map = 0; $noUpdates = true; $U = []; @@ -184,13 +185,14 @@ class eduGAIN_manage extends eduGAIN { private function updateMdsData($superadmin) { if ($superadmin !== 1) { if ($this->args['status'] > 4 || $this->args['fed_status'] > 4 || in_array('code', $this->changedFields) || - in_array('metadata_url', $this->changedFields) || in_array('reg_auth', $this->changedFields)) { + in_array('metadata_url', $this->changedFields) || in_array('reg_auth', $this->changedFields) || + in_array('whitelist_idp', $this->changedFields)) { Utils::debug(4, "updateMdsData - updates not allowed without superadmin rights\n"); return; } } Utils::debug(4, $this->args['status'], "MDS Status:", "\n"); - $f = ['code', 'metadata_url', 'reg_auth', 'status']; + $f = ['code', 'metadata_url', 'reg_auth', 'status', 'whitelist_idp']; $this->updateUniqueRecord('mds_data', $f); if ($this->args['status'] != $this->args['fed_status'] && $this->updateMaps) { $this->updateMaps = false; diff --git a/lib/eduGAIN_manage_gui.php b/lib/eduGAIN_manage_gui.php index 4af5c3bd72f84f6d01c0c03828933aab81934662..cd5df3f127b4507c47ee8c517c97d486a33716fb 100644 --- a/lib/eduGAIN_manage_gui.php +++ b/lib/eduGAIN_manage_gui.php @@ -101,6 +101,7 @@ class eduGAIN_manage_gui { $out .= '<select name="' . $id . '"' . $class . $statusDisabled . ' id="' . $id . '"> <option value="0" id="status_none" class="critical" selected>none</option> <option value="1" class="critical">candidate</option> +<option value="2" class="critical">invited for vote</option> <option value="4" class="critical">voting only</option> <option value="5" class="critical, ot">suspended</option> <option value="6" class="critical, ot">paricipant</option> diff --git a/page-logic/manage.php b/page-logic/manage.php index 193e81b9859d049464eaa533124a1e7f40404544..16ab1e1e58e3fd9e4915e131f32a643a6aa8fd5a 100644 --- a/page-logic/manage.php +++ b/page-logic/manage.php @@ -235,6 +235,7 @@ $rows[] = $edugainGUI->row('Policy', 'POL', 'policy'); $rows[] = $edugainGUI->row('Policy in English', 'C', 'policy_english'); $rows[] = $edugainGUI->row('Metadata URL', 'I', 'metadata_url', '', 2,0,6); $rows[] = $edugainGUI->row('Registration Authority', 'I', 'reg_auth', '', 2,0,6); +$rows[] = $edugainGUI->row('Whitelist IdP', 'I', 'whitelist_idp', '', 2,0,6); $rows[] = $edugainGUI->row('Signing certificate', 'CERT', 'certificate'); $data['federations'] = $federations; diff --git a/page-logic/status.php b/page-logic/status.php index 61bd9c328ffd6ab328b5056d208cd973658e8c09..9549ed0a20630b17ded235006ee229372a5adc6a 100644 --- a/page-logic/status.php +++ b/page-logic/status.php @@ -5,6 +5,7 @@ require_once(eduGAIN_config . 'database_ro.php'); $statusMap = [0 => 'unknown', 1 => 'candidates', 2 => 'unknown', 4 => 'voting_only', 5 => 'participants', 6 => 'participants']; $participants = []; $votingOnly = []; +$invitedForSigning = []; $candidates = []; $fieldList = []; $edugain = new eduGAIN(); @@ -185,8 +186,10 @@ if ($singleFed) { $processedFederation = processFederation($federation); $processedFederation['status'] = $status; if ($status) { // This will exclude federations with a status of 0 (lib/Status.php ln 124) - if ($status < 4 && $status != 2) { + if ($status == 1) { $candidates[] = $processedFederation; + } else if ($status == 2) { + $invitedForSigning[] = $processedFederation; } else if ($status > 3 && $status < 5) { $votingOnly[] = $processedFederation; } else if ($status == 6 || $status == 5) { @@ -196,6 +199,7 @@ if ($singleFed) { } $data['participants'] = $participants; $data['votingOnly'] = $votingOnly; + $data['invitedForSigning'] = $invitedForSigning; $data['candidates'] = $candidates; if (isset($_GET['issues'])) { $data['problem_switch'] = 1; diff --git a/templates/status.html b/templates/status.html index 81bc9dac06561f70b0e25911828802f8f6918fe5..f6cae5a523ce7b666eba2648a77e1ad21d4f011a 100644 --- a/templates/status.html +++ b/templates/status.html @@ -15,6 +15,8 @@ <label for="include_participants">Participants ({{ participants | length }})</label> <input type="checkbox" class="type_filter" id="include_voting_only" value="voting_only_group" checked="checked" /> <label for="include_voting_only">Voting-only members ({{ votingOnly | length }})</label> + <input type="checkbox" class="type_filter" id="include_invited" value="invited_group" checked="checked" /> + <label for="include_candidates">In signing ({{ invitedForSigning | length }})</label> <input type="checkbox" class="type_filter" id="include_candidates" value="candidates_group" checked="checked" /> <label for="include_candidates">Candidates ({{ candidates | length }})</label> </div> @@ -32,10 +34,11 @@ <div id="filtered_results_div"> {% include 'status/status-members.html' with { 'group_name' : 'participants', 'federations' : participants } only %} {% include 'status/status-members.html' with { 'group_name' : 'voting_only', 'federations' : votingOnly } only %} + {% include 'status/status-members.html' with { 'group_name' : 'invited_for_declaration_signing', 'federations' : invitedForSigning } only %} {% include 'status/status-members.html' with { 'group_name' : 'candidates', 'federations' : candidates } only %} </div> - </div> + </div> <div class="col-2-1 alignment-3" style="position: relative;"> {% for federation in participants %} {% include 'status/status-members-details.html' %} @@ -43,6 +46,9 @@ {% for federation in votingOnly %} {% include 'status/status-members-details.html' %} {% endfor %} + {% for federation in invitedForSigning %} + {% include 'status/status-members-details.html' %} + {% endfor %} {% for federation in candidates %} {% include 'status/status-members-details.html' %} {% endfor %} @@ -53,7 +59,7 @@ <div> <div style="display: inline-block; background-color: #d93; width: 1em; height: 1em"></div><span> Participants</span> <div style="display: inline-block; background-color: #81d742; width: 1em; height: 1em"></div><span> Voting-only</span> - <div style="display: inline-block; background-color: #1e73be; width: 1em; height: 1em"></div><span> Candidate</span> + <div style="display: inline-block; background-color: #1e73be; width: 1em; height: 1em"></div><span> Candidate</span> </div> <h3>World</h3> @@ -91,7 +97,8 @@ var _participants = {{ participants|json_encode()|raw() }}; var _votingOnly = {{ votingOnly|json_encode()|raw() }}; var _candidates = {{ candidates|json_encode()|raw() }}; -var _allMembers = _participants.concat(_votingOnly, _candidates); +var _invited = {{ invited|json_encode()|raw() }}; +var _allMembers = _participants.concat(_votingOnly, _invited, _candidates); function quickSearch(input) { return _allMembers.filter(function(federation){ diff --git a/templates/status/status-members.html b/templates/status/status-members.html index ed0ebbd035c5778909024eda69fca250f23709df..4e8c0838e6566f1cd291a10d5d8dfc06b86205f5 100644 --- a/templates/status/status-members.html +++ b/templates/status/status-members.html @@ -1,7 +1,7 @@ <div id="{{ group_name }}_group_div"> - <h3>{{ group_name | capitalize | replace({'_': '-'}) }}</h3> + <h3>{{ group_name | capitalize | replace({'_': ' '}) }}</h3> {% for federation in federations %} {% set alert_icon = 'green_dot.png' %} {% set alert_text = 'status OK' %}