def describe(name):
    '''
    name (str):
        name of repository
    
    CLI Example::

    .. code-block:: bash

        salt myminion nexus3_repository.describe name=maven-central
    '''

    ret = {'repository': {}}

    nc = nexus3.NexusClient()
    resp = nc.get('v1/repositorySettings')

    if resp['status'] != 200:
        ret['comment'] = 'Error restrieving repository information for {}.'.format(
            name)
        ret['error'] = {'code': resp['status'], 'msg': resp['body']}
        return ret

    repo_dict = json.loads(resp['body'])
    for repo in repo_dict:
        if repo['name'] == name:
            ret['repository'] = repo

    return ret
def describe(name):
    '''
    name (str):
        name of role

    CLI Example::

    .. code-block:: bash

        salt myminion nexus3_roles.describe nx-admin
    '''

    ret = {
        'role': {},
    }

    path = roles_path + '/' + name
    nc = nexus3.NexusClient()

    resp = nc.get(path)

    if resp['status'] == 200:
        ret['role'] = json.loads(resp['body'])
    else:
        ret['comment'] = 'could not retrieve role {}.'.format(name)
        ret['error'] = {'code': resp['status'], 'msg': resp['body']}

    return ret
def describe(name):
    '''
    name (str):
        name of user

    CLI Example::

    .. code-block:: bash

        salt myminion nexus3_users.describe test_user
    '''

    ret = {
        'user': {},
    }

    path = users_path
    nc = nexus3.NexusClient()

    resp = nc.get(path)

    if resp['status'] == 200:
        users = json.loads(resp['body'])
        for user in users:
            if user['userId'] == name:
                ret['user'] = user

        return ret
    else:
        ret['comment'] = 'could not retrieve user {}.'.format(name)
        ret['error'] = {'code': resp['status'], 'msg': resp['body']}

    return ret
def reset():
    '''
    Resets realms to default

    CLI Example::

    .. code-block:: bash

        salt myminion nexus3_realms.reset
    '''

    ret = {
        'realms': {},
    }

    path = realms_path + '/active'

    # these are the defaults enabled
    # upon first start of Nexus 3
    payload = ['NexusAuthenticatingRealm', 'NexusAuthorizingRealm', 'NpmToken']

    nc = nexus3.NexusClient()

    resp = nc.put(path, payload)

    if resp['status'] == 204:
        ret['realms'] = list_active()['realms']
        ret['comment'] = 'realms reset to defaults.'
    else:
        ret['comment'] = 'could not reset realms.'
        ret['error'] = {'code': resp['status'], 'msg': resp['body']}

    return ret
Beispiel #5
0
def describe(name):
    '''
    name (str):
        privilege name

    CLI Example::

    .. code-block:: bash

        salt myminion nexus3_privileges.describe nx-analytics-all
    '''

    ret = {
        'privilege': {},
    }

    path = privileges_path + '/' + name
    nc = nexus3.NexusClient()

    resp = nc.get(path)

    if resp['status'] == 200:
        ret['privilege'] = json.loads(resp['body'])
    else:
        ret['comment'] = 'could not retrieve privilege {}.'.format(name)
        ret['error'] = {'code': resp['status'], 'msg': resp['body']}

    return ret
def delete(name):
    '''
    name (str):
        name of user

    CLI Example::

    .. code-block:: bash

        salt myminion nexus3_users.delete test_user
    '''
    ret = {}

    path = users_path + '/' + name
    nc = nexus3.NexusClient()

    resp = nc.delete(path)

    if resp['status'] == 204:
        ret['comment'] = 'user {} deleted'.format(name)
    else:
        ret['comment'] = 'could not delete user {}.'.format(name)
        ret['error'] = {'code': resp['status'], 'msg': resp['body']}

    return ret
Beispiel #7
0
def delete(name):
    '''
    name (str):
        Name of blobstore

    CLI Example::

    .. code-block:: bash

        salt myminion nexus3_blobstores.delete name=myblobstore
    '''

    ret = {'comment': 'Deleted blobstore "{}"'.format(name)}

    path = '{}/{}'.format(blobstore_path, name)

    nc = nexus3.NexusClient()
    resp = nc.delete(path)

    if resp['status'] == 404:
        ret['comment'] = 'blobstore {} does not exist.'.format(name)
    elif resp['status'] != 204:
        ret['comment'] = 'could not delete blobstore {}.'.format(name)
        ret['error'] = {'code': resp['status'], 'msg': resp['body']}

    return ret
