Esempio n. 1
0
    def setup(self, request, *args, **kwargs):
        # URL で与えられた contact_id からお問い合わせのインスタンスを取得
        self.contact = get_object_by_uuid(Contact,
                                          kwargs.get('pk'),
                                          raise_404=True)

        return super().setup(request, *args, **kwargs)
Esempio n. 2
0
    def get_redirect_url(self, **kwargs):
        """kwargs の値に応じて有効/無効をを更新
        """
        # kwargs で指定した user_id を id としてもつ User のインスタンスを取得
        user = get_object_by_uuid(User, kwargs.get('pk'), raise_404=True)

        if user.is_staff:
            # 事務局員の場合は拒否
            messages.error(self.request, '事務局員の場合は設定できません!')
        else:
            # kwargs で指定した mode の値に応じてスタッフ権限を更新
            mode = kwargs.get('mode')
            if mode == 'enable':
                user.is_active = True
                user.save()
                messages.success(self.request, f'{user} さんのアカウントを有効にしました!')
            elif mode == 'disable':
                user.is_active = False
                user.save()
                messages.success(self.request, f'{user} さんのアカウントを無効にしました!')
            else:
                # 想定外の mode が与えられた場合は error を発生させる
                raise Http404

        # ユーザー詳細画面に redirect
        return reverse('home:superuser_user_detail', kwargs={'pk': user.id})
Esempio n. 3
0
    def get_redirect_url(self, **kwargs):
        # kwargs で指定した contact_id を id としてもつ Contact のインスタンスを取得
        contact = get_object_by_uuid(Contact, kwargs.get('pk'), raise_404=True)

        if contact.check_permission(self.request.user):
            # kwargs で指定した mode の値に応じてスタッフ権限を更新
            mode = kwargs.get('mode')
            if mode == 'close':
                contact.closed = True
                contact.save()
                messages.success(self.request, f'{contact} を対応済みにしました!')
            elif mode == 'open':
                contact.closed = False
                contact.save()
                messages.success(self.request, f'{contact} を未対応にしました!')
            else:
                # それ以外の mode の場合は 404
                raise Http404
        else:
            # 権限がない場合は 403
            raise PermissionDenied

        # ユーザー詳細画面に redirect
        return reverse('communication:contact_detail',
                       kwargs={'pk': contact.id})
Esempio n. 4
0
 def setup(self, request, *args, **kwargs):
     # model, pk が与えられている場合は、object を登録
     if hasattr(self, 'model_list'):
         self.object_list = []
         for index, model in enumerate(self.model_list):
             self.object_list.append(get_object_by_uuid(
                 model, kwargs.get(f'pk{index}'), raise_404=True))
     return super().setup(request, *args, **kwargs)
Esempio n. 5
0
    def search(self, token, kind, dt=None):
        """有効なEメールトークンが存在するかどうかを確認

        Args:
            token(str): Eメールトークンの文字列
            kind(str): Eメールトークンの種別(利用用途)
            dt(datetime): 判定を実施する日時(指定しない場合は現在)

        Returns:
            EmailToken or None: 存在すればその instance, なければ None
        """
        # 有効時間(秒単位)
        VALIDATED_PERIOD = 1800

        # 判定を実施する日時の default 値は「現在」
        if dt is None:
            dt = datetime.now()

        # EmailToken の取得を試行
        email_token = get_object_by_uuid(self, token)

        # 取得に失敗した場合は、認証失敗として判定
        if not email_token:
            return

        # 一定時間以上超過していた場合は、認証失敗として判定
        if dt > email_token.create_datetime + \
                timedelta(seconds=VALIDATED_PERIOD):
            return

        # 使用済みの場合は、認証失敗として判定
        if email_token.is_used:
            return

        # 種別が異なる場合は、認証失敗として判定
        # e.g.,「学内/個人情報入力」で発行した token を「学外/アカウント登録」で
        # 利用することを抑止
        if kind != email_token.kind:
            return

        # それ以外の場合は、認証成功。インスタンスを返す
        return email_token
Esempio n. 6
0
    def get_redirect_url(self, **kwargs):
        # kwargs で指定した user_id を id としてもつ User のインスタンスを取得
        user = get_object_by_uuid(User, kwargs.get('pk'), raise_404=True)

        if not user.is_student:
            # 学外アカウントの場合は拒否
            messages.error(self.request, '学外アカウントの場合は設定できません!')
        elif user.is_superuser:
            # システム管理者の場合は拒否
            messages.error(self.request, 'システム管理者の場合は設定できません!')
        else:
            # kwargs で指定した mode の値に応じてスタッフ権限を更新
            mode = kwargs.get('mode')
            if mode == 'enable':
                StaffInformation.objects.create(user=user)
                messages.success(self.request, f'{user} さんを事務局員に変更しました!')
            elif mode == 'disable':
                StaffInformation.objects.get(user=user).delete()
                messages.success(self.request, f'{user} さんを一般京大生に変更しました!')
            else:
                # 想定外の mode が与えられた場合は error を発生させる
                raise Http404
        # ユーザー詳細画面に redirect
        return reverse('home:superuser_user_detail', kwargs={'pk': user.id})
Esempio n. 7
0
 def setup(self, request, *args, **kwargs):
     # model, pk が与えられている場合は、object を登録
     if hasattr(self, 'model'):
         self.object = get_object_by_uuid(
             self.model, kwargs.get('pk'), raise_404=True)
     return super().setup(request, *args, **kwargs)
Esempio n. 8
0
 def setup(self, request, *args, **kwargs):
     self.object = get_object_by_uuid(
         self.model, kwargs.get('pk'), raise_404=True)
     super().setup(request, *args, **kwargs)