Example #1
0
def element(request, type, id):
	"""
	Controller to get element page
	:param request: HTTP request
	:param type: element type
	:param id: element id
	:return:
	"""
	if type == 'scrb' or type == 'pr':

		transact = DBService.get_transact(id)

		if not transact:
			return default_404(request)

		as_partial = bool(request.GET.get('as_partial', False))
		return render_to_response('transact_element_partial.html' if as_partial else 'element_base.html', {'transact': transact, 'type': type}, context_instance=RequestContext(request))
	elif type == 'profile':

		try:
			profile = User.objects.get(email=id)
		except ObjectDoesNotExist as e:
			return default_404(request)

		return render_to_response('profile.html', {'profile': profile}, context_instance=RequestContext(request))
	return HttpResponse(status=200)
	def request_callback(user, from_number, to_number):
		"""
		Request the callback
		:param user: user instance
		:param form: prom number
		:param to: to number
		:return:
		"""
		method = settings.API_URLS['api']['request_callback']

		# WARNING: Creates ApiParams with {start} and {end} params. Needs to be refactored
		params = ApiParams({'from': from_number, 'to': to_number})
		url = params.get_request_string(method)

		response = requests.get(url, headers={'Authorization': '%s:%s' % (user.userprofile.user_key, CommonService.get_sign(params, method, params.api_version, user.userprofile.secret_key))})
		content = response.content

		if response.ok:
			callback = DBService.register_callback(user.userprofile, from_number, to_number)
			if callback:
				return json.loads(content)

		logger = LogService()
		logger.error(Code.REQUEST_CALLBACK_ERR, data=json.loads(content), status_code=response.status_code)
		return None
Example #3
0
def create_new_user(request, template):
	"""
	Create new user controller
	:param request: HTTP request
	:param template: html template
	:return:
	"""
	if request.POST:
		new_user_form = NewUserForm(request.POST)
		transact_id = request.POST.get('transactId')
		transact = DBService.get_transact(transact_id)

		if new_user_form.errors:
			return JsonResponse({'data': new_user_form.errors}, status=400)

		result = ProfileService.create_profile(new_user_form.data)

		if result.is_success:
			if transact:
				transact.confirm()

			message = MailMessage(settings.INFO_EMAIL, 'Данные вашего профиля', 'mail_tmpl_profile_created.html', {
					'username': new_user_form.data['userName'],
					'password': new_user_form.data['userPassword']
				}, new_user_form.data['userEmail'])
			message.send()
			return HttpResponse(status=201)

		logger.error(Code.PCRERR, data=result.data)
		return HttpResponse(status=500, content=result.data)

	else:
		params = {}
		transact_id = request.GET.get('transact_id')
		transact = DBService.get_transact(transact_id)

		if transact:
			params['transact_id'] = transact.transact_id
			params['username'] = transact.username
			params['email'] = transact.email

		return render_to_response(template, params, context_instance=RequestContext(request))
Example #4
0
def new_profile_request(request, template):
	"""
	Controller to create new profile request
	:param request: HTTP request
	:param template: html template
	:return: HttpResponse
	"""
	profile_request_transact = DBService.create_profile_request_transact(ProfileRequest(request.POST.get('email'), request.POST.get('login')))
	if profile_request_transact:
		return render_to_response(template, {'email': profile_request_transact.email, 'transact_id': profile_request_transact.transact_id}, context_instance=RequestContext(request))

	return HttpResponse(status=500)
Example #5
0
def incoming_detect(request, user_key):
    """
	Incoming calls information
	https://github.com/zadarma/user-api-v1/blob/master/examples/callinfo_callback.php
	:param request: HTTP request
	:return:
	"""
    if 'zd_echo' in request.GET.keys() and (
            request.GET.get('zd_echo')
            and not request.GET.get('zd_echo') == ''):
        logger.info('ECHO PASSED', zd_echo=request.GET.get('zd_echo'))
        return HttpResponse(str(request.GET.get('zd_echo')))

    if settings.DEBUG:
        caller_id = request.body.split('\n')[0].split(': ')[1]
        called_did = request.body.split('\n')[1].split(': ')[1]
        call_start = request.body.split('\n')[2].split(': ')[1]
    else:
        caller_id = request.POST.get('caller_id')
        called_did = request.POST.get('called_did')
        call_start = request.POST.get('call_start')

    logger.info('IC PARMS', params=(
        caller_id,
        called_did,
        call_start,
    ))

    if not caller_id or not called_did or not call_start:
        return HttpResponse(status=400)

    # TODO: check signature
    # headers = request.META
    #
    # if 'Signature' in headers.keys():
    # 	print('IC Signature', headers.get('Signature'))
    # 	logger.info('IC HEDRS', signature=headers.get('Signature'))

    user_profile = UserProfile.objects.get(user_key=user_key)
    script = user_profile.widgetscript

    callee = Callee.objects.filter(user_profile_id=script.user_profile.pk,
                                   sip=caller_id)
    if len(callee) == 0:
        incoming_info = DBService.create_incoming_info(
            caller_id, called_did,
            datetime.datetime.strptime(call_start,
                                       settings.DATETIME_FORMAT_ALTER),
            script.guid)

    return HttpResponse(status=200)
