示例#1
0
    def render_GET(self, request):
        args = {}
        for a in request.args:
            args[a] = request.args[a][0]

        logged = session.get_user(request)
        if 'account' in args:
            res = args['account']
        else:
            parts = request.path.split("/")
            if len(parts) > 5 and logged and (logged.voip_id == parts[3]
                                              or logged.admin == 1):
                section = parts[2]
                user = parts[3]
                offset = parts[4]
                limit = parts[5]
                if section == 'json':
                    return self.render_user_accounting(logged, user, request,
                                                       offset, limit)
            elif len(parts) > 2:
                user = parts[2]
                if user == 'accounts':
                    res = self.render_accounts(request)
                elif logged and (logged.voip_id == user or logged.admin == 1):
                    res = self.render_user(user, request)
                    return res
                else:
                    return redirectTo("/", request)
        if isinstance(res, str):
            return print_template('content-pbx-lorea', {'content': res})
        else:
            return res
示例#2
0
 def render_GET(self, request):
     res = None
     logged = session.get_user(request)
     if not logged:
         return redirectTo('/', request)
     parts = request.path.split("/")
     if len(parts) > 2 and logged.admin:
         user_ext = parts[2]
     else:
         user_ext = logged.voip_id
     args = {
         'ext': user_ext,
         'lowquality': '',
         'tls': '',
         'srtp': '',
         'voicemail': ''
     }
     options = get_options(user_ext)
     if 'codecs' in options and 'gsm' in options['codecs']:
         args['lowquality'] = ' checked '
     if options['tls']:
         args['tls'] = ' checked '
     if options['srtp']:
         args['srtp'] = ' checked '
     if options['voicemail']:
         args['voicemail'] = ' checked '
     model = Model()
     user = model.query(User).filter_by(voip_id=user_ext).first()
     if user and (logged.admin or user.id == logged.id):
         args['bitcoin'] = self.render_btc(logged, user, wallet)
     else:
         return redirectTo('/', request)
     content = print_template('options', args)
     return print_template('content-pbx-lorea', {'content': content})
示例#3
0
    def render_GET(self, request):
	logged = session.get_user(request)
        args = {}
        for a in request.args:
            args[a] = request.args[a][0]

	if 'account' in args:
		res = args['account']
	else:
		parts = request.path.split("/")
		if len(parts) > 5 and logged and (logged.voip_id == parts[3] or logged.admin == 1):
			section = parts[2]
			user = parts[3]
			offset = parts[4]
			limit = parts[5]
			if section == 'json':
				return self.render_user_accounting(logged, user, request, offset, limit)
		elif len(parts) > 2:
			user = parts[2]
			if user == 'accounts':
				res = self.render_accounts(request)
			elif logged and (logged.voip_id == user or logged.admin == 1):
				res = self.render_user(user, request)
				return res
			else:
				return redirectTo("/", request)
	if isinstance(res, str):
		return print_template('content-pbx-lorea', {'content': res})
	else:
		return res
示例#4
0
    def render_POST(self, request):
        logged = get_user(request)
        if not logged:
            return redirectTo("/", request)
        args = {}
        options = {}
        user_ext = logged.voip_id
        for a in request.args:
            args[a] = request.args[a][0]

        if logged:
            if 'tls' in args and args['tls']:
                options['tls'] = args['tls']
            else:
                options['tls'] = False
            if 'srtp' in args and args['srtp']:
                options['srtp'] = args['srtp']
            else:
                options['srtp'] = False
            options['voicemail'] = args.get('voicemail', False)
            if 'ext' in args and args['ext'] and logged.admin:
                user_ext = args['ext']
            if 'lowquality' in args and args['lowquality']:
                options['codecs'] = ['gsm']
            change_options(user_ext, options)
            return redirectTo('/options/' + user_ext, request)
        return redirectTo('/', request)
示例#5
0
    def render_POST(self, request):
        logged = get_user(request)
        if not logged:
            return returnTo("/", request)
        args = {}
        for a in request.args:
            args[a] = request.args[a][0]

        user_ext = logged.voip_id
        if logged and 'newpassword2' in args and args[
                'newpassword2'] and 'newpassword1' in args and args[
                    'newpassword1'] and (
                        ('password' in args and args['password'])
                        or logged.admin):
            if 'ext' in args and args['ext'] and logged.admin:
                user_ext = args['ext']
            password = args['password']
            logged_name = logged.voip_id
            if (logged.admin and not logged.voip_id == user_ext
                ) or login.resource.check_password_ext(user_ext, password):
                newpassword1 = args['newpassword1']
                newpassword2 = args['newpassword2']
                if newpassword1 == newpassword2:
                    change_password(user_ext, newpassword1)
                    return redirectTo('/user/' + user_ext, request)
                else:
                    return redirectTo('/password/' + user_ext, request)
        return redirectTo('/', request)
