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 })
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})
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)
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})
def render_GET(self, request): parts = request.path.split("/") if len(parts) == 2: parts.append('contents') if len(parts) > 2: section = parts[2] try: content = print_template('docs/' + section, {}) except: content = "la seccion no existe" return print_template("content-pbx-lorea", {'content': content})
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', {})})
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})
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
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)
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
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)
def render_GET(self, request): pln_request = self.is_pln_request(request) parts = request.path.split('/') if pln_request and len(parts) > 2 and parts[2] == 'node.json': return self.render_node_json() return print_template('pln', {})
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)
def credit_form(self, logged, section, user_ext): if section == 'transfer': res = "<h1>Tranferir credito</h1>" res += "<h1>Tu saldo es %.3f" % (float(logged.credit),) else: res = "<h1>Recargar credito</h1>" res += print_template('credit', {'section': section, 'ext': user_ext}) return res
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', {}) })
def render_tinc_thread(self, request): t = Tinc() output = '<h2>Tinc</h2>\n' output += '<h3>Server</h3>\n' output += '<p>name: %s ip: %s address: %s</p>\n' % (t.name, t.subnet, t.address) output += '<h3>Peers</h3>\n' output += self.render_tincpeers(request, t) result = print_template('content-pbx-lorea', {'content': output}) reactor.callFromThread(self.render_tinc_finish, request, result)
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)
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)
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})
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})
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
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
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
def render_btc(self, logged, user, wallet): address = wallet.get_address(user.id) qr = ' <a href="https://blockchain.info/qr?data=%s&size=300"><img src="/tpl/images/qr.png" /></a>' % (address,) bitcoin = '<b>' + address + '</b>' + qr if user.wallets and (user.wallets[0].received or user.wallets[0].unconfirmed): user_wallet = user.wallets[0] pending = float(user_wallet.received - user_wallet.accounted) bitcoin += "<br />Saldo: %.4f" % (pending,) if user_wallet.unconfirmed: bitcoin += " (" + str(user_wallet.unconfirmed) + " sin confirmar)" if pending > 0: bitcoin += "<br />" bitcoin += print_template('bitcoin-trade', {'ticker': str(ticker.price), 'pending': str(pending)}) else: bitcoin += '<p>Puedes enviar fondos a la direccion bitcoin de tu cuenta para recargar credito.</p>' return bitcoin
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})
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)
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', {})
def render_btc(self, logged, user, wallet): address = wallet.get_address(user.id) qr = ' <a href="https://blockchain.info/qr?data=%s&size=300"><img src="/tpl/images/qr.png" /></a>' % ( address, ) bitcoin = '<b>' + address + '</b>' + qr if user.wallets and (user.wallets[0].received or user.wallets[0].unconfirmed): user_wallet = user.wallets[0] pending = float(user_wallet.received - user_wallet.accounted) bitcoin += "<br />Saldo: %.4f" % (pending, ) if user_wallet.unconfirmed: bitcoin += " (" + str( user_wallet.unconfirmed) + " sin confirmar)" if pending > 0: bitcoin += "<br />" bitcoin += print_template('bitcoin-trade', { 'ticker': str(ticker.price), 'pending': str(pending) }) else: bitcoin += '<p>Puedes enviar fondos a la direccion bitcoin de tu cuenta para recargar credito.</p>' return bitcoin
def render_all_text(self): model = Model() calls = model.query(Call).order_by(desc(Call.timestamp)).limit(1000) origins = set() count_country = defaultdict(int) result = "" call_data = [['Origin', 'Destination', 'Country', 'Duration', 'Date']] for call in calls: country_data = ext2country(str(call.destination)) count_country[country_data[0]+"-"+country_data[1]] += 1 if call.user: origin = str(call.user.voip_id) origins.add(str(call.user.voip_id)) else: origin = "unknown" origins.add('unknown') destination = str(call.destination) country_data = ": ".join(country_data) duration = "%.2f min" % (call.duration/60.0,) date = str(self.format_date(call.timestamp)) call_data.append([origin, destination, country_data, duration, date]) result += html.format_table(call_data) # country stats country_data = [['Country', 'Count']] for key, value in count_country.iteritems(): country_data.append([key, str(value)]) result += html.format_table(country_data) # number of origins origins = list(origins) origins.sort() result += "<p>Origins (%s): %s</p>" % (len(origins), str(origins)) return print_template('content-pbx-lorea', {'content': result})
def render_register(self, args={'user':'', 'password':'', 'email':'', 'error': ''}): content = print_template('register', args) return print_template('content-pbx-lorea', {'content': content})
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})
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})