From 3d498df0c80028b2fb355a53ff30f5398bd41935 Mon Sep 17 00:00:00 2001 From: Nathaniel Varona Date: Tue, 28 Mar 2023 00:17:37 +0800 Subject: [PATCH] [API, CLI] Globalized the Use of Environment Variables --- README.md | 20 ++++++++------ pritunl_api/__init__.py | 11 ++++---- .../utils/__init__.py | 0 .../commands => pritunl_api}/utils/genkey.py | 2 +- .../commands => pritunl_api}/utils/query.py | 0 pritunl_api_cli/__init__.py | 10 +++---- pritunl_api_cli/commands/__init__.py | 8 ------ .../commands/{user.py => users.py} | 26 +++++++++---------- pyproject.toml | 2 +- 9 files changed, 37 insertions(+), 42 deletions(-) rename {pritunl_api_cli/commands => pritunl_api}/utils/__init__.py (100%) rename {pritunl_api_cli/commands => pritunl_api}/utils/genkey.py (93%) rename {pritunl_api_cli/commands => pritunl_api}/utils/query.py (100%) delete mode 100644 pritunl_api_cli/commands/__init__.py rename pritunl_api_cli/commands/{user.py => users.py} (84%) diff --git a/README.md b/README.md index 7ee6e34..212075a 100644 --- a/README.md +++ b/README.md @@ -31,19 +31,23 @@ export PRITUNL_API_TOKEN="XXXXXXXXXXXXXXXXXXXXXX" export PRITUNL_API_SECRET="XXXXXXXXXXXXXXXXXXXXX" ``` -Initializing an API object. +Initializing an API Instance. ```python -import os +# Import the object from pritunl_api import Pritunl -pritunl = Pritunl( - url=os.environ.get('PRITUNL_BASE_URL'), - token=os.environ.get('PRITUNL_API_TOKEN'), - secret=os.environ.get('PRITUNL_API_SECRET') -) +# Create an instance +pritunl = Pritunl() -# Your Pritunl API Client Object is now ready to use! +## You can also initialize an instance by manually providing the arguments. +# pritunl = Pritunl( +# url="", +# token="", +# secret="" +# ) + +# Your Pritunl API Client instance is now ready to use! pritunl.. ``` diff --git a/pritunl_api/__init__.py b/pritunl_api/__init__.py index 05c9ed6..d25c1ce 100644 --- a/pritunl_api/__init__.py +++ b/pritunl_api/__init__.py @@ -1,4 +1,4 @@ -__version__ = "1.1.4" +__version__ = "1.1.5" import json import logging as log @@ -10,6 +10,7 @@ import requests import time import uuid +import os requests.packages.urllib3.disable_warnings( requests.packages.urllib3.exceptions.InsecureRequestWarning) @@ -22,10 +23,10 @@ def __init__(self, msg): class Pritunl: - def __init__(self, url, token, secret): - self.BASE_URL = self.clean_url(url) - self.API_TOKEN = token - self.API_SECRET = secret + def __init__(self, url=None, token=None, secret=None): + self.BASE_URL = self.clean_url(os.environ.get('PRITUNL_BASE_URL') if not url else url) + self.API_TOKEN = os.environ.get('PRITUNL_API_TOKEN') if not token else token + self.API_SECRET = os.environ.get('PRITUNL_API_SECRET') if not secret else secret # Sub classes self.server = self.ServerClass(self) diff --git a/pritunl_api_cli/commands/utils/__init__.py b/pritunl_api/utils/__init__.py similarity index 100% rename from pritunl_api_cli/commands/utils/__init__.py rename to pritunl_api/utils/__init__.py diff --git a/pritunl_api_cli/commands/utils/genkey.py b/pritunl_api/utils/genkey.py similarity index 93% rename from pritunl_api_cli/commands/utils/genkey.py rename to pritunl_api/utils/genkey.py index 5f15947..ac66a80 100644 --- a/pritunl_api_cli/commands/utils/genkey.py +++ b/pritunl_api/utils/genkey.py @@ -7,4 +7,4 @@ def profile_key(pritunl_obj, org_id, usr_id): key_view_url = pritunl_obj.BASE_URL + key.json()['view_url'] return key_uri_url, key_view_url else: - return None + return None, None diff --git a/pritunl_api_cli/commands/utils/query.py b/pritunl_api/utils/query.py similarity index 100% rename from pritunl_api_cli/commands/utils/query.py rename to pritunl_api/utils/query.py diff --git a/pritunl_api_cli/__init__.py b/pritunl_api_cli/__init__.py index fc835ba..e79a996 100644 --- a/pritunl_api_cli/__init__.py +++ b/pritunl_api_cli/__init__.py @@ -1,7 +1,7 @@ import click # Pritunl -from .commands import user +from .commands import users @click.group() def run(): @@ -13,7 +13,7 @@ def run(): @click.option('--user-name') @click.option('--get-profile-key-only', is_flag=True) def get_user(**kwargs): - user.get_user(**kwargs) + users.get_user(**kwargs) # Create User @run.command() @@ -24,7 +24,7 @@ def get_user(**kwargs): @click.option('--yubikey-id') @click.option('--from-csv-file', type=click.Path(exists=True)) def create_user(**kwargs): - user.create_user(**kwargs) + users.create_user(**kwargs) # Update User @run.command() @@ -32,14 +32,14 @@ def create_user(**kwargs): @click.option('--user-name') @click.option('--disable/--enable', default=False) def update_user(**kwargs): - user.update_user(**kwargs) + users.update_user(**kwargs) # Delete User @run.command() @click.option('--org-name') @click.option('--user-name') def delete_user(**kwargs): - user.delete_user(**kwargs) + users.delete_user(**kwargs) if __name__ == '__main__': run() diff --git a/pritunl_api_cli/commands/__init__.py b/pritunl_api_cli/commands/__init__.py deleted file mode 100644 index a54f38f..0000000 --- a/pritunl_api_cli/commands/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -import os -from pritunl_api import Pritunl - -pritunl = Pritunl( - url=os.environ.get('PRITUNL_BASE_URL'), - token=os.environ.get('PRITUNL_API_TOKEN'), - secret=os.environ.get('PRITUNL_API_SECRET') -) diff --git a/pritunl_api_cli/commands/user.py b/pritunl_api_cli/commands/users.py similarity index 84% rename from pritunl_api_cli/commands/user.py rename to pritunl_api_cli/commands/users.py index e830214..eed5139 100644 --- a/pritunl_api_cli/commands/user.py +++ b/pritunl_api_cli/commands/users.py @@ -2,8 +2,11 @@ import json from urllib.parse import urlparse -from . import pritunl -from .utils.query import org_user +from pritunl_api import Pritunl +pritunl = Pritunl() + +from pritunl_api.utils.query import org_user +from pritunl_api.utils.genkey import profile_key import click @@ -14,7 +17,7 @@ def get_user(**kwargs): org, user = org_user(pritunl_obj=pritunl, org_name=kwargs['org_name'], user_name=kwargs['user_name']) - key = pritunl.key.get(org_id=org['id'], usr_id=user['id']) + key_uri_url, key_view_url = profile_key(pritunl_obj=pritunl, org_id=org['id'], usr_id=user['id']) if kwargs['get_profile_key_only']: console.print( @@ -23,8 +26,8 @@ def get_user(**kwargs): style="green bold", sep='\n' ) console.print( - f"PROFILE URI (PRITUNNL CLIENT IMPORT PROFILE): '{urlparse(pritunl.BASE_URL)._replace(scheme='pritunl').geturl() + key.json()['uri_url']}'", - f"PROFILE URL (WEB VIEW PROFILE): '{pritunl.BASE_URL + key.json()['view_url']}'", + f"PROFILE URI (PRITUNNL CLIENT IMPORT PROFILE): '{key_uri_url}'", + f"PROFILE URL (WEB VIEW PROFILE): '{key_view_url}'", style="blue", sep='\n', end='\n \n', new_line_start=True ) else: @@ -51,13 +54,7 @@ def __create_user(org_id, user_name, user_email): create_user = pritunl.user.post(org_id=org_id, data=user_data) for user in create_user: - key = pritunl.key.get(org_id=user['organization'], usr_id=user['id']) - context = { - 'key_urls': { - 'uri_url': urlparse(pritunl.BASE_URL)._replace(scheme='pritunl').geturl() + key.json()['uri_url'], - 'view_url': pritunl.BASE_URL + key.json()['view_url'], - } - } + key_uri_url, key_view_url = profile_key(pritunl_obj=pritunl, org_id=org['id'], usr_id=user['id']) console.print( f"USER `{user['name']}` WITH AN EMAIL `{user['email']}` FOR `{user['organization_name']}` ORGANIZATION IS SUCCESSFULLY CREATED!", f"TEMPORARY PROFILE KEY (Expires after 24 hours)", @@ -65,8 +62,8 @@ def __create_user(org_id, user_name, user_email): ) console.print( - f"PROFILE URI (PRITUNNL CLIENT IMPORT PROFILE): '{context['key_urls']['uri_url']}'", - f"PROFILE URL (WEB VIEW PROFILE): '{context['key_urls']['view_url']}'", + f"PROFILE URI (PRITUNNL CLIENT IMPORT PROFILE): '{key_uri_url}'", + f"PROFILE URL (WEB VIEW PROFILE): '{key_view_url}'", style="blue", sep='\n', end='\n \n', new_line_start=True ) @@ -124,6 +121,7 @@ def update_user(**kwargs): style="green bold", sep='\n', new_line_start=True ) + def delete_user(**kwargs): org, user = org_user(pritunl_obj=pritunl, org_name=kwargs['org_name'], user_name=kwargs['user_name']) response = pritunl.user.delete(org_id=org['id'], usr_id=user['id']) diff --git a/pyproject.toml b/pyproject.toml index 999fb0b..77ebdae 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "pritunl-api" -version = "1.1.4" +version = "1.1.5" description = "Pritunl API Client for Python" authors = ["Nathaniel Varona "] license = "MIT"