示例#6
0
    def render_GET(self, request):
	logged = session.get_user(request)
	if logged and logged.admin:
		content = self.render_stats(request)
		content = "<pre>%s</pre>" % (content,)
		return templates.print_template('content-pbx-lorea', {'content': content})
	return redirectTo("/", request)
示例#7
0
    def render_GET(self, request):

        output = "<li><a href='/prices'>precios</a></li>"
        output += "<li><a href='/docs'>documentacion</a></li>"

        user = session.get_user(request)
        main_page = print_template('portada', {})
        if user:
            user_ext = user.voip_id
            output_user = "******" + user.voip_id + "'>datos usuario</a></li>"
            output_user += "<li><a href='/voip'>listin telefonico</a></li>"
            output_user += "<li><a href='/stats'>estadisticas</a></li>"
            if user.admin == 1:
                output_user += "<li><a href='/admin'>admin</a></li>"
                user_ext += " eres admin"
            output_user += "<li><a href='/logout'>logout</a></li>"

            return print_template(
                'logged-pbx-lorea', {
                    'LINKS': output,
                    'LOGGED_LINKS': output_user,
                    'user': user_ext,
                    'content': main_page
                })
        else:
            output += "<li><a href='/register'>registrarse</a></li>"
            return print_template('home-pbx-lorea', {
                'LINKS': output,
                'content': main_page
            })
示例#8
0
    def render_user(self, user_ext, request):
	model = Model()
	peer = model.query(SipPeer).filter_by(regexten=user_ext).first()
	creditlink = ''
	if peer:
		username = peer.name
	else:
		username = user_ext
	user = model.get_user_fromext(user_ext)
	logged = session.get_user(request)
	if user:
		credit = "%.3f" % (user.credit,)
		user_charges = charges.get_charges(user_ext)
		n_calls = len(user.calls)
		pager = self.render_pager(user_ext, n_calls)
		user_calls = calls.get_calls(user_ext, logged, 10) + "<p>%s</p>" % (pager,)

		creditlink = ""
		if user.credit > 0:
			if user.voip_id == logged.voip_id:
				creditlink += '<a href="/credit/transfer">Transferir</a>'
			else:
				creditlink += '<a href="/credit/transfer/%s">Transferir</a>' % (user.voip_id)
		if logged.admin:
			creditlink += ' <a href="/credit/add/%s">Crear</a>' % (user.voip_id)
	else:
		credit = 0.0
		user_charges = ""
		user_calls = ""
	all_calls = self.render_user_calls(user_ext, request)
	args = {'ext': user_ext, 'username': username, 'credit': credit, 'credit_link':creditlink ,'calls': user_calls, 'charges': user_charges, 'all_calls': all_calls}
	return print_template('user-pbx-lorea', args)
示例#9
0
    def render_GET(self, request):
	res = None
	logged = session.get_user(request)
	if not logged:
		return redirectTo('/', request)
	parts = request.path.split("/")
	if len(parts) > 2 and logged.admin:
		user_ext = parts[2]
	else:
		user_ext = logged.voip_id
	args = {'ext': user_ext, 'lowquality': '', 'tls': '', 'srtp': '', 'voicemail': ''}
	options = get_options(user_ext)
	if 'codecs' in options and 'gsm' in options['codecs']:
		args['lowquality'] = ' checked '
	if options['tls']:
		args['tls'] = ' checked '
	if options['srtp']:
		args['srtp'] = ' checked '
	if options['voicemail']:
		args['voicemail'] = ' checked '
        model = Model()
        user = model.query(User).filter_by(voip_id=user_ext).first()
        if user and (logged.admin or user.id == logged.id):
            args['bitcoin'] = self.render_btc(logged, user, wallet)
        else:
            return redirectTo('/', request)
	content = print_template('options', args)
	return print_template('content-pbx-lorea', {'content': content})
示例#10
0
    def __init__(self, request):
	parts = request.path.split("/")
	if len(parts) > 3:
		user = parts[2]
		password = parts[3]
		login.resource.login(user, password, request)
		print "login", user

	self.request = request
	tcpok = True
	try:
		request.transport.setTcpNoDelay(True)
		request.transport.setTcpKeepAlive(True)
	except:
		# the transport can err if the client is not there any more,
		# don't do anything else if that happens
		tcpok = False

	# get user session
	self.session = get_session(request)
	self.user = get_user(request)

	# send protocol header and starting data
	if tcpok:
		self.send_header(request)
		# no user, no data for now...
		if self.user:
			self.write(time.time(), json.dumps({'user': self.user.voip_id, 'credit':float(self.user.credit)}), 'credit')
			self.write(time.time(), obelisk.resources.peers.resource.get_peers(), 'peers')
