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)
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)
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)