From f98d444414927d5783c2339309a105912b932593 Mon Sep 17 00:00:00 2001 From: briskt <3172830+briskt@users.noreply.github.com> Date: Tue, 2 Jul 2024 14:34:33 -0600 Subject: [PATCH 01/12] add space after colon in Twig maps --- modules/material/themes/material/mfa/low-on-backup-codes.twig | 2 +- modules/material/themes/material/mfa/new-backup-codes.twig | 2 +- modules/material/themes/material/mfa/send-manager-mfa.twig | 2 +- modules/material/themes/material/profilereview/review.twig | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/modules/material/themes/material/mfa/low-on-backup-codes.twig b/modules/material/themes/material/mfa/low-on-backup-codes.twig index a5e84d5..dcaff9d 100644 --- a/modules/material/themes/material/mfa/low-on-backup-codes.twig +++ b/modules/material/themes/material/mfa/low-on-backup-codes.twig @@ -29,7 +29,7 @@

- {{ '{mfa:running_out_info}'|trans({'%numBackupCodesRemaining%':numBackupCodesRemaining}) }} + {{ '{mfa:running_out_info}'|trans({'%numBackupCodesRemaining%': numBackupCodesRemaining}) }}

diff --git a/modules/material/themes/material/mfa/new-backup-codes.twig b/modules/material/themes/material/mfa/new-backup-codes.twig index d095a0e..1b6dd40 100644 --- a/modules/material/themes/material/mfa/new-backup-codes.twig +++ b/modules/material/themes/material/mfa/new-backup-codes.twig @@ -57,7 +57,7 @@

- {{ '{mfa:account}'|trans({'%idpName%':idpName}) }} + {{ '{mfa:account}'|trans({'%idpName%': idpName}) }} {{ "now"|date("M j, Y") }}

diff --git a/modules/material/themes/material/mfa/send-manager-mfa.twig b/modules/material/themes/material/mfa/send-manager-mfa.twig index 1e8a423..f23478a 100644 --- a/modules/material/themes/material/mfa/send-manager-mfa.twig +++ b/modules/material/themes/material/mfa/send-manager-mfa.twig @@ -29,7 +29,7 @@

- {{ '{mfa:manager_info}'|trans({'%managerEmail%':managerEmail})|raw }} + {{ '{mfa:manager_info}'|trans({'%managerEmail%': managerEmail})|raw }}

