Skip to content
This repository has been archived by the owner on Apr 14, 2024. It is now read-only.

part of change_password logic #249

Merged
merged 16 commits into from
Mar 25, 2024
1 change: 1 addition & 0 deletions sapphire/users/api/rest/auth/change_password/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from .routers import router
19 changes: 19 additions & 0 deletions sapphire/users/api/rest/auth/change_password/handlers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import secrets
brulitsan marked this conversation as resolved.
Show resolved Hide resolved

import fastapi

from sapphire.users import database


async def check_email(
request: fastapi.Request,
email: str
):
database_service: database.Service = request.app.service.database
async with database_service.transaction() as session:
user = await database_service.get_user_email(
session=session,
email=email
)
if user:
secret_code = secrets.token_urlsafe(12)
7 changes: 7 additions & 0 deletions sapphire/users/api/rest/auth/change_password/routers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import fastapi

from . import handlers

router = fastapi.APIRouter()

router.add_api_route(path="/", methods=["POST"], endpoint=handlers.check_email)
3 changes: 2 additions & 1 deletion sapphire/users/api/rest/auth/router.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import fastapi

from . import handlers, oauth2
from . import change_password, handlers, oauth2

router = fastapi.APIRouter()

Expand All @@ -9,3 +9,4 @@
router.add_api_route(methods=["POST"], path="/signup", endpoint=handlers.sign_up)
router.add_api_route(methods=["POST"], path="/signin", endpoint=handlers.sign_in)
router.include_router(oauth2.router, prefix="/oauth2")
router.include_router(change_password.router, prefix="/change_password")
2 changes: 2 additions & 0 deletions sapphire/users/brocker/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# from .service import Service, get_service
brulitsan marked this conversation as resolved.
Show resolved Hide resolved
from .settings import Settings
18 changes: 18 additions & 0 deletions sapphire/users/brocker/service.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import uuid

from sapphire.common.broker.models.email import Email
from sapphire.common.broker.service import BaseBrokerProducerService


class Service(BaseBrokerProducerService):

async def _send_email(
self, recipients: list[uuid.UUID], topic: str = "change_password"
brulitsan marked this conversation as resolved.
Show resolved Hide resolved
):
await self.send(topic=topic, message=Email(to=recipients))

async def send_email_code(self, email: str, code: str):
pass

# def get_service() -> Service:
# return Service()
5 changes: 5 additions & 0 deletions sapphire/users/brocker/settings.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from sapphire.common.broker.settings import BaseBrokerProducerSettings


class Settings(BaseBrokerProducerSettings):
brulitsan marked this conversation as resolved.
Show resolved Hide resolved
servers: list[str] = ["localhost:9091"]
14 changes: 14 additions & 0 deletions sapphire/users/database/service.py
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,20 @@ async def update_user_skills(self,

return skills

async def get_user_email(
brulitsan marked this conversation as resolved.
Show resolved Hide resolved
self,
session: AsyncSession,
email: str
) -> User:
filters = []
if email is not Empty:
filters.append(User.email == email)

stmt = select(User).where(*filters)
result = await session.execute(stmt)
current_email = result.scalar_one_or_none()
return current_email
brulitsan marked this conversation as resolved.
Show resolved Hide resolved


def get_service(settings: Settings) -> Service:
return Service(dsn=str(settings.dsn))
Loading