Spaces:
Runtime error
Runtime error
import jwt | |
from fastapi import FastAPI, Header | |
from pydantic import BaseModel | |
from typing import Optional | |
import asyncio | |
import uvicorn | |
from RevisionBankModels import * | |
JWT_SECRET = "secret" # IRL we should NEVER hardcode the secret: it should be an evironment variable!!! | |
JWT_ALGORITHM = "HS256" | |
app = FastAPI() | |
class Auth(BaseModel): | |
name: str | |
password: str | |
class Person(BaseModel): | |
name: str | |
gender: Optional[str] = None | |
age: float | |
checked: Optional[bool] = None | |
async def root(person: Auth): | |
try: | |
person = dict(person) | |
access_token = secure_encode({"name":person}) | |
print(access_token) | |
# here we can add code to check the user (by email) | |
# e.g. select the user from the DB and see its permissions | |
return {"access_token":access_token} | |
except Exception as ex: | |
print(ex) | |
return "Unauthorized Access!" | |
# in this example we'll simply return the person entity from the request body | |
# after adding a "checked" | |
async def root(person: Person, authorization: str = Header(None)): | |
try: | |
decoded = secure_decode(authorization.replace("Bearer ","")) | |
# here we can add code to check the user (by email) | |
# e.g. select the user from the DB and see its permissions | |
print(decoded) | |
return {"message":"signed in"} | |
except: | |
return "Unauthorized Access!" | |
# in this example we'll simply return the person entity from the request body | |
# after adding a "checked" | |
# POST | |
def forgotpassword(data : GenericSingleObject): | |
data = dict(data) | |
print(data) | |
return {"message":"hi"} | |
def secure_encode(token): | |
# if we want to sign/encrypt the JSON object: {"hello": "world"}, we can do it as follows | |
# encoded = jwt.encode({"hello": "world"}, JWT_SECRET, algorithm=JWT_ALGORITHM) | |
encoded_token = jwt.encode(token, JWT_SECRET, algorithm=JWT_ALGORITHM) | |
# this is often used on the client side to encode the user's email address or other properties | |
return encoded_token | |
def secure_decode(token): | |
# if we want to sign/encrypt the JSON object: {"hello": "world"}, we can do it as follows | |
# encoded = jwt.encode({"hello": "world"}, JWT_SECRET, algorithm=JWT_ALGORITHM) | |
decoded_token = jwt.decode(token, JWT_SECRET, algorithms=JWT_ALGORITHM) | |
# this is often used on the client side to encode the user's email address or other properties | |
return decoded_token | |
async def main(): | |
config = uvicorn.Config("main:app", port=7860, log_level="info",host="0.0.0.0",reload=True) | |
server = uvicorn.Server(config) | |
await server.serve() | |
if __name__ == "__main__": | |
asyncio.run(main()) |