diff --git a/modules/material/themes/material/profilereview/review.twig b/modules/material/themes/material/profilereview/review.twig index 1f01494..b28cb38 100644 --- a/modules/material/themes/material/profilereview/review.twig +++ b/modules/material/themes/material/profilereview/review.twig @@ -61,14 +61,14 @@ {{ mfa.label }} {% if mfa.type == 'backupcode' %} - {{ '{review:remaining}'|trans({'%count%':mfa.data.count}) }} + {{ '{review:remaining}'|trans({'%count%': mfa.data.count}) }} {% endif %} {% if mfa.last_used_utc is empty %} {{ '{review:used_never}'|trans }} {% else %} - {{ '{review:used}'|trans({'%when%':mfa.last_used_utc}) }} + {{ '{review:used}'|trans({'%when%': mfa.last_used_utc}) }} {% endif %} From 1251a6b8c5eaddeabb64e05740dfee9488a4346c Mon Sep 17 00:00:00 2001 From: briskt <3172830+briskt@users.noreply.github.com> Date: Tue, 2 Jul 2024 16:42:45 -0600 Subject: [PATCH 02/12] change twig variables to snake case --- modules/expirychecker/public/about2expire.php | 9 +++---- modules/expirychecker/public/expired.php | 6 ++--- .../src/Auth/Process/ExpiryDate.php | 6 ----- .../themes/material/default/other_mfas.twig | 4 +-- .../material/default/selectidp-links.twig | 4 +-- .../material/expirychecker/about2expire.twig | 6 ++--- .../material/expirychecker/expired.twig | 2 +- .../material/mfa/low-on-backup-codes.twig | 2 +- .../themes/material/mfa/new-backup-codes.twig | 14 +++++----- .../material/mfa/out-of-backup-codes.twig | 4 +-- .../mfa/prompt-for-mfa-backupcode.twig | 6 ++--- .../material/mfa/prompt-for-mfa-manager.twig | 8 +++--- .../material/mfa/prompt-for-mfa-totp.twig | 8 +++--- .../material/mfa/prompt-for-mfa-webauthn.twig | 18 ++++++------- .../themes/material/mfa/send-manager-mfa.twig | 6 ++--- .../material/profilereview/nag-for-mfa.twig | 4 +-- .../themes/material/profilereview/review.twig | 12 ++++----- .../material/silauth/loginuserpass.twig | 26 +++++++++---------- modules/mfa/public/low-on-backup-codes.php | 6 ++--- modules/mfa/public/new-backup-codes.php | 12 ++++----- modules/mfa/public/out-of-backup-codes.php | 6 ++--- modules/mfa/public/prompt-for-mfa.php | 24 ++++++++--------- modules/mfa/public/send-manager-mfa.php | 9 +++---- modules/profilereview/public/nag.php | 8 +++--- modules/profilereview/public/review.php | 6 ++--- modules/silauth/public/loginuserpass.php | 23 +++++----------- 26 files changed, 108 insertions(+), 131 deletions(-) diff --git a/modules/expirychecker/public/about2expire.php b/modules/expirychecker/public/about2expire.php index 05f2de1..7200a7b 100644 --- a/modules/expirychecker/public/about2expire.php +++ b/modules/expirychecker/public/about2expire.php @@ -55,12 +55,9 @@ $globalConfig = Configuration::getInstance(); $t = new Template($globalConfig, 'expirychecker:about2expire'); -$t->data['formTarget'] = Module::getModuleURL('expirychecker/about2expire.php'); -$t->data['formData'] = ['StateId' => $stateId]; -$t->data['daysLeft'] = $state['daysLeft']; -$t->data['dayOrDays'] = (intval($state['daysLeft']) === 1 ? 'day' : 'days'); -$t->data['expiresAtTimestamp'] = $state['expiresAtTimestamp']; -$t->data['accountName'] = $state['accountName']; +$t->data['form_target'] = Module::getModuleURL('expirychecker/about2expire.php'); +$t->data['form_data'] = ['StateId' => $stateId]; +$t->data['days_left'] = $state['daysLeft']; $t->send(); Logger::info('expirychecker - User has been warned that their password will expire soon.'); diff --git a/modules/expirychecker/public/expired.php b/modules/expirychecker/public/expired.php index 07f8a55..95c42d4 100644 --- a/modules/expirychecker/public/expired.php +++ b/modules/expirychecker/public/expired.php @@ -48,10 +48,8 @@ $globalConfig = Configuration::getInstance(); $t = new Template($globalConfig, 'expirychecker:expired'); -$t->data['formTarget'] = Module::getModuleURL('expirychecker/expired.php'); -$t->data['formData'] = ['StateId' => $stateId]; -$t->data['expiresAtTimestamp'] = $state['expiresAtTimestamp']; -$t->data['accountName'] = $state['accountName']; +$t->data['form_target'] = Module::getModuleURL('expirychecker/expired.php'); +$t->data['form_data'] = ['StateId' => $stateId]; $t->send(); Logger::info('expirychecker - User has been told that their password has expired.'); diff --git a/modules/expirychecker/src/Auth/Process/ExpiryDate.php b/modules/expirychecker/src/Auth/Process/ExpiryDate.php index 8503f16..c055a20 100644 --- a/modules/expirychecker/src/Auth/Process/ExpiryDate.php +++ b/modules/expirychecker/src/Auth/Process/ExpiryDate.php @@ -242,8 +242,6 @@ public function redirect2PasswordChange( ): void { $sessionType = 'expirychecker'; /* Save state and redirect. */ - $state['expiresAtTimestamp'] = $expiryTimestamp; - $state['accountName'] = $accountName; $id = State::saveState( $state, 'expirychecker:redirected_to_password_change_url' @@ -359,8 +357,6 @@ public function redirectToExpiredPage(array &$state, string $accountName, int $e ])); /* Save state and redirect. */ - $state['expiresAtTimestamp'] = $expiryTimestamp; - $state['accountName'] = $accountName; $state['passwordChangeUrl'] = $this->passwordChangeUrl; $state['originalUrlParam'] = $this->originalUrlParam; @@ -396,8 +392,6 @@ protected function redirectToWarningPage(array &$state, string $accountName, int } /* Save state and redirect. */ - $state['expiresAtTimestamp'] = $expiryTimestamp; - $state['accountName'] = $accountName; $state['passwordChangeUrl'] = $this->passwordChangeUrl; $state['originalUrlParam'] = $this->originalUrlParam; diff --git a/modules/material/themes/material/default/other_mfas.twig b/modules/material/themes/material/default/other_mfas.twig index f333cdd..1922a0f 100644 --- a/modules/material/themes/material/default/other_mfas.twig +++ b/modules/material/themes/material/default/other_mfas.twig @@ -1,4 +1,4 @@ -{% if otherOptions|length > 0 %} +{% if other_options|length > 0 %}
{# used type=button to avoid form submission on click since this is just used to display the ul #}
    - {% for option in otherOptions %} + {% for option in other_options %} {# TODO: Non-interactive elements should not be assigned mouse or keyboard event listeners. #}
  • diff --git a/modules/material/themes/material/default/selectidp-links.twig b/modules/material/themes/material/default/selectidp-links.twig index eaa4fe4..2f91b16 100644 --- a/modules/material/themes/material/default/selectidp-links.twig +++ b/modules/material/themes/material/default/selectidp-links.twig @@ -37,9 +37,9 @@
    - {% if helpCenterUrl is defined and helpCenterUrl is not empty %} + {% if help_center_url is defined and help_center_url is not empty %} diff --git a/modules/material/themes/material/expirychecker/about2expire.twig b/modules/material/themes/material/expirychecker/about2expire.twig index a6468ea..b4561ce 100644 --- a/modules/material/themes/material/expirychecker/about2expire.twig +++ b/modules/material/themes/material/expirychecker/about2expire.twig @@ -16,15 +16,15 @@
    - {% for name, value in formData %} + {% for name, value in form_data %} {% endfor %}

    - {% if daysLeft < 2 %} + {% if days_left < 2 %} {{ '{about2expire:expiring_in_a_day}'|trans }} {% else %} - {{ '{about2expire:expiring_soon}'|trans({'%daysLeft%': daysLeft}) }} + {{ '{about2expire:expiring_soon}'|trans({'%daysLeft%': days_left}) }} {% endif %}

    diff --git a/modules/material/themes/material/expirychecker/expired.twig b/modules/material/themes/material/expirychecker/expired.twig index e0cbf91..4001396 100644 --- a/modules/material/themes/material/expirychecker/expired.twig +++ b/modules/material/themes/material/expirychecker/expired.twig @@ -16,7 +16,7 @@
    - {% for name, value in formData %} + {% for name, value in form_data %} {% endfor %} diff --git a/modules/material/themes/material/mfa/low-on-backup-codes.twig b/modules/material/themes/material/mfa/low-on-backup-codes.twig index dcaff9d..adabba1 100644 --- a/modules/material/themes/material/mfa/low-on-backup-codes.twig +++ b/modules/material/themes/material/mfa/low-on-backup-codes.twig @@ -29,7 +29,7 @@

    - {{ '{mfa:running_out_info}'|trans({'%numBackupCodesRemaining%': numBackupCodesRemaining}) }} + {{ '{mfa:running_out_info}'|trans({'%numBackupCodesRemaining%': num_backup_codes_remaining}) }}

    diff --git a/modules/material/themes/material/mfa/new-backup-codes.twig b/modules/material/themes/material/mfa/new-backup-codes.twig index 1b6dd40..581520e 100644 --- a/modules/material/themes/material/mfa/new-backup-codes.twig +++ b/modules/material/themes/material/mfa/new-backup-codes.twig @@ -40,7 +40,7 @@
    - {% if newBackupCodes is not empty %} + {% if new_backup_codes is not empty %}

    {{ '{mfa:new_codes_header}'|trans }}

    @@ -57,12 +57,12 @@

    - {{ '{mfa:account}'|trans({'%idpName%': idpName}) }} + {{ '{mfa:account}'|trans({'%idpName%': idp_name}) }} {{ "now"|date("M j, Y") }}

    - {% for newCode in newBackupCodes %} + {% for newCode in new_backup_codes %} ☐ {{ newCode }} {% endfor %}
    @@ -90,8 +90,8 @@ {{ '{mfa:button_download}'|trans }} @@ -112,7 +112,7 @@
    @@ -131,7 +131,7 @@
diff --git a/modules/material/themes/material/mfa/out-of-backup-codes.twig b/modules/material/themes/material/mfa/out-of-backup-codes.twig index 4eb199e..e4e2cfa 100644 --- a/modules/material/themes/material/mfa/out-of-backup-codes.twig +++ b/modules/material/themes/material/mfa/out-of-backup-codes.twig @@ -29,7 +29,7 @@

- {% if hasOtherMfaOptions %} + {% if has_other_mfa_options %} {{ '{mfa:has_options_besides_codes}'|trans }} {% else %} {{ '{mfa:has_no_more_options}'|trans }} @@ -38,7 +38,7 @@

- {% if hasOtherMfaOptions %} + {% if has_other_mfa_options %} diff --git a/modules/material/themes/material/mfa/prompt-for-mfa-backupcode.twig b/modules/material/themes/material/mfa/prompt-for-mfa-backupcode.twig index 8dbf08a..a3c03c7 100644 --- a/modules/material/themes/material/mfa/prompt-for-mfa-backupcode.twig +++ b/modules/material/themes/material/mfa/prompt-for-mfa-backupcode.twig @@ -42,19 +42,19 @@
- {% if errorMessage is not empty %} + {% if error_message is not empty %}

error - {{ errorMessage|e }} + {{ error_message|e }}

{% endif %} diff --git a/modules/material/themes/material/mfa/prompt-for-mfa-manager.twig b/modules/material/themes/material/mfa/prompt-for-mfa-manager.twig index 48d8ef8..68e7fec 100644 --- a/modules/material/themes/material/mfa/prompt-for-mfa-manager.twig +++ b/modules/material/themes/material/mfa/prompt-for-mfa-manager.twig @@ -29,7 +29,7 @@

- {{ '{mfa:manager_sent}'|trans({'%managerEmail%': managerEmail}) }} + {{ '{mfa:manager_sent}'|trans({'%managerEmail%': manager_email}) }}

@@ -42,19 +42,19 @@
- {% if errorMessage is not empty %} + {% if error_message is not empty %}

error - {{ errorMessage|e }} + {{ error_message|e }}

{% endif %} diff --git a/modules/material/themes/material/mfa/prompt-for-mfa-totp.twig b/modules/material/themes/material/mfa/prompt-for-mfa-totp.twig index d95926f..8353bbb 100644 --- a/modules/material/themes/material/mfa/prompt-for-mfa-totp.twig +++ b/modules/material/themes/material/mfa/prompt-for-mfa-totp.twig @@ -28,7 +28,7 @@
- {{ '{mfa:account}'|trans({'%idpName%': idpName}) }} + {{ '{mfa:account}'|trans({'%idpName%': idp_name}) }}
@@ -40,19 +40,19 @@
- {% if errorMessage is not empty %} + {% if error_message is not empty %}

error - {{ errorMessage|e }} + {{ error_message|e }}

{% endif %} diff --git a/modules/material/themes/material/mfa/prompt-for-mfa-webauthn.twig b/modules/material/themes/material/mfa/prompt-for-mfa-webauthn.twig index df53e36..0e0680e 100644 --- a/modules/material/themes/material/mfa/prompt-for-mfa-webauthn.twig +++ b/modules/material/themes/material/mfa/prompt-for-mfa-webauthn.twig @@ -5,11 +5,11 @@ {{ include('header.twig') }} - + - +
@@ -88,7 +88,7 @@
- {% if supportsWebAuthn %} + {% if supports_web_authn %}

{{ '{mfa:webauthn_instructions}'|trans }} @@ -102,17 +102,17 @@

{% endif %} - {% if errorMessage is not empty %} + {% if error_message is not empty %} {% endif %}
-

+

error - {{ errorMessage|e }} + {{ error_message|e }}

@@ -123,7 +123,7 @@ diff --git a/modules/material/themes/material/mfa/send-manager-mfa.twig b/modules/material/themes/material/mfa/send-manager-mfa.twig index f23478a..db96bca 100644 --- a/modules/material/themes/material/mfa/send-manager-mfa.twig +++ b/modules/material/themes/material/mfa/send-manager-mfa.twig @@ -29,17 +29,17 @@

- {{ '{mfa:manager_info}'|trans({'%managerEmail%': managerEmail})|raw }} + {{ '{mfa:manager_info}'|trans({'%managerEmail%': manager_email})|raw }}

- {% if errorMessage is not empty %} + {% if error_message is not empty %}

error - {{ errorMessage|e }} + {{ error_message|e }}

diff --git a/modules/material/themes/material/profilereview/nag-for-mfa.twig b/modules/material/themes/material/profilereview/nag-for-mfa.twig index bf0a6f3..b39eed5 100644 --- a/modules/material/themes/material/profilereview/nag-for-mfa.twig +++ b/modules/material/themes/material/profilereview/nag-for-mfa.twig @@ -40,9 +40,9 @@ - {% if mfaLearnMoreUrl is not empty %} + {% if mfa_learn_more_url is not empty %}
- {% if mfaOptions|length > 0 %} + {% if mfa_options|length > 0 %}

@@ -53,7 +53,7 @@
    - {% for mfa in mfaOptions %} + {% for mfa in mfa_options %}
  • @@ -79,11 +79,11 @@
{% endif %} - {% if methodOptions|length > 0 %} + {% if method_options|length > 0 %}
@@ -95,7 +95,7 @@
    - {% for method in methodOptions %} + {% for method in method_options %}
  • @@ -116,7 +116,7 @@

- {{ '{review:button_update}'|trans }} launch diff --git a/modules/material/themes/material/silauth/loginuserpass.twig b/modules/material/themes/material/silauth/loginuserpass.twig index 7f72eca..06ef65e 100644 --- a/modules/material/themes/material/silauth/loginuserpass.twig +++ b/modules/material/themes/material/silauth/loginuserpass.twig @@ -1,7 +1,7 @@ - {{ '{login:title}'|trans({'%idpName%': idpName}) }} + {{ '{login:title}'|trans({'%idpName%': idp_name}) }} {{ include('header.twig') }} @@ -11,7 +11,7 @@ } - {% if siteKey is not empty %} + {% if site_key is not empty %} + {% endif %} -{# FIXME: #} - + diff --git a/modules/mfa/public/low-on-backup-codes.php b/modules/mfa/public/low-on-backup-codes.php index eb04896..91ae0e1 100644 --- a/modules/mfa/public/low-on-backup-codes.php +++ b/modules/mfa/public/low-on-backup-codes.php @@ -31,6 +31,8 @@ $globalConfig = Configuration::getInstance(); $t = new Template($globalConfig, 'mfa:low-on-backup-codes'); +$t->data['theme_color_scheme'] = $globalConfig->getOptionalString('theme.color-scheme', ''); +$t->data['analytics_tracking_id'] = $globalConfig->getOptionalString('analytics.trackingId', ''); $t->data['num_backup_codes_remaining'] = $state['numBackupCodesRemaining']; $t->send(); diff --git a/modules/mfa/public/must-set-up-mfa.php b/modules/mfa/public/must-set-up-mfa.php index d1067c6..4ecf1ef 100644 --- a/modules/mfa/public/must-set-up-mfa.php +++ b/modules/mfa/public/must-set-up-mfa.php @@ -1,11 +1,11 @@ data['theme_color_scheme'] = $globalConfig->getOptionalString('theme.color-scheme', ''); +$t->data['analytics_tracking_id'] = $globalConfig->getOptionalString('analytics.trackingId', ''); $t->send(); $logger->info(sprintf( diff --git a/modules/mfa/public/new-backup-codes.php b/modules/mfa/public/new-backup-codes.php index 67e61fe..035cc14 100644 --- a/modules/mfa/public/new-backup-codes.php +++ b/modules/mfa/public/new-backup-codes.php @@ -34,6 +34,8 @@ $globalConfig = Configuration::getInstance(); $t = new Template($globalConfig, 'mfa:new-backup-codes'); +$t->data['theme_color_scheme'] = $globalConfig->getOptionalString('theme.color-scheme', ''); +$t->data['analytics_tracking_id'] = $globalConfig->getOptionalString('analytics.trackingId', ''); $t->data['mfa_setup_url'] = $state['mfaSetupUrl']; $t->data['new_backup_codes'] = $state['newBackupCodes'] ?? []; $t->data['idp_name'] = $globalConfig->getString('idp_display_name'); diff --git a/modules/mfa/public/out-of-backup-codes.php b/modules/mfa/public/out-of-backup-codes.php index 70509f9..2fa5c84 100644 --- a/modules/mfa/public/out-of-backup-codes.php +++ b/modules/mfa/public/out-of-backup-codes.php @@ -32,6 +32,8 @@ $globalConfig = Configuration::getInstance(); $t = new Template($globalConfig, 'mfa:out-of-backup-codes'); +$t->data['theme_color_scheme'] = $globalConfig->getOptionalString('theme.color-scheme', ''); +$t->data['analytics_tracking_id'] = $globalConfig->getOptionalString('analytics.trackingId', ''); $t->data['has_other_mfa_options'] = $hasOtherMfaOptions; $t->send(); diff --git a/modules/mfa/public/prompt-for-mfa.php b/modules/mfa/public/prompt-for-mfa.php index 445a402..ad9fa4c 100644 --- a/modules/mfa/public/prompt-for-mfa.php +++ b/modules/mfa/public/prompt-for-mfa.php @@ -120,6 +120,8 @@ $mfaTemplateToUse = Mfa::getTemplateFor($mfaOption['type']); $t = new Template($globalConfig, $mfaTemplateToUse); +$t->data['theme_color_scheme'] = $globalConfig->getOptionalString('theme.color-scheme', ''); +$t->data['analytics_tracking_id'] = $globalConfig->getOptionalString('analytics.trackingId', ''); $t->data['error_message'] = $errorMessage ?? null; $t->data['mfa_option_data'] = json_encode($mfaOption['data']); $t->data['mfa_options'] = $mfaOptions; diff --git a/modules/mfa/public/send-manager-mfa.php b/modules/mfa/public/send-manager-mfa.php index a777cf7..717dc29 100644 --- a/modules/mfa/public/send-manager-mfa.php +++ b/modules/mfa/public/send-manager-mfa.php @@ -36,6 +36,8 @@ $globalConfig = Configuration::getInstance(); $t = new Template($globalConfig, 'mfa:send-manager-mfa'); +$t->data['theme_color_scheme'] = $globalConfig->getOptionalString('theme.color-scheme', ''); +$t->data['analytics_tracking_id'] = $globalConfig->getOptionalString('analytics.trackingId', ''); $t->data['manager_email'] = $state['managerEmail']; $t->data['error_message'] = $errorMessage ?? null; $t->send(); diff --git a/modules/profilereview/public/nag.php b/modules/profilereview/public/nag.php index a020009..d2aa37d 100644 --- a/modules/profilereview/public/nag.php +++ b/modules/profilereview/public/nag.php @@ -31,6 +31,8 @@ $globalConfig = Configuration::getInstance(); $t = new Template($globalConfig, 'profilereview:' . $state['template']); +$t->data['theme_color_scheme'] = $globalConfig->getOptionalString('theme.color-scheme', ''); +$t->data['analytics_tracking_id'] = $globalConfig->getOptionalString('analytics.trackingId', ''); $t->data['profile_url'] = $state['profileUrl']; $t->data['method_options'] = $state['methodOptions'] ?? []; $t->data['mfa_options'] = $state['mfaOptions'] ?? []; diff --git a/modules/profilereview/public/review.php b/modules/profilereview/public/review.php index 158374a..9e46346 100644 --- a/modules/profilereview/public/review.php +++ b/modules/profilereview/public/review.php @@ -35,6 +35,8 @@ $globalConfig = Configuration::getInstance(); $t = new Template($globalConfig, 'profilereview:review'); +$t->data['theme_color_scheme'] = $globalConfig->getOptionalString('theme.color-scheme', ''); +$t->data['analytics_tracking_id'] = $globalConfig->getOptionalString('analytics.trackingId', ''); $t->data['profile_url'] = $state['profileUrl']; $t->data['method_options'] = $state['methodOptions']; $t->data['mfa_options'] = $state['mfaOptions']; diff --git a/modules/silauth/public/loginuserpass.php b/modules/silauth/public/loginuserpass.php index 12fc066..3d21979 100644 --- a/modules/silauth/public/loginuserpass.php +++ b/modules/silauth/public/loginuserpass.php @@ -80,6 +80,8 @@ } $t = new Template($globalConfig, 'silauth:loginuserpass'); +$t->data['theme_color_scheme'] = $globalConfig->getOptionalString('theme.color-scheme', ''); +$t->data['analytics_tracking_id'] = $globalConfig->getOptionalString('analytics.trackingId', ''); $t->data['stateparams'] = array('AuthState' => $authStateId); $t->data['username'] = $username; $t->data['errorcode'] = $errorCode; From 7c183657be5cdd779d17514d2da7d10a79df304d Mon Sep 17 00:00:00 2001 From: briskt <3172830+briskt@users.noreply.github.com> Date: Mon, 8 Jul 2024 12:00:46 -0600 Subject: [PATCH 10/12] still need to check undefined analytics_tracking_id, theme_color_scheme Any template instantiated by SSP code will not have defined our variables. --- modules/material/themes/material/default/header.twig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/material/themes/material/default/header.twig b/modules/material/themes/material/default/header.twig index 257a4f3..36adee5 100644 --- a/modules/material/themes/material/default/header.twig +++ b/modules/material/themes/material/default/header.twig @@ -5,7 +5,7 @@ -{% if analytics_tracking_id is not empty %} +{% if analytics_tracking_id is defined and analytics_tracking_id is not empty %} {% endif %} - + From 97de2cf412a128f2f750873c861445f6c66673a9 Mon Sep 17 00:00:00 2001 From: briskt <3172830+briskt@users.noreply.github.com> Date: Mon, 8 Jul 2024 13:27:52 -0600 Subject: [PATCH 11/12] default theme_color_scheme to null rather than empty string --- modules/expirychecker/public/about2expire.php | 2 +- modules/expirychecker/public/expired.php | 2 +- modules/mfa/public/low-on-backup-codes.php | 2 +- modules/mfa/public/must-set-up-mfa.php | 2 +- modules/mfa/public/new-backup-codes.php | 2 +- modules/mfa/public/out-of-backup-codes.php | 2 +- modules/mfa/public/prompt-for-mfa.php | 2 +- modules/mfa/public/send-manager-mfa.php | 2 +- modules/profilereview/public/nag.php | 2 +- modules/profilereview/public/review.php | 2 +- modules/silauth/public/loginuserpass.php | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/modules/expirychecker/public/about2expire.php b/modules/expirychecker/public/about2expire.php index 9f39439..3e64a7a 100644 --- a/modules/expirychecker/public/about2expire.php +++ b/modules/expirychecker/public/about2expire.php @@ -55,7 +55,7 @@ $globalConfig = Configuration::getInstance(); $t = new Template($globalConfig, 'expirychecker:about2expire'); -$t->data['theme_color_scheme'] = $globalConfig->getOptionalString('theme.color-scheme', ''); +$t->data['theme_color_scheme'] = $globalConfig->getOptionalString('theme.color-scheme', null); $t->data['analytics_tracking_id'] = $globalConfig->getOptionalString('analytics.trackingId', ''); $t->data['form_target'] = Module::getModuleURL('expirychecker/about2expire.php'); $t->data['form_data'] = ['StateId' => $stateId]; diff --git a/modules/expirychecker/public/expired.php b/modules/expirychecker/public/expired.php index 98bc15a..be4bfa9 100644 --- a/modules/expirychecker/public/expired.php +++ b/modules/expirychecker/public/expired.php @@ -48,7 +48,7 @@ $globalConfig = Configuration::getInstance(); $t = new Template($globalConfig, 'expirychecker:expired'); -$t->data['theme_color_scheme'] = $globalConfig->getOptionalString('theme.color-scheme', ''); +$t->data['theme_color_scheme'] = $globalConfig->getOptionalString('theme.color-scheme', null); $t->data['analytics_tracking_id'] = $globalConfig->getOptionalString('analytics.trackingId', ''); $t->data['form_target'] = Module::getModuleURL('expirychecker/expired.php'); $t->data['form_data'] = ['StateId' => $stateId]; diff --git a/modules/mfa/public/low-on-backup-codes.php b/modules/mfa/public/low-on-backup-codes.php index 91ae0e1..286c644 100644 --- a/modules/mfa/public/low-on-backup-codes.php +++ b/modules/mfa/public/low-on-backup-codes.php @@ -31,7 +31,7 @@ $globalConfig = Configuration::getInstance(); $t = new Template($globalConfig, 'mfa:low-on-backup-codes'); -$t->data['theme_color_scheme'] = $globalConfig->getOptionalString('theme.color-scheme', ''); +$t->data['theme_color_scheme'] = $globalConfig->getOptionalString('theme.color-scheme', null); $t->data['analytics_tracking_id'] = $globalConfig->getOptionalString('analytics.trackingId', ''); $t->data['num_backup_codes_remaining'] = $state['numBackupCodesRemaining']; $t->send(); diff --git a/modules/mfa/public/must-set-up-mfa.php b/modules/mfa/public/must-set-up-mfa.php index 4ecf1ef..4c9028a 100644 --- a/modules/mfa/public/must-set-up-mfa.php +++ b/modules/mfa/public/must-set-up-mfa.php @@ -24,7 +24,7 @@ $globalConfig = Configuration::getInstance(); $t = new Template($globalConfig, 'mfa:must-set-up-mfa'); -$t->data['theme_color_scheme'] = $globalConfig->getOptionalString('theme.color-scheme', ''); +$t->data['theme_color_scheme'] = $globalConfig->getOptionalString('theme.color-scheme', null); $t->data['analytics_tracking_id'] = $globalConfig->getOptionalString('analytics.trackingId', ''); $t->send(); diff --git a/modules/mfa/public/new-backup-codes.php b/modules/mfa/public/new-backup-codes.php index 035cc14..ac1cb9d 100644 --- a/modules/mfa/public/new-backup-codes.php +++ b/modules/mfa/public/new-backup-codes.php @@ -34,7 +34,7 @@ $globalConfig = Configuration::getInstance(); $t = new Template($globalConfig, 'mfa:new-backup-codes'); -$t->data['theme_color_scheme'] = $globalConfig->getOptionalString('theme.color-scheme', ''); +$t->data['theme_color_scheme'] = $globalConfig->getOptionalString('theme.color-scheme', null); $t->data['analytics_tracking_id'] = $globalConfig->getOptionalString('analytics.trackingId', ''); $t->data['mfa_setup_url'] = $state['mfaSetupUrl']; $t->data['new_backup_codes'] = $state['newBackupCodes'] ?? []; diff --git a/modules/mfa/public/out-of-backup-codes.php b/modules/mfa/public/out-of-backup-codes.php index 2fa5c84..8b30bcd 100644 --- a/modules/mfa/public/out-of-backup-codes.php +++ b/modules/mfa/public/out-of-backup-codes.php @@ -32,7 +32,7 @@ $globalConfig = Configuration::getInstance(); $t = new Template($globalConfig, 'mfa:out-of-backup-codes'); -$t->data['theme_color_scheme'] = $globalConfig->getOptionalString('theme.color-scheme', ''); +$t->data['theme_color_scheme'] = $globalConfig->getOptionalString('theme.color-scheme', null); $t->data['analytics_tracking_id'] = $globalConfig->getOptionalString('analytics.trackingId', ''); $t->data['has_other_mfa_options'] = $hasOtherMfaOptions; $t->send(); diff --git a/modules/mfa/public/prompt-for-mfa.php b/modules/mfa/public/prompt-for-mfa.php index ad9fa4c..89197b9 100644 --- a/modules/mfa/public/prompt-for-mfa.php +++ b/modules/mfa/public/prompt-for-mfa.php @@ -120,7 +120,7 @@ $mfaTemplateToUse = Mfa::getTemplateFor($mfaOption['type']); $t = new Template($globalConfig, $mfaTemplateToUse); -$t->data['theme_color_scheme'] = $globalConfig->getOptionalString('theme.color-scheme', ''); +$t->data['theme_color_scheme'] = $globalConfig->getOptionalString('theme.color-scheme', null); $t->data['analytics_tracking_id'] = $globalConfig->getOptionalString('analytics.trackingId', ''); $t->data['error_message'] = $errorMessage ?? null; $t->data['mfa_option_data'] = json_encode($mfaOption['data']); diff --git a/modules/mfa/public/send-manager-mfa.php b/modules/mfa/public/send-manager-mfa.php index 717dc29..10f41ab 100644 --- a/modules/mfa/public/send-manager-mfa.php +++ b/modules/mfa/public/send-manager-mfa.php @@ -36,7 +36,7 @@ $globalConfig = Configuration::getInstance(); $t = new Template($globalConfig, 'mfa:send-manager-mfa'); -$t->data['theme_color_scheme'] = $globalConfig->getOptionalString('theme.color-scheme', ''); +$t->data['theme_color_scheme'] = $globalConfig->getOptionalString('theme.color-scheme', null); $t->data['analytics_tracking_id'] = $globalConfig->getOptionalString('analytics.trackingId', ''); $t->data['manager_email'] = $state['managerEmail']; $t->data['error_message'] = $errorMessage ?? null; diff --git a/modules/profilereview/public/nag.php b/modules/profilereview/public/nag.php index d2aa37d..7dc2b09 100644 --- a/modules/profilereview/public/nag.php +++ b/modules/profilereview/public/nag.php @@ -31,7 +31,7 @@ $globalConfig = Configuration::getInstance(); $t = new Template($globalConfig, 'profilereview:' . $state['template']); -$t->data['theme_color_scheme'] = $globalConfig->getOptionalString('theme.color-scheme', ''); +$t->data['theme_color_scheme'] = $globalConfig->getOptionalString('theme.color-scheme', null); $t->data['analytics_tracking_id'] = $globalConfig->getOptionalString('analytics.trackingId', ''); $t->data['profile_url'] = $state['profileUrl']; $t->data['method_options'] = $state['methodOptions'] ?? []; diff --git a/modules/profilereview/public/review.php b/modules/profilereview/public/review.php index 9e46346..1f8e671 100644 --- a/modules/profilereview/public/review.php +++ b/modules/profilereview/public/review.php @@ -35,7 +35,7 @@ $globalConfig = Configuration::getInstance(); $t = new Template($globalConfig, 'profilereview:review'); -$t->data['theme_color_scheme'] = $globalConfig->getOptionalString('theme.color-scheme', ''); +$t->data['theme_color_scheme'] = $globalConfig->getOptionalString('theme.color-scheme', null); $t->data['analytics_tracking_id'] = $globalConfig->getOptionalString('analytics.trackingId', ''); $t->data['profile_url'] = $state['profileUrl']; $t->data['method_options'] = $state['methodOptions']; diff --git a/modules/silauth/public/loginuserpass.php b/modules/silauth/public/loginuserpass.php index 3d21979..378b3dc 100644 --- a/modules/silauth/public/loginuserpass.php +++ b/modules/silauth/public/loginuserpass.php @@ -80,7 +80,7 @@ } $t = new Template($globalConfig, 'silauth:loginuserpass'); -$t->data['theme_color_scheme'] = $globalConfig->getOptionalString('theme.color-scheme', ''); +$t->data['theme_color_scheme'] = $globalConfig->getOptionalString('theme.color-scheme', null); $t->data['analytics_tracking_id'] = $globalConfig->getOptionalString('analytics.trackingId', ''); $t->data['stateparams'] = array('AuthState' => $authStateId); $t->data['username'] = $username; From 095efeb07fcb132195caeb9d60d7302535bb3f8d Mon Sep 17 00:00:00 2001 From: briskt <3172830+briskt@users.noreply.github.com> Date: Mon, 8 Jul 2024 14:40:28 -0600 Subject: [PATCH 12/12] add IdP logos for development --- development/logo_idp1.png | Bin 0 -> 22822 bytes development/logo_idp2.png | Bin 0 -> 23194 bytes development/logo_idp3.png | Bin 0 -> 23290 bytes docker-compose.yml | 6 ++++++ 4 files changed, 6 insertions(+) create mode 100644 development/logo_idp1.png create mode 100644 development/logo_idp2.png create mode 100644 development/logo_idp3.png diff --git a/development/logo_idp1.png b/development/logo_idp1.png new file mode 100644 index 0000000000000000000000000000000000000000..a03af649e413ffa8467de01d2fe6040ce856895e GIT binary patch literal 22822 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 I)W|L3U(5gbDgXcg literal 0 HcmV?d00001 diff --git a/development/logo_idp2.png b/development/logo_idp2.png new file mode 100644 index 0000000000000000000000000000000000000000..51bf105ea2bae4a9126f611df2ae1fcbe3eb4437 GIT binary patch literal 23194 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 literal 0 HcmV?d00001 diff --git a/development/logo_idp3.png b/development/logo_idp3.png new file mode 100644 index 0000000000000000000000000000000000000000..d357127dc2d84335e2baa729eb12cf11fa55c857 GIT binary patch literal 23290 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