Пример #1
0
def account_settings(request):
    """Display and save user's Account settings.

    Returns:
        TemplateResponse: The user's Account settings template response.

    """
    msg = ''
    profile, es, user, is_logged_in = settings_helper_get_auth(request)

    if not user or not profile or not is_logged_in:
        login_redirect = redirect('/login/github?next=' +
                                  request.get_full_path())
        return login_redirect

    if request.POST:
        if 'persona_is_funder' or 'persona_is_hunter' in request.POST.keys():
            profile.persona_is_funder = bool(
                request.POST.get('persona_is_funder', False))
            profile.persona_is_hunter = bool(
                request.POST.get('persona_is_hunter', False))
            profile.save()

        if 'preferred_payout_address' in request.POST.keys():
            eth_address = request.POST.get('preferred_payout_address', '')
            if not is_valid_eth_address(eth_address):
                eth_address = profile.preferred_payout_address
            profile.preferred_payout_address = eth_address
            profile.save()
            msg = _('Updated your Address')
        elif request.POST.get('export', False):
            export_type = request.POST.get('export_type', False)

            response = HttpResponse(content_type='text/csv')
            name = f"gitcoin_{export_type}_{timezone.now().strftime('%Y_%m_%dT%H_00_00')}"
            response[
                'Content-Disposition'] = f'attachment; filename="{name}.csv"'

            writer = csv.writer(response)
            writer.writerow([
                'id', 'date', 'From', 'From Location', 'To', 'To Location',
                'Type', 'Value In USD', 'url', 'txid', 'token_name',
                'token_value'
            ])
            profile = request.user.profile
            earnings = profile.earnings if export_type == 'earnings' else profile.sent_earnings
            earnings = earnings.filter(
                network='mainnet').order_by('-created_on')
            for earning in earnings:
                writer.writerow([
                    earning.pk,
                    earning.created_on.strftime("%Y-%m-%dT%H:00:00"),
                    earning.from_profile.handle
                    if earning.from_profile else '*',
                    earning.from_profile.data.get('location', 'Unknown')
                    if earning.from_profile else 'Unknown',
                    earning.to_profile.handle if earning.to_profile else '*',
                    earning.to_profile.data.get('location', 'Unknown')
                    if earning.to_profile else 'Unknown',
                    earning.source_type.model_class(),
                    earning.value_usd,
                    earning.txid,
                    earning.token_name,
                    earning.token_value,
                    earning.url,
                ])

            return response
        elif request.POST.get('disconnect', False):
            profile.github_access_token = ''
            profile = record_form_submission(request, profile,
                                             'account-disconnect')
            profile.email = ''
            profile.save()
            create_user_action(profile.user, 'account_disconnected', request)
            redirect_url = f'https://www.github.com/settings/connections/applications/{settings.GITHUB_CLIENT_ID}'
            logout(request)
            logout_redirect = redirect(redirect_url)
            logout_redirect[
                'Cache-Control'] = 'max-age=0 no-cache no-store must-revalidate'
            return logout_redirect
        elif request.POST.get('delete', False):

            # remove profile
            profile.hide_profile = True
            profile = record_form_submission(request, profile,
                                             'account-delete')
            profile.email = ''
            profile.save()

            # remove email
            delete_user_from_mailchimp(es.email)

            if es:
                es.delete()
            request.user.delete()
            AccountDeletionRequest.objects.create(
                handle=profile.handle.lower(),
                profile={
                    'ip': get_ip(request),
                })
            profile.avatar_baseavatar_related.all().delete()
            try:
                profile.delete()
            except:
                profile.github_access_token = ''
                profile.user = None
                profile.hide_profile = True
                profile.save()
            messages.success(request, _('Your account has been deleted.'))
            logout_redirect = redirect(reverse('logout') + '?next=/')
            return logout_redirect
        else:
            msg = _('Error: did not understand your request')

    context = {
        'is_logged_in': is_logged_in,
        'nav': 'home',
        'active': '/settings/account',
        'title': _('Account Settings'),
        'navs': get_settings_navs(request),
        'es': es,
        'profile': profile,
        'msg': msg,
    }
    return TemplateResponse(request, 'settings/account.html', context)