def list_active():
    '''
    CLI Example::

    .. code-block:: bash

        salt myminion nexus3_realms.list_active
    '''

    ret = {
        'realms': {},
    }

    path = realms_path + '/active'
    nc = nexus3.NexusClient()

    resp = nc.get(path)

    if resp['status'] == 200:
        ret['realms'] = json.loads(resp['body'])
    else:
        ret['comment'] = 'could not retrieve active realms.'
        ret['error'] = {'code': resp['status'], 'msg': resp['body']}

    return ret
Beispiel #9
0
def delete(name):
    '''
    name (str):
        privilege name

    CLI Example::

    .. code-block:: bash

        salt myminion nexus3_privileges.delete nx-analytics-all
    '''

    ret = {}

    path = privileges_path + '/' + name

    nc = nexus3.NexusClient()

    resp = nc.delete(path)

    if resp['status'] == 204:
        ret['comment'] = 'privilege {} delete.'.format(name)
    else:
        ret['comment'] = 'could not delete privilege {}.'.format(name)
        ret['error'] = {'code': resp['status'], 'msg': resp['body']}

    return ret
Beispiel #10
0
def list_all():
    '''
    CLI Example::

    .. code-block:: bash

        salt myminion nexus3_privileges.list_all
    '''

    ret = {
        'privileges': {},
    }

    path = privileges_path
    nc = nexus3.NexusClient()

    resp = nc.get(path)

    if resp['status'] == 200:
        ret['privileges'] = json.loads(resp['body'])
    else:
        ret['comment'] = 'could not retrieve available privileges.'
        ret['error'] = {'code': resp['status'], 'msg': resp['body']}

    return ret
def update(realms=[]):
    '''
    realms (list):
        list of realms in order they should be used 
        .. note::
            Include all desired realms in list as this will override
            the current list

    CLI Example::

    .. code-block:: bash

        salt myminion nexus3_realms.update realms="['NexusAuthenticatingRealm','NexusAuthorizingRealm','NpmToken','DockerToken']"
    '''

    ret = {
        'realms': {},
    }

    path = realms_path + '/active'

    nc = nexus3.NexusClient()

    resp = nc.put(path, realms)

    if resp['status'] == 204:
        ret['realms'] = list_active()['realms']
        ret['comment'] = 'realms updated.'
    else:
        ret['comment'] = 'could not update realms.'
        ret['error'] = {'code': resp['status'], 'msg': resp['body']}

    return ret
Beispiel #12
0
def describe():
    '''
    CLI Example::

    .. code-block:: bash

        salt myminion nexus3_readonly.describe
    '''

    ret = {
        'read-only': {},
    }

    path = read_only_path

    nc = nexus3.NexusClient()

    resp = nc.get(path)

    if resp['status'] == 200:
        ret['read-only'] = json.loads(resp['body'])
    else:
        ret['comment'] = 'could not get read-only state.'
        ret['error'] = {'code': resp['status'], 'msg': resp['body']}

    return ret
Beispiel #13
0
def list_all():
    '''
    CLI Example::

    .. code-block:: bash

        salt myminion nexus3_tasks.list_all
    
    TODO: 
        add support for the continuationToken for larger lists
    '''

    ret = {
        'tasks': {},
    }

    path = tasks_path

    nc = nexus3.NexusClient()

    resp = nc.get(path)

    if resp['status'] == 200:
        ret['tasks'] = json.loads(resp['body'])
    else:
        ret['comment'] = 'could not get tasks'
        ret['error'] = {
            'code': resp['status'],
            'msg': resp['body']
        }

    return ret
Beispiel #14
0
def describe(id):
    '''
    id (str):
        task id

    CLI Example::

    .. code-block:: bash

        salt myminion nexus3_tasks.describe id=512be2c3-aa04-448f-b0ce-2047eee34903
    '''

    ret = {
        'task': {},
    }

    path = tasks_path + '/' + id

    nc = nexus3.NexusClient()

    resp = nc.get(path)

    if resp['status'] == 200:
        ret['task'] = json.loads(resp['body'])
    else:
        ret['comment'] = 'could not get task: {}'.format(id)
        ret['error'] = {
            'code': resp['status'],
            'msg': resp['body']
        }

    return ret
