-
-
Notifications
You must be signed in to change notification settings - Fork 108
Expand file tree
/
Copy pathconfig.py
More file actions
84 lines (67 loc) · 2.19 KB
/
config.py
File metadata and controls
84 lines (67 loc) · 2.19 KB
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
import asyncio
from fastapi import APIRouter, Depends, Request
from pydantic import BaseModel
from apis import security
from config import settings
from models.connection import Connection
from models.user import TeamUser
from utils.exception import ServiceError
from services import user as user_service
api = APIRouter(prefix="/config", tags=["config"])
class GetConfigInput(BaseModel):
secret_key: str
DEFAULT_CONFIG = """
server_url: {server_url}
ssh_url: {ssh_url}
secret_key: {secret_key}
enable_request_logging: false
tunnels:
- name: portr
subdomain: portr
port: 4321
""".strip()
SETUP_SCRIPT = """
portr auth set --token {token} --remote {server_url}
""".strip()
@api.post("/download")
async def download_config(data: GetConfigInput):
team_user = await user_service.get_team_user_by_secret_key(data.secret_key)
if not team_user:
raise ServiceError("Invalid secret key")
return {
"message": DEFAULT_CONFIG.format(
server_url=settings.server_url,
ssh_url=settings.ssh_url,
secret_key=team_user.secret_key,
)
}
@api.get("/setup-script")
async def setup_script(team_user: TeamUser = Depends(security.get_current_team_user)):
return {
"message": SETUP_SCRIPT.format(
token=team_user.secret_key, server_url=settings.server_url
)
}
@api.get("/stats")
async def get_stats(
request: Request, team_user: TeamUser = Depends(security.get_current_team_user)
):
team = team_user.team
total_connections_query = Connection.filter(team_id=team.id).count()
active_connections_query = Connection.filter(
team_id=team.id, status="active"
).count()
team_members_count = TeamUser.filter(team_id=team.id).count()
total_connections, active_connections, team_members = await asyncio.gather(
total_connections_query, active_connections_query, team_members_count
)
return {
"team_stats": {
"total_connections": total_connections,
"active_connections": active_connections,
"team_members": team_members,
},
"system_stats": {
"server_start_time": request.app.state.server_start_time,
},
}