Example #6
0
def pay(request, type):
	"""
	Controller to pay
	:param request: HTTP request
	:param type: pay type
	:return: HttpResponse instance
	"""
	if request.method == 'GET':
		return render_to_response('pay_{type}.html'.format(type=type), {'subscription_data': SubscriptionData(), 'payment_data': PaymentData(request.user.userprofile.customer_number)}, context_instance=RequestContext(request))
	elif request.method == 'POST' and type == 'subfee':
		if request.POST:
			subscr = DBService.create_subscr_transaction(request.user, request.POST)
			if subscr:
				return HttpResponse(status=201)
	return HttpResponse(status=500)
Example #7
0
def transact_action(request, action):
	"""
	Controller to execute transact action
	:param request: HTTP request
	:return: JsonResponse instance
	"""
	transact_id = request.POST.get('transactId')

	transact = DBService.get_transact(transact_id)
	if not transact:
		return HttpResponse(status=500)

	result = transact.__getattribute__(action)(request=request)
	if result:
		return JsonResponse({'transactId': transact.transact_id})

	return HttpResponse(status=500)
Example #8
0
def new_profile_request(request, template):
    """
	Controller to create new profile request
	:param request: HTTP request
	:param template: html template
	:return: HttpResponse
	"""
    profile_request_transact = DBService.create_profile_request_transact(
        ProfileRequest(request.POST.get('email'), request.POST.get('login')))
    if profile_request_transact:
        return render_to_response(
            template, {
                'email': profile_request_transact.email,
                'transact_id': profile_request_transact.transact_id
            },
            context_instance=RequestContext(request))

    return HttpResponse(status=500)
Example #9
0
    def update_calls_list_by_type(userprofile, stat, *args):
        """
		Update calls table of each call type
		:param userprofile: user profile
		:param stat: existing stat
		:param args: calls lists
		:return:
		"""
        message = '{row_to_update} row(s) to be inserted. '
        update_errors = []
        total_rows_to_update = 0

        for arg in args:
            if len(arg) != 0:
                call_type = arg[0].call_type
                user_stat = stat.filter(call_type=call_type)

                row_to_update = len(arg) - len(user_stat)
                if row_to_update > 0:
                    total_rows_to_update += row_to_update

                    for a in arg:
                        # check if current call already exist
                        stat_record = stat.filter(call_id=a.call_id)

                        # save to db if not
                        if not stat_record:
                            result = DBService.create_call(a, userprofile)

                            if not result.is_success:
                                update_errors.append((
                                    result.data,
                                    result.message,
                                ))

        if len(update_errors) > 0:
            # Update calls list succeed with errors
            message = message.format(row_to_update=total_rows_to_update)
            message += Code.UCLSWE

        return ServiceResponse(True, data=update_errors, message=message)
Example #10
0
def incoming_detect(request, user_key):
	"""
	Incoming calls information
	https://github.com/zadarma/user-api-v1/blob/master/examples/callinfo_callback.php
	:param request: HTTP request
	:return:
	"""
	if 'zd_echo' in request.GET.keys() and (request.GET.get('zd_echo') and not request.GET.get('zd_echo') == ''):
		logger.info('ECHO PASSED', zd_echo=request.GET.get('zd_echo'))
		return HttpResponse(str(request.GET.get('zd_echo')))

	if settings.DEBUG:
		caller_id = request.body.split('\n')[0].split(': ')[1]
		called_did = request.body.split('\n')[1].split(': ')[1]
		call_start = request.body.split('\n')[2].split(': ')[1]
	else:
		caller_id = request.POST.get('caller_id')
		called_did = request.POST.get('called_did')
		call_start = request.POST.get('call_start')

	logger.info('IC PARMS', params=(caller_id, called_did, call_start,))

	if not caller_id or not called_did or not call_start:
		return HttpResponse(status=400)

	# TODO: check signature
	# headers = request.META
	#
	# if 'Signature' in headers.keys():
	# 	print('IC Signature', headers.get('Signature'))
	# 	logger.info('IC HEDRS', signature=headers.get('Signature'))

	user_profile = UserProfile.objects.get(user_key=user_key)
	script = user_profile.widgetscript

	callee = Callee.objects.filter(user_profile_id=script.user_profile.pk, sip=caller_id)
	if len(callee) == 0:
		incoming_info = DBService.create_incoming_info(caller_id, called_did, datetime.datetime.strptime(call_start, settings.DATETIME_FORMAT_ALTER), script.guid)

	return HttpResponse(status=200)
