This commit is contained in:
2025-07-16 20:24:26 +05:00
commit c6d78e3648
8 changed files with 284 additions and 0 deletions

74
auth/app/main.py Normal file
View File

@ -0,0 +1,74 @@
from fastapi import FastAPI, Depends, HTTPException, Body
from fastapi.security import OAuth2PasswordBearer
from .models import UserCreate, UserLogin, ValidateRequest
from .auth import AuthService
from .database import users_collection
import os
from typing import Union
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI()
auth_service = AuthService()
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # Разрешить все домены
allow_methods=["*"],
allow_headers=["*"],
)
@app.get("/")
def api_root():
return {
"meta": {
"serverName": "Your Auth Server",
"implementationName": "FastAPI",
"implementationVersion": "1.0.0",
"links": {
"homepage": "https://your-server.com"
}
}
}
# Эндпоинты Mojang-like API
@app.post("/auth/register")
async def register(user: UserCreate):
return await auth_service.register(user)
@app.post("/auth/authenticate")
async def authenticate(credentials: UserLogin):
return await auth_service.login(credentials)
@app.post("/auth/validate")
async def validate_token(request: ValidateRequest):
is_valid = await auth_service.validate(request.accessToken, request.clientToken)
return {"valid": is_valid}
@app.post("/auth/refresh")
async def refresh_token(access_token: str, client_token: str):
result = await auth_service.refresh(access_token, client_token)
if not result:
raise HTTPException(status_code=401, detail="Invalid tokens")
return result
# Эндпоинт для проверки скинов (Minecraft использует его)
@app.get("/session/hasJoined")
async def has_joined(username: str, serverId: str):
user = await users_collection.find_one({"username": username})
if not user:
raise HTTPException(status_code=404, detail="User not found")
return {
"id": user["uuid"],
"name": username,
"properties": [
{
"name": "textures",
"value": "base64_encoded_skin_data", # Здесь можно добавить скины
}
],
}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)