From db0e28db3e07c3060e1ba1f53c5efea77dd7f7be Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Mon, 15 Apr 2024 15:29:10 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=E3=83=A6=E3=83=BC=E3=82=B6=E3=83=BC?= =?UTF-8?q?=E3=83=9E=E3=82=B9=E3=82=BF=E6=9B=B4=E6=96=B0=E6=99=82=E3=81=AE?= =?UTF-8?q?=E3=82=BF=E3=82=A4=E3=83=A0=E3=82=BE=E3=83=BC=E3=83=B3=E3=82=92?= =?UTF-8?q?JST=E3=81=AB=E5=A4=89=E6=9B=B4=EF=BC=88=E5=85=B1=E9=80=9A?= =?UTF-8?q?=E9=96=A2=E6=95=B0=E3=82=92=E4=BD=BF=E7=94=A8=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-webapp/src/controller/login.py | 2 + ecs/jskult-webapp/src/db/database.py | 4 +- .../repositories/user_master_repository.py | 43 ++++++++++++------- .../src/services/login_service.py | 13 +++++- 4 files changed, 44 insertions(+), 18 deletions(-) diff --git a/ecs/jskult-webapp/src/controller/login.py b/ecs/jskult-webapp/src/controller/login.py index 99f4a389..9b2c808e 100644 --- a/ecs/jskult-webapp/src/controller/login.py +++ b/ecs/jskult-webapp/src/controller/login.py @@ -70,7 +70,9 @@ def login( jwt_token = login_service.login(request.username, request.password) except NotAuthorizeException as e: logger.info(f'ログイン失敗:{e}') + # ログイン失敗回数をカウント login_service.increase_login_failed_count(request.username) + # ログイン失敗回数を超過した場合はメッセージを変える if login_service.is_login_failed_limit_exceeded(request.username): 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) diff --git a/ecs/jskult-webapp/src/db/database.py b/ecs/jskult-webapp/src/db/database.py index c729faf5..7dab8455 100644 --- a/ecs/jskult-webapp/src/db/database.py +++ b/ecs/jskult-webapp/src/db/database.py @@ -189,7 +189,9 @@ class DatabaseClient: self.__session = None def to_jst(self): - self.execute('SET time_zone = "+9:00"') + # self.session.begin() + self.execute('SET SESSION time_zone = "Asia/Tokyo"') + # self.session.commit() def __execute_with_transaction(self, query: str, parameters: dict): # トランザクションを開始してクエリを実行する diff --git a/ecs/jskult-webapp/src/repositories/user_master_repository.py b/ecs/jskult-webapp/src/repositories/user_master_repository.py index 3024afe0..3acbc105 100644 --- a/ecs/jskult-webapp/src/repositories/user_master_repository.py +++ b/ecs/jskult-webapp/src/repositories/user_master_repository.py @@ -6,6 +6,19 @@ logger = get_logger('ユーザー取得') class UserMasterRepository(BaseRepository): + + def to_jst(self): + self._database.to_jst() + + def begin(self): + self._database.begin() + + def commit(self): + self._database.commit() + + def rollback(self): + self._database.rollback() + FETCH_SQL = """\ SELECT * @@ -30,29 +43,29 @@ class UserMasterRepository(BaseRepository): def increase_login_failed_count(self, parameter: dict) -> UserMasterModel: try: query = """\ - UPDATE - src05.user_mst - SET - mntuser_login_failed_cnt = - CASE - WHEN - DATE(mntuser_last_login_failed_datetime) = DATE(CONVERT_TZ(CURRENT_TIMESTAMP() ,'Etc/GMT-0','Asia/Tokyo')) - THEN + UPDATE + src05.user_mst + SET + mntuser_login_failed_cnt = + CASE + WHEN + DATE(mntuser_last_login_failed_datetime) = DATE(CURRENT_TIMESTAMP()) + THEN mntuser_login_failed_cnt + 1 - ELSE + ELSE 1 - END, - mntuser_last_login_failed_datetime = CONVERT_TZ(CURRENT_TIMESTAMP() ,'Etc/GMT-0','Asia/Tokyo') - WHERE + END, + mntuser_last_login_failed_datetime = CURRENT_TIMESTAMP() + WHERE user_id = :user_id - AND + AND mntuser_flg = 1;\ """ self._database.execute(query, parameter) except Exception as e: logger.exception(f"DB Error : Exception={e}") raise e - + def disable_mnt_user(self, parameter: dict) -> UserMasterModel: try: query = """\ @@ -68,4 +81,4 @@ class UserMasterRepository(BaseRepository): self._database.execute(query, parameter) except Exception as e: logger.exception(f"DB Error : Exception={e}") - raise e \ No newline at end of file + raise e diff --git a/ecs/jskult-webapp/src/services/login_service.py b/ecs/jskult-webapp/src/services/login_service.py index 2ea0724a..3a2715b2 100644 --- a/ecs/jskult-webapp/src/services/login_service.py +++ b/ecs/jskult-webapp/src/services/login_service.py @@ -11,7 +11,7 @@ from src.repositories.base_repository import BaseRepository from src.repositories.user_master_repository import UserMasterRepository from src.services.base_service import BaseService from src.system_var import environment -from src.system_var import constants + class LoginService(BaseService): REPOSITORIES = { @@ -50,7 +50,16 @@ class LoginService(BaseService): return user_record def increase_login_failed_count(self, user_id: str): - self.user_repository.increase_login_failed_count({'user_id': user_id}) + + try: + # セッション内のタイムゾーン変更のため、明示的にトランザクションを開始する + self.user_repository.begin() + self.user_repository.to_jst() + self.user_repository.increase_login_failed_count({'user_id': user_id}) + self.user_repository.commit() + except Exception as e: + self.user_repository.rollback() + raise e def on_login_fail_limit_exceeded(self, user_id: str): self.user_repository.disable_mnt_user({'user_id': user_id})