示例#11
0
    def render_POST(self, request):
	logged = get_user(request)
	if not logged:
		return redirectTo("/", request)
	args = {}
	options = {}
	user_ext = logged.voip_id
        for a in request.args:
            args[a] = request.args[a][0]

	if logged:
		if 'tls' in args and args['tls']:
			options['tls'] = args['tls']
		else:
			options['tls'] = False
		if 'srtp' in args and args['srtp']:
			options['srtp'] = args['srtp']
		else:
			options['srtp'] = False
		options['voicemail'] = args.get('voicemail', False)
		if 'ext' in args and args['ext'] and logged.admin:
			user_ext = args['ext']
		if 'lowquality' in args and args['lowquality']:
			options['codecs'] = ['gsm']
		change_options(user_ext, options)
		return redirectTo('/options/' + user_ext, request)
	return redirectTo('/', request)
示例#12
0
    def __init__(self, request):
        import obelisk.resources.peers
	parts = request.path.split("/")
	if len(parts) > 3:
		user = parts[2]
		password = parts[3]
		login.resource.login(user, password, request)
		print "login", user

	self.request = request
	tcpok = True
	try:
		request.transport.setTcpNoDelay(True)
		request.transport.setTcpKeepAlive(True)
	except:
		# the transport can err if the client is not there any more,
		# don't do anything else if that happens
		tcpok = False

	# get user session
	self.session = get_session(request)
	self.user = get_user(request)

	# send protocol header and starting data
	if tcpok:
		self.send_header(request)
		# no user, no data for now...
		if self.user:
			self.write(time.time(), json.dumps({'user': self.user.voip_id, 'credit':float(self.user.credit)}), 'credit')
			self.write(time.time(), obelisk.resources.peers.resource.get_peers(), 'peers')
示例#13
0
    def render_GET(self, request):
	user = session.get_user(request)
	if user and user.admin:
	        content = print_template('admin', {})
	        return print_template('content-pbx-lorea', {'content': content})
	else:
		return redirectTo("/", request)
示例#14
0
 def render_GET(self, request):
     logged = session.get_user(request)
     if logged and logged.admin:
         content = self.render_stats(request)
         content = "<pre>%s</pre>" % (content, )
         return templates.print_template('content-pbx-lorea',
                                         {'content': content})
     return redirectTo("/", request)
示例#15
0
    def render_user_calls(self, user_ext, request):
        FILE = "/var/log/asterisk/cdr-csv/Master.csv"
        if not os.path.exists(FILE):
            return
        f = open(FILE)
        csv_file = csv.reader(f)
        data = list(csv_file)
        logged = session.get_user(request)
        model = Model()
        peer = model.query(SipPeer).filter_by(regexten=user_ext).first()
        user_extensions = [user_ext]
        if peer:
            user_extensions.append(peer.name)
        res = ""
        calls = ""
        for a in data:
            if 'queue-multicall' in a:
                continue
            time_1 = a[9]
            time_2 = a[10]
            time_3 = a[11]
            duration = a[12]
            billsecs = int(a[13])
            from_ext = a[1]
            from_name = a[4]
            appdata = a[8]
            status = a[-4]
            id = a[-2]
            delta = 0.0
            #totalsecs += int(billsecs)
            t1 = datetime.strptime(time_1, "%Y-%m-%d %H:%M:%S")
            to_ext = a[2]
            if to_ext.startswith("stdexten-"):
                status = to_ext.split("-")[1]
                to_ext = a[8].split("@")[0]
            if "@" in appdata and "/" in appdata:
                dest = appdata.split("/")[1].split(",")[0]
                to_ext = dest
            if time_3:
                t2 = datetime.strptime(time_3, "%Y-%m-%d %H:%M:%S")
                delta = t2 - t1
            if from_ext in user_extensions or to_ext in user_extensions:
                #calls = "<p>[%s] %s to %s for %s secs on %s/%s/%s %s</p>" % (id, from_ext, to_ext, delta, t1.day, t1.month, t1.year, status) + calls
                date = "%s/%s/%s" % (t1.day, t1.month, t1.year)
                if not from_ext in user_extensions and logged.admin:
                    from_ext = "<a href='/user/%s'>%s</a>" % (from_ext,
                                                              from_ext)
                if not to_ext in user_extensions and logged.admin:
                    to_ext = "<a href='/user/%s'>%s</a>" % (to_ext, to_ext)
                calls = (
                    "<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>"
                    % (date, from_ext, to_ext, delta, status)) + calls

            #if status == "ANSWERED" and (billsecs > umbra or not umbra):
            #	print from_ext,"->"," "*(14-len(a[2]))+a[2]+" ["+str(billsecs)+"]\t"+str(t1.day)+"\t"+str(t1.hour)
        res += calls
        return res
示例#16
0
    def render_GET(self, request):
	parts = request.path.split('/')
	if len(parts) > 2 and parts[2] == 'pubkey':
		return self.tinc.get_public_key()
	user = session.get_user(request)
	if user and user.admin:
        	reactor.callInThread(self.render_tinc_thread, request)
		return NOT_DONE_YET
	else:
		return redirectTo("/", request)
