Skip to content

Commit

Permalink
Merge pull request #54 from nopslip/zacs-generic-updates
Browse files Browse the repository at this point in the history
moving to wallet address only and clean up for typo/mispelling on rec…
  • Loading branch information
scco committed Nov 2, 2020
2 parents 0618208 + 4771b57 commit f92bba8
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 72 deletions.
17 changes: 8 additions & 9 deletions app/quadraticlands/urls.py
Expand Up @@ -24,8 +24,8 @@
mission_knowledge_intro, mission_knowledge_outro, mission_knowledge_question_1, mission_knowledge_question_1_right,
mission_knowledge_question_1_timeout, mission_knowledge_question_1_wrong, mission_knowledge_question_2,
mission_knowledge_question_2_right, mission_knowledge_question_2_timeout, mission_knowledge_question_2_wrong,
mission_recieve_index, mission_recieve_outro, mission_revieve_claim, mission_revieve_claimed,
mission_revieve_claiming, mission_use_index, mission_use_outro, mission_use_snapshot, privacy, terms,
mission_receive_claim, mission_receive_claimed, mission_receive_claiming, mission_receive_index,
mission_receive_outro, mission_use_index, mission_use_outro, mission_use_snapshot, privacy, terms,
)

app_name = 'quadraticlands'
Expand All @@ -37,7 +37,7 @@
# should be a helper route with no view involved
# that redirects based on user mission status in database to
# 0 = knowledge
# 1 = recieve
# 1 = receive
# 2 = use

urlpatterns = [
Expand All @@ -46,7 +46,6 @@
path('faq', faq, name='faq'),
path('terms', terms, name='terms'),
path('privacy', privacy, name='privacy'),
path('demo', claim, name='demo-claim'),
path('dashboard', dashboard, name='dashboard'),
path('claim2', claim2, name='claim2_json'), # initial trigger for token claim requests
path('demo2', demo2, name='demo2'),
Expand All @@ -65,11 +64,11 @@
path('mission/knowledge/question/2/timeout', mission_knowledge_question_2_timeout, name='mission_knowledge_question_2_timeout'),
path('mission/knowledge/outro', mission_knowledge_outro, name='mission_knowledge_outro'),

path('mission/recieve', mission_recieve_index, name='mission_recieve_index'),
path('mission/recieve/claim', mission_revieve_claim, name='mission_revieve_claim'),
path('mission/recieve/claiming', mission_revieve_claiming, name='mission_revieve_claiming'),
path('mission/recieve/claimed', mission_revieve_claimed, name='mission_revieve_claimed'),
path('mission/recieve/outro', mission_recieve_outro, name='mission_recieve_outro'),
path('mission/receive', mission_receive_index, name='mission_receive_index'),
path('mission/receive/claim', mission_receive_claim, name='mission_receive_claim'),
path('mission/receive/claiming', mission_receive_claiming, name='mission_receive_claiming'),
path('mission/receive/claimed', mission_receive_claimed, name='mission_receive_claimed'),
path('mission/receive/outro', mission_receive_outro, name='mission_receive_outro'),

path('mission/use', mission_use_index, name='mission_use_index'),
path('mission/use/snapshot', mission_use_snapshot, name='mission_use_snapshot'),
Expand Down
111 changes: 48 additions & 63 deletions app/quadraticlands/views.py
Expand Up @@ -39,7 +39,7 @@
from django.utils.translation import gettext_lazy as _

import requests
from eth_utils import is_checksum_address, is_normalized_address, to_checksum_address
from eth_utils import is_address, is_checksum_address, to_checksum_address
from ratelimit.decorators import ratelimit

from .forms import ClaimForm
Expand Down Expand Up @@ -70,73 +70,95 @@ def privacy(request):
def faq(request):
return TemplateResponse(request, 'quadraticlands/faq.html')

@login_required
def dashboard(request):
return TemplateResponse(request, 'quadraticlands/dashboard.html')

@login_required
def mission(request):
return TemplateResponse(request, 'quadraticlands/mission/index.html')

@login_required
def mission_knowledge_index(request):
return TemplateResponse(request, 'quadraticlands/mission/knowledge/index.html')


@login_required
def mission_knowledge_intro(request):
return TemplateResponse(request, 'quadraticlands/mission/knowledge/intro.html')

@login_required
def mission_knowledge_question_1(request):
return TemplateResponse(request, 'quadraticlands/mission/knowledge/question_1.html')

@login_required
def mission_knowledge_question_1_right(request):
return TemplateResponse(request, 'quadraticlands/mission/knowledge/question_1_right.html')

@login_required
def mission_knowledge_question_1_wrong(request):
return TemplateResponse(request, 'quadraticlands/mission/knowledge/question_1_wrong.html')

@login_required
def mission_knowledge_question_1_timeout(request):
return TemplateResponse(request, 'quadraticlands/mission/knowledge/question_1_timeout.html')

@login_required
def mission_knowledge_question_2(request):
return TemplateResponse(request, 'quadraticlands/mission/knowledge/question_2.html')

@login_required
def mission_knowledge_question_2_right(request):
return TemplateResponse(request, 'quadraticlands/mission/knowledge/question_2_right.html')

@login_required
def mission_knowledge_question_2_wrong(request):
return TemplateResponse(request, 'quadraticlands/mission/knowledge/question_2_wrong.html')

@login_required
def mission_knowledge_question_2_timeout(request):
return TemplateResponse(request, 'quadraticlands/mission/knowledge/question_2_timeout.html')

@login_required
def mission_knowledge_outro(request):
return TemplateResponse(request, 'quadraticlands/mission/knowledge/outro.html')

def mission_recieve_index(request):
return TemplateResponse(request, 'quadraticlands/mission/recieve/index.html')
@login_required
def mission_receive_index(request):
return TemplateResponse(request, 'quadraticlands/mission/receive/index.html')

def mission_revieve_claim(request):
return TemplateResponse(request, 'quadraticlands/mission/recieve/claim.html')
@login_required
def mission_receive_claim(request):
return TemplateResponse(request, 'quadraticlands/mission/receive/claim.html')

def mission_revieve_claiming(request):
return TemplateResponse(request, 'quadraticlands/mission/recieve/claiming.html')
@login_required
def mission_receive_claiming(request):
return TemplateResponse(request, 'quadraticlands/mission/receive/claiming.html')

def mission_revieve_claimed(request):
return TemplateResponse(request, 'quadraticlands/mission/recieve/claimed.html')
@login_required
def mission_receive_claimed(request):
return TemplateResponse(request, 'quadraticlands/mission/receive/claimed.html')

def mission_recieve_outro(request):
return TemplateResponse(request, 'quadraticlands/mission/recieve/outro.html')
@login_required
def mission_receive_outro(request):
return TemplateResponse(request, 'quadraticlands/mission/receive/outro.html')

@login_required
def mission_use_index(request):
return TemplateResponse(request, 'quadraticlands/mission/use/index.html')

@login_required
def mission_use_snapshot(request):
return TemplateResponse(request, 'quadraticlands/mission/use/snapshot.html')

@login_required
def mission_use_outro(request):
return TemplateResponse(request, 'quadraticlands/mission/use/outro.html')

@login_required
def mission_end(request):
return TemplateResponse(request, 'quadraticlands/mission/end.html')


# this will phased out soon and may already no longer work
def demo2(request):

user = request.user if request.user.is_authenticated else None
Expand Down Expand Up @@ -164,15 +186,6 @@ def demo2(request):
}
return TemplateResponse(request, 'quadraticlands/demo2.html', context)

