Advertisement
Guest User

Untitled

a guest
Jul 11th, 2016
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.58 KB | None | 0 0
  1. import logging
  2. import json
  3. from validate_email import validate_email
  4.  
  5. from django.template import RequestContext
  6. from django.shortcuts import render_to_response
  7. from django.contrib.auth.decorators import login_required
  8. from django.http import HttpResponse, HttpResponseBadRequest, JsonResponse
  9.  
  10. from cordata.views.cordata_lib import time_wrapper, data_validation
  11. from cordata.views.contexts import universal_context
  12. from cordata.views.cordata_lib.common_functions import cordata_error
  13. from cordata.models import AccountData, CordataUser
  14. from cordata.views.campaign import getDraftCampaignsByUser
  15.  
  16. from django_twilio.decorators import twilio_view
  17. from twilio import twiml, TwilioRestException
  18. from twilio.rest import TwilioRestClient
  19.  
  20. log = logging.getLogger(__name__)
  21.  
  22. TWILIO_ACCOUNT_SID = "AC6b96a696a82b07b6cb61ba7e0d4bbb0b"
  23. TWILIO_AUTH_TOKEN = "a5a03bd1a6c48c0b7f4e1f42048c6376"
  24. TWILIO_CALLER_ID = "+14159361289"
  25. client = TwilioRestClient(TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN)
  26.  
  27. @login_required
  28. def profile(request):
  29. '''
  30. get request -> page for acct name, time zone, login creds
  31. ajax post -> set the above
  32. '''
  33. if request.method == 'POST':
  34. op = request.POST.get("operation")
  35. #use dict for pythonic switch to route post operations to hander functions
  36. handlers = {
  37. 'save-name': update_name,
  38. 'save-time-zone': update_tz,
  39. 'save-login': update_login,
  40. 'save-num-auth': check_if_num_authed,
  41. }
  42. default = lambda request: HttpResponse(json.dumps({'success' : False}), content_type="application/json")
  43. handler = handlers.get(op,default)
  44. try:
  45. return handler(request)
  46. except:
  47. log.exception("Could not process AJAX call")
  48. cordata_error(request.user,"Failed ajax in settings/profile")
  49. return default(request)
  50.  
  51. draft_campaigns, num_drafts = getDraftCampaignsByUser(user=request.user)
  52. context = universal_context(request)
  53. context['draft_campaigns'] = draft_campaigns
  54. context['num_drafts'] = num_drafts
  55. context['which_page'] = 'profile'
  56. context['which_section'] = 'settings'
  57. context['common_timezones'] = time_wrapper.timezone_options()
  58. return render_to_response(
  59. 'cordata/account/profile.html',
  60. context,
  61. context_instance=RequestContext(request)
  62. )
  63.  
  64. @twilio_view
  65. def auth_number(request):
  66. if(request.method == "POST"):
  67. num_to_auth = request.POST.get('needsAuthNumber')
  68. if(num_to_auth == '' or len(num_to_auth) != 10):
  69. return JsonResponse({'message': 'Invalid number entered, please try again', 'status': 'reauth'})
  70. num_to_auth = formatNumber(num_to_auth)
  71. try:
  72. caller_id = client.caller_ids.validate(num_to_auth)
  73. except TwilioRestException as e:
  74. return JsonResponse({'message': e.msg})
  75. return JsonResponse({'message': "Please enter " + caller_id["validation_code"] + " into your dial pad"})
  76.  
  77. def check_if_num_authed(request):
  78. num_to_auth = request.POST.get('number_to_check')
  79. if(num_to_auth == '' or len(num_to_auth) != 10):
  80. return JsonResponse({'status': 'not_authed'})
  81. num_to_auth = formatNumber(num_to_auth)
  82.  
  83. caller_ids = client.caller_ids.list()
  84. for caller_id in caller_ids:
  85. if num_to_auth == formatNumber(caller_id.friendly_name):
  86. ad = AccountData.objects.get(user=request.user)
  87. ad.authorized_number = True
  88. ad.save()
  89. return HttpResponse(json.dumps({'success' : True}), content_type="application/json")
  90. return HttpResponse(json.dumps({'success' : False}), content_type="application/json")
  91.  
  92. def update_name(request):
  93. ad = AccountData.objects.get(user=request.user)
  94. ad.account_first_name = request.POST.get("account_first_name")
  95. ad.account_last_name = request.POST.get("account_last_name")
  96. ad.save()
  97. return HttpResponse(json.dumps({'success' : True}), content_type="application/json")
  98.  
  99. def update_tz(request):
  100. ad = AccountData.objects.get(user=request.user)
  101. tz = request.POST.get("user_timezone")
  102. ad.user_timezone = tz
  103. ad.save()
  104. tz_str = '{full} ({short})'.format(full=tz, short=time_wrapper.tz_name_short(tz))
  105. return HttpResponse(json.dumps({
  106. 'success' : True,
  107. 'updated_tz' : tz_str,
  108. }), content_type="application/json")
  109.  
  110. def update_login(request):
  111. try:
  112. return update_login_helper(request)
  113. except Exception as e:
  114. log.warning('Could not update login', exc_info=True)
  115. return HttpResponseBadRequest(json.dumps({'savedAccount' : str(e)}), content_type="application/json")
  116.  
  117. def update_login_helper(request):
  118. user = request.user
  119. old_password = request.POST.get("old_password")
  120. new_password1 = request.POST.get("new_password1")
  121. new_password2 = request.POST.get("new_password2")
  122. new_email = request.POST.get("new_email")
  123. log.debug("CURRENT USER: " + str(user.email))
  124.  
  125. ## TODO ugly code needs refactor
  126. if(user.check_password(old_password)):
  127. if validate_email(new_email):
  128. num_emails = CordataUser.objects.filter(email = new_email).count()
  129. #Either the newly entered email is unique or is the current email associated with the account
  130. if (num_emails == 0 or new_email == user.email):
  131. user.email = new_email
  132. user.save()
  133. else:
  134. raise Exception("emailDuplicate")
  135. else:
  136. raise Exception("invalidEmail")
  137. if new_password1 == "" and new_password2 == "":
  138. return HttpResponse(json.dumps({'savedAccount' : 'success'}), content_type="application/json")
  139. elif (new_password1 == new_password2):
  140.  
  141. if data_validation.validate_password(new_password1):
  142. try:
  143. user.set_password(new_password1)
  144. user.save()
  145. return HttpResponse(json.dumps({'savedAccount' : 'success'}), content_type="application/json")
  146. except:
  147. cordata_error(user,"Failed to reset password")
  148. else:
  149. raise Exception("invalidPassword")
  150. else:
  151. raise Exception("unmatchedPassword")
  152. else:
  153. raise Exception("incorrectOldPassword")
  154.  
  155.  
  156. def formatNumber(num):
  157. num = num.replace(" ", "")
  158. num = num.replace("-", "")
  159. num = num.replace("(", "")
  160. num = num.replace(")", "")
  161. if(num[0] != '+'):
  162. num = '+1' + num
  163. return num
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement