Mock auth
This commit is contained in:
parent
851906a029
commit
e0f8112d13
@ -1,10 +0,0 @@
|
|||||||
from pydantic_settings import BaseSettings
|
|
||||||
|
|
||||||
class Settings(BaseSettings):
|
|
||||||
API_V1_STR: str = "/api/v1"
|
|
||||||
PROJECT_NAME: str = "House Price Predictor"
|
|
||||||
|
|
||||||
class Config:
|
|
||||||
case_sensitive = True
|
|
||||||
|
|
||||||
settings = Settings()
|
|
||||||
9
backend/app/errors/base_error.py
Normal file
9
backend/app/errors/base_error.py
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
from fastapi import HTTPException, status
|
||||||
|
|
||||||
|
|
||||||
|
class BaseError(HTTPException):
|
||||||
|
status_code: int = status.HTTP_500_INTERNAL_SERVER_ERROR
|
||||||
|
|
||||||
|
def __init__(self, detail: str):
|
||||||
|
self.detail = detail
|
||||||
|
super().__init__(status_code=self.status_code, detail=self.detail)
|
||||||
10
backend/app/errors/not_authenticated.py
Normal file
10
backend/app/errors/not_authenticated.py
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
from fastapi import status
|
||||||
|
|
||||||
|
from .base_error import BaseError
|
||||||
|
|
||||||
|
|
||||||
|
class NotAuthenticatedError(BaseError):
|
||||||
|
status_code: int = status.HTTP_401_UNAUTHORIZED
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
super().__init__("Not authenticated")
|
||||||
38
backend/app/providers/auth_provider.py
Normal file
38
backend/app/providers/auth_provider.py
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
from ..errors.not_authenticated import NotAuthenticatedError
|
||||||
|
from ..models.user import User
|
||||||
|
from ..settings import get_settings
|
||||||
|
|
||||||
|
|
||||||
|
class AuthProvider:
|
||||||
|
"""
|
||||||
|
Provides authentication methods for the API.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
) -> None:
|
||||||
|
if not get_settings().environment == "development":
|
||||||
|
raise NotImplementedError("AuthProvider is only implemented for development environment.")
|
||||||
|
|
||||||
|
self._authenticated_user = self._get_mocked_user()
|
||||||
|
|
||||||
|
|
||||||
|
def _get_mocked_user(self):
|
||||||
|
return User(
|
||||||
|
email="test@test.com",
|
||||||
|
username="test",
|
||||||
|
password_hash="test",
|
||||||
|
)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def is_authenticated(self) -> bool:
|
||||||
|
return self._authenticated_user is not None
|
||||||
|
|
||||||
|
@property
|
||||||
|
def user(self) -> User:
|
||||||
|
"""
|
||||||
|
Returns the authenticated user.
|
||||||
|
"""
|
||||||
|
if not self._authenticated_user:
|
||||||
|
raise NotAuthenticatedError()
|
||||||
|
return self._authenticated_user
|
||||||
@ -1,11 +1,13 @@
|
|||||||
from fastapi import APIRouter
|
from fastapi import APIRouter, Depends
|
||||||
|
from typing import Annotated
|
||||||
|
from ..providers.auth_provider import AuthProvider
|
||||||
|
|
||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|
||||||
@router.post("")
|
@router.post("")
|
||||||
async def create_house():
|
async def create_house(auth_provider: Annotated[AuthProvider, Depends()]):
|
||||||
raise NotImplementedError("This endpoint is not implemented yet.")
|
return auth_provider.user
|
||||||
|
|
||||||
@router.get("/all")
|
@router.get("")
|
||||||
async def get_all_houses():
|
async def get_all_houses():
|
||||||
raise NotImplementedError("This endpoint is not implemented yet.")
|
raise NotImplementedError("This endpoint is not implemented yet.")
|
||||||
@ -10,11 +10,10 @@ import os
|
|||||||
load_dotenv()
|
load_dotenv()
|
||||||
|
|
||||||
class _BaseConfig(BaseSettings):
|
class _BaseConfig(BaseSettings):
|
||||||
pass
|
|
||||||
|
|
||||||
class _AppSettings(_BaseConfig):
|
|
||||||
environment: str = Field(default=os.getenv("ENVIRONMENT", "development"))
|
environment: str = Field(default=os.getenv("ENVIRONMENT", "development"))
|
||||||
|
|
||||||
|
class _AppSettings(_BaseConfig):
|
||||||
|
pass
|
||||||
|
|
||||||
class _DbSettings(_BaseConfig):
|
class _DbSettings(_BaseConfig):
|
||||||
username: str = Field(default=os.getenv("PG_USER"))
|
username: str = Field(default=os.getenv("PG_USER"))
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user