Compare commits
6 Commits
a533ed4d1e
...
dev
| Author | SHA1 | Date | |
|---|---|---|---|
| 24c237fe2a | |||
| 91e78f40fc | |||
| 65caa1e9b5 | |||
| 89e2fe3630 | |||
| e2b2d41ecb | |||
| 72d1f6dd3f |
+17
@@ -0,0 +1,17 @@
|
||||
from sqlalchemy import create_engine, Column, String, DateTime
|
||||
from sqlalchemy.ext.declarative import declarative_base
|
||||
from sqlalchemy.orm import sessionmaker
|
||||
import datetime
|
||||
|
||||
SQLALCHEMY_DATABASE_URL = 'sqlite:///./test.db'
|
||||
|
||||
engine = create_engine(SQLALCHEMY_DATABASE_URL, connect_args={'check_same_thread': False})
|
||||
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
|
||||
Base = declarative_base()
|
||||
|
||||
class APIKey(Base):
|
||||
__tablename__ = 'api_keys'
|
||||
key = Column(String, primary_key=True, index=True)
|
||||
expires_at = Column(DateTime)
|
||||
|
||||
Base.metadata.create_all(bind=engine)
|
||||
@@ -0,0 +1,30 @@
|
||||
from fastapi import FastAPI, Header, HTTPException, Depends
|
||||
from sqlalchemy.orm import Session
|
||||
import datetime
|
||||
import uuid
|
||||
from database import SessionLocal, APIKey
|
||||
|
||||
app = FastAPI()
|
||||
|
||||
def get_db():
|
||||
db = SessionLocal()
|
||||
try:
|
||||
yield db
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
@app.get('/get-api-key')
|
||||
def get_api_key(db: Session = Depends(get_db)):
|
||||
new_key = str(uuid.uuid4())
|
||||
expires_at = datetime.datetime.utcnow() + datetime.timedelta(hours=24)
|
||||
db_key = APIKey(key=new_key, expires_at=expires_at)
|
||||
db.add(db_key)
|
||||
db.commit()
|
||||
return {'api_key': new_key, 'expires_at': expires_at}
|
||||
|
||||
@app.get('/hello')
|
||||
def read_hello(x_api_key: str = Header(...), db: Session = Depends(get_db)):
|
||||
db_key = db.query(APIKey).filter(APIKey.key == x_api_key).first()
|
||||
if not db_key or db_key.expires_at < datetime.datetime.utcnow():
|
||||
raise HTTPException(status_code=403, detail='Invalid or expired API Key')
|
||||
return {'message': 'Hello World'}
|
||||
Reference in New Issue
Block a user