diff --git a/api/.gitignore b/api/.gitignore new file mode 100644 index 0000000..e7078d0 --- /dev/null +++ b/api/.gitignore @@ -0,0 +1 @@ +*/__pycache__/* diff --git a/api/rpk-api/__pycache__/main.cpython-313.pyc b/api/rpk-api/__pycache__/main.cpython-313.pyc deleted file mode 100644 index 3efdc30..0000000 Binary files a/api/rpk-api/__pycache__/main.cpython-313.pyc and /dev/null differ diff --git a/api/rpk-api/hub/__pycache__/__init__.cpython-313.pyc b/api/rpk-api/hub/__pycache__/__init__.cpython-313.pyc deleted file mode 100644 index 2567f38..0000000 Binary files a/api/rpk-api/hub/__pycache__/__init__.cpython-313.pyc and /dev/null differ diff --git a/api/rpk-api/hub/auth/__init__.py b/api/rpk-api/hub/auth/__init__.py index eeaafcd..6376dd5 100644 --- a/api/rpk-api/hub/auth/__init__.py +++ b/api/rpk-api/hub/auth/__init__.py @@ -1,20 +1,21 @@ import os import uuid +from beanie import PydanticObjectId from fastapi import Depends -from fastapi_users import UUIDIDMixin, BaseUserManager +from fastapi_users import UUIDIDMixin, BaseUserManager, FastAPIUsers, schemas from fastapi_users.authentication import AuthenticationBackend, BearerTransport from fastapi_users.authentication.strategy import AccessTokenDatabase, DatabaseStrategy from fastapi_users_db_beanie.access_token import BeanieBaseAccessTokenDocument, BeanieAccessTokenDatabase from httpx_oauth.clients.google import GoogleOAuth2 -from fastapi_users.fastapi_users import get_oauth_router +from httpx_oauth.clients.discord import DiscordOAuth2 from hub.user import User, get_user_db SECRET = os.getenv("FASTAPI_USERS_SECRET") google_oauth_client = GoogleOAuth2(os.getenv("GOOGLE_CLIENT_ID"), os.getenv("GOOGLE_CLIENT_SECRET")) - +discord_oauth_client = DiscordOAuth2(os.getenv("DISCORD_CLIENT_ID"), os.getenv("DISCORD_CLIENT_SECRET")) TOKEN_LIFETIME = 3600 @@ -49,4 +50,12 @@ auth_backend = AuthenticationBackend( get_strategy=get_database_strategy, ) -oauth_router = get_oauth_router(google_oauth_client, auth_backend, get_user_manager, SECRET) +fastapi_users = FastAPIUsers[User, PydanticObjectId](get_user_manager, [auth_backend]) + +auth_router = fastapi_users.get_auth_router(auth_backend, requires_verification=True) +register_router = fastapi_users.get_register_router(schemas.BaseUser, schemas.BaseUserCreate) +password_router = fastapi_users.get_reset_password_router() +verification_router = fastapi_users.get_verify_router(schemas.BaseUser) +users_router = fastapi_users.get_users_router(schemas.BaseUser, schemas.BaseUserUpdate) +google_oauth_router = fastapi_users.get_oauth_router(google_oauth_client, auth_backend, SECRET) +discord_oauth_router = fastapi_users.get_oauth_router(discord_oauth_client, auth_backend, SECRET) diff --git a/api/rpk-api/hub/auth/__pycache__/__init__.cpython-313.pyc b/api/rpk-api/hub/auth/__pycache__/__init__.cpython-313.pyc deleted file mode 100644 index 71a1836..0000000 Binary files a/api/rpk-api/hub/auth/__pycache__/__init__.cpython-313.pyc and /dev/null differ diff --git a/api/rpk-api/hub/user/__pycache__/__init__.cpython-313.pyc b/api/rpk-api/hub/user/__pycache__/__init__.cpython-313.pyc deleted file mode 100644 index 84e26c4..0000000 Binary files a/api/rpk-api/hub/user/__pycache__/__init__.cpython-313.pyc and /dev/null differ diff --git a/api/rpk-api/main.py b/api/rpk-api/main.py index 5443e3c..0c99c16 100644 --- a/api/rpk-api/main.py +++ b/api/rpk-api/main.py @@ -3,7 +3,8 @@ from contextlib import asynccontextmanager from fastapi import FastAPI from hub import init_db as hub_init_db -from hub.auth import oauth_router +from hub.auth import auth_router, register_router, password_router, verification_router, users_router, \ + google_oauth_router, discord_oauth_router if __name__ == '__main__': import uvicorn @@ -20,8 +21,10 @@ async def lifespan(app: FastAPI): app = FastAPI(root_path="/api/v1", lifespan=lifespan) -app.include_router( - oauth_router, - prefix="/auth/google", - tags=["auth"], -) +app.include_router(register_router, tags=["Auth"], ) +app.include_router(auth_router, prefix="/auth", tags=["Auth"], ) +app.include_router(google_oauth_router, prefix="/auth/google", tags=["Auth"]) +app.include_router(discord_oauth_router, prefix="/auth/discord", tags=["Auth"]) +app.include_router(verification_router, prefix="/auth/verification", tags=["Auth"], ) +app.include_router(users_router, prefix="/users", tags=["Users"], ) +app.include_router(password_router, prefix="/users", tags=["Users"], ) diff --git a/docker-compose.yml b/docker-compose.yml index 68c1a84..b91149f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,7 +3,7 @@ services: build: context: ./api #image: roleplay-contracts-api-dev - env_file: ".env" + env_file: "./.env" restart: always ports: - "8000:8000" @@ -48,7 +48,7 @@ services: mongo: image: mongo:latest - env_file: ".env" + env_file: "./.env" restart: always ports: - "27017:27017"