diff --git a/README.md b/README.md index e9b314ff..8e768d15 100644 --- a/README.md +++ b/README.md @@ -236,7 +236,7 @@ The login page looks for `/simplesamlphp/public/logo.png` which is **NOT** provi Update `/simplesamlphp/config/config.php`: ``` -'analytics.trackingId' => 'G-some-unique-id-for-your-site' +'analytics.trackingId' => 'UA-some-unique-id-for-your-site' ``` This project provides a convenience by loading this config with whatever is in the environment variable `ANALYTICS_ID`._ diff --git a/behat.yml b/behat.yml index 6306126b..4ef546fd 100644 --- a/behat.yml +++ b/behat.yml @@ -18,16 +18,16 @@ default: profilereview_features: paths: [ '%paths.base%//features//profilereview.feature' ] contexts: [ 'ProfileReviewContext' ] - sildisco_features: - contexts: ['SilDiscoContext'] - paths: - - '%paths.base%//features//Sp1Idp1Sp2Idp2Sp3.feature' - - '%paths.base%//features//Sp1Idp2Sp2Sp3Idp1.feature' - - '%paths.base%//features//Sp2Idp2Sp1Idp1Sp3.feature' - - '%paths.base%//features//Sp2Idp2Sp1Idp2Sp3.feature' - - '%paths.base%//features//Sp3Idp1Sp1Idp1Sp2Idp2.feature' - - '%paths.base%//features//WwwMetadataCept.feature' - - '%paths.base%//features//ZSp1Idp1BetaSp1Idp3.feature' +# sildisco_features: +# contexts: ['SilDiscoContext'] +# paths: +# - '%paths.base%//features//Sp1Idp1Sp2Idp2Sp3.feature' +# - '%paths.base%//features//Sp1Idp2Sp2Sp3Idp1.feature' +# - '%paths.base%//features//Sp2Idp2Sp1Idp1Sp3.feature' +# - '%paths.base%//features//Sp2Idp2Sp1Idp2Sp3.feature' +# - '%paths.base%//features//Sp3Idp1Sp1Idp1Sp2Idp2.feature' +# - '%paths.base%//features//WwwMetadataCept.feature' +# - '%paths.base%//features//ZSp1Idp1BetaSp1Idp3.feature' status_features: paths: [ '%paths.base%//features//status.feature' ] contexts: [ 'StatusContext' ] diff --git a/features/bootstrap/FeatureContext.php b/features/bootstrap/FeatureContext.php index 385c632b..37355c9e 100644 --- a/features/bootstrap/FeatureContext.php +++ b/features/bootstrap/FeatureContext.php @@ -59,7 +59,7 @@ private function takeScreenshot() { mkdir(self::SCREENSHOTS_PATH); } if (is_dir(self::SCREENSHOTS_PATH)) { - $path = self::SCREENSHOTS_PATH . date('d-m-y') . '-' . uniqid() . '.png'; + $path = self::SCREENSHOTS_PATH . date('Y-m-d_H:i:s_') . uniqid() . '.png'; file_put_contents($path, $screenshot); print "\n\nScreenshot: " . $path; } diff --git a/features/bootstrap/StatusContext.php b/features/bootstrap/StatusContext.php index a78c213a..4d8c7ab3 100644 --- a/features/bootstrap/StatusContext.php +++ b/features/bootstrap/StatusContext.php @@ -39,7 +39,7 @@ public function iRequestTheInitialLoginPageOfThisModule() 'cookies' => true, 'http_errors' => false, ]); - $response = $client->get('http://ssp-idp1.local/module.php/core/authenticate.php?as=silauth'); + $response = $client->get('http://ssp-idp1.local/module.php/admin/test/silauth'); $this->responseCode = $response->getStatusCode(); } diff --git a/modules/material/dictionaries/nag.definition.json b/modules/material/dictionaries/nag.definition.json deleted file mode 100644 index 9c450e90..00000000 --- a/modules/material/dictionaries/nag.definition.json +++ /dev/null @@ -1,75 +0,0 @@ - -{ - "mfa_title": { - "en": "2-Step Verification", - "es": "Verificación en 2 pasos", - "fr": "Vérification en deux étapes", - "ko": "2 단계 인증" - }, - "mfa_header": { - "en": "2-Step Verification", - "es": "Verificación en 2 pasos", - "fr": "Vérification en deux étapes", - "ko": "2 단계 인증" - }, - "method_title": { - "en": "Password recovery methods", - "es": "Métodos de recuperación de contraseña", - "fr": "Méthodes de récupération de mot de passe", - "ko": "비밀번호 복구 방법" - }, - "method_header": { - "en": "Password recovery methods", - "es": "Métodos de recuperación de contraseña", - "fr": "Méthodes de récupération de mot de passe", - "ko": "비밀번호 복구 방법" - }, - "shield_icon": { - "en": "Shield icon", - "es": "Icono de escudo", - "fr": "Icône de bouclier", - "ko": "방패 아이콘" - }, - "header": { - "en": "Protect yourself", - "es": "Protéjase", - "fr": "Protégez-vous", - "ko": "자기 보호" - }, - "mfa_info": { - "en": "Did you know you could easily increase the security of your identity account by enabling 2-Step Verification?", - "es": "¿Sabía que podría aumentar fácilmente la seguridad de su cuenta de identidad al habilitar la verificación en dos pasos?", - "fr": "Savez-vous que vous pouvez facilement augmenter la sécurité de votre compte d'identité en activant la vérification en deux étapes?", - "ko": "2 단계 인증을 사용하여 신원 계정의 보안을 쉽게 높일 수 있다는 사실을 알고 계셨습니까?" - }, - "method_info": { - "en": "Do you forget your password sometimes? Did you know it is very easy to add an alternate email address for password recovery just in case?", - "es": "¿Olvidas tu contraseña a veces? ¿Sabía que es muy fácil agregar una dirección de correo electrónico alternativa para recuperar la contraseña por si acaso?", - "fr": "Avez-vous oublié votre mot de passe parfois? Saviez-vous qu'il est très facile d'ajouter une adresse électronique de remplacement pour la récupération du mot de passe au cas où?", - "ko": "가끔 암호를 잊어 버리십니까? 혹시라도 비밀번호 복구를 위해 보조 이메일 주소를 추가하는 것이 매우 쉽다는 것을 알고 계셨습니까?" - }, - "button_later": { - "en": "Remind me later", - "es": "Recuérdame más tarde", - "fr": "Rappelez-moi plus tard", - "ko": "추후 알림" - }, - "button_learn_more": { - "en": "Learn more", - "es": "Aprende más", - "fr": "Apprendre encore plus", - "ko": "더 알아보기" - }, - "button_enable": { - "en": "Enable now", - "es": "Habilite ahora", - "fr": "Activer maintenant", - "ko": "지금 사용" - }, - "button_add": { - "en": "Add one now", - "es": "Agrega uno ahora", - "fr": "Ajouter un maintenant", - "ko": "지금 하나 추가" - } -} diff --git a/modules/material/locales/en/LC_MESSAGES/material.po b/modules/material/locales/en/LC_MESSAGES/material.po index 56c7384f..dc68b431 100644 --- a/modules/material/locales/en/LC_MESSAGES/material.po +++ b/modules/material/locales/en/LC_MESSAGES/material.po @@ -84,7 +84,7 @@ msgid "{mfa:webauthn_instructions}" msgstr "You may now insert your security key and press its button." msgid "{mfa:webauthn_unsupported}" -msgstr "Unsupported in your current browser. Please consider a more secure browser like Google Chrome." +msgstr "Unsupported in your current browser. Please consider a more secure browser like Google Chrome." msgid "{mfa:webauthn_error_unknown}" msgstr "Something went wrong with that request, unable to verify at this time." @@ -221,6 +221,78 @@ msgstr "Remember this browser for 30 days" msgid "{mfa:unsupported}" msgstr "Not supported in this browser" +msgid "{nag:mfa_title}" +msgstr "2-Step Verification" + +msgid "{nag:mfa_header}" +msgstr "2-Step Verification" + +msgid "{nag:method_title}" +msgstr "Password recovery methods" + +msgid "{nag:method_header}" +msgstr "Password recovery methods" + +msgid "{nag:shield_icon}" +msgstr "Shield icon" + +msgid "{nag:header}" +msgstr "Protect yourself" + +msgid "{nag:mfa_info}" +msgstr "Did you know you could easily increase the security of your identity account by enabling 2-Step Verification?" + +msgid "{nag:method_info}" +msgstr "Do you forget your password sometimes? Did you know it is very easy to add an alternate email address for password recovery just in case?" + +msgid "{nag:button_later}" +msgstr "Remind me later" + +msgid "{nag:button_learn_more}" +msgstr "Learn more" + +msgid "{nag:button_enable}" +msgstr "Enable now" + +msgid "{nag:button_add}" +msgstr "Add one now" + +msgid "{review:title}" +msgstr "Profile review" + +msgid "{review:header}" +msgstr "Profile review" + +msgid "{review:info}" +msgstr "Are these still correct?" + +msgid "{review:mfa_header}" +msgstr "2-Step Verification" + +msgid "{review:methods_header}" +msgstr "Password Recovery Methods" + +msgid "{review:remaining}" +msgstr "(%count% remaining)" + +msgid "{review:used}" +msgstr "last used: %when%" + +msgid "{review:used_never}" +msgstr "last used: Never" + +msgid "{review:verified}" +msgstr "Verified" + +msgid "{review:unverified}" +msgstr "Unverified" + +msgid "{review:button_update}" +msgstr "Some of these need updating" + +msgid "{review:button_continue}" +msgstr "These are still correct" + msgid "{selectidp-links:title}" msgstr "Choose an identity account" diff --git a/modules/material/locales/es/LC_MESSAGES/material.po b/modules/material/locales/es/LC_MESSAGES/material.po index 493bdc8c..03d15a73 100644 --- a/modules/material/locales/es/LC_MESSAGES/material.po +++ b/modules/material/locales/es/LC_MESSAGES/material.po @@ -84,7 +84,7 @@ msgid "{mfa:webauthn_instructions}" msgstr "Ahora puede insertar su clave de seguridad y presionar su botón." msgid "{mfa:webauthn_unsupported}" -msgstr "No compatible en su navegador actual. Considere un navegador más seguro como Google Chrome." +msgstr "No compatible en su navegador actual. Considere un navegador más seguro como Google Chrome." msgid "{mfa:webauthn_error_unknown}" msgstr "Algo salió mal con esa solicitud, no se pudo verificar en este momento." @@ -221,6 +221,78 @@ msgstr "Recuerde esta navegador por 30 días" msgid "{mfa:unsupported}" msgstr "No compatible con este navegador" +msgid "{nag:mfa_title}" +msgstr "Verificación en 2 pasos" + +msgid "{nag:mfa_header}" +msgstr "Verificación en 2 pasos" + +msgid "{nag:method_title}" +msgstr "Métodos de recuperación de contraseña" + +msgid "{nag:method_header}" +msgstr "Métodos de recuperación de contraseña" + +msgid "{nag:shield_icon}" +msgstr "Icono de escudo" + +msgid "{nag:header}" +msgstr "Protéjase" + +msgid "{nag:mfa_info}" +msgstr "¿Sabía que podría aumentar fácilmente la seguridad de su cuenta de identidad al habilitar la verificación en dos pasos?" + +msgid "{nag:method_info}" +msgstr "¿Olvidas tu contraseña a veces? ¿Sabía que es muy fácil agregar una dirección de correo electrónico alternativa para recuperar la contraseña por si acaso?" + +msgid "{nag:button_later}" +msgstr "Recuérdame más tarde" + +msgid "{nag:button_learn_more}" +msgstr "Aprende más" + +msgid "{nag:button_enable}" +msgstr "Habilite ahora" + +msgid "{nag:button_add}" +msgstr "Agrega uno ahora" + +msgid "{review:title}" +msgstr "Revisión del perfil" + +msgid "{review:header}" +msgstr "Revisión del perfil" + +msgid "{review:info}" +msgstr "¿Siguen siendo correctos?" + +msgid "{review:mfa_header}" +msgstr "Verificación en 2 pasos" + +msgid "{review:methods_header}" +msgstr "Métodos de recuperación de contraseña" + +msgid "{review:remaining}" +msgstr "(%count% restante)" + +msgid "{review:used}" +msgstr "último uso: %when%" + +msgid "{review:used_never}" +msgstr "último uso: nunca" + +msgid "{review:verified}" +msgstr "Verificado" + +msgid "{review:unverified}" +msgstr "Inconfirmado" + +msgid "{review:button_update}" +msgstr "Algunos de estos necesitan actualización" + +msgid "{review:button_continue}" +msgstr "Estos siguen siendo correctos" + msgid "{selectidp-links:title}" msgstr "Elige una cuenta de identidad" diff --git a/modules/material/locales/fr/LC_MESSAGES/material.po b/modules/material/locales/fr/LC_MESSAGES/material.po index 3534d3f0..8a070a64 100644 --- a/modules/material/locales/fr/LC_MESSAGES/material.po +++ b/modules/material/locales/fr/LC_MESSAGES/material.po @@ -84,7 +84,7 @@ msgid "{mfa:webauthn_instructions}" msgstr "Vous pouvez maintenant insérer votre clé de sécurité et appuyer sur le bouton." msgid "{mfa:webauthn_unsupported}" -msgstr "Non compatible avec votre navigateur actuel. Veuillez considérer un navigateur plus sûr comme Google Chrome." +msgstr "Non compatible avec votre navigateur actuel. Veuillez considérer un navigateur plus sûr comme Google Chrome." msgid "{mfa:webauthn_error_unknown}" msgstr "Quelque chose s'est mal passé avec cette demande, impossible de vérifier pour le moment." @@ -221,6 +221,78 @@ msgstr "Se rappeler de ce navigatuer pour 30 jours" msgid "{mfa:unsupported}" msgstr "Non pris en charge dans ce navigateur" +msgid "{nag:mfa_title}" +msgstr "Vérification en deux étapes" + +msgid "{nag:mfa_header}" +msgstr "Vérification en deux étapes" + +msgid "{nag:method_title}" +msgstr "Méthodes de récupération de mot de passe" + +msgid "{nag:method_header}" +msgstr "Méthodes de récupération de mot de passe" + +msgid "{nag:shield_icon}" +msgstr "Icône de bouclier" + +msgid "{nag:header}" +msgstr "Protégez-vous" + +msgid "{nag:mfa_info}" +msgstr "Savez-vous que vous pouvez facilement augmenter la sécurité de votre compte d'identité en activant la vérification en deux étapes?" + +msgid "{nag:method_info}" +msgstr "Avez-vous oublié votre mot de passe parfois? Saviez-vous qu'il est très facile d'ajouter une adresse électronique de remplacement pour la récupération du mot de passe au cas où?" + +msgid "{nag:button_later}" +msgstr "Rappelez-moi plus tard" + +msgid "{nag:button_learn_more}" +msgstr "Apprendre encore plus" + +msgid "{nag:button_enable}" +msgstr "Activer maintenant" + +msgid "{nag:button_add}" +msgstr "Ajouter un maintenant" + +msgid "{review:title}" +msgstr "Examen du profil" + +msgid "{review:header}" +msgstr "Examen du profil" + +msgid "{review:info}" +msgstr "Sont-ils toujours corrects?" + +msgid "{review:mfa_header}" +msgstr "Vérification en 2 étapes" + +msgid "{review:methods_header}" +msgstr "Méthodes de récupération de mot de passe" + +msgid "{review:remaining}" +msgstr "(%count% restant)" + +msgid "{review:used}" +msgstr "dernière utilisation: %when%" + +msgid "{review:used_never}" +msgstr "Dernière utilisation: Jamais" + +msgid "{review:verified}" +msgstr "Vérifié" + +msgid "{review:unverified}" +msgstr "Non vérifié" + +msgid "{review:button_update}" +msgstr "Certains ont besoin d'être mis à jour" + +msgid "{review:button_continue}" +msgstr "Ceux-ci sont toujours corrects" + msgid "{selectidp-links:title}" msgstr "Choisissez un compte d'identité" diff --git a/modules/material/locales/ko/LC_MESSAGES/material.po b/modules/material/locales/ko/LC_MESSAGES/material.po index 5f357566..b7ca908b 100644 --- a/modules/material/locales/ko/LC_MESSAGES/material.po +++ b/modules/material/locales/ko/LC_MESSAGES/material.po @@ -84,7 +84,7 @@ msgid "{mfa:webauthn_instructions}" msgstr "이제 보안 키를 삽입하고 단추를 누를 수 있습니다." msgid "{mfa:webauthn_unsupported}" -msgstr "현재 브라우저에서 지원되지 않습니다. Chrome과 같은 보다 안전한 브라우저를 고려하십시오." +msgstr "현재 브라우저에서 지원되지 않습니다. Chrome과 같은 보다 안전한 브라우저를 고려하십시오." msgid "{mfa:webauthn_error_unknown}" msgstr "요청에 문제가 발생하여 지금은 확인할 수 없습니다." @@ -221,6 +221,78 @@ msgstr "이 브라우저를 30일간 기억" msgid "{mfa:unsupported}" msgstr "이 브라우저에서는 지원되지 않습니다." +msgid "{nag:mfa_title}" +msgstr "2 단계 인증" + +msgid "{nag:mfa_header}" +msgstr "2 단계 인증" + +msgid "{nag:method_title}" +msgstr "비밀번호 복구 방법" + +msgid "{nag:method_header}" +msgstr "비밀번호 복구 방법" + +msgid "{nag:shield_icon}" +msgstr "방패 아이콘" + +msgid "{nag:header}" +msgstr "자기 보호" + +msgid "{nag:mfa_info}" +msgstr "2 단계 인증을 사용하여 신원 계정의 보안을 쉽게 높일 수 있다는 사실을 알고 계셨습니까?" + +msgid "{nag:method_info}" +msgstr "가끔 암호를 잊어 버리십니까? 혹시라도 비밀번호 복구를 위해 보조 이메일 주소를 추가하는 것이 매우 쉽다는 것을 알고 계셨습니까?" + +msgid "{nag:button_later}" +msgstr "추후 알림" + +msgid "{nag:button_learn_more}" +msgstr "더 알아보기" + +msgid "{nag:button_enable}" +msgstr "지금 사용" + +msgid "{nag:button_add}" +msgstr "지금 하나 추가" + +msgid "{review:title}" +msgstr "프로필 검토" + +msgid "{review:header}" +msgstr "프로필 검토" + +msgid "{review:info}" +msgstr "여전히 맞습니까?" + +msgid "{review:mfa_header}" +msgstr "2 단계 인증" + +msgid "{review:methods_header}" +msgstr "비밀번호 복구 방법" + +msgid "{review:remaining}" +msgstr "(%count% 남음)" + +msgid "{review:used}" +msgstr "마지막 사용 시간 : %when%" + +msgid "{review:used_never}" +msgstr "마지막 사용 : Never" + +msgid "{review:verified}" +msgstr "검증 된" + +msgid "{review:unverified}" +msgstr "확인되지 않음" + +msgid "{review:button_update}" +msgstr "이들 중 일부는 업데이트해야합니다." + +msgid "{review:button_continue}" +msgstr "이들은 여전히 정확하다." + msgid "{selectidp-links:title}" msgstr "ID 계정 선택" diff --git a/modules/material/themes/material/common-announcement.php b/modules/material/themes/material/common-announcement.php deleted file mode 100644 index 0fe9dcef..00000000 --- a/modules/material/themes/material/common-announcement.php +++ /dev/null @@ -1,11 +0,0 @@ -data['announcement'])) { -?> -
- data['announcement'] ?> -
- - diff --git a/modules/material/themes/material/common-footer.php b/modules/material/themes/material/common-footer.php deleted file mode 100644 index 90fb7756..00000000 --- a/modules/material/themes/material/common-footer.php +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/modules/material/themes/material/common-head-elements.php b/modules/material/themes/material/common-head-elements.php deleted file mode 100644 index ceb5690d..00000000 --- a/modules/material/themes/material/common-head-elements.php +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - -configuration->getValue('analytics.trackingId')); -if (! empty($trackingId)) { - ?> - - - - - -configuration->getValue('theme.color-scheme') ?: 'indigo-purple'); -?> - - - - - - diff --git a/modules/material/themes/material/core/loginuserpass.php b/modules/material/themes/material/core/loginuserpass.php index d355272a..48373e0d 100644 --- a/modules/material/themes/material/core/loginuserpass.php +++ b/modules/material/themes/material/core/loginuserpass.php @@ -124,7 +124,7 @@ function onRecaptchaLoad() { $forgotPasswordUrl = htmlentities($this->configuration->getValue('passwordForgotUrl')); if (! empty($forgotPasswordUrl)) { ?> - + t('{material:login:forgot}') ?> data['helpCenterUrl'])): ?> - + t('{material:login:help}') ?> launch data['profileUrl'])): ?> - + t('{material:login:profile}') ?> launch diff --git a/modules/material/themes/material/default/selectidp-links.twig b/modules/material/themes/material/default/selectidp-links.twig index 9272dfbc..d3b01fcc 100644 --- a/modules/material/themes/material/default/selectidp-links.twig +++ b/modules/material/themes/material/default/selectidp-links.twig @@ -39,7 +39,7 @@ {% if not helpCenterUrl ?? '' is empty %} diff --git a/modules/material/themes/material/profilereview/nag-for-method.php b/modules/material/themes/material/profilereview/nag-for-method.php deleted file mode 100644 index 7e6d50d1..00000000 --- a/modules/material/themes/material/profilereview/nag-for-method.php +++ /dev/null @@ -1,52 +0,0 @@ - - - - <?= $this->t('{material:nag:method_title}') ?> - - - - -
-
-
- - t('{material:nag:method_header}') ?> - -
-
-
-
-
-
- <?= $this->t('{material:nag:shield_icon}') ?> -
- -
-

