51 lines
1.7 KiB
Python

from typing import Optional, Union
from fastapi import APIRouter, Depends, Request
from fastapi.responses import HTMLResponse
from src.depends.auth import verify_session
from src.model.internal.session import UserSession
from src.model.view.logout_view_model import LogoutViewModel
from src.system_var import constants
from src.templates import templates
router = APIRouter()
#########################
# Views #
#########################
@router.get('/', response_class=HTMLResponse)
async def logout_view(
request: Request,
reason: Optional[str] = None,
session: Union[UserSession, None] = Depends(verify_session)
):
# どういうルートでログインしたかを判断するため、refererを取得
referer = request.headers.get('referer', '')
redirect_to = '/login/userlogin'
link_text = 'MeDaCA機能メニューへ'
# セッションが切れておらず、メンテユーザである、またはメンテログイン画面から遷移した場合、メンテログイン画面に戻す
if (session is not None and session.user_flg == str(constants.PERMISSION_ENABLED)) \
or referer.endswith('maintlogin'):
redirect_to = '/login/maintlogin'
link_text = 'Login画面に戻る'
logout = LogoutViewModel(
redirect_to=redirect_to,
reason=constants.LOGOUT_REASON_MESSAGE_MAP.get(reason, ''),
link_text=link_text
)
template_response = templates.TemplateResponse(
'logout.html',
{
'request': request,
'logout': logout,
}
)
# クッキーを削除
template_response.delete_cookie('session')
return template_response