Example #11
0
def pay(request, type):
    """
	Controller to pay
	:param request: HTTP request
	:param type: pay type
	:return: HttpResponse instance
	"""
    if request.method == 'GET':
        return render_to_response('pay_{type}.html'.format(type=type), {
            'subscription_data':
            SubscriptionData(),
            'payment_data':
            PaymentData(request.user.userprofile.customer_number)
        },
                                  context_instance=RequestContext(request))
    elif request.method == 'POST' and type == 'subfee':
        if request.POST:
            subscr = DBService.create_subscr_transaction(
                request.user, request.POST)
            if subscr:
                return HttpResponse(status=201)
    return HttpResponse(status=500)
	def update_calls_list_by_type(userprofile, stat, *args):
		"""
		Update calls table of each call type
		:param userprofile: user profile
		:param stat: existing stat
		:param args: calls lists
		:return:
		"""
		message = '{row_to_update} row(s) to be inserted. '
		update_errors = []
		total_rows_to_update = 0

		for arg in args:
			if len(arg) != 0:
				call_type = arg[0].call_type
				user_stat = stat.filter(call_type=call_type)

				row_to_update = len(arg) - len(user_stat)
				if row_to_update > 0:
					total_rows_to_update += row_to_update

					for a in arg:
						# check if current call already exist
						stat_record = stat.filter(call_id=a.call_id)

						# save to db if not
						if not stat_record:
							result = DBService.create_call(a, userprofile)

							if not result.is_success:
								update_errors.append((result.data, result.message,))

		if len(update_errors) > 0:
			# Update calls list succeed with errors
			message = message.format(row_to_update=total_rows_to_update)
			message += Code.UCLSWE

		return ServiceResponse(True, data=update_errors, message=message)
Example #13
0
    def get_call_record_filename(call_id, user):
        """
		Get call record filename by call_id
		:param call_id: id of the call
		:param user: current user
		:return: {str} filename
		"""
        call = DBService.get_call(call_id=call_id)
        if not call:
            return None

        # check if current user is the master of the call
        if call.user_profile_id != user.userprofile.pk:
            return None

        # check if the record was already loaded
        filename = call.record_filename
        if not filename:
            # load new record
            filename = PBXDataService.load_call_record_file(call, user)
            if not filename:
                return None
        return filename
	def get_call_record_filename(call_id, user):
		"""
		Get call record filename by call_id
		:param call_id: id of the call
		:param user: current user
		:return: {str} filename
		"""
		call = DBService.get_call(call_id=call_id)
		if not call:
			return None

		# check if current user is the master of the call
		if call.user_profile_id != user.userprofile.pk:
			return None

		# check if the record was already loaded
		filename = call.record_filename
		if not filename:
			# load new record
			filename = PBXDataService.load_call_record_file(call, user)
			if not filename:
				return None
		return filename
Example #15
0
def check_incoming_info(request, guid):
    """
	Chech incoming call info
	:param request:
	:param guid:
	:return:
	"""
    try:
        script = WidgetScript.objects.get(guid=guid)
    except ObjectDoesNotExist as e:
        return HttpResponse(status=400)

    incoming_info = DBService.get_incoming_info(script.guid)

    response = HttpResponse()
    response['Access-Control-Allow-Origin'] = '*'

    if not incoming_info:
        response.status_code = 204
        return response

    response.status_code = 200
    response.content = incoming_info.guid
    return response
Example #16
0
    def request_callback(user, from_number, to_number):
        """
		Request the callback
		:param user: user instance
		:param form: prom number
		:param to: to number
		:return:
		"""
        method = settings.API_URLS['api']['request_callback']

        # WARNING: Creates ApiParams with {start} and {end} params. Needs to be refactored
        params = ApiParams({'from': from_number, 'to': to_number})
        url = params.get_request_string(method)

        response = requests.get(
            url,
            headers={
                'Authorization':
                '%s:%s' %
                (user.userprofile.user_key,
                 CommonService.get_sign(params, method, params.api_version,
                                        user.userprofile.secret_key))
            })
        content = response.content

        if response.ok:
            callback = DBService.register_callback(user.userprofile,
                                                   from_number, to_number)
            if callback:
                return json.loads(content)

        logger = LogService()
        logger.error(Code.REQUEST_CALLBACK_ERR,
                     data=json.loads(content),
                     status_code=response.status_code)
        return None
Example #17
0
def check_incoming_info(request, guid):
	"""
	Chech incoming call info
	:param request:
	:param guid:
	:return:
	"""
	try:
		script = WidgetScript.objects.get(guid=guid)
	except ObjectDoesNotExist as e:
		return HttpResponse(status=400)

	incoming_info = DBService.get_incoming_info(script.guid)

	response = HttpResponse()
	response['Access-Control-Allow-Origin'] = '*'

	if not incoming_info:
		response.status_code = 204
		return response

	response.status_code = 200
	response.content = incoming_info.guid
	return response