def verify(to):
    '''
    CLI Example::
    
    to (str):
        address to send test email to
    
    .. code-block:: bash

        salt myminion nexus3_email.verify
    '''
    ret = {}

    verify_path = email_path + '/verify'

    nc = nexus3.NexusClient()
    resp = nc.post(verify_path, to)

    if resp['status'] == 200:
        status = json.loads(resp['body'])
        if status['success']:
            ret['comment'] = 'email sent to {}.'.format(to)
        else:
            ret['comment'] = 'could not send email.'
            ret['error'] = status['reason']
    else:
        ret['comment'] = 'could not send email.'
        ret['error'] = {'code': resp['status'], 'msg': resp['body']}

    return ret
def delete(name):
    '''
    name (str):
        name of repository
    
    CLI Example::

    .. code-block:: bash

        salt myminion nexus3_repository.delete name=maven-central
    '''

    ret = {'comment': 'Repository {} deleted'.format(name)}

    delete_path = repo_base_path + '/' + name

    nc = nexus3.NexusClient()
    resp = nc.delete(delete_path)

    if resp['status'] == 404:
        ret['comment'] = 'Repository {} not present.'.format(name)
    elif resp['status'] != 204:
        ret['comment'] = 'Error deleting repository {}.'.format(name)
        ret['error'] = {'code': resp['status'], 'msg': resp['body']}

    return ret
def update(name, description=None, privileges=None, roles=None):
    '''
    name (str):
        name of role
    
    description (str):
        description of role (Default: None)

    privileges (list):
        list of privileges (Default: None)

    roles (list):
        roles to inherit from (Default: None)

    CLI Example::

    .. code-block:: bash

        salt myminion nexus3_roles.update name=test_role roles="['nx-admin']"
    '''

    ret = {
        'role': {},
    }

    meta = describe(name)['role']

    path = roles_path + '/' + name

    if description is not None:
        meta['description'] = description

    if privileges is not None:
        meta['privileges'] = privileges

    if roles is not None:
        meta['roles'] = roles

    nc = nexus3.NexusClient()
    resp = nc.put(path, meta)

    if resp['status'] == 204:
        ret['role'] = describe(name)['role']
    else:
        ret['comment'] = 'could not update role {}.'.format(name)
        ret['error'] = {
            'code': resp['status'],
            'msg': resp['body'],
        }

    return ret
def create(name, description='', privileges=[], roles=[]):
    '''
    name (str):
        name of role
    
    description (str):
        description of role

    privileges (list):
        list of privileges (Default: [])

    roles (list):
        roles to inherit from (Default: [])

    CLI Example::

    .. code-block:: bash

        salt myminion nexus3_roles.create name=test_role description='test role' roles="['nx-admin']"
    '''

    ret = {
        'role': {},
    }

    path = roles_path

    payload = {
        'id': name,
        'name': name,
        'description': description,
        'privileges': privileges,
        'roles': roles
    }

    nc = nexus3.NexusClient()

    resp = nc.post(path, payload)

    if resp['status'] == 200:
        ret['role'] = json.loads(resp['body'])
    else:
        ret['comment'] = 'could not create role {}.'.format(name)
        ret['error'] = {'code': resp['status'], 'msg': resp['body']}

    return ret
Beispiel #19
0
def describe(name):
    '''
    name (str):
        Name of blobstore

    CLI Example::

    .. code-block:: bash

        salt myminion nexus3_blobstores.describe name=myblobstore
    '''

    ret = {
        'blobstore': {},
    }

    resp = list_all()

    if 'error' in resp.keys():
        ret['result'] = False
        ret['comment'] = 'could not retrieve blobstore {}.'.format(name)
        ret['error'] = resp['error']
        return ret

    for bstore in resp['blobstores']:
        if bstore['name'] == name:
            ret['blobstore'] = bstore
            break

    if ret['blobstore']:
        path = '{}/{}/{}'.format(blobstore_path,
                                 ret['blobstore']['type'].lower(), name)

        nc = nexus3.NexusClient()
        resp = nc.get(path)

        if resp['status'] == 200:
            ret['blobstore'].update(json.loads(resp['body']))
        else:
            ret['comment'] = 'could not retrieve blobstore {}'.format(name)
            ret['error'] = {'code': resp['status'], 'msg': resp['body']}

    return ret
