gitscope
https://dev.kronoz.win/r/marzneshin.git
app/marznode/operations.py · v0.3.1
Source
1 49457ba Dawsh 2y ago import asyncio
2 12b255b Dawsh 2y ago from collections import defaultdict
3 12b255b Dawsh 2y ago from typing import TYPE_CHECKING
4 12b255b Dawsh 2y ago
5 12b255b Dawsh 2y ago from app import marznode
6 8372786 Dawsh 2y ago from .grpcio import MarzNodeGRPCIO
7 8372786 Dawsh 2y ago from .grpclib import MarzNodeGRPCLIB
8 f6a32ea Dawsh 2y ago from ..models.node import NodeConnectionBackend
9 12b255b Dawsh 2y ago
10 12b255b Dawsh 2y ago if TYPE_CHECKING:
11 12b255b Dawsh 2y ago from app.db import User as DBUser
12 12b255b Dawsh 2y ago
13 12b255b Dawsh 2y ago
14 d377c4c Dawsh 2y ago def update_user(
15 d377c4c Dawsh 2y ago user: "DBUser", old_inbounds: set | None = None, remove: bool = False
16 d377c4c Dawsh 2y ago ):
17 d377c4c Dawsh 2y ago """updates a user on all related nodes"""
18 f6a32ea Dawsh 2y ago if old_inbounds is None:
19 f6a32ea Dawsh 2y ago old_inbounds = set()
20 34a7612 Dawsh 2y ago
21 f6a32ea Dawsh 2y ago node_inbounds = defaultdict(list)
22 d377c4c Dawsh 2y ago if remove:
23 f6a32ea Dawsh 2y ago for inb in user.inbounds:
24 d377c4c Dawsh 2y ago node_inbounds[inb.node_id]
25 f6a32ea Dawsh 2y ago else:
26 f6a32ea Dawsh 2y ago for inb in user.inbounds:
27 d377c4c Dawsh 2y ago node_inbounds[inb.node_id].append(inb.tag)
28 12b255b Dawsh 2y ago
29 f6a32ea Dawsh 2y ago for inb in old_inbounds:
30 f6a32ea Dawsh 2y ago node_inbounds[inb[0]]
31 12b255b Dawsh 2y ago
32 f6a32ea Dawsh 2y ago for node_id, tags in node_inbounds.items():
33 d6e2aad Dawsh 2y ago if marznode.nodes.get(node_id):
34 d377c4c Dawsh 2y ago asyncio.ensure_future(
35 49457ba Dawsh 2y ago marznode.nodes[node_id].update_user(user=user, inbounds=tags)
36 49457ba Dawsh 2y ago )
37 d6e2aad Dawsh 2y ago
38 d6e2aad Dawsh 2y ago
39 d6e2aad Dawsh 2y ago async def remove_user(user: "DBUser"):
40 c7e6427 Dawsh 2y ago node_ids = set(inb.node_id for inb in user.inbounds)
41 d6e2aad Dawsh 2y ago
42 d6e2aad Dawsh 2y ago for node_id in node_ids:
43 d6e2aad Dawsh 2y ago if marznode.nodes.get(node_id):
44 d377c4c Dawsh 2y ago asyncio.ensure_future(
45 d377c4c Dawsh 2y ago marznode.nodes[node_id].update_user(user=user, inbounds=[])
46 d377c4c Dawsh 2y ago )
47 12b255b Dawsh 2y ago
48 12b255b Dawsh 2y ago
49 12b255b Dawsh 2y ago async def remove_node(node_id: int):
50 12b255b Dawsh 2y ago if node_id in marznode.nodes:
51 12b255b Dawsh 2y ago del marznode.nodes[node_id]
52 12b255b Dawsh 2y ago
53 12b255b Dawsh 2y ago
54 f6a32ea Dawsh 2y ago async def add_node(db_node, certificate):
55 f6a32ea Dawsh 2y ago await remove_node(db_node.id)
56 f6a32ea Dawsh 2y ago if db_node.connection_backend == NodeConnectionBackend.grpcio:
57 49457ba Dawsh 2y ago node = MarzNodeGRPCIO(
58 49457ba Dawsh 2y ago db_node.id,
59 49457ba Dawsh 2y ago db_node.address,
60 49457ba Dawsh 2y ago db_node.port,
61 49457ba Dawsh 2y ago usage_coefficient=db_node.usage_coefficient,
62 49457ba Dawsh 2y ago )
63 f6a32ea Dawsh 2y ago else:
64 01cdf2e Dawsh 2y ago node = MarzNodeGRPCLIB(
65 01cdf2e Dawsh 2y ago db_node.id,
66 01cdf2e Dawsh 2y ago db_node.address,
67 01cdf2e Dawsh 2y ago db_node.port,
68 01cdf2e Dawsh 2y ago certificate.key,
69 01cdf2e Dawsh 2y ago certificate.certificate,
70 49457ba Dawsh 2y ago usage_coefficient=db_node.usage_coefficient,
71 01cdf2e Dawsh 2y ago )
72 f6a32ea Dawsh 2y ago marznode.nodes[db_node.id] = node
73 12b255b Dawsh 2y ago
74 12b255b Dawsh 2y ago
75 01cdf2e Dawsh 2y ago __all__ = ["update_user", "add_node", "remove_node"]