Beispiel #1
0
    def form_valid(self, form):
        # 入力されたメールアドレスを取得
        input_email = form.cleaned_data.get('email')

        # 入力されたメールアドレスを持つ学外アカウントが存在するかを確認
        outsider_exists = User.objects.filter(
            is_student=False, userinformation__email=input_email).exists()

        # そのような学外アカウントが存在する場合は、メールアドレスを送信
        if outsider_exists:
            # token を作成
            form.instance.kind = EmailToken.KindChoices.OUTSIDER_PWRESET.value
            super().form_valid(form)
            # email を送信
            penguin_send_mail(
                'パスワード再設定', [form.instance.email],
                'home/mails/auth_outsider_pwreset.txt',
                {'register_url': self._get_pwreset_url(str(form.instance.id))})

        # 学外アカウントの有無に関わらず、message を追加して home:index に redirect
        # (存在しない場合はメールを送信しないが、success message が表示される)
        messages.info(
            self.request, f'E メールを {input_email} に送信しました!'
            'メールボックスを確認してください。'
            '該当する学外アカウントが存在しない場合はメールが届きません。'
            '一定時間経過しても届かない場合は、もう一度手続きをやり直してください。')

        # インスタンスを作成しなかった場合でも、success_url に遷移させる
        return redirect(self.success_url)
Beispiel #2
0
    def form_valid(self, form):
        # 作成者を登録
        form.instance.create_user = self.request.user

        # Contact のインスタンスを作成
        response = super().form_valid(form)

        # 初期閲覧部署を登録
        form.instance.department_list.set(
            form.instance.contact_kind.department_list.all())

        # お問い合わせ作成者にメールを送信
        penguin_send_mail('お問い合わせを送信しました', [self.request.user],
                          'communication/mails/contact_create.txt',
                          {'contact': form.instance})

        # 事務局員に slack を送信
        slack_message('communication/slacks/contact_create.slack',
                      {'slack': form.instance.contact_kind.slack},
                      form.instance.get_slack_attachments)

        # メッセージを追加
        messages.success(self.request, 'お問い合わせを事務局員に送信しました!')

        return response
Beispiel #3
0
    def form_valid(self, form_list):
        # form のインスタンスを取得
        user_information_form = form_list[0]
        student_information_form = form_list[1]

        with transaction.atomic():
            # UserInformation を作成
            user_information_form.instance.email = self.email_token.email
            user_information_form.instance.user = self.request.user
            user_information_form.save()

            # StudentInformation を作成
            student_information_form.instance.user = self.request.user
            student_information_form.save()

            # token を無効化
            EmailToken.objects.filter(email=self.email_token.email).update(
                is_used=True)

        # email を送信
        penguin_send_mail('学内アカウント個人情報入力完了', [self.email_token.email],
                          'home/mails/auth_student_identify_finished.txt')

        # messages を追加
        messages.success(self.request, '個人情報の入力が完了しました!')

        return super().form_valid(form_list)
Beispiel #4
0
    def form_valid(self, form):
        with transaction.atomic():
            # User のインスタンスを作成
            user = User.objects.create(username=self.email_token.email)
            user.set_password(form.cleaned_data.get('password'))
            user.save()

            # id, email を UserInformation に渡す
            form.instance.user = user
            form.instance.email = self.email_token.email

            # UserInformation のインスタンスを作成
            response = super().form_valid(form)

            # token を使用済(使用不可)にする
            EmailToken.objects.filter(email=self.email_token.email).update(
                is_used=True)

        # email を送信
        penguin_send_mail('学外アカウント作成完了', [user],
                          'home/mails/auth_outsider_register_finished.txt')

        # ログイン実施
        login(self.request,
              user,
              backend='django.contrib.auth.backends.ModelBackend')

        # message を追加
        messages.success(self.request, '学外アカウントを作成し、ログインしました!'
                         f'ようこそ {user} さん!')

        return response
Beispiel #5
0
    def form_valid(self, form):
        with transaction.atomic():
            # User を取得し、パスワードを再設定
            user = User.objects.get(username=self.email_token.email)
            user.set_password(form.cleaned_data['password'])
            user.save()

            # token を使用済(使用不可)にする
            EmailToken.objects.filter(email=self.email_token.email).update(
                is_used=True)

        # email を送信
        penguin_send_mail('パスワード再設定完了', [user],
                          'home/mails/auth_outsider_pwreset_finished.txt')

        # success message を追加
        messages.success(self.request, 'パスワードを再設定しました!')

        return super().form_valid(form)
Beispiel #6
0
    def form_valid(self, form):
        # トークンの種別を指定
        form.instance.kind = EmailToken.KindChoices.OUTSIDER_REGISTER.value

        # インスタンスを作成
        response = super().form_valid(form)

        # email を送信
        penguin_send_mail(
            '学外アカウント作成', [form.instance.email],
            'home/mails/auth_outsider_register.txt',
            {'register_url': self._get_register_url(str(form.instance.id))})

        # message を追加
        messages.info(
            self.request, f'E メールを{form.instance.email}に送信しました!'
            'メールボックスを確認してください')

        return response
Beispiel #7
0
    def form_valid(self, form):
        # トークンの種別を指定
        form.instance.kind = EmailToken.KindChoices.STUDENT_IDENTIFY.value

        # インスタンスを作成
        response = super().form_valid(form)

        # email を送信
        penguin_send_mail(
            '学内アカウント個人情報入力', [form.instance.email],
            'home/mails/auth_student_identify.txt', {
                'register_url':
                self._get_student_identify_url(str(form.instance.id))
            })

        # message を追加
        messages.info(
            self.request, f'E メールを {form.instance.email} に送信しました!'
            'メールボックスを確認してください')

        return response