def update_password(name, password):
    '''
    name (str):
        name of user

    password (str):
        password

    CLI Example::

    .. code-block:: bash

        salt myminion nexus3_users.update_password name=test_user password=testing123

        .. note::
            running this command via the command-line could result in the password being saved
            is the user shell history
    '''

    ret = {
        'user': {},
    }

    meta = describe(name)['user']

    if not meta:
        ret['comment'] = 'user {} does not exist'.format(name)
        return ret

    path = users_path + '/' + name + '/change-password'

    nc = nexus3.NexusClient()

    resp = nc.put(path, password)

    if resp['status'] == 204:
        ret['comment'] = 'updated password for {}.'.format(name)
    else:
        ret['comment'] = 'could not update password for {}.'.format(name)
        ret['error'] = {'code': resp['status'], 'msg': resp['body']}

    return ret
Beispiel #21
0
def list_all():
    '''
    CLI Example::

    .. code-block:: bash

        salt myminion nexus3_blobstores.list_all
    '''

    ret = {'blobstores': {}}

    nc = nexus3.NexusClient()
    resp = nc.get(blobstore_path)

    if resp['status'] == 200:
        ret['blobstores'] = json.loads(resp['body'])
    else:
        ret['comment'] = 'could not retrieve blobstores.'
        ret['error'] = {'code': resp['status'], 'msg': resp['body']}

    return ret
def describe():
    '''
    CLI Example::

    .. code-block:: bash

        salt myminion nexus3_email.describe
    '''

    ret = {'email': {}}

    nc = nexus3.NexusClient()
    resp = nc.get(email_path)

    if resp['status'] == 200:
        ret['email'] = json.loads(resp['body'])
    else:
        ret['comment'] = 'could not to retrieve email settings'
        ret['error'] = 'code:{} msg:{}'.format(resp['status'], resp['body'])

    return ret
def reset():
    '''
    CLI Example::

    .. code-block:: bash

        salt myminion nexus3_email.reset
    '''

    ret = {}

    nc = nexus3.NexusClient()
    resp = nc.delete(email_path)

    if resp['status'] == 204:
        ret['comment'] = 'email settings reset'
    else:
        ret['comment'] = 'could not reset email settings'
        ret['error'] = {'code': resp['status'], 'msg': resp['body']}

    return ret
Beispiel #24
0
def stop(id):
    '''
    id (str):
        task id

    CLI Example::

    .. code-block:: bash

        salt myminion nexus3_tasks.stop id=512be2c3-aa04-448f-b0ce-2047eee34903
    '''

    ret = {
        'task': {},
    }

    path = tasks_path + '/' + id + '/run'

    nc = nexus3.NexusClient()

    resp = nc.post(path, None)

    if resp['status'] == 204:
        ret['task'] = 'stopped task: {}'.format(id)
    else:
        ret['comment'] = 'could not stop task: {}'.format(id)
        if resp['status'] == 404:
            msg = 'task not found'
        elif resp['status'] == 405:
            msg = 'task is disabled'
        else:
            msg = resp['body']

        ret['error'] = {
            'code': resp['status'],
            'msg': msg
        }

    return ret
def list_all():
    '''
    CLI Example::

    .. code-block:: bash

        salt myminion nexus3_repositories.list_all

    '''

    ret = {'repositories': {}}

    nc = nexus3.NexusClient()
    resp = nc.get('v1/repositorySettings')

    if resp['status'] != 200:
        ret['comment'] = 'Error retrieving repositories.'
        ret['error'] = {'code': resp['status'], 'msg': resp['body']}
        return ret

    ret['repositories'] = json.loads(resp['body'])

    return ret
