def export_auditlog(format, query): "Export the audit log" logger = export_auditlog.get_logger() filename = 'auditlog-%s.%s' % (export_auditlog.request.id, format) content_type = 'text/csv' if format == 'csv' else 'application/pdf' results = dict(id=export_auditlog.request.id, f=None, content_type=content_type, filename=filename, errormsg='') try: dbquery = Session.query(AuditLog) if query: conn = SphinxClient() sphinxopts = extract_sphinx_opts(config['sphinx.url']) conn.SetServer(sphinxopts.get('host', '127.0.0.1')) conn.SetMatchMode(SPH_MATCH_EXTENDED2) conn.SetLimits(0, 500, 500) query = clean_sphinx_q(query) qresults = conn.Query(query, 'auditlog, auditlog_rt') if qresults and qresults['matches']: ids = [hit['id'] for hit in qresults['matches']] dbquery = dbquery.filter(AuditLog.id.in_(ids)) dbquery = dbquery.order_by(desc('timestamp')).all() if format == 'pdf': PS = ParagraphStyle('auditlogp', fontName='Helvetica', fontSize=8, borderPadding=(2, 2, 2, 2)) rows = [(Paragraph(item.timestamp.strftime('%Y-%m-%d %H:%M'), PS), Paragraph(wrap_string(item.username, 27), PS), Paragraph(wrap_string(item.info, 33), PS), Paragraph(wrap_string(item.hostname, 27), PS), Paragraph(wrap_string(item.remoteip, 15), PS), Paragraph(CATEGORY_MAP[item.category], PS)) for item in dbquery] pdf = build_pdf(rows) results['f'] = pdf elif format == 'csv': rows = [item.tojson() for item in dbquery] keys = ('timestamp', 'username', 'info', 'hostname', 'remoteip', 'category') results['f'] = build_csv(rows, keys) logger.info("Audit Log export complete: %s" % results['filename']) return results except (DatabaseError), err: results['errormsg'] = str(err) logger.info("Audit Log export FAILURE: %s" % str(err)) return results
def exportaccounts(domainid, userid, orgid): "Export Accounts" logger = exportaccounts.get_logger() results = dict(f=None, global_error='') try: logger.info('Starting export of accounts for userid: %s' % userid) user = Session.query(User).get(userid) if user.is_peleb: results['global_error'] = \ 'You are not authorized to export accounts' return results if user.is_domain_admin and orgid: results['global_error'] = \ 'You are not authorized to export organization accounts' return results users = Session.query(User)\ .options(joinedload('addresses'))\ .order_by(User.id) if user.is_domain_admin: users = users.join(domain_users, (domain_owners, domain_users.c.domain_id == domain_owners.c.domain_id), (oa, domain_owners.c.organization_id == oa.c.organization_id))\ .filter(oa.c.user_id == user.id) if domainid: users = users.filter( and_(domain_users.c.domain_id == domainid, domain_users.c.user_id == User.id)) if orgid: users = users.filter( and_(domain_users.c.user_id == User.id, domain_users.c.domain_id == domain_owners.c.domain_id, domain_owners.c.organization_id == orgid)) rows = [] for account in users.all(): row = account.to_csv() if account.addresses: row.update(account.addresses[0].to_csv()) rows.append(row) if rows: keys = tuple(ACCOUNTFIELDS + ADDRESSFIELDS) results['f'] = build_csv(rows, keys) logger.info('Export complete, returning csv file') else: results['global_error'] = 'No accounts found' logger.info('Export failed: %s' % results['global_error']) except (NoResultFound, ProgrammingError): results['global_error'] = 'User account does not exist' logger.info('Export failed: %s' % results['global_error']) finally: Session.close() return results
def exportaccounts(domainid, userid, orgid): "Export Accounts" logger = exportaccounts.get_logger() results = dict(f=None, global_error='') try: logger.info('Starting export of accounts for userid: %s' % userid) user = Session.query(User).get(userid) if user.is_peleb: results['global_error'] = \ 'You are not authorized to export accounts' return results if user.is_domain_admin and orgid: results['global_error'] = \ 'You are not authorized to export organization accounts' return results users = Session.query(User)\ .options(joinedload('addresses'))\ .order_by(User.id) if user.is_domain_admin: users = users.join(domain_users, (domain_owners, domain_users.c.domain_id == domain_owners.c.domain_id), (oa, domain_owners.c.organization_id == oa.c.organization_id) ).filter(oa.c.user_id == user.id) if domainid: users = users.filter(and_(domain_users.c.domain_id == domainid, domain_users.c.user_id == User.id)) if orgid: users = users.filter(and_(domain_users.c.user_id == User.id, domain_users.c.domain_id == \ domain_owners.c.domain_id, domain_owners.c.organization_id == orgid)) rows = [] for account in users.all(): row = account.to_csv() if account.addresses: row.update(account.addresses[0].to_csv()) rows.append(row) if rows: keys = tuple(ACCOUNTFIELDS + ADDRESSFIELDS) results['f'] = build_csv(rows, keys) logger.info('Export complete, returning csv file') else: results['global_error'] = 'No accounts found' logger.info('Export failed: %s' % results['global_error']) except (NoResultFound, ProgrammingError): results['global_error'] = 'User account does not exist' logger.info('Export failed: %s' % results['global_error']) # finally: # Session.close() return results
def exportdomains(userid, orgid=None): "Export domains" logger = exportdomains.get_logger() results = dict(f=None, global_error='') try: logger.info('Starting export of domains for userid: %s' % userid) user = Session.query(User).get(userid) if user.is_peleb: results['global_error'] = \ 'You are not authorized to export domains' return results if user.is_domain_admin and orgid: results['global_error'] = \ 'You are not authorized to export organization domains' return results domains = Session.query(Domain) if orgid: domains = domains.join(domain_owners).filter( domain_owners.c.organization_id == orgid) if user.is_domain_admin: domains = domains.join(domain_owners, (oa, domain_owners.c.organization_id == oa.c.organization_id))\ .filter(oa.c.user_id == user.id) rows = [] for domain in domains.all(): row = domain.to_csv() if domain.servers: row.update(domain.servers[0].to_csv()) if domain.authservers: row.update(domain.authservers[0].to_csv()) if domain.aliases: row.update(domain.aliases[0].to_csv()) rows.append(row) if rows: keys = tuple(DOMAINFIELDS + DAFIELDS + DSFIELDS + ASFIELDS) results['f'] = build_csv(rows, keys) logger.info('Export complete, returning csv file') else: results['global_error'] = 'No domains found' logger.info('Export failed: %s' % results['global_error']) except NoResultFound: results['global_error'] = 'User account does not exist' logger.info('Export failed: %s' % results['global_error']) except TypeError: results['global_error'] = 'Internal error occured' logger.info('Export failed: %s' % results['global_error']) finally: Session.close() return results