Skip to content

Commit

Permalink
abstracted out piccolo functionality into token provider
Browse files Browse the repository at this point in the history
  • Loading branch information
dantownsend committed Nov 18, 2019
1 parent b506fc8 commit adad588
Showing 1 changed file with 32 additions and 7 deletions.
39 changes: 32 additions & 7 deletions piccolo_api/token_auth/endpoints.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
from abc import abstractmethod
import typing as t

from starlette.endpoints import HTTPEndpoint
from starlette.exceptions import HTTPException
from starlette.responses import JSONResponse
Expand All @@ -7,7 +10,32 @@
from .tables import TokenAuth


class TokenProvider:
"""
Subclass this to provide your own custom token provider.
"""

@abstractmethod
async def get_token(self, username: str, password: str) -> t.Optional[str]:
pass


class PiccoloTokenProvider(TokenProvider):
async def get_token(self, username: str, password: str) -> t.Optional[str]:
user = await BaseUser.login(username=username, password=password)
if user:
return (
TokenAuth.select(TokenAuth.token)
.first()
.where(TokenAuth.user == user)
)
return None


class TokenAuthLoginEndpoint(HTTPEndpoint):

token_provider: TokenProvider = PiccoloTokenProvider()

async def post(self, request: Request) -> JSONResponse:
"""
Return a token if the credentials are correct.
Expand All @@ -16,13 +44,10 @@ async def post(self, request: Request) -> JSONResponse:
username = json.get("username")
password = json.get("password")
if username and password:
user = await BaseUser.login(username=username, password=password)
if user:
token = (
TokenAuth.select(TokenAuth.token)
.first()
.where(TokenAuth.user == user)
)
token = await self.token_provider.get_token(
username=username, password=password
)
if token:
return JSONResponse({"token": token})
else:
raise HTTPException(
Expand Down

0 comments on commit adad588

Please sign in to comment.