Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 18 additions & 18 deletions setup.py
Original file line number Diff line number Diff line change
@@ -1,27 +1,27 @@
from setuptools import setup, find_packages
import os

from setuptools import find_packages, setup

this_directory = os.path.abspath(os.path.dirname(__file__))
with open(os.path.join(this_directory, 'README.md'), encoding='utf-8') as f:
with open(os.path.join(this_directory, "README.md"), encoding="utf-8") as f:
long_description = f.read()


setup(
name='trustauthx',
version='0.5.5',
description='Official connector SDK for TrustAuthx',
name="trustauthx",
version="0.5.5",
description="Official connector SDK for TrustAuthx",
long_description=long_description,
long_description_content_type='text/markdown', # This is important!
author='moonlightnexus',
author_email='nexus@trustauthx.com',
long_description_content_type="text/markdown", # This is important!
author="moonlightnexus",
author_email="nexus@trustauthx.com",
url="https://github.com/One-Click-Auth/TrustAuthx-Py-SDK.git",
license="MIT",
classifiers=[
'Development Status :: 4 - Beta',
'Intended Audience :: Developers',
'License :: OSI Approved :: MIT License',
'Programming Language :: Python :: 3.9',
],
"Development Status :: 4 - Beta",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"Programming Language :: Python :: 3.9",
],
packages=find_packages(),
install_requires=[
"certifi>=2023.5.7",
Expand All @@ -37,11 +37,11 @@
"urllib3<=3.0.0",
"charset-normalizer>=3.2.0",
"python-jose>=3.3.0",
"python-dotenv==1.0.0"
],
"python-dotenv==1.0.0",
],
entry_points={
'console_scripts': [
'trustauthx = trustauthx.cli:main',
"console_scripts": [
"trustauthx = trustauthx.cli:main",
],
},
)
190 changes: 103 additions & 87 deletions trustauthx/authlite.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
import json

import requests
from requests.exceptions import HTTPError
from jose import JWTError, jwt
from jose.constants import ALGORITHMS
import json
from requests.exceptions import HTTPError

# authx/authlite.py

class AuthLiteClient:

class AuthLiteClient:
"""
AuthLiteClient is a Python client for the TrustAuthX authentication service.

Expand Down Expand Up @@ -59,9 +60,10 @@ class TokenCheck:
refresh (str): The refresh token.
state (bool): The state of the tokens (True if valid, False otherwise).
"""
access :str
refresh:str
state:bool

access: str
refresh: str
state: bool

def __init__(self, api_key, secret_key, org_id=None):
"""
Expand All @@ -75,26 +77,31 @@ def __init__(self, api_key, secret_key, org_id=None):
Returns:
None
"""
self.jwt_encode = lambda key, data: jwt.encode(data, key=key, algorithm= ALGORITHMS.HS256)
self.jwt_decode = lambda key, data: jwt.decode(str(data), key=key, algorithms=ALGORITHMS.HS256)
self.jwt_encode = lambda key, data: jwt.encode(
data, key=key, algorithm=ALGORITHMS.HS256)
self.jwt_decode = lambda key, data: jwt.decode(
str(data), key=key, algorithms=ALGORITHMS.HS256)
self.secret_key = secret_key
self.api_key = api_key
self.org_id = org_id
self.signed_key = self.jwt_encode(key=self.secret_key, data={"api_key":self.api_key})
self.signed_key = self.jwt_encode(key=self.secret_key,
data={"api_key": self.api_key})

def generate_url(self) -> str:
"""
Generates an authentication URL for the given organization.

Returns:
str: The generated authentication URL.

Raises:
ValueError: If org_id is not provided.
"""
# Generate an authentication url for the given org
if self.org_id:return f"https://app.trustauthx.com/widget/login/?org_id={self.org_id}"
else:raise ValueError("must provide org_id")
if self.org_id:
return f"https://app.trustauthx.com/widget/login/?org_id={self.org_id}"
else:
raise ValueError("must provide org_id")