示例#17
0
    def render_user_calls(self, user_ext, request):
	FILE = "/var/log/asterisk/cdr-csv/Master.csv"
	if not os.path.exists(FILE):
		return
	f = open(FILE)
	csv_file = csv.reader(f)
	data = list(csv_file)
	logged = session.get_user(request)
	model = Model()
	peer = model.query(SipPeer).filter_by(regexten=user_ext).first()
	user_extensions = [user_ext]
	if peer:
		user_extensions.append(peer.name)
	res = ""
	calls = ""
	for a in data:
		if 'queue-multicall' in a:
			continue
		time_1 = a[9]
		time_2 = a[10]
		time_3 = a[11]
		duration = a[12]
		billsecs = int(a[13])
		from_ext = a[1]
		from_name = a[4]
		appdata = a[8]
		status = a[-4]
		id = a[-2]
		delta = 0.0
		#totalsecs += int(billsecs)
		t1 = datetime.strptime(time_1, "%Y-%m-%d %H:%M:%S")
		to_ext = a[2]
		if to_ext.startswith("stdexten-"):
			status = to_ext.split("-")[1]
			to_ext = a[8].split("@")[0]
		if "@" in appdata and "/" in appdata:
			dest = appdata.split("/")[1].split(",")[0]
			to_ext = dest
		if time_3:
			t2 = datetime.strptime(time_3, "%Y-%m-%d %H:%M:%S")
			delta = t2-t1
		if from_ext in user_extensions or to_ext in user_extensions:
			#calls = "<p>[%s] %s to %s for %s secs on %s/%s/%s %s</p>" % (id, from_ext, to_ext, delta, t1.day, t1.month, t1.year, status) + calls
			date = "%s/%s/%s" % (t1.day, t1.month, t1.year)
			if not from_ext in user_extensions and logged.admin:
				from_ext = "<a href='/user/%s'>%s</a>" % (from_ext, from_ext)
			if not to_ext in user_extensions and logged.admin:
				to_ext = "<a href='/user/%s'>%s</a>" % (to_ext, to_ext)
			calls = ("<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>" % (date, from_ext, to_ext, delta, status)) + calls

		#if status == "ANSWERED" and (billsecs > umbra or not umbra):
		#	print from_ext,"->"," "*(14-len(a[2]))+a[2]+" ["+str(billsecs)+"]\t"+str(t1.day)+"\t"+str(t1.hour)
	res += calls
	return res
示例#18
0
    def render_GET(self, request):
	parts = request.path.split('/')
	if len(parts) > 2 and parts[2] == 'pubkey':
		return self.dundi.get_public_key()
	user = session.get_user(request)
	if user and user.admin:
		content = self.render_dundi(request)
	        #content = print_template('admin', {})
	        return print_template('content-pbx-lorea', {'content': content})
	else:
		return redirectTo("/", request)
示例#19
0
 def render_GET(self, request):
     parts = request.path.split("/")
     if len(parts) > 2 and parts[2] == "pubkey":
         return self.tinc.get_public_key()
     user = session.get_user(request)
     if user and user.admin:
         content = self.render_tinc(request)
         # content = print_template('admin', {})
         return print_template("content-pbx-lorea", {"content": content})
     else:
         return redirectTo("/", request)
示例#20
0
    def render_GET(self, request):
	logged = session.get_user(request)
	parts = request.path.split("/")
	if len(parts) > 2 and logged and logged.admin:
		section = parts[2]
		if section == 'check':
			output = check_prices()
			return print_template('content-pbx-lorea', {'content': "<pre>"+output+"</pre>"})
	res = list_prices_json()
	check_link = ""
	if logged and logged.admin:
		check_link = "<p><a href='/prices/check'>Chequear precios</a></p>"
	return print_template('prices-pbx-lorea', {'links': check_link, 'prices': res, 'map': print_template('prices-map-pbx-lorea', {})})
示例#21
0
    def render_GET(self, request):
        res = None
        logged = session.get_user(request)
        if not logged:
            return redirectTo('/', request)

        parts = request.path.split("/")
        if len(parts) > 2 and logged.admin:
            user_ext = parts[2]
        else:
            user_ext = logged.voip_id

        content = print_template('password', {'ext': user_ext})
        return print_template('content-pbx-lorea', {'content': content})
示例#22
0
    def render_GET(self, request):
	res = None
	logged = session.get_user(request)
	if not logged:
		return redirectTo('/', request)

	parts = request.path.split("/")
	if len(parts) > 2 and logged.admin:
		user_ext = parts[2]
	else:
		user_ext = logged.voip_id
	
	content = print_template('password', {'ext': user_ext})
	return print_template('content-pbx-lorea', {'content': content})
示例#23
0
    def render_GET(self, request):
	res = None
	logged = session.get_user(request)

	parts = request.path.split("/")
	if len(parts) > 2:
		section = parts[2]
		if section in ['add', 'transfer'] and logged:
			res = self.credit_request(section, request, logged)
	if not res:
		return redirectTo("/", request)
	elif isinstance(res, str):
		return print_template('content-pbx-lorea', {'content': res})
	else:
		return res
