kopia lustrzana https://github.com/bugout-dev/moonstream
Handlers for passwords and fixed misstakes
rodzic
24b9266807
commit
c1e6110e4c
|
@ -1,12 +1,12 @@
|
||||||
import logging
|
import logging
|
||||||
from typing import Awaitable, Callable, Dict, List, Optional
|
from typing import Awaitable, Callable, Dict, Optional
|
||||||
|
|
||||||
from bugout.data import BugoutUser
|
from bugout.data import BugoutUser
|
||||||
from bugout.exceptions import BugoutResponseException
|
from bugout.exceptions import BugoutResponseException
|
||||||
from starlette.middleware.base import BaseHTTPMiddleware
|
from starlette.middleware.base import BaseHTTPMiddleware
|
||||||
from fastapi import Request, Response
|
from fastapi import Request, Response
|
||||||
|
|
||||||
from .settings import bugout_client as bc
|
from .settings import MOONSTREAM_APPLICATION_ID, bugout_client as bc
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -52,6 +52,10 @@ class BroodAuthMiddleware(BaseHTTPMiddleware):
|
||||||
status_code=403,
|
status_code=403,
|
||||||
content="Only verified accounts can access journals",
|
content="Only verified accounts can access journals",
|
||||||
)
|
)
|
||||||
|
if str(user.application_id) != str(MOONSTREAM_APPLICATION_ID):
|
||||||
|
return Response(
|
||||||
|
status_code=403, content="User does not belong to this application"
|
||||||
|
)
|
||||||
except BugoutResponseException as e:
|
except BugoutResponseException as e:
|
||||||
return Response(status_code=e.status_code, content=e.detail)
|
return Response(status_code=e.status_code, content=e.detail)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|
|
@ -52,7 +52,14 @@ app.add_middleware(
|
||||||
|
|
||||||
whitelist_paths: Dict[str, str] = {}
|
whitelist_paths: Dict[str, str] = {}
|
||||||
whitelist_paths.update(DOCS_PATHS)
|
whitelist_paths.update(DOCS_PATHS)
|
||||||
whitelist_paths.update({"/users": "POST", "/users/tokens": "POST"})
|
whitelist_paths.update(
|
||||||
|
{
|
||||||
|
"/users": "POST",
|
||||||
|
"/users/token": "POST",
|
||||||
|
"/users/password/restore": "POST",
|
||||||
|
"/users/password/reset": "POST",
|
||||||
|
}
|
||||||
|
)
|
||||||
app.add_middleware(BroodAuthMiddleware, whitelist=whitelist_paths)
|
app.add_middleware(BroodAuthMiddleware, whitelist=whitelist_paths)
|
||||||
|
|
||||||
|
|
||||||
|
@ -62,47 +69,104 @@ async def create_user_handler(
|
||||||
) -> BugoutUser:
|
) -> BugoutUser:
|
||||||
try:
|
try:
|
||||||
user: BugoutUser = bc.create_user(
|
user: BugoutUser = bc.create_user(
|
||||||
username, email, password, MOONSTREAM_APPLICATION_ID
|
username=username,
|
||||||
|
email=email,
|
||||||
|
password=password,
|
||||||
|
application_id=MOONSTREAM_APPLICATION_ID,
|
||||||
)
|
)
|
||||||
except BugoutResponseException as e:
|
except BugoutResponseException as e:
|
||||||
return HTTPException(status_code=e.status_code, detail=e.detail)
|
raise HTTPException(status_code=e.status_code, detail=e.detail)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return HTTPException(status_code=500)
|
raise HTTPException(status_code=500)
|
||||||
return user
|
return user
|
||||||
|
|
||||||
|
|
||||||
@app.get("/", tags=["users"], response_model=BugoutUser)
|
@app.get("/", tags=["users"], response_model=BugoutUser)
|
||||||
async def get_user_handler(request: Request) -> BugoutUser:
|
async def get_user_handler(request: Request) -> BugoutUser:
|
||||||
user: BugoutUser = request.state.user
|
user: BugoutUser = request.state.user
|
||||||
if str(user.application_id) != str(MOONSTREAM_APPLICATION_ID):
|
|
||||||
raise HTTPException(
|
|
||||||
status_code=403, detail="User does not belong to this application"
|
|
||||||
)
|
|
||||||
return user
|
return user
|
||||||
|
|
||||||
|
|
||||||
@app.post("/tokens", tags=["tokens"], response_model=BugoutToken)
|
@app.post("/password/restore", tags=["users"], response_model=Dict[str, Any])
|
||||||
|
async def restore_password_handler(request: Request) -> Dict[str, Any]:
|
||||||
|
user = request.state.user
|
||||||
|
try:
|
||||||
|
response = bc.restore_password(email=user.email)
|
||||||
|
except BugoutResponseException as e:
|
||||||
|
raise HTTPException(status_code=e.status_code, detail=e.detail)
|
||||||
|
except Exception as e:
|
||||||
|
raise HTTPException(status_code=500)
|
||||||
|
return response
|
||||||
|
|
||||||
|
|
||||||
|
@app.post("/password/reset", tags=["users"], response_model=BugoutUser)
|
||||||
|
async def reset_password_handler(
|
||||||
|
reset_id: str = Form(...), new_password: str = Form(...)
|
||||||
|
) -> BugoutUser:
|
||||||
|
try:
|
||||||
|
response = bc.reset_password(reset_id=reset_id, new_password=new_password)
|
||||||
|
except BugoutResponseException as e:
|
||||||
|
raise HTTPException(status_code=e.status_code, detail=e.detail)
|
||||||
|
except Exception as e:
|
||||||
|
raise HTTPException(status_code=500)
|
||||||
|
return response
|
||||||
|
|
||||||
|
|
||||||
|
@app.post("/password/change", tags=["users"], response_model=BugoutUser)
|
||||||
|
async def change_password_handler(
|
||||||
|
request: Request, current_password: str = Form(...), new_password: str = Form(...)
|
||||||
|
) -> BugoutUser:
|
||||||
|
token = request.state.token
|
||||||
|
try:
|
||||||
|
user = bc.change_password(
|
||||||
|
token=token, current_password=current_password, new_password=new_password
|
||||||
|
)
|
||||||
|
except BugoutResponseException as e:
|
||||||
|
raise HTTPException(status_code=e.status_code, detail=e.detail)
|
||||||
|
except Exception as e:
|
||||||
|
raise HTTPException(status_code=500)
|
||||||
|
return user
|
||||||
|
|
||||||
|
|
||||||
|
@app.delete("/", tags=["users"], response_model=BugoutUser)
|
||||||
|
async def delete_user_handler(
|
||||||
|
request: Request, password: str = Form(...)
|
||||||
|
) -> BugoutUser:
|
||||||
|
user = request.state.user
|
||||||
|
token = request.state.token
|
||||||
|
try:
|
||||||
|
user = bc.delete_user(token=token, user_id=user.id, password=password)
|
||||||
|
except BugoutResponseException as e:
|
||||||
|
raise HTTPException(status_code=e.status_code, detail=e.detail)
|
||||||
|
except Exception as e:
|
||||||
|
raise HTTPException(status_code=500)
|
||||||
|
return user
|
||||||
|
|
||||||
|
|
||||||
|
@app.post("/token", tags=["tokens"], response_model=BugoutToken)
|
||||||
async def login_handler(
|
async def login_handler(
|
||||||
username: str = Form(...), password: str = Form(...)
|
username: str = Form(...), password: str = Form(...)
|
||||||
) -> BugoutToken:
|
) -> BugoutToken:
|
||||||
try:
|
try:
|
||||||
token: BugoutToken = bc.create_token(
|
token: BugoutToken = bc.create_token(
|
||||||
username, password, MOONSTREAM_APPLICATION_ID
|
username=username,
|
||||||
|
password=password,
|
||||||
|
application_id=MOONSTREAM_APPLICATION_ID,
|
||||||
)
|
)
|
||||||
except BugoutResponseException as e:
|
except BugoutResponseException as e:
|
||||||
return HTTPException(status_code=e.status_code)
|
raise HTTPException(status_code=e.status_code)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return HTTPException(status_code=500)
|
raise HTTPException(status_code=500)
|
||||||
return token
|
return token
|
||||||
|
|
||||||
|
|
||||||
@app.delete("/tokens", tags=["tokens"], response_model=uuid.UUID)
|
@app.delete("/token", tags=["tokens"], response_model=uuid.UUID)
|
||||||
async def logout_handler(request: Request) -> uuid.UUID:
|
async def logout_handler(request: Request) -> uuid.UUID:
|
||||||
token = request.state.token
|
token = request.state.token
|
||||||
try:
|
try:
|
||||||
token_id: uuid.UUID = bc.revoke_token(token)
|
token_id: uuid.UUID = bc.revoke_token(token=token)
|
||||||
except BugoutResponseException as e:
|
except BugoutResponseException as e:
|
||||||
return HTTPException(status_code=e.status_code, detail=e.detail)
|
raise HTTPException(status_code=e.status_code, detail=e.detail)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return HTTPException(status_code=500)
|
raise HTTPException(status_code=500)
|
||||||
return token_id
|
return token_id
|
||||||
|
|
Ładowanie…
Reference in New Issue