# used for testing generic getFetch POSTs from client side JS
@login_required
@ratelimit(key='ip', rate='10/m', method=ratelimit.UNSAFE, block=True)
def testPost(request):
logger.info(f'successfully called testPost')
resp = {'payload': 'example'}
return JsonResponse(resp)


# ratelimit.UNSAFE is a shortcut for ('POST', 'PUT', 'PATCH', 'DELETE').
@login_required
@ratelimit(key='ip', rate='10/m', method=ratelimit.UNSAFE, block=True)
Expand All @@ -182,7 +195,6 @@ def claim2(request):
Returns JSON response from Ethereum Message Signing Service (emss)
'''
user = request.user if request.user.is_authenticated else None
profile = request.user.profile if user and hasattr(request.user, 'profile') else None

# if POST
if request.method == 'POST' and request.user.is_authenticated:
Expand All @@ -193,46 +205,19 @@ def claim2(request):
post_data_to_emss = {}
post_data_to_emss['user_id'] = user.id


# IMPORTANT - below is the current central source of truth for address on claim
# if user profile address is not set, then we will take the 'address' value
# submitted along with a ajax post to /claim2 -
# if no address in post and no profile addy then we dont have an addy for the user
# user claim will return error
# feature tracked here - https://github.com/nopslip/gitcoin-web-ql/issues/21

# if a primary user active wallet address was supplied
# then we will make sure that it's a checksum'd eth address

if request.POST.get('address'):
try:
if is_checksum_address(request.POST.get('address')):
primary_wallet_address = request.POST.get('address')
elif is_normalized_address(request.POST.get('address')):
primary_wallet_address = to_checksum_address(request.POST.get('address'))
else:
primary_wallet_address = None
logger.info('QuadLands: Primary wallet address failed integrity checks')
except:
logger.error('QuadLands: There was an issue intreperting user wallet address!')

try:
post_data_to_emss['user_address'] = profile.preferred_payout_address
payout_address = True
# TODO - this should be sanitized before passing directly to the EMSS as this should be considered un-trusted user supplied data
except:
logger.info('QuadraticLands - No preferred_payout_address set for user!')
payout_address = None

if not payout_address:

try:
post_data_to_emss['user_address'] = primary_wallet_address
except:
logger.error('QuadLands: Cannot find an address for the user claim!')
return JsonResponse({'error': 'no address found for user!'})


# confirm we received a valid, checksummed address for the token claim
try:
if is_checksum_address(request.POST.get('address')):
post_data_to_emss['user_address'] = request.POST.get('address')
elif is_address(request.POST.get('address')):
post_data_to_emss['user_address'] = to_checksum_address(request.POST.get('address'))
else:
logger.info('QuadLands: token claim address failed integrity check. No claim will be generated.')
return JsonResponse({'error': 'Token claim address failed integrity checks.'})
except:
logger.error('QuadLands: There was an issue validating user wallet address.')
return JsonResponse({'error': 'Token claim address failed validation'})

# will pull token claim data from the user, this is hard coded for now
post_data_to_emss['user_amount'] = 1000000000000000000000 # 1000 ETH - need to use big number in units WEI

Expand Down

0 comments on commit f92bba8

Please sign in to comment.