Beispiel #26
0
def enabled(state, force_release=False):
    '''
    state (bool):
        enable or disable read-only [True|False]

    force_release (bool):
        force release of read-only [True|False] (Default: False)

    CLI Example::

    .. code-block:: bash

        salt myminion nexus3_readonly.enabled True
        salt myminion nexus3_readonly.enabled state=False
    '''
    ret = {
        'read-only': False,
    }

    if state:
        path = read_only_path + '/freeze'
    elif force_release:
        path = read_only_path + '/force_release'
    else:
        path = read_only_path + '/release'

    nc = nexus3.NexusClient()

    resp = nc.post(path)

    if resp['status'] == 204:
        ret['read-only'] = state
    else:
        ret['comment'] = 'could not set read-only mode'
        ret['error'] = {'code': resp['status'], 'msg': resp['body']}

    return ret
def describe():
    '''
    CLI Example::

    .. code-block:: bash

        salt myminion nexus3_anonymous_access.describe
    '''

    ret = {
        'anonymous_access': {},
    }

    nc = nexus3.NexusClient()

    resp = nc.get(anon_access_path)

    if resp['status'] == 200:
        ret['anonymous_access'] = json.loads(resp['body'])
    else:
        ret['comment'] = 'Failed to retrieve anonymous access settings.'
        ret['error'] = {'code': resp['status'], 'msg': resp['body']}

    return ret
def enable(enabled):
    '''
    enabled (bool):
        enable or disable anonymous access [True|False]

    CLI Example::

    .. code-block:: bash

        salt myminion nexus3_anonymous_access.enable True
    '''

    ret = {'anonymous_access': {}}

    payload = {
        'enabled': enabled,
        'userId': 'anonymous',
        'realmName': 'NexusAuthorizingRealm'
    }

    metadata = describe()

    if not metadata['anonymous_access']:
        return metadata

    nc = nexus3.NexusClient()

    resp = nc.put(anon_access_path, payload)

    if resp['status'] == 200:
        ret['anonymous_access'] = json.loads(resp['body'])
    else:
        ret['comment'] = 'Failed to update anonymous access.'
        ret['error'] = {'code': resp['status'], 'msg': resp['body']}

    return ret
Beispiel #29
0
def create(name,
           type,
           actions=[],
           contentSelector=None,
           description='New Nexus privilege',
           domain=None,
           format=None,
           pattern=None,
           repository=None,
           scriptName=None):
    '''
    name (str):
        privilege name

    type (str):
        privilege type [application|repository-admin|respository-content-selector|repository-view|script|wildcard]

    actions (list):
        list of actions [ADD|ALL|BROWSE|CREATE|DELETE|EDIT|READ|UPDATE] (Default: [])

    contentSelector (str):
        name of content selector (Default: None
        .. note::
            required for respository-content-selector privilege type
            content selector must exist before assigning privileges

    description (str):
        description of privilge (Default: 'New Nexus privilege')

    domain (str):
        domain of privilege [roles|scripts|search|selectors|settings|ssl-truststore|tasks|users|userschangepw] (Default: None)
        .. note::
            required for application privilege type

    format (str):
        respository format [bower|cocoapads|conan|docker|etc.] (Default: None)
        .. note::
            required for repository-admin, respository-content-selector, and repository-view privilege types

    pattern (regex):
        regex pattern to group other privileges (Default: None)
        .. note::
            required for wildcard privilege type

    repository (str):
        repository name (Default: None)
        .. note::
            required for repository-admin, respository-content-selector, and repository-view privilege types

    scriptName (str):
        script name (Default: None)

    CLI Example::

    .. code-block:: bash

        salt myminion nexus3_privileges.create name=nx-userschangepw actions="['ADD','READ']" description='Change password permission' domain=userschangepw type=application

        salt myminion nexus3_privileges.create name=nx-repository-view-nuget-nuget-hosted-browse actions=['BROWSE'] description='Browse privilege for nuget-hosted repository views' format=nuget repository=nuget-hosted type=repository-view
    '''

    ret = {'privilege': {}}

    path = privileges_path + '/' + type

    payload = {
        'name': name,
        'description': description,
        'actions': actions,
    }

    application = {'domain': domain}

    repository = {'format': format, 'repository': repository}

    repository_content_selector = {
        'format': format,
        'repository': repository,
        'contentSelector': contentSelector
    }

    script = {'scriptName': scriptName}

    wildcard = {'name': name, 'description': description, 'pattern': pattern}

    if type == 'application':
        if domain is None:
            ret['comment'] = 'domain cannot be None for type {}'.format(type)
            return ret
        payload.update(application)

    if type in ['repository-admin', 'repository-view']:
        if format is None or repository is None:
            ret['comment'] = 'format and repository cannot be None for type {}'.format(
                type)
            return ret
        payload.update(repository)

    if type == 'repository-content-selector':
        if format is None or repository is None or contentSelector is None:
            ret['comment'] = 'format, contentSelector, and repository cannot be None for type {}'.format(
                type)
            return ret
        payload.update(repository_content_selector)

    if type == 'scripts':
        if script is None:
            ret['comment'] = 'scriptName cannot be None for type {}'.format(
                type)
            return ret
        payload.update(script)

    if type == 'wildcard':
        if pattern is None:
            ret['comment'] = 'pattern cannot be None for type {}'.format(type)
            return ret
        payload = wildcard

    nc = nexus3.NexusClient()

    resp = nc.post(path, payload)

    if resp['status'] == 201:
        ret['comment'] = 'privilege {} created.'.format(name)
        ret['privilege'] = describe(name)['privilege']
    else:
        ret['comment'] = 'could not create privilege {}.'.format(name)
        ret['error'] = {'code': resp['status'], 'msg': resp['body']}

    return ret