Пример #2
0
def job_settings(request):
    """Display and save user's Account settings.

    Returns:
        TemplateResponse: The user's Account settings template response.

    """
    msg = ''
    profile, es, user, is_logged_in = settings_helper_get_auth(request)

    if not user or not profile or not is_logged_in:
        login_redirect = redirect('/login/github?next=' +
                                  request.get_full_path())
        return login_redirect

    if request.POST:

        if 'preferred_payout_address' in request.POST.keys():
            eth_address = request.POST.get('preferred_payout_address', '')
            if not is_valid_eth_address(eth_address):
                eth_address = profile.preferred_payout_address
            profile.preferred_payout_address = eth_address
            profile.save()
            msg = _('Updated your Address')
        elif request.POST.get('disconnect', False):
            profile.github_access_token = ''
            profile = record_form_submission(request, profile,
                                             'account-disconnect')
            profile.email = ''
            profile.save()
            create_user_action(profile.user, 'account_disconnected', request)
            messages.success(
                request, _('Your account has been disconnected from Github'))
            logout_redirect = redirect(reverse('logout') + '?next=/')
            return logout_redirect
        elif request.POST.get('delete', False):

            # remove profile
            profile.hide_profile = True
            profile = record_form_submission(request, profile,
                                             'account-delete')
            profile.email = ''
            profile.save()

            # remove email
            delete_user_from_mailchimp(es.email)

            if es:
                es.delete()
            request.user.delete()
            AccountDeletionRequest.objects.create(
                handle=profile.handle.lower(),
                profile={
                    'ip': get_ip(request),
                })
            profile.delete()
            messages.success(request, _('Your account has been deleted.'))
            logout_redirect = redirect(reverse('logout') + '?next=/')
            return logout_redirect
        else:
            msg = _('Error: did not understand your request')

    context = {
        'is_logged_in': is_logged_in,
        'nav': 'home',
        'active': '/settings/job',
        'title': _('Job Settings'),
        'navs': get_settings_navs(request),
        'es': es,
        'profile': profile,
        'msg': msg,
    }
    return TemplateResponse(request, 'settings/job.html', context)
Пример #3
0
def account_settings(request):
    """Display and save user's Account settings.

    Returns:
        TemplateResponse: The user's Account settings template response.

    """
    msg = ''
    profile, es, user, is_logged_in = settings_helper_get_auth(request)

    if not user or not profile or not is_logged_in:
        login_redirect = redirect('/login/github/?next=' +
                                  request.get_full_path())
        return login_redirect

    if request.POST:
        if 'persona_is_funder' or 'persona_is_hunter' in request.POST.keys():
            profile.persona_is_funder = bool(
                request.POST.get('persona_is_funder', False))
            profile.persona_is_hunter = bool(
                request.POST.get('persona_is_hunter', False))
            profile.save()

        if 'preferred_payout_address' in request.POST.keys():
            eth_address = request.POST.get('preferred_payout_address', '')
            if not is_valid_eth_address(eth_address):
                eth_address = profile.preferred_payout_address
            profile.preferred_payout_address = eth_address
            profile.save()
            msg = _('Updated your Address')
        elif request.POST.get('export', False):
            export_type = request.POST.get('export_type', False)

            profile = request.user.profile
            earnings = profile.earnings if export_type == 'earnings' else profile.sent_earnings
            earnings = earnings.filter(
                network='mainnet').order_by('-created_on')
            return export_earnings_csv(earnings, export_type)
        elif request.POST.get('disconnect', False):
            profile.github_access_token = ''
            profile = record_form_submission(request, profile,
                                             'account-disconnect')
            profile.email = ''
            profile.save()
            create_user_action(profile.user, 'account_disconnected', request)
            redirect_url = f'https://www.github.com/settings/connections/applications/{settings.GITHUB_CLIENT_ID}'
            logout(request)
            logout_redirect = redirect(redirect_url)
            logout_redirect[
                'Cache-Control'] = 'max-age=0 no-cache no-store must-revalidate'
            return logout_redirect
        elif request.POST.get('delete', False):

            # remove profile
            profile.hide_profile = True
            profile = record_form_submission(request, profile,
                                             'account-delete')
            profile.email = ''
            profile.save()

            # remove email
            delete_user_from_mailchimp(es.email)

            if es:
                es.delete()
            request.user.delete()
            AccountDeletionRequest.objects.create(
                handle=profile.handle.lower(),
                profile={
                    'ip': get_ip(request),
                })
            profile.avatar_baseavatar_related.all().delete()
            try:
                profile.delete()
            except:
                profile.github_access_token = ''
                profile.user = None
                profile.hide_profile = True
                profile.save()
            messages.success(request, _('Your account has been deleted.'))
            logout_redirect = redirect(reverse('logout') + '?next=/')
            return logout_redirect
        else:
            msg = _('Error: did not understand your request')

    context = {
        'is_logged_in': is_logged_in,
        'nav': 'home',
        'active': '/settings/account',
        'title': _('Account Settings'),
        'navs': get_settings_navs(request),
        'es': es,
        'profile': profile,
        'msg': msg,
    }
    return TemplateResponse(request, 'settings/account.html', context)