- t('{material:nag:header}') ?> -

-
- -
-

- t('{material:nag:method_info}') ?> -

-
- -
- - - - - -
-
-
-
-
- - diff --git a/modules/material/themes/material/profilereview/nag-for-method.twig b/modules/material/themes/material/profilereview/nag-for-method.twig new file mode 100644 index 00000000..473e2929 --- /dev/null +++ b/modules/material/themes/material/profilereview/nag-for-method.twig @@ -0,0 +1,52 @@ + + + + {{ '{nag:method_title}'|trans }} + + {% include 'header.twig' %} + + +
+
+
+ + {{ '{nag:method_header}'|trans }} + +
+
+
+
+
+
+ {{ '{nag:shield_icon}'|trans }} +
+ +
+

+ {{ '{nag:header}'|trans }} +

+
+ +
+

+ {{ '{nag:method_info}'|trans }} +

+
+ +
+ + + + + +
+
+
+
+
+ + diff --git a/modules/material/themes/material/profilereview/nag-for-mfa.php b/modules/material/themes/material/profilereview/nag-for-mfa.php deleted file mode 100644 index e18c9964..00000000 --- a/modules/material/themes/material/profilereview/nag-for-mfa.php +++ /dev/null @@ -1,63 +0,0 @@ - - - - <?= $this->t('{material:nag:mfa_title}') ?> - - - - -
-
-
- - t('{material:nag:mfa_header}') ?> - -
-
-
-
-
-
- <?= $this->t('{material:nag:shield_icon}') ?> -
- -
-

