예제 #1
0
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
예제 #2
0
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
예제 #3
0
파일: accounts.py 프로젝트: aureg/baruwa2
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
예제 #4
0
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
예제 #5
0
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
예제 #6
0
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