feat: 支持 virtual app (#12199)

* feat: 支持 virtual app

* perf: 增加 virtual host

* perf: 新增 virtual app 上传接口

* perf: 更名为 app provider

* perf: 优化代码

---------

Co-authored-by: Eric <xplzv@126.com>
This commit is contained in:
fit2bot
2023-12-05 16:52:11 +08:00
committed by GitHub
parent a43bb25b5a
commit d2429f7883
25 changed files with 605 additions and 5 deletions

View File

@@ -113,6 +113,26 @@ class AppletMethod:
return methods
class VirtualAppMethod:
@classmethod
def get_methods(cls):
from .models import VirtualApp
methods = defaultdict(list)
if not getattr(settings, 'VIRTUAL_APP_ENABLED'):
return methods
virtual_apps = VirtualApp.objects.filter(is_active=True)
for virtual_app in virtual_apps:
for protocol in virtual_app.protocols:
methods[protocol].append({
'value': virtual_app.name,
'label': virtual_app.name,
'type': 'virtual_app',
'disabled': not virtual_app.is_active,
})
return methods
class ConnectMethodUtil:
_all_methods = {}
@@ -243,6 +263,7 @@ class ConnectMethodUtil:
methods = defaultdict(list)
spec_web_methods = WebMethod.get_spec_methods()
applet_methods = AppletMethod.get_methods()
virtual_app_methods = VirtualAppMethod.get_methods()
native_methods = NativeClient.get_methods(os=os)
for component, component_protocol in cls.components().items():
@@ -295,5 +316,12 @@ class ConnectMethodUtil:
method['component'] = TerminalType.tinker.value
methods[asset_protocol].extend(applet_methods)
# 虚拟应用方式,这个只有 panda 提供,并且协议可能是自定义的
for protocol, virtual_app_methods in virtual_app_methods.items():
for method in virtual_app_methods:
method['listen'] = Protocol.http
method['component'] = TerminalType.panda.value
methods[protocol].extend(virtual_app_methods)
cls._all_methods[os] = methods
return methods