Commit 50154cc1 authored by arun.uday's avatar arun.uday

test Commit

parent eb668bf5
MONGO_URI=mongodb://localhost:27017
DB_NAME=userDB
REDIS_URI=redis://127.0.0.1:6379
REDIS_LOGIN_DB=10
SERVICE_HOST=0.0.0.0
SERVICE_PORT=8671
......
......@@ -3,7 +3,7 @@
Author: Arun Uday
Email: arun.uday@knowledgelens.com
Asset Manager Login For Normal User Login
Asset Manager Login / Registration
---------------------------------------------------------
"""
......
......@@ -9,3 +9,4 @@ email-validator~=1.3.1
pycryptodomex~=3.17
PyJWT~=2.6.0
validate_email~=1.3
redis~=4.5.2
\ No newline at end of file
......@@ -17,15 +17,13 @@ class _Services(BaseSettings):
CORS_ALLOW_HEADERS: list[str] = ["*"]
LOG_LEVEL: Literal["INFO", "DEBUG", "ERROR", "QTRACE"] = "INFO"
ENABLE_FILE_LOGGING: bool = False
KEY_ENCRYPTION = "kliLensKLiLensKL"
SECRET_KEY = "09d25e094faa6ca2556c818166b7a9563b93f7099f6f0f4caa6cf63b88e8d3e7"
ALGORITHM = "HS256"
ACCESS_TOKEN_EXPIRE_MINUTES = 30
class _Databases(BaseSettings):
MONGO_URI: str
DB_NAME: str
REDIS_URI: str
REDIS_LOGIN_DB: int
class _BasePathConf(BaseSettings):
......@@ -37,12 +35,23 @@ class _PathConf:
LOG_PATH: pathlib.Path = BASE_PATH / "log/"
class _Secrets(BaseSettings):
ACCESS_TOKEN_EXPIRE_MINUTES = 30
leeway_in_minutes: int = 10
KEY_ENCRYPTION = "kliLensKLiLensKL"
issuer: str = "iotManager"
SECRET_KEY = "09d25e094faa6ca2556c818166b7a9563b93f7099f6f0f4caa6cf63b88e8d3e7"
ALGORITHM = "HS256"
Services = _Services()
Databases = _Databases()
PathConf = _PathConf()
Secrets = _Secrets()
__all__ = [
"Services",
"Databases",
"PathConf",
"Secrets"
]
......@@ -9,7 +9,7 @@ class LoginHandlers:
def __init__(self):
self.obj_login_handler = NormalLogin()
def normal_login(self, login_data):
def normal_login(self, login_data, request):
# decrypting the password from the UI
decrypted_password = self.obj_login_handler.password_decrypt(login_data.payload["password"])
# validating the received inputs empty or not
......@@ -27,7 +27,7 @@ class LoginHandlers:
return JSONResponse(content=DefaultFailureResponse(error=data).dict(),
status_code=status.HTTP_401_UNAUTHORIZED)
# generating the access tokens
response = self.obj_login_handler.generate_tokens(login_data.payload, data)
response = self.obj_login_handler.generate_cookie_tokens(login_data.payload, request)
# token generation unsuccessful
if response is None:
return JSONResponse(
......
from __future__ import annotations
import base64
from datetime import datetime, timedelta
from datetime import datetime
import jwt
from Cryptodome.Cipher import AES
from passlib.context import CryptContext
from validate_email import validate_email
from scripts.config import Services
from scripts.config import *
from scripts.database.mongo.mongo_login import MongoUser
from scripts.database.redis.redis_conn import login_db
from scripts.errors import ErrorMessages
from scripts.logging.logger import logger
from scripts.utils.security.apply_encrytion_util import create_token
class NormalLogin:
......@@ -31,7 +32,7 @@ class NormalLogin:
def password_decrypt(self, password):
try:
# encoding the Key
key = Services.KEY_ENCRYPTION.encode(Services.ENCODING_TYPE)
key = Secrets.KEY_ENCRYPTION.encode(Services.ENCODING_TYPE)
# decoding the received password
enc = base64.b64decode(password)
# mode for the decryption
......@@ -46,7 +47,7 @@ class NormalLogin:
raise ValueError("Decrypted data is empty")
# removing the padding to get the password
data = self.un_pad(data)
return data.decode('utf-8')
return data.decode(Services.ENCODING_TYPE)
except Exception as e:
logger.exception(e)
......@@ -96,33 +97,16 @@ class NormalLogin:
logger.exception(e)
@staticmethod
def create_access_token(data: dict, expires_delta):
def generate_cookie_tokens(login_data, request):
try:
# creating a copy of the data
to_encode = data.copy()
# checking if the expires_delta is empty
if expires_delta:
expire = datetime.utcnow() + expires_delta
else:
expire = datetime.utcnow() + timedelta(minutes=15)
# updating the data with the expiration time
to_encode.update({"expire": expire.isoformat()})
# creating the token
encoded_jwt = jwt.encode(to_encode, Services.SECRET_KEY, algorithm=Services.ALGORITHM)
return encoded_jwt
except Exception as e:
logger.exception(e)
def generate_tokens(self, login_data, data):
try:
# creating the expiration time
access_token_expires = timedelta(minutes=Services.ACCESS_TOKEN_EXPIRE_MINUTES)
# creating the access token
access_token = self.create_access_token(
data={"username": login_data["username"], "role": data["role"]}, expires_delta=access_token_expires
access_token = create_token(
user_id=login_data["username"],
ip=request.ip_address,
project_id=Services.PROJECT_ID,
)
if access_token:
return {"access_token": access_token, "token_type": "bearer"}
return {"user_id": access_token, "token_type": "bearer"}
else:
return None
except Exception as e:
......
import redis
from scripts.config import Databases
redis_uri = Databases.REDIS_URI
login_db = redis.from_url(
redis_uri, db=int(Databases.REDIS_LOGIN_DB), decode_responses=True
)
......@@ -384,3 +384,350 @@ TypeError: string indices must be integers
2023-03-21 15:28:58 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-21 15:30:05 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-21 15:30:58 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-21 18:06:53 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-21 18:06:54 - ERROR - [MainThread:<module>(): 41] - 'list' object is not callable
Traceback (most recent call last):
File "E:\Git\meta-services\app.py", line 39, in <module>
uvicorn.run("main:app", host=arguments["bind"], port=int(arguments["port"]))
File "E:\Git\meta-services\venv\lib\site-packages\uvicorn\main.py", line 568, in run
server.run()
File "E:\Git\meta-services\venv\lib\site-packages\uvicorn\server.py", line 59, in run
return asyncio.run(self.serve(sockets=sockets))
File "C:\Users\arun.uday\AppData\Local\Programs\Python\Python39\lib\asyncio\runners.py", line 44, in run
return loop.run_until_complete(main)
File "C:\Users\arun.uday\AppData\Local\Programs\Python\Python39\lib\asyncio\base_events.py", line 647, in run_until_complete
return future.result()
File "E:\Git\meta-services\venv\lib\site-packages\uvicorn\server.py", line 66, in serve
config.load()
File "E:\Git\meta-services\venv\lib\site-packages\uvicorn\config.py", line 471, in load
self.loaded_app = import_from_string(self.app)
File "E:\Git\meta-services\venv\lib\site-packages\uvicorn\importer.py", line 21, in import_from_string
module = importlib.import_module(module_str)
File "C:\Users\arun.uday\AppData\Local\Programs\Python\Python39\lib\importlib\__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 850, in exec_module
File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
File "E:\Git\meta-services\main.py", line 17, in <module>
from scripts.services import router
File "E:\Git\meta-services\scripts\services\__init__.py", line 2, in <module>
from scripts.services import v1
File "E:\Git\meta-services\scripts\services\v1\__init__.py", line 3, in <module>
from scripts.services.v1 import iot_manager_services
File "E:\Git\meta-services\scripts\services\v1\iot_manager_services.py", line 14, in <module>
@router.routes(ApiEndPoints.asset_manager_submit)
TypeError: 'list' object is not callable
2023-03-21 18:07:52 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-21 18:08:38 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 09:55:22 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 09:55:45 - ERROR - [MainThread:create_access_token(): 114] - Algorithm 'RS256' could not be found. Do you have cryptography installed?
Traceback (most recent call last):
File "E:\Git\meta-services\venv\lib\site-packages\jwt\api_jws.py", line 88, in get_algorithm_by_name
return self._algorithms[alg_name]
KeyError: 'RS256'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "E:\Git\meta-services\scripts\core\handlers\normal_login.py", line 111, in create_access_token
encoded_jwt = jwt.encode(to_encode, Secrets.SECRET_KEY, algorithm=Secrets.ALGORITHM)
File "E:\Git\meta-services\venv\lib\site-packages\jwt\api_jwt.py", line 67, in encode
return api_jws.encode(json_payload, key, algorithm, headers, json_encoder)
File "E:\Git\meta-services\venv\lib\site-packages\jwt\api_jws.py", line 152, in encode
alg_obj = self.get_algorithm_by_name(algorithm_)
File "E:\Git\meta-services\venv\lib\site-packages\jwt\api_jws.py", line 91, in get_algorithm_by_name
raise NotImplementedError(
NotImplementedError: Algorithm 'RS256' could not be found. Do you have cryptography installed?
2023-03-22 09:57:43 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 10:56:52 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 10:58:59 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 10:59:38 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 11:23:37 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 11:27:35 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 11:43:20 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 11:44:21 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 11:45:09 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 11:45:35 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 11:45:55 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 11:46:34 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 11:48:03 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 11:50:47 - ERROR - [AnyIO worker thread:validate(): 40] - Exception while validating JWT: '_Secrets' object has no attribute 'leeway_in_mins'
Traceback (most recent call last):
File "E:\Git\meta-services\scripts\utils\security\jwt_util.py", line 35, in validate
leeway=Secrets.leeway_in_mins,
AttributeError: '_Secrets' object has no attribute 'leeway_in_mins'
2023-03-22 11:50:47 - ERROR - [AnyIO worker thread:__call__(): 66] -
Traceback (most recent call last):
File "E:\Git\meta-services\scripts\utils\security\decorators.py", line 64, in __call__
logger.exception(e)
fastapi.exceptions.HTTPException
2023-03-22 11:52:02 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 11:52:05 - ERROR - [AnyIO worker thread:validate(): 40] - Exception while validating JWT: '_Secrets' object has no attribute 'leeway_in_mins'
Traceback (most recent call last):
File "E:\Git\meta-services\scripts\utils\security\jwt_util.py", line 35, in validate
leeway=Secrets.leeway_in_mins,
AttributeError: '_Secrets' object has no attribute 'leeway_in_mins'
2023-03-22 11:52:05 - ERROR - [AnyIO worker thread:__call__(): 63] -
Traceback (most recent call last):
File "E:\Git\meta-services\scripts\utils\security\decorators.py", line 61, in __call__
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED)
fastapi.exceptions.HTTPException
2023-03-22 11:52:55 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 11:54:31 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 11:56:09 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 11:57:13 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 11:57:54 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 12:06:55 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 12:07:51 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 12:07:52 - ERROR - [MainThread:<module>(): 41] - 'await' outside async function (decorators.py, line 48)
Traceback (most recent call last):
File "E:\Git\meta-services\app.py", line 39, in <module>
uvicorn.run("main:app", host=arguments["bind"], port=int(arguments["port"]))
File "E:\Git\meta-services\venv\lib\site-packages\uvicorn\main.py", line 568, in run
server.run()
File "E:\Git\meta-services\venv\lib\site-packages\uvicorn\server.py", line 59, in run
return asyncio.run(self.serve(sockets=sockets))
File "C:\Users\arun.uday\AppData\Local\Programs\Python\Python39\lib\asyncio\runners.py", line 44, in run
return loop.run_until_complete(main)
File "C:\Users\arun.uday\AppData\Local\Programs\Python\Python39\lib\asyncio\base_events.py", line 647, in run_until_complete
return future.result()
File "E:\Git\meta-services\venv\lib\site-packages\uvicorn\server.py", line 66, in serve
config.load()
File "E:\Git\meta-services\venv\lib\site-packages\uvicorn\config.py", line 471, in load
self.loaded_app = import_from_string(self.app)
File "E:\Git\meta-services\venv\lib\site-packages\uvicorn\importer.py", line 21, in import_from_string
module = importlib.import_module(module_str)
File "C:\Users\arun.uday\AppData\Local\Programs\Python\Python39\lib\importlib\__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 850, in exec_module
File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
File "E:\Git\meta-services\main.py", line 17, in <module>
from scripts.services import router
File "E:\Git\meta-services\scripts\services\__init__.py", line 2, in <module>
from scripts.services import v1
File "E:\Git\meta-services\scripts\services\v1\__init__.py", line 3, in <module>
from scripts.services.v1 import iot_manager_services
File "E:\Git\meta-services\scripts\services\v1\iot_manager_services.py", line 9, in <module>
from scripts.utils.security.decorators import MetaInfoSchema, auth
File "E:\Git\meta-services\scripts\utils\security\decorators.py", line 48
payload = await request.json()
^
SyntaxError: 'await' outside async function
2023-03-22 12:08:04 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 12:12:16 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 12:12:17 - ERROR - [MainThread:<module>(): 41] - 'await' outside async function (decorators.py, line 48)
Traceback (most recent call last):
File "E:\Git\meta-services\app.py", line 39, in <module>
uvicorn.run("main:app", host=arguments["bind"], port=int(arguments["port"]))
File "E:\Git\meta-services\venv\lib\site-packages\uvicorn\main.py", line 568, in run
server.run()
File "E:\Git\meta-services\venv\lib\site-packages\uvicorn\server.py", line 59, in run
return asyncio.run(self.serve(sockets=sockets))
File "C:\Users\arun.uday\AppData\Local\Programs\Python\Python39\lib\asyncio\runners.py", line 44, in run
return loop.run_until_complete(main)
File "C:\Users\arun.uday\AppData\Local\Programs\Python\Python39\lib\asyncio\base_events.py", line 647, in run_until_complete
return future.result()
File "E:\Git\meta-services\venv\lib\site-packages\uvicorn\server.py", line 66, in serve
config.load()
File "E:\Git\meta-services\venv\lib\site-packages\uvicorn\config.py", line 471, in load
self.loaded_app = import_from_string(self.app)
File "E:\Git\meta-services\venv\lib\site-packages\uvicorn\importer.py", line 21, in import_from_string
module = importlib.import_module(module_str)
File "C:\Users\arun.uday\AppData\Local\Programs\Python\Python39\lib\importlib\__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 850, in exec_module
File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
File "E:\Git\meta-services\main.py", line 17, in <module>
from scripts.services import router
File "E:\Git\meta-services\scripts\services\__init__.py", line 2, in <module>
from scripts.services import v1
File "E:\Git\meta-services\scripts\services\v1\__init__.py", line 3, in <module>
from scripts.services.v1 import iot_manager_services
File "E:\Git\meta-services\scripts\services\v1\iot_manager_services.py", line 9, in <module>
from scripts.utils.security.decorators import MetaInfoSchema, auth
File "E:\Git\meta-services\scripts\utils\security\decorators.py", line 48
payload = await request.body()
^
SyntaxError: 'await' outside async function
2023-03-22 12:12:52 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 12:13:10 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 12:13:24 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 12:19:14 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 12:21:15 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 12:21:22 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 12:21:27 - ERROR - [MainThread:__call__(): 83] - 'project_id'
Traceback (most recent call last):
File "E:\Git\meta-services\scripts\utils\security\decorators.py", line 77, in __call__
if not payload["project_id"] or not payload["login_type"] or not payload["payload"]:
KeyError: 'project_id'
2023-03-22 12:39:57 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 12:40:05 - ERROR - [MainThread:__call__(): 83] - 'project_id'
Traceback (most recent call last):
File "E:\Git\meta-services\scripts\utils\security\decorators.py", line 77, in __call__
if not payload["project_id"] or not payload["login_type"] or not payload["payload"]:
KeyError: 'project_id'
2023-03-22 12:43:23 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 14:43:31 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 14:43:54 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 14:48:45 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 14:49:00 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 14:49:22 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 14:49:39 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 14:49:54 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 14:50:14 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 14:53:46 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 14:54:04 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 14:54:29 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 15:07:09 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 15:07:12 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 15:09:59 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 15:10:21 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 15:11:18 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 18:33:21 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 18:33:23 - ERROR - [MainThread:<module>(): 41] - '_Secrets' object has no attribute 'LOCK_OUT_TIME_MINS'
Traceback (most recent call last):
File "E:\Git\meta-services\app.py", line 39, in <module>
uvicorn.run("main:app", host=arguments["bind"], port=int(arguments["port"]))
File "E:\Git\meta-services\venv\lib\site-packages\uvicorn\main.py", line 568, in run
server.run()
File "E:\Git\meta-services\venv\lib\site-packages\uvicorn\server.py", line 59, in run
return asyncio.run(self.serve(sockets=sockets))
File "C:\Users\arun.uday\AppData\Local\Programs\Python\Python39\lib\asyncio\runners.py", line 44, in run
return loop.run_until_complete(main)
File "C:\Users\arun.uday\AppData\Local\Programs\Python\Python39\lib\asyncio\base_events.py", line 647, in run_until_complete
return future.result()
File "E:\Git\meta-services\venv\lib\site-packages\uvicorn\server.py", line 66, in serve
config.load()
File "E:\Git\meta-services\venv\lib\site-packages\uvicorn\config.py", line 471, in load
self.loaded_app = import_from_string(self.app)
File "E:\Git\meta-services\venv\lib\site-packages\uvicorn\importer.py", line 21, in import_from_string
module = importlib.import_module(module_str)
File "C:\Users\arun.uday\AppData\Local\Programs\Python\Python39\lib\importlib\__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 850, in exec_module
File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
File "E:\Git\meta-services\main.py", line 17, in <module>
from scripts.services import router
File "E:\Git\meta-services\scripts\services\__init__.py", line 2, in <module>
from scripts.services import v1
File "E:\Git\meta-services\scripts\services\v1\__init__.py", line 3, in <module>
from scripts.services.v1 import iot_manager_services
File "E:\Git\meta-services\scripts\services\v1\iot_manager_services.py", line 6, in <module>
from scripts.core.handlers.login_handler import LoginHandlers
File "E:\Git\meta-services\scripts\core\handlers\login_handler.py", line 1, in <module>
from scripts.core.handlers.normal_login import NormalLogin
File "E:\Git\meta-services\scripts\core\handlers\normal_login.py", line 15, in <module>
from scripts.utils.security.apply_encrytion_util import create_token
File "E:\Git\meta-services\scripts\utils\security\apply_encrytion_util.py", line 14, in <module>
age=Secrets.LOCK_OUT_TIME_MINS,
AttributeError: '_Secrets' object has no attribute 'LOCK_OUT_TIME_MINS'
2023-03-22 18:34:00 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 18:34:00 - ERROR - [MainThread:<module>(): 41] - expected an indented block (iot_manager_services.py, line 36)
Traceback (most recent call last):
File "E:\Git\meta-services\app.py", line 39, in <module>
uvicorn.run("main:app", host=arguments["bind"], port=int(arguments["port"]))
File "E:\Git\meta-services\venv\lib\site-packages\uvicorn\main.py", line 568, in run
server.run()
File "E:\Git\meta-services\venv\lib\site-packages\uvicorn\server.py", line 59, in run
return asyncio.run(self.serve(sockets=sockets))
File "C:\Users\arun.uday\AppData\Local\Programs\Python\Python39\lib\asyncio\runners.py", line 44, in run
return loop.run_until_complete(main)
File "C:\Users\arun.uday\AppData\Local\Programs\Python\Python39\lib\asyncio\base_events.py", line 647, in run_until_complete
return future.result()
File "E:\Git\meta-services\venv\lib\site-packages\uvicorn\server.py", line 66, in serve
config.load()
File "E:\Git\meta-services\venv\lib\site-packages\uvicorn\config.py", line 471, in load
self.loaded_app = import_from_string(self.app)
File "E:\Git\meta-services\venv\lib\site-packages\uvicorn\importer.py", line 21, in import_from_string
module = importlib.import_module(module_str)
File "C:\Users\arun.uday\AppData\Local\Programs\Python\Python39\lib\importlib\__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 850, in exec_module
File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
File "E:\Git\meta-services\main.py", line 17, in <module>
from scripts.services import router
File "E:\Git\meta-services\scripts\services\__init__.py", line 2, in <module>
from scripts.services import v1
File "E:\Git\meta-services\scripts\services\v1\__init__.py", line 3, in <module>
from scripts.services.v1 import iot_manager_services
File "E:\Git\meta-services\scripts\services\v1\iot_manager_services.py", line 36
except Exception as e:
^
IndentationError: expected an indented block
2023-03-22 18:35:06 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 18:35:12 - ERROR - [MainThread:generate_cookie_tokens(): 113] - 'MetaInfoSchema' object is not subscriptable
Traceback (most recent call last):
File "E:\Git\meta-services\scripts\core\handlers\normal_login.py", line 105, in generate_cookie_tokens
request['ip_address'],
TypeError: 'MetaInfoSchema' object is not subscriptable
2023-03-22 18:35:59 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 18:36:04 - ERROR - [MainThread:generate_cookie_tokens(): 113] - 'MetaInfoSchema' object is not subscriptable
Traceback (most recent call last):
File "E:\Git\meta-services\scripts\core\handlers\normal_login.py", line 105, in generate_cookie_tokens
request['ip_address'],
TypeError: 'MetaInfoSchema' object is not subscriptable
2023-03-22 18:37:04 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 18:37:15 - ERROR - [MainThread:generate_cookie_tokens(): 113] - 'MetaInfoSchema' object is not subscriptable
Traceback (most recent call last):
File "E:\Git\meta-services\scripts\core\handlers\normal_login.py", line 105, in generate_cookie_tokens
request['ip_address'],
TypeError: 'MetaInfoSchema' object is not subscriptable
2023-03-22 18:37:32 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 18:37:36 - ERROR - [MainThread:generate_cookie_tokens(): 113] - 'MetaInfoSchema' object is not subscriptable
Traceback (most recent call last):
File "E:\Git\meta-services\scripts\core\handlers\normal_login.py", line 105, in generate_cookie_tokens
request['ip_address'],
TypeError: 'MetaInfoSchema' object is not subscriptable
2023-03-22 18:37:52 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 18:37:56 - ERROR - [MainThread:generate_cookie_tokens(): 114] - 'MetaInfoSchema' object is not subscriptable
Traceback (most recent call last):
File "E:\Git\meta-services\scripts\core\handlers\normal_login.py", line 106, in generate_cookie_tokens
request['ip_address'],
TypeError: 'MetaInfoSchema' object is not subscriptable
2023-03-22 18:38:14 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 18:38:18 - ERROR - [MainThread:generate_cookie_tokens(): 116] - 'MetaInfoSchema' object is not subscriptable
Traceback (most recent call last):
File "E:\Git\meta-services\scripts\core\handlers\normal_login.py", line 103, in generate_cookie_tokens
request['ip_address'],
TypeError: 'MetaInfoSchema' object is not subscriptable
2023-03-22 18:38:48 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 18:38:51 - ERROR - [MainThread:generate_cookie_tokens(): 116] - 'MetaInfoSchema' object is not subscriptable
Traceback (most recent call last):
File "E:\Git\meta-services\scripts\core\handlers\normal_login.py", line 103, in generate_cookie_tokens
request['ip_address'],
TypeError: 'MetaInfoSchema' object is not subscriptable
2023-03-22 18:39:23 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 18:39:25 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 18:39:30 - ERROR - [MainThread:generate_cookie_tokens(): 116] - unsupported type for timedelta minutes component: str
Traceback (most recent call last):
File "E:\Git\meta-services\scripts\core\handlers\normal_login.py", line 106, in generate_cookie_tokens
access_token = create_token(
File "E:\Git\meta-services\scripts\utils\security\apply_encrytion_util.py", line 25, in create_token
exp = datetime.now(timezone.utc) + timedelta(minutes=age)
TypeError: unsupported type for timedelta minutes component: str
2023-03-22 18:40:45 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 18:55:23 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 18:57:14 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 18:59:39 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 19:02:32 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 19:02:59 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
2023-03-22 19:06:01 - INFO - [MainThread:<module>(): 37] - App Starting at 0.0.0.0:8671
from fastapi import APIRouter, HTTPException, status
from typing import Union
from fastapi import APIRouter, HTTPException, status, Depends
from scripts.constants.api import ApiEndPoints
from scripts.core.handlers.login_handler import LoginHandlers
from scripts.logging.logger import logger
from scripts.schemas.login_schema import LoginRequest
from scripts.utils.security.decorators import MetaInfoSchema, auth
# creating the login api
router = APIRouter(prefix=ApiEndPoints.version)
......@@ -11,20 +14,22 @@ router = APIRouter(prefix=ApiEndPoints.version)
obj_login_handler = LoginHandlers()
@router.routes(ApiEndPoints.asset_manager_submit)
async def login_default(request: LoginRequest):
@router.post(ApiEndPoints.asset_manager_submit)
async def login_default(
user_data: LoginRequest, request: MetaInfoSchema = Depends(auth)
):
try:
# v1
if request.login_type == "normal":
return obj_login_handler.normal_login(request)
if user_data.login_type == "normal":
return obj_login_handler.normal_login(user_data, request)
# v1
elif request.login_type == "google":
return obj_login_handler.google_login(request)
elif user_data.login_type == "google":
return obj_login_handler.google_login(user_data)
# v2
elif request.login_type == "microsoft":
return obj_login_handler.microsoft_login(request)
elif user_data.login_type == "microsoft":
return obj_login_handler.microsoft_login(user_data)
else:
return HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail="Invalid Request")
......@@ -32,6 +37,7 @@ async def login_default(request: LoginRequest):
logger.exception(e)
@router.routes(ApiEndPoints.asset_manager_user_registration)
# TODO user register
@router.post(ApiEndPoints.asset_manager_user_registration)
async def user_register():
return {"message": "Available soon"}
import uuid
from datetime import datetime, timedelta, timezone
from scripts.config import Secrets
from scripts.database.redis.redis_conn import login_db
from scripts.utils.security.jwt_util import JWT
jwt = JWT()
def create_token(
user_id,
ip,
age=Secrets.ACCESS_TOKEN_EXPIRE_MINUTES,
project_id=None,
):
"""
This method is to create a cookie
"""
payload = {"ip": ip, "user_id": user_id, "token": Secrets.SECRET_KEY, "age": age}
if project_id:
payload["project_id"] = project_id
exp = datetime.now() + timedelta(minutes=age)
_extras = {"iss": Secrets.issuer, "exp": exp}
_payload = payload | _extras
new_token = jwt.encode(_payload)
# Add session to redis
login_db.set(user_id, new_token)
login_db.expire(user_id, timedelta(minutes=age))
return user_id
from fastapi import HTTPException, Request, Response, status
from fastapi.openapi.models import APIKey, APIKeyIn
from fastapi.security import APIKeyCookie
from fastapi.security.api_key import APIKeyBase
from pydantic import BaseModel, Field
from scripts.config import Services
from scripts.database.redis.redis_conn import login_db
from scripts.errors import ErrorMessages
from scripts.logging.logger import logger
from scripts.utils.security.jwt_util import JWT
class MetaInfoSchema(BaseModel):
project_id: str = ""
user_id: str = ""
ip_address: str = ""
login_type: str = ""
login_token: str = Field(alias="login-token")
class Config:
allow_population_by_field_name = True
class _CookieAuthentication(APIKeyBase):
"""
Authentication backend using a cookie.
Internally, uses a JWT token to store the data.
"""
scheme: APIKeyCookie
cookie_name: str
cookie_secure: bool
def __init__(
self,
cookie_name: str = "login-token",
):
super().__init__()
self.model: APIKey = APIKey(**{"in": APIKeyIn.cookie}, name=cookie_name)
self.scheme_name = self.__class__.__name__
self.cookie_name = cookie_name
self.scheme = APIKeyCookie(name=self.cookie_name, auto_error=False)
self.login_redis = login_db
self.jwt = JWT()
def __call__(self, request: Request, response: Response) -> MetaInfoSchema:
cookies = request.cookies
login_token = cookies.get(self.cookie_name) or request.headers.get(
self.cookie_name
)
if not login_token or login_token != Services.PROJECT_NAME:
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED)
if login_token == Services.PROJECT_NAME:
return MetaInfoSchema(
project_id=Services.PROJECT_ID,
ip_address=request.client.host, # type: ignore
login_token=cookies.get("login-token"),
)
jwt_token = self.login_redis.get(login_token)
if not jwt_token:
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED)
try:
decoded_token = self.jwt.validate(token=jwt_token)
if not decoded_token:
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED)
except Exception as e:
logger.exception(e)
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail=ErrorMessages.UNKNOWN_ERROR,
)
user_id = decoded_token.get("user_id")
project_id = decoded_token.get("project_id")
if not user_id or not project_id:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Token doesn't have required fields",
)
return MetaInfoSchema(
project_id=project_id,
user_id=user_id,
ip_address=request.client.host, # type: ignore
login_token=cookies.get("login-token"),
)
CookieAuthentication = auth = _CookieAuthentication()
import logging
import jwt
from scripts.config import Secrets
class JWT:
def __init__(self) -> None:
self.max_login_age: int = Secrets.ACCESS_TOKEN_EXPIRE_MINUTES
# self.issuer: str = Secrets.issuer
self.alg: str = Secrets.ALGORITHM
self.key = Secrets.SECRET_KEY
def encode(self, payload) -> str:
try:
return jwt.encode(payload, self.key, algorithm=self.alg)
except Exception as e:
logging.exception(f"Exception while encoding JWT: {str(e)}")
raise
def decode(self, token):
try:
return jwt.decode(token, self.key, algorithms=self.alg)
except Exception as e:
logging.exception(f"Exception while encoding JWT: {str(e)}")
raise
def validate(self, token):
try:
return jwt.decode(
token,
self.key,
algorithms=self.alg
)
except Exception as e:
logging.exception(f"Exception while validating JWT: {str(e)}")
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment