libs/duo/__init__.py (60 lines of code) (raw):
import base64
import duo_client
class DuoAdminApi(object):
def __init__(self, config=None, use_proxy=False, proxy_config=None):
self.config = config
self.use_proxy = use_proxy
self.proxy_config = proxy_config
self.admin_api = self._create_duo_client()
def _create_duo_client(self):
"""
Creates a DUO Admin API Client object.
:return: DUO client object
"""
if self.config["ca_certs"] == "":
client = duo_client.Admin(ikey=self.config["ikey"],
skey=self.config["skey"],
host=self.config["host"])
else:
client = duo_client.Admin(ikey=self.config["ikey"],
skey=self.config["skey"],
host=self.config["host"],
ca_certs=self.config["ca_certs"])
if self.use_proxy is True:
self.proxy_headers = {"Proxy-Authorization": "Basic " + base64.b64encode(b"%s:%s" % (
self.proxy_config["proxy_user"],
self.proxy_config["proxy_pass"])).decode("utf-8")}
client.set_proxy(host=self.proxy_config["proxy_url"],
port=self.proxy_config["proxy_port"],
headers=self.proxy_headers,
proxy_type="CONNECT")
return client
def list_users(self):
"""
List of all users.
:return: list of user objects.
"""
r = self.admin_api.get_users()
return r
def get_user(self, username):
"""
Return a single user object by username.
:param: username: username
:return: user object.
"""
try:
r = self.admin_api.get_users_by_name(username)
return r
except AttributeError as e:
return "Error connecting to Duo: %s" % e
def delete_user(self, user_id):
"""
Delete user by id.
:param: user_id: user_id
:return: empty string when successful
"""
r = self.admin_api.delete_user(user_id)
if r == "":
return True
else:
return False
def remove_from_duo(self, username):
"""
Delete user by username.
:param: username: username
:return: Bool
Note: This returns a bool to show user was deleted.
"""
try:
result = None
user = username.split('@')[0]
user_data = self.get_user(user)
if len(user_data) == 0:
result = True
elif user_data is not None:
for item in user_data:
if item["username"] == user:
user_id = item["user_id"]
if self.delete_user(user_id) is True:
result = True
else:
result = False
return result
except(AttributeError, KeyError):
return "Error connecting to Duo."