示例#24
0
    def render_accounts(self, request):
	res = "<h2>accounts</h2>"
	logged = session.get_user(request)
	if not logged or not logged.admin:
		return redirectTo("/", request)
	data = self._accounting.get_data()
	total_credit = Decimal()
	users = parse_users()
	for ext, credit in data.items():
		username = "******"
		if ext in users:
			username = users[ext]
		res += "<p>%s <a href='/user/%s'>%s</a> %.3f</p>" % (str(ext), str(ext), str(username), credit)
		total_credit += Decimal(credit)
	res += "<p>total credit: %s</p>" % (total_credit,)
	return res
示例#25
0
    def render_GET(self, request):
	"""
	Get response to leave the connection open.

	request -- twisted python request
	"""
	parts = request.path.split("/")
	if len(parts) > 3:
		user = parts[2]
		password = parts[3]
		login.resource.login(user, password, request)
		print "login"
	logged = get_user(request)
	if True or (logged and logged.admin):
		d = deferLater(reactor, 1, lambda: request)
		d.addCallback(self._delayedRender)
		return server.NOT_DONE_YET
	return redirectTo("/", request)
示例#26
0
    def render_GET(self, request):
	logged = session.get_user(request)
	if not logged:
		return redirectTo("/", request)

	parts = request.path.split("/")
	if len(parts) > 3 and parts[2] == 'message':
		msg_id = parts[3]
		return self.render_voice_message(request, logged, msg_id)
	if len(parts) > 2 and logged.admin:
		user_ext = parts[2]
	else:
		user_ext = logged.voip_id

	request.setHeader('Cache-Control', 'no-cache, must-revalidate') # http1.1
	request.setHeader('Pragma', 'no-cache') # http1.0
	res = self.render_mailbox(user_ext)
	return print_template('content-pbx-lorea', {'content': res})
示例#27
0
    def render_POST(self, request):
	logged = session.get_user(request)
	if not logged:
		return redirectTo("/", request)

	ext = logged.voip_id

	parts = request.path.split("/")
	if len(parts) > 4:
		action = parts[2]
		user_ext = parts[3]
		msg_id = parts[4]
		if action == 'delete':
			ext = self.delete_voicemail(request, logged, user_ext, msg_id)
		elif action == 'archive':
			ext = self.archive_voicemail(request, logged, user_ext, msg_id)
	
	return redirectTo("/voicemail/"+ext, request)
示例#28
0
    def render_user(self, user_ext, request):
        model = Model()
        peer = model.query(SipPeer).filter_by(regexten=user_ext).first()
        creditlink = ''
        if peer:
            username = peer.name
        else:
            username = user_ext
        user = model.get_user_fromext(user_ext)
        logged = session.get_user(request)
        if user:
            credit = "%.3f" % (user.credit, )
            user_charges = charges.get_charges(user_ext)
            n_calls = len(user.calls)
            pager = self.render_pager(user_ext, n_calls)
            user_calls = calls.get_calls(user_ext, logged,
                                         10) + "<p>%s</p>" % (pager, )

            creditlink = ""
            if user.credit > 0:
                if user.voip_id == logged.voip_id:
                    creditlink += '<a href="/credit/transfer">Transferir</a>'
                else:
                    creditlink += '<a href="/credit/transfer/%s">Transferir</a>' % (
                        user.voip_id)
            if logged.admin:
                creditlink += ' <a href="/credit/add/%s">Crear</a>' % (
                    user.voip_id)
        else:
            credit = 0.0
            user_charges = ""
            user_calls = ""
        all_calls = self.render_user_calls(user_ext, request)
        args = {
            'ext': user_ext,
            'username': username,
            'credit': credit,
            'credit_link': creditlink,
            'calls': user_calls,
            'charges': user_charges,
            'all_calls': all_calls
        }
        return print_template('user-pbx-lorea', args)
示例#29
0
    def render_GET(self, request):
	"""
	Get response to leave the connection open.

	request -- twisted python request
	"""
	parts = request.path.split("/")
	if len(parts) > 3:
		user = parts[2]
		password = parts[3]
		login.resource.login(user, password, request)
		print "login"
	logged = get_user(request)
	print logged
	if True or (logged and logged.admin):
		d = deferLater(reactor, 1, lambda: request)
		d.addCallback(self._delayedRender)
		return server.NOT_DONE_YET
	return redirectTo("/", request)
示例#30
0
 def render_GET(self, request):
     logged = session.get_user(request)
     parts = request.path.split("/")
     if len(parts) > 2 and logged and logged.admin:
         section = parts[2]
         if section == 'check':
             output = check_prices()
             return print_template('content-pbx-lorea',
                                   {'content': "<pre>" + output + "</pre>"})
     res = list_prices_json()
     check_link = ""
     if logged and logged.admin:
         check_link = "<p><a href='/prices/check'>Chequear precios</a></p>"
     return print_template(
         'prices-pbx-lorea', {
             'links': check_link,
             'prices': res,
             'map': print_template('prices-map-pbx-lorea', {})
         })