Beispiel #30
0
def update(name,
           actions=None,
           contentSelector=None,
           description=None,
           domain=None,
           format=None,
           pattern=None,
           repository=None,
           scriptName=None):
    '''
    name (str):
        privilege name

    actions (list):
        list of actions [ADD|ALL|CREATE|DELETE|EDIT|READ|UPDATE] (Default: None)

    contentSelector (str):
        name of content selector (Default: None)
        .. note::
            content selector must exist before assigning privileges

    description (str):
        description of privilege (Default: None)

    domain (str):
        domain of privilege [roles|scripts|search|selectors|settings|ssl-truststore|tasks|users|userschangepw] (Default: None)
        .. note::
            required for application privilege type

    format (str):
        respository format [bower|cocoapads|conan|docker|etc.] (Default: None)
        .. note::
            required for repository-admin, respository-content-selector, and repository-view privilege types

    pattern (regex):
        regex pattern to group other privileges (Default: None)
        .. note::
            required for wildcard privilege type

    repository (str):
        repository name (Default: None)
        .. note::
            required for repository-admin, respository-content-selector, and repository-view privilege types

    scriptName (str):
        script name (Default: None)

    CLI Example::

    .. code-block:: bash

        salt myminion nexus3_privileges.update name=testing actions="['ADD','READ']" description='Change password permission' domain=userschangepw type=application
    '''

    ret = {'privilege': {}}

    priv_description = describe(name)

    if 'error' in priv_description.keys():
        ret['comment'] = 'failed to update privilege.'
        ret['error'] = priv_description['error']
        return ret

    meta = priv_description['privilege']

    path = privileges_path + '/' + meta['type'] + '/' + name

    if actions is not None:
        meta['actions'] = actions

    if contentSelector is not None and 'contentSelector' in meta.keys():
        meta['contentSelctor'] = contentSelector

    if description is not None:
        meta['description'] = description

    if domain is not None and 'domain' in meta.keys():
        meta['domain'] = domain

    if format is not None and 'format' in meta.keys():
        meta['format'] = format

    if repository is not None and 'repository' in meta.keys():
        meta['repository'] = repository

    if pattern is not None and 'pattern' in meta.keys():
        meta['pattern'] = pattern

    if scriptName is not None and 'scriptName' in meta.keys():
        meta['scriptName'] = scriptName

    nc = nexus3.NexusClient()

    resp = nc.put(path, meta)

    if resp['status'] == 204:
        ret['comment'] = 'updated privilege {}.'.format(name)
        ret['privilege'] = describe(name)['privilege']
    else:
        ret['comment'] = 'could not update privilege {}.'.format(name)
        ret['error'] = {'code': resp['status'], 'msg': resp['body']}

    return ret