- t('{material:nag:header}') ?> -

-
- -
-

- t('{material:nag:mfa_info}') ?> -

-
- -
- - - - - data['mfaLearnMoreUrl'] ?? null; - if (! empty($url)) { - ?> - - t('{material:nag:button_learn_more}') ?> - - - - -
-
-
-
-
- - diff --git a/modules/material/themes/material/profilereview/nag-for-mfa.twig b/modules/material/themes/material/profilereview/nag-for-mfa.twig new file mode 100644 index 00000000..eeabed63 --- /dev/null +++ b/modules/material/themes/material/profilereview/nag-for-mfa.twig @@ -0,0 +1,63 @@ + + + + {{ '{nag:mfa_title}'|trans }} + + {% include 'header.twig' %} + + +
+
+
+ + {{ '{nag:mfa_header}'|trans }} + +
+
+
+
+
+
+ {{ '{nag:shield_icon}'|trans }} +
+ +
+

+ {{ '{nag:header}'|trans }} +

+
+ +
+

+ {{ '{nag:mfa_info}'|trans }} +

+
+ +
+ + + + + {% if not mfaLearnMoreUrl is empty %} + + {{ '{nag:button_learn_more}'|trans }} + + {% endif %} + + +
+
+
+
+
+ + diff --git a/modules/material/themes/material/profilereview/review.php b/modules/material/themes/material/profilereview/review.php deleted file mode 100644 index 039f4692..00000000 --- a/modules/material/themes/material/profilereview/review.php +++ /dev/null @@ -1,128 +0,0 @@ - - - - <?= $this->t('{material:review:title}') ?> - - - - - - -
-
-
- - t('{material:review:header}') ?> - -
-
- -
-
-

-

- t('{material:review:info}') ?> -

-

- -
- data['mfaOptions']) > 0): ?> -
-
-