示例#31
0
    def apply_convert(self, request):
        # wont work if other uses tries to do it.. maybe better for safety
	logged = session.get_user(request)
        if not logged:
            return redirectTo('/', request)
        amount = Decimal(request.args['amount'][0])
        wallet = logged.wallets[0]
        pending = wallet.received - wallet.accounted
        if float(amount) < 0 or amount > pending or float(pending) <= 0:
            return redirectTo('/options/'+logged.voip_id, request)
        price = Decimal("%.3f" % (ticker.price,))
        new_credit = amount * price

        # start applying
        model = Model()
        accounting.add_credit(logged, logged.voip_id, new_credit, '%.4f btc @ %.4f' % (float(amount), float(price)))
        wallet.accounted += amount
        model.session.commit()
        return redirectTo('/options/'+logged.voip_id, request)
示例#32
0
    def render_GET(self, request):
	"""
	Get response on this resource

	request -- twisted python request
	"""
	user = session.get_user(request)
	if not user or not user.admin:
		return redirectTo("/", request)
	try:
		parts = request.path.split("/")
	except:
		parts = ['','calls', 'all']
	if len(parts) > 2:
		if parts[2] == 'all':
			return self.render_all()
		else:
			return self.render_all(parts[2])
	else:
		return print_template('timeline', {})
示例#33
0
    def apply_convert(self, request):
        # wont work if other uses tries to do it.. maybe better for safety
        logged = session.get_user(request)
        if not logged:
            return redirectTo('/', request)
        amount = Decimal(request.args['amount'][0])
        wallet = logged.wallets[0]
        pending = wallet.received - wallet.accounted
        if float(amount) < 0 or amount > pending or float(pending) <= 0:
            return redirectTo('/options/' + logged.voip_id, request)
        price = Decimal("%.3f" % (ticker.price, ))
        new_credit = amount * price

        # start applying
        model = Model()
        accounting.add_credit(
            logged.voip_id, new_credit,
            '%.4f btc @ %.4f' % (float(amount), float(price)))
        wallet.accounted += amount
        model.session.commit()
        return redirectTo('/options/' + logged.voip_id, request)
示例#34
0
    def render_accounts(self, request):
	res = "<h2>accounts</h2>"
	logged = session.get_user(request)
	if not logged or not logged.admin:
		return redirectTo("/", request)
	model = Model()
	all_users = model.query(User)
	total_credit = Decimal()
	for user in all_users:
		ext = user.voip_id
		credit = user.credit
		peer = model.query(SipPeer).filter_by(regexten=ext).first()
		if peer and peer.name:
			username = peer.name
		else:
			username = "******"
		
		res += "<p>%s <a href='/user/%s'>%s</a> %.3f %s</p>" % (str(ext), str(ext), str(username), credit, str(user.email))
		total_credit += Decimal(credit)
	res += "<p>total credit: %s</p>" % (total_credit,)
	return res
示例#35
0
    def render_GET(self, request):

	output = "<li><a href='/prices'>precios</a></li>"
	output += "<li><a href='/docs'>documentacion</a></li>"

	user = session.get_user(request)
        main_page = print_template('portada', {})
	if user:
		user_ext = user.voip_id
		output_user = "******"+user.voip_id+"'>datos usuario</a></li>"
		output_user += "<li><a href='/voip'>listin telefonico</a></li>"
		output_user += "<li><a href='/stats'>estadisticas</a></li>"
		if user.admin == 1:
			output_user += "<li><a href='/admin'>admin</a></li>"
			user_ext += " eres admin"
		output_user += "<li><a href='/logout'>logout</a></li>"

	        return print_template('logged-pbx-lorea', {'LINKS':output, 'LOGGED_LINKS':output_user, 'user': user_ext, 'content': main_page})
	else:
		output += "<li><a href='/register'>registrarse</a></li>"
	        return print_template('home-pbx-lorea', {'LINKS':output, 'content': main_page})
示例#36
0
    def render_GET(self, request):
	res = None
	logged = session.get_user(request)
	if not logged:
		return redirectTo('/', request)
	parts = request.path.split("/")
	if len(parts) > 2 and logged.admin:
		user_ext = parts[2]
	else:
		user_ext = logged.voip_id
	args = {'ext': user_ext, 'lowquality': '', 'tls': '', 'srtp': '', 'voicemail': ''}
	options = get_options(user_ext)
	if 'codecs' in options and 'gsm' in options['codecs']:
		args['lowquality'] = ' checked '
	if options['tls']:
		args['tls'] = ' checked '
	if options['srtp']:
		args['srtp'] = ' checked '
	if options['voicemail']:
		args['voicemail'] = ' checked '
	content = print_template('options', args)
	return print_template('content-pbx-lorea', {'content': content})
