export LINE_CHANNEL_SECRET="your_channel_secret"
export LINE_CHANNEL_ACCESS_TOKEN="your_access_token"
export TEST_MODE="true"pip install -r requirements.txt
ngrok http 8000python main.pyuvicorn main:app --host 0.0.0.0 --port 8000 --reload
python main.py --port 8000
sudo lsof -i :7000
kill -9 1234
| テストケース | コマンド | 期待結果 |
|---|---|---|
| ヘルプ表示 | help |
ヘルプメッセージ表示 |
| ユーザー登録 | register user1 api_key123 456 |
登録成功メッセージ |
| 時間計測開始 | start ProjectX |
開始確認メッセージ |
| ステータス確認 | status |
現在の状態表示 |
| 計測停止 | stop |
停止確認メッセージ |
server {
listen 443 ssl;
server_name yourdomain.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/privkey.pem;
location /webhook {
proxy_pass http://localhost:7000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}# 署名検証の実装箇所(既存コード)
@app.post("/webhook")
async def webhook(request: Request):
signature = request.headers.get("X-Line-Signature", "")
body = await request.body()
try:
handler.handle(body.decode(), signature) # 自動で署名検証
except InvalidSignatureError:
raise HTTPException(status_code=400, detail="Invalid signature")