From 718b62d5e103e275a9e973e5194b3769d9ab09cf Mon Sep 17 00:00:00 2001 From: Joonas Javanainen Date: Mon, 27 Jan 2025 14:56:18 +0200 Subject: [PATCH 1/3] Use String instead of Path Spring doesn't have the necessary converter for Path by default --- service/src/main/kotlin/fi/espoo/evaka/EvakaEnv.kt | 3 +-- .../src/main/kotlin/fi/espoo/evaka/shared/job/ScheduledJobs.kt | 3 ++- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/service/src/main/kotlin/fi/espoo/evaka/EvakaEnv.kt b/service/src/main/kotlin/fi/espoo/evaka/EvakaEnv.kt index 2abfb8be467..9293fc695f2 100644 --- a/service/src/main/kotlin/fi/espoo/evaka/EvakaEnv.kt +++ b/service/src/main/kotlin/fi/espoo/evaka/EvakaEnv.kt @@ -11,7 +11,6 @@ import fi.espoo.evaka.shared.job.JobSchedule import fi.espoo.evaka.shared.job.ScheduledJobSettings import io.github.oshai.kotlinlogging.KotlinLogging import java.net.URI -import java.nio.file.Path import java.security.KeyStore import java.time.Duration import java.time.LocalDate @@ -43,7 +42,7 @@ data class EvakaEnv( val personAddressEnvelopeWindowPosition: Rectangle, val replacementInvoicesStart: YearMonth?, val newCitizenWeakLoginEnabled: Boolean, - val passwordBlacklistDirectory: Path?, + val passwordBlacklistDirectory: String?, ) { companion object { fun fromEnvironment(env: Environment): EvakaEnv { diff --git a/service/src/main/kotlin/fi/espoo/evaka/shared/job/ScheduledJobs.kt b/service/src/main/kotlin/fi/espoo/evaka/shared/job/ScheduledJobs.kt index 9f7eaca0d77..89391542907 100644 --- a/service/src/main/kotlin/fi/espoo/evaka/shared/job/ScheduledJobs.kt +++ b/service/src/main/kotlin/fi/espoo/evaka/shared/job/ScheduledJobs.kt @@ -41,6 +41,7 @@ import fi.espoo.evaka.shared.domain.EvakaClock import fi.espoo.evaka.titania.cleanTitaniaErrors import fi.espoo.evaka.varda.new.VardaUpdateServiceNew import io.github.oshai.kotlinlogging.KotlinLogging +import java.nio.file.Path import java.time.LocalTime import org.springframework.stereotype.Component @@ -473,6 +474,6 @@ WHERE id IN (SELECT id FROM attendances_to_end) fun importPasswordBlacklists(db: Database.Connection, clock: EvakaClock) = evakaEnv.passwordBlacklistDirectory?.let { directory -> - passwordBlacklist.importBlacklists(db, directory) + passwordBlacklist.importBlacklists(db, Path.of(directory)) } } From 7d9a7d5d507d452014bbd6d378773c02dedab1ee Mon Sep 17 00:00:00 2001 From: Joonas Javanainen Date: Mon, 27 Jan 2025 14:57:34 +0200 Subject: [PATCH 2/3] Hide keycloak email if new weak auth is enabled --- .../personal-details/LoginDetailsSection.tsx | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/frontend/src/citizen-frontend/personal-details/LoginDetailsSection.tsx b/frontend/src/citizen-frontend/personal-details/LoginDetailsSection.tsx index c5aac82757a..da25c1f5bce 100644 --- a/frontend/src/citizen-frontend/personal-details/LoginDetailsSection.tsx +++ b/frontend/src/citizen-frontend/personal-details/LoginDetailsSection.tsx @@ -82,13 +82,14 @@ export default React.memo(function LoginDetailsSection({

{t.title}

- -
- {user.keycloakEmail} -
+ {!featureFlags.weakLogin && ( + <> + +
+ {user.keycloakEmail} +
+ + )} {featureFlags.weakLogin && (user.email || user.weakLoginUsername) && ( <> From 1de5293a57937d7b35ddd73f76c423cee617f711 Mon Sep 17 00:00:00 2001 From: Joonas Javanainen Date: Mon, 27 Jan 2025 15:20:54 +0200 Subject: [PATCH 3/3] Define setUnacceptable before its use Fixes "Uncaught ReferenceError: can't access lexical declaration 'setUnacceptable' before initialization" --- .../citizen-frontend/personal-details/LoginDetailsSection.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/citizen-frontend/personal-details/LoginDetailsSection.tsx b/frontend/src/citizen-frontend/personal-details/LoginDetailsSection.tsx index da25c1f5bce..b457b417bbe 100644 --- a/frontend/src/citizen-frontend/personal-details/LoginDetailsSection.tsx +++ b/frontend/src/citizen-frontend/personal-details/LoginDetailsSection.tsx @@ -248,6 +248,8 @@ const WeakCredentialsFormModal = React.memo(function WeakCredentialsFormModal({ [passwordConstraints] ) + const [isUnacceptable, setUnacceptable] = useState(false) + const form = useForm( passwordForm, () => ({ password: '', confirmPassword: '' }), @@ -268,8 +270,6 @@ const WeakCredentialsFormModal = React.memo(function WeakCredentialsFormModal({ const { password, confirmPassword } = useFormFields(form) const pattern = `.{${passwordConstraints.minLength},${passwordConstraints.maxLength}}` - const [isUnacceptable, setUnacceptable] = useState(false) - const onFailure = useCallback( (failure: Failure) => { setUnacceptable(failure.errorCode === 'PASSWORD_UNACCEPTABLE')