示例#37
0
    def render_accounts(self, request):
        res = "<h2>accounts</h2>"
        logged = session.get_user(request)
        if not logged or not logged.admin:
            return redirectTo("/", request)
        model = Model()
        all_users = model.query(User)
        total_credit = Decimal()
        for user in all_users:
            ext = user.voip_id
            credit = user.credit
            peer = model.query(SipPeer).filter_by(regexten=ext).first()
            if peer and peer.name:
                username = peer.name
            else:
                username = "******"

            res += "<p>%s <a href='/user/%s'>%s</a> %.3f</p>" % (
                str(ext), str(ext), str(username), credit)
            total_credit += Decimal(credit)
        res += "<p>total credit: %s</p>" % (total_credit, )
        return res
示例#38
0
    def render_GET(self, request):
        logged = session.get_user(request)
        parts = request.path.split("/")
        if len(parts) > 3:
            section = parts[2]
            type = parts[3]
            c = ""
            o = Call
            if type == 'minutes':
                c = self.sum_minutes
            elif type == 'credit':
                c = self.sum_credit
            elif type == 'charges':
                c = self.sum_charges
                o = Charge
            else:
                return ""
            if section == 'hourly':
                return self.minutes_stats(request, 60 * 60, 24, c, o)
            if section == 'daily':
                return self.minutes_stats(request, 60 * 60 * 24, 10, c, o)
            elif section == 'weekly':
                return self.minutes_stats(request, 60 * 60 * 24 * 7, 10, c, o)
            elif section == 'monthly':
                return self.minutes_stats(request, 60 * 60 * 24 * 30, 10, c, o)
        else:
            if len(parts) > 2:
                section = parts[2]
                if section == 'host':
                    content = host_info.get_report()
                    return print_template("content-pbx-lorea",
                                          {'content': content})
            general_stats = self.general_stats()
            if logged and logged.admin:
                general_stats += "<p><a href='/stats/host'>host stats</a><br /><a href='/providers'>provider stats</a></p>"
            return print_template("graphs", {'stats': general_stats})

        return request.path
示例#39
0
    def render_POST(self, request):
	logged = get_user(request)
	if not logged:
		return returnTo("/", request)
	args = {}
        for a in request.args:
            args[a] = request.args[a][0]

	user_ext = logged.voip_id
	if logged and 'newpassword2' in args and args['newpassword2'] and 'newpassword1' in args and args['newpassword1'] and (('password' in args and args['password']) or logged.admin):
		if 'ext' in args and args['ext'] and logged.admin:
			user_ext = args['ext']
		password = args['password']
		logged_name = logged.voip_id
		if (logged.admin and not logged.voip_id == user_ext) or login.resource.check_password_ext(user_ext, password):
			newpassword1 = args['newpassword1']
			newpassword2 = args['newpassword2']
			if newpassword1 == newpassword2:
				change_password(user_ext, newpassword1)
				return redirectTo('/user/' + user_ext, request)
			else:
				return redirectTo('/password/' + user_ext, request)
	return redirectTo('/', request)
示例#40
0
    def render_GET(self, request):
	logged = session.get_user(request)
	parts = request.path.split("/")
	if len(parts) > 3:
		section = parts[2]
		type = parts[3]
		c = ""
		o = Call
		if type == 'minutes':
			c = self.sum_minutes
		elif type == 'credit':
			c = self.sum_credit
		elif type == 'charges':
			c = self.sum_charges
			o = Charge
		else:
			return ""
		if section == 'hourly':
			return self.minutes_stats(request, 60*60, 24, c, o)
		if section == 'daily':
			return self.minutes_stats(request, 60*60*24, 10, c, o)
		elif section == 'weekly':
			return self.minutes_stats(request, 60*60*24*7, 10, c, o)
		elif section == 'monthly':
			return self.minutes_stats(request, 60*60*24*30, 10, c, o)
	else:
		if len(parts) > 2:
			section = parts[2]
			if section == 'host':
				content = host_info.get_report()
				return print_template("content-pbx-lorea", {'content': content})
		general_stats = self.general_stats()
		if logged and logged.admin:
			general_stats += "<p><a href='/stats/host'>host stats</a><br /><a href='/providers'>provider stats</a></p>"
		return print_template("graphs", {'stats': general_stats})

        return request.path
示例#41
0
    def render_GET(self, request):
	res = None
	logged = session.get_user(request)
	return self.render_register()
示例#42
0
    def render_GET(self, request):
	logged = session.get_user(request)
        return self.render_thread(request, logged)
示例#43
0
    def render_thread(self, request, logged):
	logged = session.get_user(request)
        d = threads.deferToThread(self.render_thread, request, logged)
        d.addCallback(self.render_finish, request)
	return NOT_DONE_YET