def generate_edit_user_url(self, access_token, url) -> str:
"""
Expand All @@ -108,15 +115,16 @@ def generate_edit_user_url(self, access_token, url) -> str:
str: The generated authentication URL.
"""
# Generate an authentication url for the given org
headers = {'accept': 'application/json'}
headers = {"accept": "application/json"}
params = {
'AccessToken': access_token,
'api_key': self.api_key,
'signed_key': self.signed_key,
'url':url
}
"AccessToken": access_token,
"api_key": self.api_key,
"signed_key": self.signed_key,
"url": url,
}
url = "https://api.trustauthx.com/api/user/me/settings/"
req = requests.Request('GET', url, params=params, headers=headers).prepare()
req = requests.Request("GET", url, params=params,
headers=headers).prepare()
return req.url

def re_auth(self, code):
Expand All @@ -135,23 +143,22 @@ def re_auth(self, code):
url = "https://api.trustauthx.com/api/user/me/widget/re-auth/token"
params = {
"code": code,
'api_key': self.api_key,
'signed_key': self.signed_key
"api_key": self.api_key,
"signed_key": self.signed_key
}
headers = {"accept": "application/json"}
response = requests.get(url, headers=headers, params=params)
if response.status_code == 200:
rtn = self.jwt_decode(self.secret_key,response.json())
rtn = self.jwt_decode(self.secret_key, response.json())
sub = json.loads(rtn["sub"])
rtn.pop("sub")
rtn["email"] = sub["email"]
rtn["uid"] = sub["uid"]
return rtn
else:raise HTTPError(
'Request failed with status code : {} \n this code contains a msg : {}'.format(
response.status_code,
response.text)
)
else:
raise HTTPError(
"Request failed with status code : {} \n this code contains a msg : {}"
.format(response.status_code, response.text))

def get_user(self, token) -> dict:
"""
Expand All @@ -167,26 +174,25 @@ def get_user(self, token) -> dict:
HTTPError: If the request fails with an HTTP error status code.
"""
# Validate the given authentication token
url = 'https://api.trustauthx.com/api/user/me/auth/data'
headers = {'accept': 'application/json'}
url = "https://api.trustauthx.com/api/user/me/auth/data"
headers = {"accept": "application/json"}
params = {
'UserToken': token,
'api_key': self.api_key,
'signed_key': self.signed_key
}
"UserToken": token,
"api_key": self.api_key,
"signed_key": self.signed_key,
}
response = requests.get(url, headers=headers, params=params)
if response.status_code == 200:
rtn = self.jwt_decode(self.secret_key,response.json())
rtn = self.jwt_decode(self.secret_key, response.json())
sub = json.loads(rtn["sub"])
rtn.pop("sub")
rtn["email"] = sub["email"]
rtn["uid"] = sub["uid"]
return rtn
else:raise HTTPError(
'Request failed with status code : {} \n this code contains a msg : {}'.format(
response.status_code,
response.text)
)
else:
raise HTTPError(
"Request failed with status code : {} \n this code contains a msg : {}"
.format(response.status_code, response.text))

def get_user_data(self, AccessToken) -> dict:
"""
Expand All @@ -203,22 +209,21 @@ def get_user_data(self, AccessToken) -> dict:
"""
# Validate the given authentication token
"""returns a dict containing 'access_token', 'refresh_token', 'img', 'sub'"""
url = 'https://api.trustauthx.com/api/user/me/data'
headers = {'accept': 'application/json'}
url = "https://api.trustauthx.com/api/user/me/data"
headers = {"accept": "application/json"}
params = {
'AccessToken': AccessToken,
'api_key': self.api_key,
'signed_key': self.signed_key
}
"AccessToken": AccessToken,
"api_key": self.api_key,
"signed_key": self.signed_key,
}
response = requests.get(url, headers=headers, params=params)
if response.status_code == 200:
rtn = self.jwt_decode(self.secret_key,response.json())
rtn = self.jwt_decode(self.secret_key, response.json())
return rtn
else:raise HTTPError(
'Request failed with status code : {} \n this code contains a msg : {}'.format(
response.status_code,
response.text)
)
else:
raise HTTPError(
"Request failed with status code : {} \n this code contains a msg : {}"
.format(response.status_code, response.text))

