Quantcast
Channel: Active questions tagged python - Stack Overflow
Viewing all articles
Browse latest Browse all 23131

How do I use the functions within this Python script?

$
0
0

I have this Python script to control a PfSense router via FauxAPI. The problem is that when i call a function it gives an error. I think i'm calling the function wrong. Does anyone know how to call them?Here is a link to the API i'm using: https://github.com/ndejong/pfsense_fauxapiI have tried calling config_get(self, section=none) but that does not seem to work.

import osimport jsonimport base64import urllibimport requestsimport datetimeimport hashlibclass PfsenseFauxapiException(Exception):    passclass PfsenseFauxapi:    host = '172.16.1.1'    proto = None    debug = None    version = None    apikey = 'key'    apisecret = 'secret'    use_verified_https = None    def __init__(self, host, apikey, apisecret, use_verified_https=False, debug=False):        self.proto = 'https'        self.base_url = 'fauxapi/v1'        self.version = __version__        self.host = host        self.apikey = apikey        self.apisecret = apisecret        self.use_verified_https = use_verified_https        self.debug = debug        if self.use_verified_https is False:            requests.packages.urllib3.disable_warnings(requests.packages.urllib3.exceptions.InsecureRequestWarning)    def config_get(self, section=None):        config = self._api_request('GET', 'config_get')        if section is None:            return config['data']['config']        elif section in config['data']['config']:            return config['data']['config'][section]        raise PfsenseFauxapiException('Unable to complete config_get request, section is unknown', section)    def config_set(self, config, section=None):        if section is None:            config_new = config        else:            config_new = self.config_get(section=None)            config_new[section] = config        return self._api_request('POST', 'config_set', data=config_new)    def config_patch(self, config):        return self._api_request('POST', 'config_patch', data=config)    def config_reload(self):        return self._api_request('GET', 'config_reload')    def config_backup(self):        return self._api_request('GET', 'config_backup')    def config_backup_list(self):        return self._api_request('GET', 'config_backup_list')    def config_restore(self, config_file):        return self._api_request('GET', 'config_restore', params={'config_file': config_file})    def send_event(self, command):        return self._api_request('POST', 'send_event', data=[command])    def system_reboot(self):        return self._api_request('GET', 'system_reboot')    def system_stats(self):        return self._api_request('GET', 'system_stats')    def interface_stats(self, interface):        return self._api_request('GET', 'interface_stats', params={'interface': interface})    def gateway_status(self):        return self._api_request('GET', 'gateway_status')    def rule_get(self, rule_number=None):        return self._api_request('GET', 'rule_get', params={'rule_number': rule_number})    def alias_update_urltables(self, table=None):        if table is not None:            return self._api_request('GET', 'alias_update_urltables', params={'table': table})        return self._api_request('GET', 'alias_update_urltables')    def function_call(self, data):        return self._api_request('POST', 'function_call', data=data)    def system_info(self):        return self._api_request('GET', 'system_info')    def _api_request(self, method, action, params=None, data=None):        if params is None:            params = {}        if self.debug:            params['__debug'] = 'true'        url = '{proto}://{host}/{base_url}/?action={action}&{params}'.format(            proto=self.proto, host=self.host, base_url=self.base_url, action=action, params=urllib.parse.urlencode(params))        if method.upper() == 'GET':            res = requests.get(                url,                headers={'fauxapi-auth': self._generate_auth()},                verify=self.use_verified_https            )        elif method.upper() == 'POST':            res = requests.post(                url,                headers={'fauxapi-auth': self._generate_auth()},                verify=self.use_verified_https,                data=json.dumps(data)            )        else:            raise PfsenseFauxapiException('Request method not supported!', method)        if res.status_code == 404:            raise PfsenseFauxapiException('Unable to find FauxAPI on target host, is it installed?')        elif res.status_code != 200:            raise PfsenseFauxapiException('Unable to complete {}() request'.format(action), json.loads(res.text))        return self._json_parse(res.text)    def _generate_auth(self):        # auth = apikey:timestamp:nonce:HASH(apisecret:timestamp:nonce)        nonce = base64.b64encode(os.urandom(40)).decode('utf-8').replace('=', '').replace('/', '').replace('+', '')[0:8]        timestamp = datetime.datetime.utcnow().strftime('%Y%m%dZ%H%M%S')        hash = hashlib.sha256('{}{}{}'.format(self.apisecret, timestamp, nonce).encode('utf-8')).hexdigest()        return '{}:{}:{}:{}'.format(self.apikey, timestamp, nonce, hash)    def _json_parse(self, data):        try:            return json.loads(data)        except json.JSONDecodeError:            pass        raise PfsenseFauxapiException('Unable to parse response data!', data)

Viewing all articles
Browse latest Browse all 23131

Trending Articles