Exemplo n.º 1
0
        def wrapper(*args, **kwargs):
            """実際の処理を書くための関数
            Args:
                *args, **kwargs: funcの引数
            Returns:
                funcの返り値
            """
            logger = getLogger("django")

            # sessionの中にユーザ情報があればユーザ名を取得
            try:
                user = args[1].session['user']['preferred_username']
            except (AttributeError, KeyError):
                user = '******'
            post_data = args[1].data
            logger.info("%s module start", str(args[0].__class__))
            logger.info("%s post_data user: \"%s\" body: %s",
                        str(args[0].__class__), user, post_data)
            start_time = time()
            try:
                result = func(*args, **kwargs)
            except WebAppException as err:
                # funcのエラーハンドリング
                elapsed_time = time() - start_time
                logger.error(err, exc_info=True)
                logger.error("%s module killed -> elapsed time: %ss",
                             str(args[0].__class__), elapsed_time)
                response(status.HTTP_500_INTERNAL_SERVER_ERROR, message='内部エラー')
            else:
                elapsed_time = time() - start_time
                logger.info("%s module completed -> elapsed time: %ss",
                            str(args[0].__class__), elapsed_time)
            return result
Exemplo n.º 2
0
    def after_login(self, request):
        """Azure ad でリダイレクトで戻ってくるエンドポイント用service
        Args:
            request(object): クライアントより送られてきたHttp情報

        Returns:
           object: クライアントに返却するResonse情報
        """
        if request.GET.get('state') != request.session.get('state'):
            # 'state' がリクエスト時と一致しない
            return redirect('https://' + settings.DOMAIN + '/')
        if 'error' in request.GET:
            # Azure AD が認証/認可エラーを返した
            return response(http_status=status.HTTP_401_UNAUTHORIZED,
                            message='Azure Adで認証エラーが発生しました')
        if 'code' in request.GET:
            cache = self._load_cache(request)
            result = self._build_msal_app(
                cache=cache
            ).acquire_token_by_authorization_code(
                request.GET['code'],
                scopes=settings.
                SCOPES,  # Misspelled scope would cause an HTTP 400 error here
                redirect_uri=settings.REDIRECT_PATH)
            if 'error' in result:
                return response(
                    http_status=status.HTTP_401_UNAUTHORIZED,
                    message='Azureとの認証確認でエラーが発生しました',
                )
            request.session['user'] = result.get('id_token_claims')

        # Azure AD 側の oid とアプリ側の external_id が一致するユーザーがいるか確認する
        azure_preferred = request.session['user']['preferred_username']
        user = UserRepository().get_user(azure_preferred)
        if user is None:
            return response(http_status=status.HTTP_401_UNAUTHORIZED,
                            message='DBにユーザが登録されていないか重複しています')

        # sessionに必要情報を詰める
        self._set_session(request, user)

        # pathがあればリダイレクト
        path = 'https://' + settings.DOMAIN + '/'
        if 'next' in request.session:
            path = 'https://' + settings.DOMAIN + request.session['next']

        return redirect('https://' + settings.DOMAIN + '/')
Exemplo n.º 3
0
    def get(self, request):
        """GetのテストをするAPIエンドポイントの関数
        Args:
            request(object): Pクライアントより送られてきたHttp情報

        Returns:
           object: クライアントに返却するResonse情報
        """
        body = {'test': "test"}
        return response(response_body=body)
Exemplo n.º 4
0
    def post(self, request):
        """DBのselectをするAPIエンドポイントの関数
        Args:
            request(object): POSTでクライアントより送られてきたHttp情報

        Returns:
           object: クライアントに返却するResonse情報
        """
        service_resp = SampleService().sample_create(request)
        return response(status.HTTP_200_OK, response_body=service_resp)
Exemplo n.º 5
0
    def get_user_info(self, request):
        """ユーザ情報取得用エンドポイントの関数
        Args:
            request(object): POSTでクライアントより送られてきた情報
        Returns:
           object: Viewに返却するResonse情報
        """

        user_data = UserInfo().get_user_info(request)
        selializer = UserInfoSerializer(user_data)
        return response(response_body=selializer.data)
Exemplo n.º 6
0
    def dummy_login(self, request):
        """tset用のdummy loginをするAPIエンドポイントの関数
        Args:
            request(object): クライアントより送られてきたHttp情報

        Returns:
           object: Viewを経由してクライアントに返却するResonse情報
        """
        # key確認
        if 'preferred_username' not in request.data:
            return response(http_status=status.HTTP_401_UNAUTHORIZED,
                            message='preferred_usernameがありません')
        # Azure AD 側の oid とアプリ側の external_id が一致するユーザーがいるか確認する
        azure_preferred = request.data['preferred_username']
        user = UserRepository().get_user(azure_preferred)
        if user is None:
            return response(http_status=status.HTTP_401_UNAUTHORIZED,
                            message='DBにユーザが登録されていないか重複しています')

        # sessionに必要情報を詰める
        self._set_session(request, user)

        if not request.session.session_key:
            request.session.save()
        body = {
            'session_id':
            request.session.session_key,
            'user_id':
            request.session['system_cache']['user_id'],
            'user_name':
            request.session['system_cache']['user_name'],
            'user_section':
            request.session['system_cache']['user_section'],
            'user_category_list':
            request.session['system_cache']['user_category_list']
        }

        return response(response_body=body)
Exemplo n.º 7
0
    def pre_login(self, request):
        """DBのselectをするAPIエンドポイントの関数
        Args:
            request(object): クライアントより送られてきたHttp情報

        Returns:
           object: Viewを経由してクライアントに返却するResonse情報
        """
        if 'state' not in request.session:
            request.session['state'] = str(uuid.uuid4())
        auth_url = self._build_auth_url(scopes=settings.SCOPES,
                                        state=request.session['state'])

        selializer = LoginSerializer(LoginResponse(auth_url))
        return response(response_body=selializer.data)