62 lines
2.0 KiB
Python
62 lines
2.0 KiB
Python
from __future__ import annotations
|
|
|
|
from datetime import datetime, timedelta, timezone
|
|
|
|
from app.schemas.remnawave import RemnawaveUser
|
|
|
|
|
|
def make_remote_user(
|
|
*,
|
|
user_uuid: str,
|
|
user_id: int,
|
|
short_uuid: str,
|
|
username: str,
|
|
telegram_id: int | None,
|
|
expire_at: datetime | None = None,
|
|
traffic_limit_bytes: int = 0,
|
|
) -> RemnawaveUser:
|
|
now = datetime.now(timezone.utc).replace(microsecond=0)
|
|
expire = expire_at or (now + timedelta(days=30))
|
|
|
|
return RemnawaveUser.model_validate(
|
|
{
|
|
"uuid": user_uuid,
|
|
"id": user_id,
|
|
"shortUuid": short_uuid,
|
|
"username": username,
|
|
"status": "ACTIVE",
|
|
"trafficLimitBytes": traffic_limit_bytes,
|
|
"expireAt": expire.isoformat().replace("+00:00", "Z"),
|
|
"telegramId": telegram_id,
|
|
"email": None,
|
|
"description": None,
|
|
"tag": "BOT",
|
|
"hwidDeviceLimit": None,
|
|
"externalSquadUuid": None,
|
|
"trojanPassword": f"trojan-{user_id}",
|
|
"vlessUuid": f"00000000-0000-0000-0000-{user_id:012d}",
|
|
"ssPassword": f"ss-{user_id}",
|
|
"lastTriggeredThreshold": 0,
|
|
"subRevokedAt": None,
|
|
"subLastUserAgent": None,
|
|
"subLastOpenedAt": None,
|
|
"lastTrafficResetAt": None,
|
|
"createdAt": now.isoformat().replace("+00:00", "Z"),
|
|
"updatedAt": now.isoformat().replace("+00:00", "Z"),
|
|
"subscriptionUrl": f"https://example.com/sub/{short_uuid}",
|
|
"activeInternalSquads": [
|
|
{
|
|
"uuid": "11111111-1111-1111-1111-111111111111",
|
|
"name": "VPN",
|
|
}
|
|
],
|
|
"userTraffic": {
|
|
"usedTrafficBytes": 0,
|
|
"lifetimeUsedTrafficBytes": 0,
|
|
"onlineAt": None,
|
|
"firstConnectedAt": None,
|
|
"lastConnectedNodeUuid": None,
|
|
},
|
|
}
|
|
)
|