def post(self, request, *args, **kwargs): if self.new_commcare_user_form.is_valid( ) and self.custom_data.is_valid(): username = self.new_commcare_user_form.cleaned_data['username'] password = self.new_commcare_user_form.cleaned_data['password'] phone_number = self.new_commcare_user_form.cleaned_data[ 'phone_number'] if 'location_id' in request.GET: loc = get_document_or_404(Location, self.domain, request.GET.get('location_id')) user = CommCareUser.create( self.domain, username, password, phone_number=phone_number, device_id="Generated from HQ", user_data=self.custom_data.get_data_to_save(), ) if 'location_id' in request.GET: user.set_location(loc) if phone_number: initiate_sms_verification_workflow(user, phone_number) user_json = {'user_id': user._id, 'text': user.username_in_report} return self.render_json_response({ "status": "success", "user": user_json }) return self.render_form("failure")
def post(self, request, *args, **kwargs): if self.new_commcare_user_form.is_valid() and self.custom_data.is_valid(): username = self.new_commcare_user_form.cleaned_data['username'] password = self.new_commcare_user_form.cleaned_data['password'] phone_number = self.new_commcare_user_form.cleaned_data['phone_number'] if 'location_id' in request.GET: loc = get_document_or_404(Location, self.domain, request.GET.get('location_id')) user = CommCareUser.create( self.domain, username, password, phone_number=phone_number, device_id="Generated from HQ", user_data=self.custom_data.get_data_to_save(), ) if 'location_id' in request.GET: user.set_location(loc) if phone_number: initiate_sms_verification_workflow(user, phone_number) user_json = {'user_id': user._id, 'text': user.username_in_report} return self.render_json_response({"status": "success", "user": user_json}) return self.render_form("failure")
def post(self, request, *args, **kwargs): if self.new_commcare_user_form.is_valid( ) and self.custom_data.is_valid(): username = self.new_commcare_user_form.cleaned_data['username'] password = self.new_commcare_user_form.cleaned_data['password'] phone_number = self.new_commcare_user_form.cleaned_data[ 'phone_number'] user = CommCareUser.create( self.domain, username, password, phone_number=phone_number, device_id="Generated from HQ", user_data=self.custom_data.get_data_to_save(), ) if 'location_id' in request.GET: try: loc = SQLLocation.objects.get( domain=self.domain, location_id=request.GET['location_id']) except SQLLocation.DoesNotExist: raise Http404() user.set_location(loc) if phone_number: initiate_sms_verification_workflow(user, phone_number) user_json = {'user_id': user._id, 'text': user.username_in_report} return self.render_json_response({ "status": "success", "user": user_json }) return self.render_form("failure")
def post(self, request, *args, **kwargs): if self.new_commcare_user_form.is_valid() and self.custom_data.is_valid(): username = self.new_commcare_user_form.cleaned_data['username'] password = self.new_commcare_user_form.cleaned_data['password'] phone_number = self.new_commcare_user_form.cleaned_data['phone_number'] user = CommCareUser.create( self.domain, username, password, phone_number=phone_number, device_id="Generated from HQ", user_data=self.custom_data.get_data_to_save(), ) if 'location_id' in request.GET: try: loc = SQLLocation.objects.get(domain=self.domain, location_id=request['location_id']) except SQLLocation.DoesNotExist: raise Http404() user.set_location(loc) if phone_number: initiate_sms_verification_workflow(user, phone_number) user_json = {'user_id': user._id, 'text': user.username_in_report} return self.render_json_response({"status": "success", "user": user_json}) return self.render_form("failure")
def verify_phone_number(request, domain, couch_user_id): """ phone_number cannot be passed in the url due to special characters but it can be passed as %-encoded GET parameters """ if 'phone_number' not in request.GET: return Http404('Must include phone number in request.') phone_number = urllib.unquote(request.GET['phone_number']) user = CouchUser.get_by_user_id(couch_user_id, domain) result = initiate_sms_verification_workflow(user, phone_number) if result == VERIFICATION__ALREADY_IN_USE: messages.error( request, _('Cannot start verification workflow. Phone number is already in use.' )) elif result == VERIFICATION__ALREADY_VERIFIED: messages.error(request, _('Phone number is already verified.')) elif result == VERIFICATION__RESENT_PENDING: messages.success(request, _('Verification message resent.')) elif result == VERIFICATION__WORKFLOW_STARTED: messages.success(request, _('Verification workflow started.')) from corehq.apps.users.views.mobile import EditCommCareUserView redirect = reverse(EditCommCareUserView.urlname, args=[domain, couch_user_id]) return HttpResponseRedirect(redirect)
def verify_phone_number(request, domain, couch_user_id): """ phone_number cannot be passed in the url due to special characters but it can be passed as %-encoded GET parameters """ if 'phone_number' not in request.GET: raise Http404('Must include phone number in request.') phone_number = six.moves.urllib.parse.unquote(request.GET['phone_number']) user = CouchUser.get_by_user_id(couch_user_id, domain) try: result = initiate_sms_verification_workflow(user, phone_number) except BadSMSConfigException as error: messages.error(request, _('Bad SMS configuration: {error}').format(error=error)) else: if result == VERIFICATION__ALREADY_IN_USE: messages.error(request, _('Cannot start verification workflow. Phone number is already in use.')) elif result == VERIFICATION__ALREADY_VERIFIED: messages.error(request, _('Phone number is already verified.')) elif result == VERIFICATION__RESENT_PENDING: messages.success(request, _('Verification message resent.')) elif result == VERIFICATION__WORKFLOW_STARTED: messages.success(request, _('Verification workflow started.')) from corehq.apps.users.views.mobile import EditCommCareUserView redirect = reverse(EditCommCareUserView.urlname, args=[domain, couch_user_id]) return HttpResponseRedirect(redirect)
def initiate_verification(self, request, group): counts = { 'users': 0, 'phone_numbers': 0, 'phone_numbers_in_use': 0, 'phone_numbers_already_verified': 0, 'phone_numbers_pending_verification': 0, 'workflows_started': 0, } users_with_error = [] for user in group.get_users(is_active=True, only_commcare=True): counts['users'] += 1 for phone_number in user.phone_numbers: counts['phone_numbers'] += 1 try: result = initiate_sms_verification_workflow( user, phone_number) except Exception: result = None if result is None: users_with_error.append(user.raw_username) elif result == VERIFICATION__ALREADY_IN_USE: counts['phone_numbers_in_use'] += 1 elif result == VERIFICATION__ALREADY_VERIFIED: counts['phone_numbers_already_verified'] += 1 elif result == VERIFICATION__RESENT_PENDING: counts['phone_numbers_pending_verification'] += 1 elif result == VERIFICATION__WORKFLOW_STARTED: counts['workflows_started'] += 1 success_msg = _( '%(users)s user(s) and %(phone_numbers)s phone number(s) processed. ' '%(phone_numbers_already_verified)s already verified, ' '%(phone_numbers_in_use)s already in use by other contact(s), ' '%(phone_numbers_pending_verification)s already pending verification, ' 'and %(workflows_started)s verification workflow(s) started.' ) % counts messages.success(request, success_msg) if users_with_error: error_msg = _( 'Error processing the following user(s): %(users)s. Please try ' 'again and if the problem persists, report an issue.') % { 'users': ', '.join(set(users_with_error)) } messages.error(request, error_msg)
def initiate_verification(self, request, group): counts = { 'users': 0, 'phone_numbers': 0, 'phone_numbers_in_use': 0, 'phone_numbers_already_verified': 0, 'phone_numbers_pending_verification': 0, 'workflows_started': 0, } users_with_error = [] for user in group.get_users(is_active=True, only_commcare=True): counts['users'] += 1 for phone_number in user.phone_numbers: counts['phone_numbers'] += 1 try: result = initiate_sms_verification_workflow(user, phone_number) except Exception: result = None if result is None: users_with_error.append(user.raw_username) elif result == VERIFICATION__ALREADY_IN_USE: counts['phone_numbers_in_use'] += 1 elif result == VERIFICATION__ALREADY_VERIFIED: counts['phone_numbers_already_verified'] += 1 elif result == VERIFICATION__RESENT_PENDING: counts['phone_numbers_pending_verification'] += 1 elif result == VERIFICATION__WORKFLOW_STARTED: counts['workflows_started'] += 1 success_msg = _( '%(users)s user(s) and %(phone_numbers)s phone number(s) processed. ' '%(phone_numbers_already_verified)s already verified, ' '%(phone_numbers_in_use)s already in use by other contact(s), ' '%(phone_numbers_pending_verification)s already pending verification, ' 'and %(workflows_started)s verification workflow(s) started.' ) % counts messages.success(request, success_msg) if users_with_error: error_msg = _( 'Error processing the following user(s): %(users)s. Please try ' 'again and if the problem persists, report an issue.' ) % {'users': ', '.join(set(users_with_error))} messages.error(request, error_msg)
def verify_phone_number(request, domain, couch_user_id): """ phone_number cannot be passed in the url due to special characters but it can be passed as %-encoded GET parameters """ if "phone_number" not in request.GET: raise Http404("Must include phone number in request.") phone_number = urllib.unquote(request.GET["phone_number"]) user = CouchUser.get_by_user_id(couch_user_id, domain) result = initiate_sms_verification_workflow(user, phone_number) if result == VERIFICATION__ALREADY_IN_USE: messages.error(request, _("Cannot start verification workflow. Phone number is already in use.")) elif result == VERIFICATION__ALREADY_VERIFIED: messages.error(request, _("Phone number is already verified.")) elif result == VERIFICATION__RESENT_PENDING: messages.success(request, _("Verification message resent.")) elif result == VERIFICATION__WORKFLOW_STARTED: messages.success(request, _("Verification workflow started.")) from corehq.apps.users.views.mobile import EditCommCareUserView redirect = reverse(EditCommCareUserView.urlname, args=[domain, couch_user_id]) return HttpResponseRedirect(redirect)