fix: ユーザーマスタ更新時のタイムゾーンをJSTに変更(共通関数を使用)
This commit is contained in:
parent
166dde4848
commit
db0e28db3e
@ -70,7 +70,9 @@ def login(
|
|||||||
jwt_token = login_service.login(request.username, request.password)
|
jwt_token = login_service.login(request.username, request.password)
|
||||||
except NotAuthorizeException as e:
|
except NotAuthorizeException as e:
|
||||||
logger.info(f'ログイン失敗:{e}')
|
logger.info(f'ログイン失敗:{e}')
|
||||||
|
# ログイン失敗回数をカウント
|
||||||
login_service.increase_login_failed_count(request.username)
|
login_service.increase_login_failed_count(request.username)
|
||||||
|
# ログイン失敗回数を超過した場合はメッセージを変える
|
||||||
if login_service.is_login_failed_limit_exceeded(request.username):
|
if login_service.is_login_failed_limit_exceeded(request.username):
|
||||||
login_service.on_login_fail_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)
|
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail=constants.LOGOUT_REASON_LOGIN_FAILED_LIMIT_EXCEEDED)
|
||||||
|
|||||||
@ -189,7 +189,9 @@ class DatabaseClient:
|
|||||||
self.__session = None
|
self.__session = None
|
||||||
|
|
||||||
def to_jst(self):
|
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):
|
def __execute_with_transaction(self, query: str, parameters: dict):
|
||||||
# トランザクションを開始してクエリを実行する
|
# トランザクションを開始してクエリを実行する
|
||||||
|
|||||||
@ -6,6 +6,19 @@ logger = get_logger('ユーザー取得')
|
|||||||
|
|
||||||
|
|
||||||
class UserMasterRepository(BaseRepository):
|
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 = """\
|
FETCH_SQL = """\
|
||||||
SELECT
|
SELECT
|
||||||
*
|
*
|
||||||
@ -30,29 +43,29 @@ class UserMasterRepository(BaseRepository):
|
|||||||
def increase_login_failed_count(self, parameter: dict) -> UserMasterModel:
|
def increase_login_failed_count(self, parameter: dict) -> UserMasterModel:
|
||||||
try:
|
try:
|
||||||
query = """\
|
query = """\
|
||||||
UPDATE
|
UPDATE
|
||||||
src05.user_mst
|
src05.user_mst
|
||||||
SET
|
SET
|
||||||
mntuser_login_failed_cnt =
|
mntuser_login_failed_cnt =
|
||||||
CASE
|
CASE
|
||||||
WHEN
|
WHEN
|
||||||
DATE(mntuser_last_login_failed_datetime) = DATE(CONVERT_TZ(CURRENT_TIMESTAMP() ,'Etc/GMT-0','Asia/Tokyo'))
|
DATE(mntuser_last_login_failed_datetime) = DATE(CURRENT_TIMESTAMP())
|
||||||
THEN
|
THEN
|
||||||
mntuser_login_failed_cnt + 1
|
mntuser_login_failed_cnt + 1
|
||||||
ELSE
|
ELSE
|
||||||
1
|
1
|
||||||
END,
|
END,
|
||||||
mntuser_last_login_failed_datetime = CONVERT_TZ(CURRENT_TIMESTAMP() ,'Etc/GMT-0','Asia/Tokyo')
|
mntuser_last_login_failed_datetime = CURRENT_TIMESTAMP()
|
||||||
WHERE
|
WHERE
|
||||||
user_id = :user_id
|
user_id = :user_id
|
||||||
AND
|
AND
|
||||||
mntuser_flg = 1;\
|
mntuser_flg = 1;\
|
||||||
"""
|
"""
|
||||||
self._database.execute(query, parameter)
|
self._database.execute(query, parameter)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.exception(f"DB Error : Exception={e}")
|
logger.exception(f"DB Error : Exception={e}")
|
||||||
raise e
|
raise e
|
||||||
|
|
||||||
def disable_mnt_user(self, parameter: dict) -> UserMasterModel:
|
def disable_mnt_user(self, parameter: dict) -> UserMasterModel:
|
||||||
try:
|
try:
|
||||||
query = """\
|
query = """\
|
||||||
@ -68,4 +81,4 @@ class UserMasterRepository(BaseRepository):
|
|||||||
self._database.execute(query, parameter)
|
self._database.execute(query, parameter)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.exception(f"DB Error : Exception={e}")
|
logger.exception(f"DB Error : Exception={e}")
|
||||||
raise e
|
raise e
|
||||||
|
|||||||
@ -11,7 +11,7 @@ from src.repositories.base_repository import BaseRepository
|
|||||||
from src.repositories.user_master_repository import UserMasterRepository
|
from src.repositories.user_master_repository import UserMasterRepository
|
||||||
from src.services.base_service import BaseService
|
from src.services.base_service import BaseService
|
||||||
from src.system_var import environment
|
from src.system_var import environment
|
||||||
from src.system_var import constants
|
|
||||||
|
|
||||||
class LoginService(BaseService):
|
class LoginService(BaseService):
|
||||||
REPOSITORIES = {
|
REPOSITORIES = {
|
||||||
@ -50,7 +50,16 @@ class LoginService(BaseService):
|
|||||||
return user_record
|
return user_record
|
||||||
|
|
||||||
def increase_login_failed_count(self, user_id: str):
|
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):
|
def on_login_fail_limit_exceeded(self, user_id: str):
|
||||||
self.user_repository.disable_mnt_user({'user_id': user_id})
|
self.user_repository.disable_mnt_user({'user_id': user_id})
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user