diff --git a/ecs/jskult-webapp/src/controller/login.py b/ecs/jskult-webapp/src/controller/login.py index c9555df7..6eee5b31 100644 --- a/ecs/jskult-webapp/src/controller/login.py +++ b/ecs/jskult-webapp/src/controller/login.py @@ -69,12 +69,10 @@ def login( # ユーザーマスタ検索 pre_login_user_record = login_service.logged_in_user(request.username) # ログイン失敗回数が10回以上あれば、ログアウト画面にリダイレクトする - if pre_login_user_record is not None and pre_login_user_record.mntuser_login_failed_cnt >= constants.LOGIN_FAIL_LIMIT: + if pre_login_user_record is not None and pre_login_user_record.is_login_failed_limit_exceeded(): logger.info(f'ログイン失敗回数が10回以上: {request.username}') - # ユーザーが有効の場合、DBにアカウント無効にする - if pre_login_user_record.enabled_flg == 'Y': - login_service.on_retry_limit_exceeded(request.username) - raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail=constants.LOGOUT_REASON_RETRY_LIMIT_EXCEEDED) + login_service.on_login_fail_limit_exceeded(request.username) + raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail=constants.LOGOUT_REASON_LOGIN_FAILED_LIMIT_EXCEEDED) try: jwt_token = login_service.login(request.username, request.password) diff --git a/ecs/jskult-webapp/src/model/db/user_master.py b/ecs/jskult-webapp/src/model/db/user_master.py index 8e5fb2ad..b8dee115 100644 --- a/ecs/jskult-webapp/src/model/db/user_master.py +++ b/ecs/jskult-webapp/src/model/db/user_master.py @@ -2,7 +2,7 @@ from datetime import datetime from typing import Optional from src.model.db.base_db_model import BaseDBModel - +from src.system_var import constants class UserMasterModel(BaseDBModel): user_id: Optional[str] @@ -36,3 +36,6 @@ class UserMasterModel(BaseDBModel): def is_groupware_user(self): return self.mntuser_flg == '0' or self.mntuser_flg is None + + def is_login_failed_limit_exceeded(self): + return self.mntuser_login_failed_cnt >= constants.LOGIN_FAIL_LIMIT diff --git a/ecs/jskult-webapp/src/repositories/user_master_repository.py b/ecs/jskult-webapp/src/repositories/user_master_repository.py index 3a4316d8..0516ec79 100644 --- a/ecs/jskult-webapp/src/repositories/user_master_repository.py +++ b/ecs/jskult-webapp/src/repositories/user_master_repository.py @@ -27,7 +27,7 @@ class UserMasterRepository(BaseRepository): logger.exception(f"DB Error : Exception={e}") raise e - def increase_login_retry_count(self, parameter: dict) -> UserMasterModel: + def increase_login_failed_count(self, parameter: dict) -> UserMasterModel: try: query = """\ UPDATE @@ -38,7 +38,7 @@ class UserMasterRepository(BaseRepository): WHEN DATE(mntuser_last_login_failed_datetime) = CURRENT_DATE() THEN mntuser_login_failed_cnt + 1 ELSE 1 END, - mntuser_last_login_failed_datetime = CURRENT_DATE() + mntuser_last_login_failed_datetime = CURRENT_TIMESTAMP() WHERE user_id = :user_id AND diff --git a/ecs/jskult-webapp/src/services/login_service.py b/ecs/jskult-webapp/src/services/login_service.py index 12fa05f4..ded8b7b7 100644 --- a/ecs/jskult-webapp/src/services/login_service.py +++ b/ecs/jskult-webapp/src/services/login_service.py @@ -50,9 +50,9 @@ class LoginService(BaseService): return user_record def incorrect_login_password_attempt(self, user_id: str): - self.user_repository.increase_login_retry_count({'user_id': user_id}) + self.user_repository.increase_login_failed_count({'user_id': user_id}) - def on_retry_limit_exceeded(self, user_id: str): + def on_login_fail_limit_exceeded(self, user_id: str): self.user_repository.disable_mnt_user({'user_id': user_id}) def __secret_hash(self, username: str): diff --git a/ecs/jskult-webapp/src/system_var/constants.py b/ecs/jskult-webapp/src/system_var/constants.py index 8758d585..6422fdd5 100644 --- a/ecs/jskult-webapp/src/system_var/constants.py +++ b/ecs/jskult-webapp/src/system_var/constants.py @@ -63,7 +63,7 @@ LOGOUT_REASON_BACKUP_PROCESSING = 'dump_processing' LOGOUT_REASON_NOT_LOGIN = 'not_login' LOGOUT_REASON_DB_ERROR = 'db_error' LOGOUT_REASON_UNEXPECTED = 'unexpected' -LOGOUT_REASON_RETRY_LIMIT_EXCEEDED = 'retry_limit_exceeded' +LOGOUT_REASON_LOGIN_FAILED_LIMIT_EXCEEDED = 'retry_limit_exceeded' LOGOUT_REASON_MESSAGE_MAP = { LOGOUT_REASON_DO_LOGOUT: 'Logoutしました。', @@ -74,7 +74,7 @@ LOGOUT_REASON_MESSAGE_MAP = { LOGOUT_REASON_NOT_LOGIN: 'Loginしてからページにアクセスしてください。', LOGOUT_REASON_DB_ERROR: 'DB接続に失敗しました。
再度Loginするか、
管理者にお問い合わせください。', LOGOUT_REASON_UNEXPECTED: '予期しないエラーが発生しました。
再度Loginするか、
管理者に問い合わせてください。', - LOGOUT_REASON_RETRY_LIMIT_EXCEEDED: 'ログイン失敗回数の上限を超えましたので
アカウントをロックしました。
管理者に連絡してください' + LOGOUT_REASON_LOGIN_FAILED_LIMIT_EXCEEDED: 'ログイン失敗回数の上限を超えましたので
アカウントをロックしました。
管理者に連絡してください' } # 新規施設担当者登録CSV(マスターメンテ)