Skip to content

Commit

Permalink
added user management API
Browse files Browse the repository at this point in the history
  • Loading branch information
marsan02 committed Jan 31, 2024
1 parent db7739f commit 0bc00e5
Show file tree
Hide file tree
Showing 5 changed files with 112 additions and 8 deletions.
Binary file modified __pycache__/main.cpython-311.pyc
Binary file not shown.
26 changes: 18 additions & 8 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,37 +15,47 @@
from services.advertisers import AdvertisersService
import pypyodbc
from utils.mysql_connection import Database

from services.user_management import UserManagementService

load_dotenv() # This loads the environment variables from .env



def configure_routes(app):


# MongoDB Atlas connection URI
mongo_uri = os.environ.get("MONGO_URI")
client = MongoClient(mongo_uri)

auth0_domain = os.environ.get("AUTH0_DOMAIN")
auth0_client_id = os.environ.get("AUTH0_CLIENT_ID")
auth0_client_secret = os.environ.get("AUTH0_CLIENT_SECRET")
try:
# Connection string
#connection_string = f'DRIVER={{ODBC Driver 17 for SQL Server}};SERVER={mysql_server};DATABASE={mysql_database};UID={mysql_username};PWD={mysql_password}'
mysql_conn = Database()
#mysql_conn= connection_string
app.register_error_handler(AuthError, handle_auth_error)
sellers = SellersService(client)
buyers = BuyersService(client)
deals = DealsService(client)
creatives = CreativesService(client)
campaigns = CampaignsService(client)
advertisers = AdvertisersService(client)

users = UserManagementService(auth0_domain,auth0_client_id,auth0_client_secret)
users.get_token()
@app.route('/countries')
@requires_auth
def get_countries(*args, **kwargs):
buyer_id = kwargs.get('buyer_id', None)
return geo_api.get_countries()

@app.route('/users', methods=['GET','POST','PUT','DELETE'])
def users_service(*args, **kwargs):
print(request.args.to_dict())
if request.method == 'GET':
return users.get_users(request.args.to_dict())
if request.method == 'POST':
return users.create_user(request.json)
if request.method == 'PUT':
return users.edit_user(request.args.get('user_id'),request.json)
if request.method == 'DELETE':
return users.delete_user(request.args.get('user_id'))

@app.route('/reporting', methods=['POST'])
@requires_auth
Expand Down
Binary file modified services/__pycache__/advertisers.cpython-311.pyc
Binary file not shown.
Binary file not shown.
94 changes: 94 additions & 0 deletions services/user_management.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
import requests

class UserManagementService:
def __init__(self,domain,client_id,client_secret):
self.domain = domain
self.client_id = client_id
self.client_secret = client_secret
def get_token(self):
url = f"https://{self.domain}/oauth/token"
payload = {
"client_id": self.client_id,
"client_secret": self.client_secret,
"audience": f"https://{self.domain}/api/v2/",
"grant_type": "client_credentials"
}
response = requests.post(url, json=payload)
resp_json = response.json()
self.token = resp_json["access_token"]

def create_user(self,user_data):
url = f"https://{self.domain}/api/v2/users"
headers = {
'Authorization': f'Bearer {self.token}',
'Content-Type': 'application/json'
}
user_data["connection"]="Username-Password-Authentication"
response = requests.post(url, headers=headers, json=user_data)
return response.json()

def edit_user(self,user_id, updated_data):
url = f"https://{self.domain}/api/v2/users/{user_id}"
headers = {
'Authorization': f'Bearer {self.token}',
'Content-Type': 'application/json'
}
print(updated_data)
print(url)
response = requests.patch(url, headers=headers, json=updated_data)
print(response.json())
return response.json()

def create_role(self,token, role_data):
url = f"https://{self.domain}/api/v2/roles"
headers = {
'Authorization': f'Bearer {self.token}',
'Content-Type': 'application/json'
}
response = requests.post(url, headers=headers, json=role_data)
return response.json()
def get_users(self,query_params=None):
url = f"https://{self.domain}/api/v2/users"
if "user_id" in query_params:
url = url + f"/{query_params['user_id']}"
headers = {
'Authorization': f'Bearer {self.token}'
}
if query_params is None:
query_params = {}
query_params['fields'] = 'email,name,nickname,user_id'
query_params['include_fields'] = 'true'
response = requests.get(url, headers=headers, params=query_params)
response = response.json()
if "user_id" in query_params:
return response
for item in response:
item['id']=item['user_id']
return response
def get_roles(self):
url = f"https://{self.domain}/api/v2/roles"
headers = {'Authorization': f'Bearer {self.token}'}
response = requests.get(url, headers=headers)
return response.json() # List of roles

def delete_user(self,user_id):
url = f"https://{self.domain}/api/v2/users/{user_id}"
headers = {
'Authorization': f'Bearer {self.token}',
'Content-Type': 'application/json'
}
print("deleting")
response = requests.delete(url, headers=headers)
return response
"""
role_data = {
"name": "Example Role",
"description": "Role Description"
}
user_data = {
"email": "user@example.com",
"name": "test"
"password": "password",
}
"""

0 comments on commit 0bc00e5

Please sign in to comment.