- t('{material:review:mfa_header}') ?> -

-
- -
-
    - data['mfaOptions'] as $mfa): ?> -
  • - - - - - - - t('{material:review:remaining}', ['{count}' => (string) $mfa['data']['count']]) ?> - - - - - t('{material:review:used_never}') ?> - - t('{material:review:used}', ['{when}' => $mfa['last_used_utc']]) ?> - - - -
  • - -
-
-
- - - data['methodOptions']) > 0): ?> - -
-
-

- t('{material:review:methods_header}') ?> -

-
- -
-
    - data['methodOptions'] as $method): ?> -
  • - - - - - - - t('{material:review:'.($method['verified'] ? 'verified' : 'unverified').'}') ?> - - -
  • - -
-
-
- -
- -
- - t('{material:review:button_update}') ?> launch - - - -
-
-
- - -
- - diff --git a/modules/material/themes/material/profilereview/review.twig b/modules/material/themes/material/profilereview/review.twig new file mode 100644 index 00000000..0f4ef3c3 --- /dev/null +++ b/modules/material/themes/material/profilereview/review.twig @@ -0,0 +1,134 @@ + + + + {{ '{review:title}'|trans }} + + {% include 'header.twig' %} + + + + +
+
+
+ + {{ '{review:header}'|trans }} + +
+
+ +
+
+

