Example - API Client in Python

Example - API Client in Python

The following is an example of how you can use the Email Gateway Defense API written in Python.

Before invoking the Python script, you must export the following variables with the Client ID and Client Secret that you obtained from the Barracuda Token ServiceIf you have not already registered your application using the Barracuda Token Service to obtain a Client ID and Client Secret, see Register your Application in the Barracuda Token Service.

export API_CLIENT_ID=xxxx

export API_CLIENT_SECRET=xxx

 

import requests import json import os import time class essAPI(): host = None client_id = None client_secret = None access_token = None access_token_expiration = None def __init__(self, host, client_id, client_secret): self.host = host self.client_id = client_id self.client_secret = client_secret try: self.access_token = self.getAccessToken() if self.access_token is None: raise Exception("Request for access token failed") except Exception as e: print(e) else: self.access_token_expiration = int(time.time()) + 3500 def getAccessToken(self): try: data = { 'grant_type': 'client_credentials', 'scope': 'ess:account:read' } req = requests.post(self.host, data=data, auth=(self.client_id, self.client_secret)) req.raise_for_status() except Exception as e: print(e) return None else: return req.json()['access_token'] def __str__(self): return "host: {} client_id: {} client_secret: {} access_token_expiration: {}".format(self.host, self.client_id, self.client_secret, self.access_token_expiration) def refreshToken(decorated): def wrapper(api, *args, **kwargs): if int(time.time()) > api.access_token_expiration: api.getAccessToken() return decorated(api, *args, **kwargs) return wrapper @refreshToken def callEssApi(api, path): try: print('---------------------------------- %s ----------------------------------', path) api_headers = {} api_headers['Authorization'] = 'Bearer ' + api.access_token # print(api_headers) r = requests.get('https://api.barracudanetworks.com/beta' + path, headers=api_headers) r.raise_for_status() except Exception as e: print("ESS API call failed for {}: {}", path, e) else: print(json.dumps(r.json(), indent=4)) # End of boilerplate code host = os.environ.get('TOKEN_URL') or 'https://login.bts.barracudanetworks.com/token' client_id = os.environ.get('API_CLIENT_ID') client_secret = os.environ.get('API_CLIENT_SECRET') def lookupAccount(account_id): api = essAPI(host, client_id, client_secret) # print(api) callEssApi(api, '/accounts/ess') callEssApi(api, '/accounts/{}/ess/domains'.format(account_id)) callEssApi(api, '/accounts/{}/ess/domains/address.com'.format(account_id)) callEssApi(api, '/accounts/{}/ess/statistics'.format(account_id)) # Replace the below with your account_id lookupAccount('xxxxxxx')