Compare commits
No commits in common. "1e772e7034835ee946de889d602bfd75e083009f" and "29b15f07b7d7b7a31ec7a50a964adaa816e87dba" have entirely different histories.
1e772e7034
...
29b15f07b7
|
@ -160,4 +160,3 @@ cython_debug/
|
||||||
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
||||||
#.idea/
|
#.idea/
|
||||||
|
|
||||||
config.yml
|
|
||||||
|
|
|
@ -1,13 +0,0 @@
|
||||||
from pydantic import BaseModel, field_validator
|
|
||||||
from typing import Optional
|
|
||||||
|
|
||||||
class PlayerSubscription(BaseModel):
|
|
||||||
username: str
|
|
||||||
expiry: Optional[int] = None
|
|
||||||
|
|
||||||
@field_validator('expiry')
|
|
||||||
@classmethod
|
|
||||||
def expiry_must_be_positive_int(cls, v):
|
|
||||||
if v is not None and not isinstance(v, int) or v < 0:
|
|
||||||
raise ValueError('Expiry must be a positive integer')
|
|
||||||
return v
|
|
27
db.py
27
db.py
|
@ -1,27 +0,0 @@
|
||||||
import aiomysql
|
|
||||||
from utils import get_parameters
|
|
||||||
|
|
||||||
class MySQLDB:
|
|
||||||
def __init__(self):
|
|
||||||
self.pool = None
|
|
||||||
self.parameters = get_parameters()
|
|
||||||
print(self.parameters)
|
|
||||||
async def connect(self):
|
|
||||||
self.pool = await aiomysql.create_pool(
|
|
||||||
host=self.parameters["host"],
|
|
||||||
port=self.parameters["port"],
|
|
||||||
user=self.parameters["user"],
|
|
||||||
password=self.parameters["password"],
|
|
||||||
db=self.parameters["db"],
|
|
||||||
autocommit=True
|
|
||||||
)
|
|
||||||
|
|
||||||
async def close(self):
|
|
||||||
self.pool.close()
|
|
||||||
await self.pool.wait_closed()
|
|
||||||
|
|
||||||
async def execute(self, query, *args):
|
|
||||||
async with self.pool.acquire() as conn:
|
|
||||||
async with conn.cursor() as cur:
|
|
||||||
await cur.execute(query, args)
|
|
||||||
return await cur.fetchall()
|
|
31
main.py
31
main.py
|
@ -1,31 +0,0 @@
|
||||||
from fastapi import FastAPI, HTTPException
|
|
||||||
from db import MySQLDB
|
|
||||||
from PlayerSubscription import PlayerSubscription
|
|
||||||
|
|
||||||
app = FastAPI()
|
|
||||||
db = MySQLDB()
|
|
||||||
|
|
||||||
@app.post("/subscribe")
|
|
||||||
async def subscribe(player_data: PlayerSubscription):
|
|
||||||
await db.connect()
|
|
||||||
try:
|
|
||||||
|
|
||||||
uuid_query = "SELECT uuid FROM luckperms_players WHERE username = %s"
|
|
||||||
result = await db.execute(uuid_query, player_data.username)
|
|
||||||
if not result:
|
|
||||||
raise HTTPException(status_code=404, detail="Player not found")
|
|
||||||
uuid = result[0][0]
|
|
||||||
|
|
||||||
subscription_query = """
|
|
||||||
INSERT INTO luckperms_user_permissions (uuid, permission, value, server, world, expiry, contexts)
|
|
||||||
VALUES (%s, %s, %s, %s, %s, %s, %s)
|
|
||||||
"""
|
|
||||||
await db.execute(subscription_query, uuid, 'group.subscribe', 1, 'global', 'global', player_data.expiry, "{}")
|
|
||||||
finally:
|
|
||||||
await db.close()
|
|
||||||
|
|
||||||
return {"message": "Subscription added successfully"}
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
import uvicorn
|
|
||||||
uvicorn.run(app, host="0.0.0.0", port=8000)
|
|
17
utils.py
17
utils.py
|
@ -1,17 +0,0 @@
|
||||||
import yaml
|
|
||||||
|
|
||||||
def read_config(config_file):
|
|
||||||
with open(config_file, 'r') as file:
|
|
||||||
config = yaml.safe_load(file)
|
|
||||||
return config
|
|
||||||
|
|
||||||
def get_parameters():
|
|
||||||
parameters = {}
|
|
||||||
config = read_config('config.yml')
|
|
||||||
for key, value in config.items():
|
|
||||||
if isinstance(value, dict):
|
|
||||||
for sub_key, sub_value in value.items():
|
|
||||||
parameters[f'{key}_{sub_key}'] = sub_value
|
|
||||||
else:
|
|
||||||
parameters[key] = value
|
|
||||||
return parameters
|
|
Loading…
Reference in New Issue