File size: 3,394 Bytes
02ebbc8
 
794b90b
 
02ebbc8
c8e2a8d
 
794b90b
 
b8c8e0a
794b90b
 
1a1dee2
794b90b
de235e2
f669ed4
1afbeb8
f669ed4
6363664
de235e2
 
57b26e3
 
 
 
 
 
 
 
 
794b90b
57b26e3
 
 
 
 
 
 
 
b2add11
b8c8e0a
 
b2add11
b8c8e0a
b2add11
b8c8e0a
 
b2add11
b8c8e0a
c8e2a8d
 
 
 
 
b2add11
c8e2a8d
 
57b26e3
e17336e
 
794b90b
 
 
 
 
 
e17336e
 
 
 
57b26e3
b8c8e0a
 
c8e2a8d
b8c8e0a
cf75111
b8c8e0a
c8e2a8d
b8c8e0a
 
c8e2a8d
794b90b
c8e2a8d
794b90b
 
 
b8c8e0a
c8e2a8d
 
 
794b90b
 
 
 
05165b5
c8e2a8d
 
794b90b
 
 
 
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
90
91
92
93
94
95
96
97
98
99
100
101
102
import os
from django.core.asgi import get_asgi_application
from fastapi import FastAPI, Request, Depends, HTTPException, status
from fastapi.security import HTTPBasic, HTTPBasicCredentials
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates
from starlette.middleware.cors import CORSMiddleware
from starlette.middleware.base import BaseHTTPMiddleware
from starlette.responses import JSONResponse, RedirectResponse
import gradio as gr
import secrets

from mysite.routers.gradio import setup_gradio_interfaces
from mysite.routers.fastapi import setup_webhook_routes, include_routers
from mysite.routers.database import setup_database_routes
from mysite.config.asgi_config import init_django_app
from interpreter import interpreter
import mysite.interpreter.interpreter_config  # インポートするだけで設定が適用されます
# ロガーの設定
from mysite.logger import logger

security = HTTPBasic()

# ベーシック認証のユーザー名とパスワード
users = {
    "username1": "password1",
    "username2": "password2"
}

def authenticate(credentials: HTTPBasicCredentials = Depends(security)):
    correct_username = credentials.username in users
    correct_password = secrets.compare_digest(credentials.password, users[credentials.username]) if correct_username else False
    if not (correct_username and correct_password):
        raise HTTPException(
            status_code=status.HTTP_401_UNAUTHORIZED,
            detail="Invalid credentials",
            headers={"WWW-Authenticate": "Basic"},
        )
    return credentials.username

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
application = get_asgi_application()

app = FastAPI()

# Djangoアプリケーションの初期化
init_django_app(app, application)

# ミドルウェアの設定
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

# 認証用ミドルウェア
class BasicAuthMiddleware(BaseHTTPMiddleware):
    async def dispatch(self, request, call_next):
        if request.url.path.startswith("/gradio"):
            credentials = security(request)
            try:
                authenticate(credentials)
            except HTTPException as exc:
                return JSONResponse(status_code=exc.status_code, content={"detail": exc.detail})
        response = await call_next(request)
        return response

app.add_middleware(BasicAuthMiddleware)

# Gradioインターフェースの設定
gradio_interfaces = setup_gradio_interfaces()

# Webhookルートの設定
include_routers(app)
setup_webhook_routes(app)

# データベースルートの設定
setup_database_routes(app)

# 静的ファイルのマウント
app.mount("/static", StaticFiles(directory="static", html=True), name="static")

# Gradioアプリのマウント
app = gr.mount_gradio_app(app, gradio_interfaces, "/gradio")

# テンプレートファイルが格納されているディレクトリを指定
templates = Jinja2Templates(directory="static")

@app.get("/")
def read_root():
    return RedirectResponse(url="/gradio")

@app.get("/test")
def get_some_page(request: Request):
    return templates.TemplateResponse("index.html", {"request": request})

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)