+

+ {{ '{review:info}'|trans }} +

+

+ +
+ {% if mfaOptions|length > 0 %} +
+
+

+ {{ '{review:mfa_header}'|trans }} +

+
+ +
+
    + {% for mfa in mfaOptions %} +
  • + + + + {{ mfa.label }} + + {% if mfa.type == 'backupcode' %} + {{ '{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}) }} + {% endif %} + + +
  • + {% endfor %} +
+
+
+ {% endif %} + + {% if methodOptions|length > 0 %} +
+
+

+ {{ '{review:methods_header}'|trans }} +

+
+ +
+
    + {% for method in methodOptions %} +
  • + + + + {{ method.value }} + + + {% set key = '{review:' ~ (method.verified ? 'verified' : 'unverified') ~ '}' %} + {{ key|trans }} + + +
  • + {% endfor %} +
+
+
+ {% endif %} +
+ +
+ + {{ '{review:button_update}'|trans }} launch + + + +
+
+
+ + {% include 'footer.twig' %} +
+ + diff --git a/modules/profilereview/locales/en/LC_MESSAGES/.gitkeep b/modules/profilereview/locales/en/LC_MESSAGES/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/modules/profilereview/locales/es/LC_MESSAGES/.gitkeep b/modules/profilereview/locales/es/LC_MESSAGES/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/modules/profilereview/locales/fr/LC_MESSAGES/.gitkeep b/modules/profilereview/locales/fr/LC_MESSAGES/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/modules/profilereview/locales/ko/LC_MESSAGES/.gitkeep b/modules/profilereview/locales/ko/LC_MESSAGES/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/modules/profilereview/public/nag.php b/modules/profilereview/public/nag.php index 7418418b..7dae2575 100644 --- a/modules/profilereview/public/nag.php +++ b/modules/profilereview/public/nag.php @@ -35,7 +35,7 @@ $t->data['methodOptions'] = $state['methodOptions'] ?? []; $t->data['mfaOptions'] = $state['mfaOptions'] ?? []; $t->data['mfaLearnMoreUrl'] = $state['mfaLearnMoreUrl']; -$t->show(); +$t->send(); $logger->warning(json_encode([ 'module' => 'profilereview', diff --git a/modules/profilereview/public/review.php b/modules/profilereview/public/review.php index aa0cae04..c8f8b3f7 100644 --- a/modules/profilereview/public/review.php +++ b/modules/profilereview/public/review.php @@ -34,11 +34,11 @@ $globalConfig = Configuration::getInstance(); -$t = new Template($globalConfig, 'profilereview:review.php'); +$t = new Template($globalConfig, 'profilereview:review'); $t->data['profileUrl'] = $state['profileUrl']; $t->data['methodOptions'] = $state['methodOptions']; $t->data['mfaOptions'] = $state['mfaOptions']; -$t->show(); +$t->send(); $logger->warning(json_encode([ 'module' => 'profilereview', diff --git a/modules/profilereview/src/Auth/Process/ProfileReview.php b/modules/profilereview/src/Auth/Process/ProfileReview.php index c26b1173..a42aeb6a 100644 --- a/modules/profilereview/src/Auth/Process/ProfileReview.php +++ b/modules/profilereview/src/Auth/Process/ProfileReview.php @@ -22,8 +22,8 @@ class ProfileReview extends ProcessingFilter const STAGE_SENT_TO_NAG = 'profilereview:sent_to_nag'; const REVIEW_PAGE = 'review.php'; - const MFA_ADD_PAGE = 'nag-for-mfa.php'; - const METHOD_ADD_PAGE = 'nag-for-method.php'; + const MFA_ADD_PAGE = 'nag-for-mfa'; + const METHOD_ADD_PAGE = 'nag-for-method'; private string|null $employeeIdAttr = null; private string|null $mfaLearnMoreUrl = null; @@ -286,7 +286,7 @@ protected function redirectToProfileReview(&$state, $employeeId, $mfaOptions, $m $state['profileUrl'] = $this->profileUrl; $state['mfaOptions'] = $mfaOptions; $state['methodOptions'] = $methodOptions; - $state['template'] = 'review.php'; + $state['template'] = 'review'; $stateId = State::saveState($state, self::STAGE_SENT_TO_NAG); $url = Module::getModuleURL('profilereview/nag.php'); diff --git a/modules/silauth/src/Auth/Source/system/System.php b/modules/silauth/src/Auth/Source/system/System.php index cfe11950..edeb88a3 100644 --- a/modules/silauth/src/Auth/Source/system/System.php +++ b/modules/silauth/src/Auth/Source/system/System.php @@ -29,7 +29,7 @@ protected function isDatabaseOkay(): bool FailedLoginIpAddress::getMostRecentFailedLoginFor(''); return true; } catch (Throwable $t) { - $this->logError($t->getMessage()); + $this->logError('isDatabaseOkay database check returned error: ' . $t->getMessage()); return false; } } @@ -47,6 +47,9 @@ protected function isRequiredConfigPresent(): bool */ $baseURL = $globalConfig->getString('baseurlpath', ''); $avoidsSecurityHole = (preg_match('#^https?://.*/$#D', $baseURL) === 1); + if (!$avoidsSecurityHole) { + $this->logError('isRequiredConfigPresent failed: baseurlpath (' . $baseURL . ') does not meet requirements'); + } return $avoidsSecurityHole; }