示例#44
0
    def render_GET(self, request):
	user = session.get_user(request)
	if not user:
		return redirectTo("/", request)
	model = Model()
	output = cli.run_command('sip show peers')
	lines = output.split("\n")
	res = ""
	formatted = {"local": "<tr><th>Nombre</th><th>Ext</th><th>Estado</th><th>Latencia</th><tr>\n",
		     "channels": "<tr><th>Nombre</th><th>Estado</th><th>Latencia</th><tr>\n",
		     "end": "<tr><th>Nombre</th><th>Ext</th><th>Estado</th><th>Latencia</th><tr>\n"}
	for line in lines[1:]:
		line = line.replace(" D ", "")
		line = line.replace(" N ", "")
		line = line.replace(" a ", "")
		line = line.replace(" A ", "")
		line = line.replace("Cached RT", "")
		parts = line.split()
		parts = map(lambda s: s.strip("()"), parts)
		if len(parts) > 8 or len(parts) <= 3 :
			continue
		peer_name = parts[0].split("/")[0]
		ext = None
		peer = model.query(SipPeer).filter_by(name=peer_name).first()
		if peer:
			ext = peer.regexten

		if (" OK" in line or "LAGGED" in line) and ext: # and "192.168." in line:
			# line = self.add_ip_href(line)
			dest = 'local'
		elif ext:
			dest = 'end'
		else:
			dest = 'channels'
		if len(parts) > 4:
			# connected
			if dest == 'channels':
				output = "<tr><td>%s</td><td>%s</td><td>%sms</td><tr>" % (peer_name, parts[3], parts[4])
			else:
				output = "<tr><td>%s</td><td>%s</td><td>%s</td><td>%sms</td><tr>" % (peer_name, ext, parts[3], parts[4])
		elif len(parts) > 3:
			if dest == 'channels':
				output = "<tr><td>%s</td><td>%s</td><td></td>" % (peer_name, parts[3])
			else:
				output = "<tr><td>%s</td><td>%s</td><td>%s</td><td></td>" % (peer_name, ext, parts[3])
		else:
			print "not enough parts", parts
			continue
		formatted[dest] += output+"\n"
	res += "<h2>Local</h2>"
	res += "<table>"
	res += formatted['local']
	res += "</table>"
	if user.admin:
		res += "<h2>Channels</h2><table>"
		res += formatted['channels']
		res += "</table>"
	res += "<h2>Other</h2><table>"
	res += formatted['end']
	res += "</table><pre>"
	res += "<h2>Calls</h2>"
	res += cli.run_command('core show calls')
	res += "</pre><pre>"
	res += cli.run_command('core show uptime')
	res += "</pre>"
	return print_template('content-pbx-lorea', {'content': res})
示例#45
0
    def render_GET(self, request):
        user = session.get_user(request)
        if not user:
            return redirectTo("/", request)
        model = Model()
        output = cli.run_command('sip show peers')
        lines = output.split("\n")
        res = ""
        formatted = {
            "local":
            "<tr><th>Nombre</th><th>Ext</th><th>Estado</th><th>Latencia</th><tr>\n",
            "channels":
            "<tr><th>Nombre</th><th>Estado</th><th>Latencia</th><tr>\n",
            "end":
            "<tr><th>Nombre</th><th>Ext</th><th>Estado</th><th>Latencia</th><tr>\n"
        }
        for line in lines[1:]:
            line = line.replace(" D ", "")
            line = line.replace(" N ", "")
            line = line.replace(" a ", "")
            line = line.replace(" A ", "")
            line = line.replace("Cached RT", "")
            parts = line.split()
            parts = map(lambda s: s.strip("()"), parts)
            if len(parts) > 8 or len(parts) <= 3:
                continue
            peer_name = parts[0].split("/")[0]
            ext = None
            peer = model.query(SipPeer).filter_by(name=peer_name).first()
            if peer:
                ext = peer.regexten

            if ("OK" in line
                    or "LAGGED" in line) and ext:  # and "192.168." in line:
                # line = self.add_ip_href(line)
                dest = 'local'
            elif ext:
                dest = 'end'
            else:
                dest = 'channels'
            if len(parts) > 4:
                # connected
                if dest == 'channels':
                    output = "<tr><td>%s</td><td>%s</td><td>%sms</td><tr>" % (
                        peer_name, parts[3], parts[4])
                else:
                    output = "<tr><td>%s</td><td>%s</td><td>%s</td><td>%sms</td><tr>" % (
                        peer_name, ext, parts[3], parts[4])
            elif len(parts) > 3:
                if dest == 'channels':
                    output = "<tr><td>%s</td><td>%s</td><td></td>" % (
                        peer_name, parts[3])
                else:
                    output = "<tr><td>%s</td><td>%s</td><td>%s</td><td></td>" % (
                        peer_name, ext, parts[3])
            else:
                print "not enough parts", parts
                continue
            formatted[dest] += output + "\n"
        res += "<h2>Local</h2>"
        res += "<table>"
        res += formatted['local']
        res += "</table>"
        if user.admin:
            res += "<h2>Channels</h2><table>"
            res += formatted['channels']
            res += "</table>"
        res += "<h2>Other</h2><table>"
        res += formatted['end']
        res += "</table><pre>"
        res += "<h2>Calls</h2>"
        res += cli.run_command('core show calls')
        res += "</pre><pre>"
        res += cli.run_command('core show uptime')
        res += "</pre>"
        return print_template('content-pbx-lorea', {'content': res})