def get_access_token_from_refresh_token(self, refresh_token):
"""
Expand All @@ -234,20 +239,20 @@ def get_access_token_from_refresh_token(self, refresh_token):
HTTPError: If the request fails with an HTTP error status code.
"""
# Store the given authentication token
url = 'https://api.trustauthx.com/api/user/me/access/token/'
headers = {'accept': 'application/json'}
url = "https://api.trustauthx.com/api/user/me/access/token/"
headers = {"accept": "application/json"}
params = {
'RefreshToken': refresh_token,
'api_key': self.api_key,
'signed_key': self.signed_key
}
"RefreshToken": refresh_token,
"api_key": self.api_key,
"signed_key": self.signed_key,
}
response = requests.get(url, headers=headers, params=params)
if response.status_code == 200:return response.json()
else:raise HTTPError(
'Request failed with status code : {} \n this code contains a msg : {}'.format(
response.status_code,
response.text)
)
if response.status_code == 200:
return response.json()
else:
raise HTTPError(
"Request failed with status code : {} \n this code contains a msg : {}"
.format(response.status_code, response.text))

def validate_access_token(self, access_token) -> bool:
"""
Expand All @@ -260,17 +265,22 @@ def validate_access_token(self, access_token) -> bool:
bool: True if the access token is valid, False otherwise.
"""
# Store the given authentication token
url = 'https://api.trustauthx.com/api/user/me/auth/validate/token'
headers = {'accept': 'application/json'}
url = "https://api.trustauthx.com/api/user/me/auth/validate/token"
headers = {"accept": "application/json"}
params = {
'AccessToken': access_token,
'api_key': self.api_key,
'signed_key': self.signed_key
}
"AccessToken": access_token,
"api_key": self.api_key,
"signed_key": self.signed_key,
}
response = requests.get(url, headers=headers, params=params)
return response.status_code == 200

def revoke_token(self,AccessToken:str=None, RefreshToken:str = None, revoke_all_tokens:bool = False) -> bool:
def revoke_token(
self,
AccessToken: str = None,
RefreshToken: str = None,
revoke_all_tokens: bool = False,
) -> bool:
"""
Revokes an access token or refresh token.

Expand All @@ -286,22 +296,27 @@ def revoke_token(self,AccessToken:str=None, RefreshToken:str = None, revoke_all_
HTTPError: If the request fails with an HTTP error status code.
AttributeError: If neither AccessToken nor RefreshToken is provided.
"""
url = 'https://api.trustauthx.com/api/user/me/token/'
headers = {'accept': 'application/json'}
if not AccessToken and not RefreshToken:raise AttributeError("must provide either AccessToken or RefreshToken")
tt=True if AccessToken else False
url = "https://api.trustauthx.com/api/user/me/token/"
headers = {"accept": "application/json"}
if not AccessToken and not RefreshToken:
raise AttributeError(
"must provide either AccessToken or RefreshToken")
tt = True if AccessToken else False
t = AccessToken if AccessToken else RefreshToken
params = {
'Token': t,
'api_key': self.api_key,
'signed_key': self.signed_key,
'AccessToken': tt,
'SpecificTokenOnly':not revoke_all_tokens,
}
"Token": t,
"api_key": self.api_key,
"signed_key": self.signed_key,
"AccessToken": tt,
"SpecificTokenOnly": not revoke_all_tokens,
}
response = requests.delete(url, headers=headers, params=params)
if response.status_code == 200:return response.json()
else:raise HTTPError(
'Request failed with status code : {} \n this code contains a msg : {}'.format(response.status_code, response.text))
if response.status_code == 200:
return response.json()
else:
raise HTTPError(
"Request failed with status code : {} \n this code contains a msg : {}"
.format(response.status_code, response.text))

def validate_token_set(self, access_token, refresh_token) -> TokenCheck:
"""
Expand All @@ -322,15 +337,16 @@ def validate_token_set(self, access_token, refresh_token) -> TokenCheck:
is_valid = self.validate_access_token(access_token)
if not is_valid:
if refresh_token:
new_tokens = self.get_access_token_from_refresh_token(refresh_token)
new_tokens = self.get_access_token_from_refresh_token(
refresh_token)
d.state = False
d.access = new_tokens['access_token']
d.refresh = new_tokens['refresh_token']
d.access = new_tokens["access_token"]
d.refresh = new_tokens["refresh_token"]
return d
else:
d.state = True
d.access = access_token
d.refresh = refresh_token
return d
except:
raise HTTPError('both tokens are invalid login again')
raise HTTPError("both tokens are invalid login again")
Loading