-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
89 lines (72 loc) · 2.43 KB
/
main.py
File metadata and controls
89 lines (72 loc) · 2.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import asyncio
import os
import re
from ipaddress import ip_address
from typing import Callable
import uvicorn
import redis.asyncio as redis
from fastapi import FastAPI, BackgroundTasks, Request, status
from fastapi.responses import JSONResponse
from fastapi.staticfiles import StaticFiles
from starlette.middleware.cors import CORSMiddleware
from fastapi_limiter import FastAPILimiter
from src.conf.config import config
from src.routes import todos, auth, users
app = FastAPI()
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# ALLOWED_IPS = [ip_address('192.168.1.0'), ip_address('172.16.0.0'), ip_address("127.0.0.1")]
#
#
# @app.middleware("http")
# async def limit_access_by_ip(request: Request, call_next: Callable):
# ip = ip_address(request.client.host)
# print(ip)
# if ip not in ALLOWED_IPS:
# return JSONResponse(status_code=status.HTTP_403_FORBIDDEN, content={"detail": "Not allowed IP address"})
# response = await call_next(request)
# return response
#
#
# user_agent_ban_list = [r"Python-urllib"]
#
#
# @app.middleware("http")
# async def user_agent_ban_middleware(request: Request, call_next: Callable):
# user_agent = request.headers.get("user-agent")
# print(user_agent)
# for ban_pattern in user_agent_ban_list:
# if re.search(ban_pattern, user_agent):
# return JSONResponse(status_code=status.HTTP_403_FORBIDDEN, content={"detail": "You are banned"})
# response = await call_next(request)
# return response
app.mount("/static", StaticFiles(directory="src/static"), name="static")
app.include_router(auth.router)
app.include_router(todos.router, prefix="/api")
app.include_router(users.router, prefix="/api")
async def task():
await asyncio.sleep(3)
print("Send email")
return True
@app.get("/")
async def read_root(background_tasks: BackgroundTasks):
background_tasks.add_task(task)
return {"message": "TODO API"}
@app.on_event("startup")
async def startup():
print(config.redis_host,config.redis_port,config.redis_password)
r = await redis.Redis(
host=config.redis_host,
port=config.redis_port,
db=0,
encoding="utf-8",
password=config.redis_password,
)
await FastAPILimiter.init(r)
if __name__ == "__main__":
uvicorn.run("main:app", host="0.0.0.0", port=int(os.environ.get("PORT")), log_level="info")