Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import logging
- import json
- from validate_email import validate_email
- from django.template import RequestContext
- from django.shortcuts import render_to_response
- from django.contrib.auth.decorators import login_required
- from django.http import HttpResponse, HttpResponseBadRequest, JsonResponse
- from cordata.views.cordata_lib import time_wrapper, data_validation
- from cordata.views.contexts import universal_context
- from cordata.views.cordata_lib.common_functions import cordata_error
- from cordata.models import AccountData, CordataUser
- from cordata.views.campaign import getDraftCampaignsByUser
- from django_twilio.decorators import twilio_view
- from twilio import twiml, TwilioRestException
- from twilio.rest import TwilioRestClient
- log = logging.getLogger(__name__)
- TWILIO_ACCOUNT_SID = "AC6b96a696a82b07b6cb61ba7e0d4bbb0b"
- TWILIO_AUTH_TOKEN = "a5a03bd1a6c48c0b7f4e1f42048c6376"
- TWILIO_CALLER_ID = "+14159361289"
- client = TwilioRestClient(TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN)
- @login_required
- def profile(request):
- '''
- get request -> page for acct name, time zone, login creds
- ajax post -> set the above
- '''
- if request.method == 'POST':
- op = request.POST.get("operation")
- #use dict for pythonic switch to route post operations to hander functions
- handlers = {
- 'save-name': update_name,
- 'save-time-zone': update_tz,
- 'save-login': update_login,
- 'save-num-auth': check_if_num_authed,
- }
- default = lambda request: HttpResponse(json.dumps({'success' : False}), content_type="application/json")
- handler = handlers.get(op,default)
- try:
- return handler(request)
- except:
- log.exception("Could not process AJAX call")
- cordata_error(request.user,"Failed ajax in settings/profile")
- return default(request)
- draft_campaigns, num_drafts = getDraftCampaignsByUser(user=request.user)
- context = universal_context(request)
- context['draft_campaigns'] = draft_campaigns
- context['num_drafts'] = num_drafts
- context['which_page'] = 'profile'
- context['which_section'] = 'settings'
- context['common_timezones'] = time_wrapper.timezone_options()
- return render_to_response(
- 'cordata/account/profile.html',
- context,
- context_instance=RequestContext(request)
- )
- @twilio_view
- def auth_number(request):
- if(request.method == "POST"):
- num_to_auth = request.POST.get('needsAuthNumber')
- if(num_to_auth == '' or len(num_to_auth) != 10):
- return JsonResponse({'message': 'Invalid number entered, please try again', 'status': 'reauth'})
- num_to_auth = formatNumber(num_to_auth)
- try:
- caller_id = client.caller_ids.validate(num_to_auth)
- except TwilioRestException as e:
- return JsonResponse({'message': e.msg})
- return JsonResponse({'message': "Please enter " + caller_id["validation_code"] + " into your dial pad"})
- def check_if_num_authed(request):
- num_to_auth = request.POST.get('number_to_check')
- if(num_to_auth == '' or len(num_to_auth) != 10):
- return JsonResponse({'status': 'not_authed'})
- num_to_auth = formatNumber(num_to_auth)
- caller_ids = client.caller_ids.list()
- for caller_id in caller_ids:
- if num_to_auth == formatNumber(caller_id.friendly_name):
- ad = AccountData.objects.get(user=request.user)
- ad.authorized_number = True
- ad.save()
- return HttpResponse(json.dumps({'success' : True}), content_type="application/json")
- return HttpResponse(json.dumps({'success' : False}), content_type="application/json")
- def update_name(request):
- ad = AccountData.objects.get(user=request.user)
- ad.account_first_name = request.POST.get("account_first_name")
- ad.account_last_name = request.POST.get("account_last_name")
- ad.save()
- return HttpResponse(json.dumps({'success' : True}), content_type="application/json")
- def update_tz(request):
- ad = AccountData.objects.get(user=request.user)
- tz = request.POST.get("user_timezone")
- ad.user_timezone = tz
- ad.save()
- tz_str = '{full} ({short})'.format(full=tz, short=time_wrapper.tz_name_short(tz))
- return HttpResponse(json.dumps({
- 'success' : True,
- 'updated_tz' : tz_str,
- }), content_type="application/json")
- def update_login(request):
- try:
- return update_login_helper(request)
- except Exception as e:
- log.warning('Could not update login', exc_info=True)
- return HttpResponseBadRequest(json.dumps({'savedAccount' : str(e)}), content_type="application/json")
- def update_login_helper(request):
- user = request.user
- old_password = request.POST.get("old_password")
- new_password1 = request.POST.get("new_password1")
- new_password2 = request.POST.get("new_password2")
- new_email = request.POST.get("new_email")
- log.debug("CURRENT USER: " + str(user.email))
- ## TODO ugly code needs refactor
- if(user.check_password(old_password)):
- if validate_email(new_email):
- num_emails = CordataUser.objects.filter(email = new_email).count()
- #Either the newly entered email is unique or is the current email associated with the account
- if (num_emails == 0 or new_email == user.email):
- user.email = new_email
- user.save()
- else:
- raise Exception("emailDuplicate")
- else:
- raise Exception("invalidEmail")
- if new_password1 == "" and new_password2 == "":
- return HttpResponse(json.dumps({'savedAccount' : 'success'}), content_type="application/json")
- elif (new_password1 == new_password2):
- if data_validation.validate_password(new_password1):
- try:
- user.set_password(new_password1)
- user.save()
- return HttpResponse(json.dumps({'savedAccount' : 'success'}), content_type="application/json")
- except:
- cordata_error(user,"Failed to reset password")
- else:
- raise Exception("invalidPassword")
- else:
- raise Exception("unmatchedPassword")
- else:
- raise Exception("incorrectOldPassword")
- def formatNumber(num):
- num = num.replace(" ", "")
- num = num.replace("-", "")
- num = num.replace("(", "")
- num = num.replace(")", "")
- if(num[0] != '+'):
- num = '+1' + num
- return num
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement