def handleChannelView(self, network, target, actual_date): net_object = config.db.networks.find_one({'user': self.username, 'url': network}) if net_object != None: network = str(net_object['_id']) objectId = bson.ObjectId(oid = network) else: return notfound.controller.get(), 404 # try and generate an object id from network, if we can't just return 404 nick = self.user['nick'].lower() if network not in self.user['networks'] else self.user['networks'][network]['nick'].lower() ctype = 'chan' if helper.is_channel(target) else 'query' ctype = 'status' if network in self.user['networks'] and target == self.user['networks'][network]['host'] else ctype # find the nick and the type if ctype == 'chan': query = {'account': self.username, 'network': objectId, 'target': target, 'status': False} elif ctype == 'query' and target.lower() != nick: query = {'account': self.username, 'network': objectId, '$or': [{'target': target}, {'nick': nick}, {'target': nick}], 'status': False, 'privmsg': True} elif ctype == 'status': query = {'account': self.username, 'network': objectId, 'status': True, 'privmsg': False} # generate a query actual_date_obj = datetime.strptime(actual_date, '%d-%m-%Y') meta = { 'prefix': '%s/%s' % (net_object['url'], urllib.quote_plus(target)), 'documents': config.db.buffers, 'extra_query': query, 'query_struct': { 'name': 'timestamp', 'evaluates': { 'prev': lambda date: (actual_date_obj - timedelta(days=1)).strftime('%d-%m-%Y'), 'date': lambda date: (actual_date_obj).strftime('%d-%m-%Y'), 'next': lambda date: (actual_date_obj + timedelta(days=1)).strftime('%d-%m-%Y') } } } # construct meta for the helper.compile_dates function try: d = helper.compile_dates(meta, actual_date) except Exception, e: return notfound.controller.get(), 404
def handleDefaultChannelView(self, network, target): net_object = config.db.networks.find_one({ 'user': self.username, 'url': network }) if net_object != None: network = str(net_object['_id']) objectId = bson.ObjectId(oid=network) else: return notfound.controller.get(), 404 # try and generate an object id from network, if we can't just return 404 nick = self.user['nick'].lower() if network not in self.user[ 'networks'] else self.user['networks'][network]['nick'].lower() ctype = 'chan' if helper.is_channel(target) else 'query' ctype = 'status' if network in self.user[ 'networks'] and target == self.user['networks'][network][ 'host'] else ctype # find the nick and the type if ctype == 'chan': query = { 'account': self.username, 'network': objectId, 'target': target, 'status': False } elif ctype == 'query' and target.lower() != nick: query = { 'account': self.username, 'network': objectId, '$or': [{ 'target': target }, { 'nick': nick }, { 'target': nick }], 'status': False, 'privmsg': True } elif ctype == 'status': query = { 'account': self.username, 'network': objectId, 'status': True, 'privmsg': False } else: query = None # generate a query if query != None: logs_found = config.db.buffers.find(query, { 'timestamp': 1 }).sort('timestamp', 1) else: return notfound.controller.get(), 404 # error occured dates = {} months = {} for doc in logs_found: ts = int(math.floor(doc['timestamp'] / 1000)) ts = datetime.fromtimestamp(ts) my = ts.strftime('%m-%Y') date = ts.strftime('%d-%m-%Y') if 4 <= ts.day <= 20 or 24 <= ts.day <= 30: suffix = 'th' else: suffix = ['st', 'nd', 'rd'][ts.day % 10 - 1] day = '%s%s' % (ts.strftime('%A %e'), suffix) if my not in dates: dates[my] = {} if date not in dates[my]: dates[my][date] = day # determine the dates we have for date, data in dates.iteritems(): ts = datetime.strptime('%s-%s' % ('01', date), '%d-%m-%Y') month = ts.strftime('%B %Y') if month not in months: months[month] = {'month': month, 'days': {}} # make an empty array if it doesn't exist for real_date, day in data.iteritems(): url = 'logs/%s/%s/%s' % (net_object['url'], urllib.quote_plus(target), real_date) months[month]['days'][real_date] = { 'date': day, 'day': real_date, 'url': url } # construct a months array ld = self.getNetworkList(network, target) log_nets = ld['log_nets'] logs = ld['logs'] # get the list of networks and channels this user has if 'X-PJAX' in request.headers: template = 'log-def-channel-view-partial.html' else: template = 'log-def-channel-view.html' return render_template( template, title='%s - %s - %s - %s' % (config.config['title'], 'Logs', net_object['url'], target), base_url=config.config['base_url'], sorted=sorted, len=len(months), months=months, log_nets=log_nets, logs=logs)
def handleChannelView(self, network, target, actual_date): net_object = config.db.networks.find_one({ 'user': self.username, 'url': network }) if net_object != None: network = str(net_object['_id']) objectId = bson.ObjectId(oid=network) else: return notfound.controller.get(), 404 # try and generate an object id from network, if we can't just return 404 nick = self.user['nick'].lower() if network not in self.user[ 'networks'] else self.user['networks'][network]['nick'].lower() ctype = 'chan' if helper.is_channel(target) else 'query' ctype = 'status' if network in self.user[ 'networks'] and target == self.user['networks'][network][ 'host'] else ctype # find the nick and the type if ctype == 'chan': query = { 'account': self.username, 'network': objectId, 'target': target, 'status': False } elif ctype == 'query' and target.lower() != nick: query = { 'account': self.username, 'network': objectId, '$or': [{ 'target': target }, { 'nick': nick }, { 'target': nick }], 'status': False, 'privmsg': True } elif ctype == 'status': query = { 'account': self.username, 'network': objectId, 'status': True, 'privmsg': False } # generate a query actual_date_obj = datetime.strptime(actual_date, '%d-%m-%Y') meta = { 'prefix': '%s/%s' % (net_object['url'], urllib.quote_plus(target)), 'documents': config.db.buffers, 'extra_query': query, 'query_struct': { 'name': 'timestamp', 'evaluates': { 'prev': lambda date: (actual_date_obj - timedelta(days=1)).strftime('%d-%m-%Y'), 'date': lambda date: (actual_date_obj).strftime('%d-%m-%Y'), 'next': lambda date: (actual_date_obj + timedelta(days=1)).strftime('%d-%m-%Y') } } } # construct meta for the helper.compile_dates function try: d = helper.compile_dates(meta, actual_date) except Exception, e: return notfound.controller.get(), 404
def getMessages(self, query, dfrom, nick): query['$where'] = 'this.timestamp >= %d && this.timestamp <= %d' % ( dfrom * 1000, (dfrom + 86400) * 1000) # alter the query if query != None: logs_found = config.db.buffers.find(query).sort('timestamp', 1) if query == None or logs_found.count() == 0: return '<div class="no-log-row">There are no logs to display at the moment.</div>' # empty array, bail. json = [] ret = [] for doc in logs_found: json.append(doc) # find the logs for jdoc in json: j = helper.parse_irc(base64.b64decode(jdoc['json'])) msg_parts = j['args'] if j['command'] == 'PRIVMSG': del msg_parts[0] jdoc_time = int(jdoc['timestamp']) msg = ' '.join(msg_parts) msg = msg.replace('<', '>').replace('<', '&rt;') # TODO - Parse status stuff and NOTICES if j['command'] == 'PRIVMSG': html = '<div class="log-row msg clear"><div class="log-row-ts">[%s]</div><div class="log-row-text"><%s> %s</div></div>' % ( jdoc_time, j['nick'], msg) elif j['command'] == 'JOIN': html = '<div class="log-row join clear"><div class="log-row-ts">[%s]</div><div class="log-row-text">%s (%s) has joined %s</div></div>' % ( jdoc_time, j['nick'], j['prefix'], j['args'][0]) elif j['command'] == 'PART': html = '<div class="log-row leave clear"><div class="log-row-ts">[%s]</div><div class="log-row-text">%s (%s) has left %s</div></div>' % ( jdoc_time, j['nick'], j['prefix'], j['args'][0]) elif j['command'] == 'QUIT': html = '<div class="log-row leave clear"><div class="log-row-ts">[%s]</div><div class="log-row-text">%s (%s) has quit</div></div>' % ( jdoc_time, j['nick'], j['prefix']) elif j['command'] == 'NICK': new_args = ' '.join(j['args']).split(' ') del new_args[0] html = '<div class="log-row nick clear"><div class="log-row-ts">[%s]</div><div class="log-row-text">%s is now known as %s</div></div>' % ( jdoc_time, j['nick'], new_args[0]) elif j['command'] == 'KICK': html = '<div class="log-row leave clear"><div class="log-row-ts">[%s]</div><div class="log-row-text">%s has kicked %s from %s (%s)</div></div>' % ( jdoc_time, j['nick'], j['args'][0], j['args'][1], j['args'][2]) elif j['command'] == 'MODE': m_nick = j['server'] if 'nick' not in j else j['nick'] target = nick if 'target' not in j else j['target'] if helper.is_channel(target) == True: new_modes = ' '.join(j['args']).split(' ') del new_modes[0] else: new_modes = ' '.join(j['args']).split(' ') del new_modes[0] # alter some variables for this html = '<div class="log-row dim clear"><div class="log-row-ts">[%s]</div><div class="log-row-text">%s sets %s</div></div>' % ( jdoc_time, m_nick, ' '.join(new_modes)) elif j['command'] == 'TOPIC': new_args = ' '.join(j['args']).split(' ') del new_args[0] html = '<div class="log-row dim clear"><div class="log-row-ts">[%s]</div><div class="log-row-text">%s has changed the topic to: %s</div></div>' % ( jdoc_time, j['nick'], ' '.join(new_args)) else: if j['command'] == 'NOTICE' or j['command'] == '374' or j[ 'command'] == '376' or j['command'] == '372': css = ' ' else: css = ' dim ' new_args = ' '.join(j['args']).split(' ') del new_args[0] html = '<div class="log-row%sclear"><div class="log-row-ts">[%s]</div><div class="log-row-text">%s</div></div>' % ( css, jdoc_time, ' '.join(new_args)) if html != '': ret.append(html) return ''.join(ret).decode('utf-8', 'replace')
def getMessages(self, query, dfrom, nick): query['$where'] = 'this.timestamp >= %d && this.timestamp <= %d' % (dfrom * 1000, (dfrom + 86400) * 1000) # alter the query if query != None: logs_found = config.db.buffers.find(query).sort('timestamp', 1) if query == None or logs_found.count() == 0: return '<div class="no-log-row">There are no logs to display at the moment.</div>' # empty array, bail. json = [] ret = [] for doc in logs_found: json.append(doc) # find the logs for jdoc in json: j = helper.parse_irc(base64.b64decode(jdoc['json'])) msg_parts = j['args'] if j['command'] == 'PRIVMSG': del msg_parts[0] jdoc_time = int(jdoc['timestamp']) msg = ' '.join(msg_parts) msg = msg.replace('<', '>').replace('<', '&rt;') # TODO - Parse status stuff and NOTICES if j['command'] == 'PRIVMSG': html = '<div class="log-row msg clear"><div class="log-row-ts">[%s]</div><div class="log-row-text"><%s> %s</div></div>' % (jdoc_time, j['nick'], msg) elif j['command'] == 'JOIN': html = '<div class="log-row join clear"><div class="log-row-ts">[%s]</div><div class="log-row-text">%s (%s) has joined %s</div></div>' % (jdoc_time, j['nick'], j['prefix'], j['args'][0]) elif j['command'] == 'PART': html = '<div class="log-row leave clear"><div class="log-row-ts">[%s]</div><div class="log-row-text">%s (%s) has left %s</div></div>' % (jdoc_time, j['nick'], j['prefix'], j['args'][0]) elif j['command'] == 'QUIT': html = '<div class="log-row leave clear"><div class="log-row-ts">[%s]</div><div class="log-row-text">%s (%s) has quit</div></div>' % (jdoc_time, j['nick'], j['prefix']) elif j['command'] == 'NICK': new_args = ' '.join(j['args']).split(' ') del new_args[0] html = '<div class="log-row nick clear"><div class="log-row-ts">[%s]</div><div class="log-row-text">%s is now known as %s</div></div>' % (jdoc_time, j['nick'], new_args[0]) elif j['command'] == 'KICK': html = '<div class="log-row leave clear"><div class="log-row-ts">[%s]</div><div class="log-row-text">%s has kicked %s from %s (%s)</div></div>' % (jdoc_time, j['nick'], j['args'][0], j['args'][1], j['args'][2]) elif j['command'] == 'MODE': m_nick = j['server'] if 'nick' not in j else j['nick'] target = nick if 'target' not in j else j['target'] if helper.is_channel(target) == True: new_modes = ' '.join(j['args']).split(' ') del new_modes[0] else: new_modes = ' '.join(j['args']).split(' ') del new_modes[0] # alter some variables for this html = '<div class="log-row dim clear"><div class="log-row-ts">[%s]</div><div class="log-row-text">%s sets %s</div></div>' % (jdoc_time, m_nick, ' '.join(new_modes)) elif j['command'] == 'TOPIC': new_args = ' '.join(j['args']).split(' ') del new_args[0] html = '<div class="log-row dim clear"><div class="log-row-ts">[%s]</div><div class="log-row-text">%s has changed the topic to: %s</div></div>' % (jdoc_time, j['nick'], ' '.join(new_args)) else: if j['command'] == 'NOTICE' or j['command'] == '374' or j['command'] == '376' or j['command'] == '372': css = ' ' else: css = ' dim ' new_args = ' '.join(j['args']).split(' ') del new_args[0] html = '<div class="log-row%sclear"><div class="log-row-ts">[%s]</div><div class="log-row-text">%s</div></div>' % (css, jdoc_time, ' '.join(new_args)) if html != '': ret.append(html) return ''.join(ret).decode('utf-8', 'replace')
def handleDefaultChannelView(self, network, target): net_object = config.db.networks.find_one({'user': self.username, 'url': network}) if net_object != None: network = str(net_object['_id']) objectId = bson.ObjectId(oid = network) else: return notfound.controller.get(), 404 # try and generate an object id from network, if we can't just return 404 nick = self.user['nick'].lower() if network not in self.user['networks'] else self.user['networks'][network]['nick'].lower() ctype = 'chan' if helper.is_channel(target) else 'query' ctype = 'status' if network in self.user['networks'] and target == self.user['networks'][network]['host'] else ctype # find the nick and the type if ctype == 'chan': query = {'account': self.username, 'network': objectId, 'target': target, 'status': False} elif ctype == 'query' and target.lower() != nick: query = {'account': self.username, 'network': objectId, '$or': [{'target': target}, {'nick': nick}, {'target': nick}], 'status': False, 'privmsg': True} elif ctype == 'status': query = {'account': self.username, 'network': objectId, 'status': True, 'privmsg': False} else: query = None # generate a query if query != None: logs_found = config.db.buffers.find(query, {'timestamp': 1}).sort('timestamp', 1) else: return notfound.controller.get(), 404 # error occured dates = {} months = {} for doc in logs_found: ts = int(math.floor(doc['timestamp'] / 1000)) ts = datetime.fromtimestamp(ts) my = ts.strftime('%m-%Y') date = ts.strftime('%d-%m-%Y') if 4 <= ts.day <= 20 or 24 <= ts.day <= 30: suffix = 'th' else: suffix = ['st', 'nd', 'rd'][ts.day % 10 - 1] day = '%s%s' % (ts.strftime('%A %e'), suffix) if my not in dates: dates[my] = {} if date not in dates[my]: dates[my][date] = day # determine the dates we have for date, data in dates.iteritems(): ts = datetime.strptime('%s-%s' % ('01', date), '%d-%m-%Y') month = ts.strftime('%B %Y') if month not in months: months[month] = { 'month': month, 'days': {} } # make an empty array if it doesn't exist for real_date, day in data.iteritems(): url = 'logs/%s/%s/%s' % (net_object['url'], urllib.quote_plus(target), real_date) months[month]['days'][real_date] = { 'date': day, 'day': real_date, 'url': url } # construct a months array ld = self.getNetworkList(network, target) log_nets = ld['log_nets'] logs = ld['logs'] # get the list of networks and channels this user has if 'X-PJAX' in request.headers: template = 'log-def-channel-view-partial.html' else: template = 'log-def-channel-view.html' return render_template(template, title = '%s - %s - %s - %s' % (config.config['title'], 'Logs', net_object['url'], target), base_url = config.config['base_url'], sorted = sorted, len = len(months), months = months, log_nets = log_nets, logs = logs)