Beispiel #1
0
    def get_session_key(username,
                        password,
                        splunkd_uri="https://localhost:8089"):
        """
        Get session key by using login username and passwrod
        @return: session_key if successful, None if failed
        """

        eid = "".join((splunkd_uri, "/services/auth/login"))
        postargs = {
            "username": username,
            "password": password,
        }

        response, content = rest.splunkd_request(eid,
                                                 None,
                                                 method="POST",
                                                 data=postargs)

        if response is None and content is None:
            return None

        xml_obj = xdm.parseString(content)
        session_nodes = xml_obj.getElementsByTagName("sessionKey")
        return session_nodes[0].firstChild.nodeValue
Beispiel #2
0
    def _do_request(self, uri, method, payload, err_msg):
        resp, content = rest.splunkd_request(uri, self.session_key, method,
                                             data=payload, retry=3)
        if resp is None and content is None:
            return None

        if resp.status in (200, 201):
            return content
        else:
            _LOGGER.error("%s, reason=%s", err_msg, resp.reason)
        return None
Beispiel #3
0
    def delete(self, realm, user, app, owner="nobody"):
        """
        Delete the encrypted entry
        @return: True for success, False for failure
        """

        endpoint = self._get_endpoint(realm, user, app, owner)
        response, content = rest.splunkd_request(endpoint,
                                                 self._session_key,
                                                 method="DELETE")
        if response and response.status in (200, 201):
            return True
        return False
Beispiel #4
0
    def _get_credentials(self, realm, user, app, owner, prop):
        """
        @return: clear or encrypted password for specified realm, user
        """

        endpoint = self._get_endpoint(realm, user, app, owner)
        response, content = rest.splunkd_request(endpoint,
                                                 self._session_key,
                                                 method="GET")
        if response and response.status in (200, 201) and content:
            password = xdp.parse_conf_xml_dom(content)[0]
            return password[prop]
        return None
Beispiel #5
0
    def get_all_passwords(self):
        """
        @return: a list of dict when successful, None when failed.
        the dict at least contains
        {
            "realm": xxx,
            "username": yyy,
            "clear_password": zzz,
        }
        """

        endpoint = "{}/services/storage/passwords".format(self._splunkd_uri)
        response, content = rest.splunkd_request(endpoint,
                                                 self._session_key,
                                                 method="GET")
        if response and response.status in (200, 201) and content:
            return xdp.parse_conf_xml_dom(content)
Beispiel #6
0
def reload_confs(confs, session_key, splunkd_uri="https://localhost:8089",
                 appname="-"):
    new_confs = []
    for conf in confs:
        conf = op.basename(conf)
        if conf.endswith(".conf"):
            conf = conf[:-5]
            new_confs.append(conf)
        else:
            new_confs.append(conf)

    endpoint_template = "{0}/servicesNS/-/{1}/configs/conf-{2}/_reload"
    for conf in new_confs:
        endpoint = endpoint_template.format(splunkd_uri, appname, conf)
        resp, content = rest.splunkd_request(endpoint, session_key)
        if not resp or resp.status not in (200, 201):
            _LOGGER.error("Failed to refresh %s, reason=%s",
                          endpoint, resp.reason if resp else "")
Beispiel #7
0
    def create(self, realm, user, password, app, owner="nobody"):
        """
        Create a new stored credential.
        """

        payload = {
            "name": user,
            "password": password,
            "realm": realm,
        }

        endpoint = self._get_endpoint(realm, user, app, owner)
        resp, content = rest.splunkd_request(endpoint,
                                             self._session_key,
                                             method="POST",
                                             data=payload)
        if resp and resp.status in (200, 201):
            return True
        return False