Example #1
0
 def iter_users(self, in_group=None):
     users = {}
     try:
         if in_group:
             u_query = umapi_client.UsersQuery(self.connection,
                                               in_group=in_group)
         else:
             u_query = umapi_client.UsersQuery(self.connection)
         for u in u_query:
             email = u['email']
             if not (email in users):
                 users[email] = u
                 yield u
     except umapi_client.UnavailableError as e:
         raise AssertionException("Error contacting UMAPI server: %s" % e)
Example #2
0
def test_list_user_groups(config):
    conn, params = config
    groups = umapi_client.UserGroupsQuery(connection=conn)
    group_count = 0
    for group in groups:
        name = group.get("name")
        admin_name = group.get("adminGroupName")
        member_count = group.get("userCount", 0)
        admin_count = int(group.get("adminCount", "-1"))
        logging.info("Group %s has %d members.", name, member_count)
        if admin_name:
            logging.info("Group %s has admin group %s with %d members.", name,
                         admin_name, admin_count)
            # logging.info("Adding test user as admin.")
            # user = umapi_client.UserAction(id_type=params["test_user"]["type"],
            #                                email=params["test_user"]["email"],
            #                                username=params["test_user"]["username"])
            # user.add_to_groups([admin_name])
            # assert (0, 1, 1) == conn.execute_single(user, immediate=True)
            users = umapi_client.UsersQuery(connection=conn,
                                            in_group=admin_name)
            logging.info("Admin group %s has: %s", admin_name,
                         users.all_results())
        assert member_count >= 0
        group_count += 1
    logging.info("Found %d groups.", group_count)
    groups.reload()
    group_count_2 = len(groups.all_results())
    assert group_count == group_count_2
Example #3
0
 def iter_users(self):
     users = {}
     for u in umapi_client.UsersQuery(self.connection):
         email = u['email']
         if not (email in users):
             users[email] = u
             yield u
Example #4
0
 def iter_users(self):
     users = {}
     try:
         for u in umapi_client.UsersQuery(self.connection):
             email = u['email']
             if not (email in users):
                 users[email] = u
                 yield u
     except umapi_client.UnavailableError as e:
         raise AssertionException("Error contacting UMAPI server: %s" % e)
Example #5
0
def test_list_users(config):
    conn, _ = config
    users = umapi_client.UsersQuery(connection=conn, in_domain="")
    user_count = 0
    for user in users:
        email = user.get("email", "")
        if re.match(r".*@adobe.com$", str(email).lower()):
            assert str(user["type"]) == "adobeID"
        user_count += 1
        if user_count >= 600:
            logging.info("Quitting enumeration after 600 users.")
            break
    logging.info("Found %d users.", user_count)
Example #6
0
    def load_umapi_users(self, identity_type):
        try:
            u_query = umapi_client.UsersQuery(self.connection)
            umapi_users = u_query.all_results()

            if not identity_type == 'all':
                umapi_users = list(filter(lambda usr: usr['type'] == identity_type, umapi_users))

            self.umapi_users = umapi_users
            for user in umapi_users:
                # Generate unique user key because Username/Email is a bad unique identifier
                user_key = self.generate_user_key(user['type'], user['username'], user['domain'])
                self.user_by_usr_key[user_key] = self.convert_user(user)
        except umapi_client.UnavailableError as e:
            raise AssertionException("Error contacting UMAPI server: %s" % e)
Example #7
0
    def iter_users(self, in_group=None):
        users = {}
        total_count = 0
        page_count = 0
        page_size = 0
        page_number = 0
        try:
            u_query = umapi_client.UsersQuery(self.connection, in_group=in_group)
            for i, u in enumerate(u_query):
                total_count, page_count, page_size, page_number = u_query.stats()
                email = u['email']
                if not (email in users):
                    users[email] = u
                    yield u

                if (i + 1) % page_size == 0:
                    self.logger.progress(len(users), total_count)
            self.logger.progress(total_count, total_count)

        except umapi_client.UnavailableError as e:
            raise AssertionException("Error contacting UMAPI server: %s" % e)
Example #8
0
def scan_umapi(log: logging.Logger, options: Any, output_folder: Path) -> None:
    """
            Call Adobe umapi and serialize results to compressed xml document
            :param log:
            :param options:
            :param output_folder:
            :return:
    """

    scanned_groups = 0
    scanned_users = 0

    org_id = config['org_id']

    # noinspection SpellCheckingInspection
    ext = ".scaa"
    output_file = output_folder.joinpath(options.uuid + ext)

    start_time = time.time()

    doc = Document()
    xml = doc.createElement('octoscan')
    xml.setAttribute("uuid", options.uuid)
    xml.setAttribute("timestamp",
                     datetime.utcnow().replace(microsecond=0).isoformat())
    xml.setAttribute("build", octoscan_build)

    doc.appendChild(xml)

    octoscan_config = doc.createElement('octoscan_config')
    if len(options.tag) > 0:
        append_info_element(doc, octoscan_config, 'tag', 'S', options.tag)
    append_info_element(doc, octoscan_config, 'OutputFolder', 'S',
                        str(output_folder))
    xml.appendChild(octoscan_config)

    meta = doc.createElement('meta')
    append_info_element(doc, meta, 'org_id', 'S', org_id)
    append_info_element(doc, meta, 'tech_acct_id', 'S', config['tech_acct_id'])
    xml.appendChild(meta)

    conn = None

    try:
        conn = umapi_client.Connection(org_id=org_id, auth_dict=config)
    except Exception as e:
        log.exception(e)

    if not conn:
        log.error("Failed to connect to Adobe cloud")

    groups = doc.createElement('groups')

    umapi_groups = umapi_client.GroupsQuery(conn)

    for umapi_group in umapi_groups:
        g = doc.createElement('group')
        g.setAttribute('name', umapi_group['groupName'])
        append_dict(doc, g, umapi_group)
        scanned_groups += 1
        groups.appendChild(g)

    xml.appendChild(groups)

    users = doc.createElement('users')
    umapi_users = umapi_client.UsersQuery(conn)

    for umapi_user in umapi_users:
        u = doc.createElement('user')
        u.setAttribute('name', umapi_user['username'])
        append_dict(doc, u, umapi_user)
        scanned_users += 1
        users.appendChild(u)

    xml.appendChild(users)

    end_time = time.time()

    performance = doc.createElement('octoscan_performance')
    append_info_element(doc, performance, 'seconds', 'I',
                        str(int(end_time - start_time)))
    xml.appendChild(performance)

    with gzip.open(output_file, 'w') as f_out:
        f_out.write(doc.toprettyxml(indent="\t").encode('utf-8'))
        print(output_file)

    log.info(
        f"Adobe umapi {scanned_users} users {scanned_groups} groups scanned output to {output_file}"
    )