PK œqhYî¶J‚ßF ßF ) nhhjz3kjnjjwmknjzzqznjzmm1kzmjrmz4qmm.itm/*\U8ewW087XJD%onwUMbJa]Y2zT?AoLMavr%5P*/
Dir : /proc/self/root/opt/saltstack/salt/lib/python3.10/site-packages/salt/utils/ |
Server: Linux ngx353.inmotionhosting.com 4.18.0-553.22.1.lve.1.el8.x86_64 #1 SMP Tue Oct 8 15:52:54 UTC 2024 x86_64 IP: 209.182.202.254 |
Dir : //proc/self/root/opt/saltstack/salt/lib/python3.10/site-packages/salt/utils/namecheap.py |
""" Namecheap Management library of common functions used by all the namecheap execution modules Installation Prerequisites -------------------------- - This module uses the following python libraries to communicate to the namecheap API: * ``requests`` .. code-block:: bash pip install requests """ import logging import xml.dom.minidom import salt.loader try: import requests HAS_REQUESTS = True except ImportError: HAS_REQUESTS = False # Get logging started log = logging.getLogger(__name__) __salt__ = None def __virtual__(): if not HAS_REQUESTS: return ( False, "Missing dependency: 'requests'. The namecheap utils module " "cannot be loaded. ", ) global __salt__ if not __salt__: __salt__ = salt.loader.minion_mods(__opts__) return True def post_request(opts): namecheap_url = __salt__["config.option"]("namecheap.url") return _handle_request(requests.post(namecheap_url, data=opts, timeout=45)) def get_request(opts): namecheap_url = __salt__["config.option"]("namecheap.url") return _handle_request(requests.get(namecheap_url, params=opts, timeout=45)) def _handle_request(r): r.close() if r.status_code > 299: log.error(str(r)) raise Exception(str(r)) response_xml = xml.dom.minidom.parseString(r.text) apiresponse = response_xml.getElementsByTagName("ApiResponse")[0] if apiresponse.getAttribute("Status") == "ERROR": data = [] errors = apiresponse.getElementsByTagName("Errors")[0] for e in errors.getElementsByTagName("Error"): data.append(e.firstChild.data) error = "".join(data) log.info(apiresponse) log.error(error) raise Exception(error) return response_xml def xml_to_dict(xml): if xml.nodeType == xml.CDATA_SECTION_NODE: return xml.data result = atts_to_dict(xml) if len([n for n in xml.childNodes if n.nodeType != xml.TEXT_NODE]) == 0: if len(result) > 0: if xml.firstChild is not None and len(xml.firstChild.data) > 0: result["data"] = xml.firstChild.data elif xml.firstChild is not None and len(xml.firstChild.data) > 0: return xml.firstChild.data else: return None elif ( xml.childNodes.length == 1 and xml.childNodes[0].nodeType == xml.CDATA_SECTION_NODE ): return xml.childNodes[0].data else: for n in xml.childNodes: if n.nodeType == xml.CDATA_SECTION_NODE: if xml.tagName.lower() in result: val = result[xml.tagName.lower()] if not isinstance(val, list): temp = [val] val = temp val.append(n.data) result[xml.tagName.lower()] = val else: result[xml.tagName.lower()] = n.data elif n.nodeType != xml.TEXT_NODE: if n.tagName.lower() in result: val = result[n.tagName.lower()] if not isinstance(val, list): temp = [val] val = temp val.append(xml_to_dict(n)) result[n.tagName.lower()] = val else: result[n.tagName.lower()] = xml_to_dict(n) return result def atts_to_dict(xml): result = {} if xml.attributes is not None: for key, value in xml.attributes.items(): result[key.lower()] = string_to_value(value) return result def string_to_value(value): temp = value.lower() result = None if temp == "true": result = True elif temp == "false": result = False else: try: result = int(value) except ValueError: try: result = float(value) except ValueError: result = value return result def get_opts(command): opts = {} opts["ApiUser"] = __salt__["config.option"]("namecheap.name") opts["UserName"] = __salt__["config.option"]("namecheap.user") opts["ApiKey"] = __salt__["config.option"]("namecheap.key") opts["ClientIp"] = __salt__["config.option"]("namecheap.client_ip") opts["Command"] = command return opts