mirror of
https://github.com/LorenEteval/Furious.git
synced 2026-09-22 23:08:08 +03:00
71 lines
2.2 KiB
Python
71 lines
2.2 KiB
Python
# Copyright (C) 2024–present Loren Eteval & contributors <loren.eteval@proton.me>
|
||
#
|
||
# This file is part of Furious.
|
||
#
|
||
# This program is free software: you can redistribute it and/or modify
|
||
# it under the terms of the GNU General Public License as published by
|
||
# the Free Software Foundation, either version 3 of the License, or
|
||
# (at your option) any later version.
|
||
#
|
||
# This program is distributed in the hope that it will be useful,
|
||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
# GNU General Public License for more details.
|
||
#
|
||
# You should have received a copy of the GNU General Public License
|
||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||
|
||
"""Provide lazily imported Xray protocol editors."""
|
||
|
||
from __future__ import annotations
|
||
|
||
from Furious.Plugins.API import ProtocolEditorProvider
|
||
|
||
from importlib import import_module
|
||
|
||
__all__ = ['XRAY_PROTOCOL_EDITORS']
|
||
|
||
|
||
class XrayProtocolEditors(ProtocolEditorProvider):
|
||
"""Create the editor registered for each supported Xray protocol."""
|
||
|
||
editorId = 'official.xray.editors'
|
||
protocolIds = ('vmess', 'vless', 'shadowsocks', 'trojan', 'socks')
|
||
_editors = {
|
||
'vmess': (
|
||
'Furious.Backends.Xray.VmessEditor',
|
||
'VmessEditor',
|
||
),
|
||
'vless': (
|
||
'Furious.Backends.Xray.VlessEditor',
|
||
'VlessEditor',
|
||
),
|
||
'shadowsocks': (
|
||
'Furious.Backends.Xray.ShadowsocksEditor',
|
||
'ShadowsocksEditor',
|
||
),
|
||
'trojan': (
|
||
'Furious.Backends.Xray.TrojanEditor',
|
||
'TrojanEditor',
|
||
),
|
||
'socks': (
|
||
'Furious.Backends.Xray.SocksEditor',
|
||
'SocksEditor',
|
||
),
|
||
}
|
||
|
||
def createEditor(self, protocolId: str, parent=None, **kwargs):
|
||
"""Load and create the requested Xray editor on demand."""
|
||
editor = self._editors.get(protocolId.casefold())
|
||
|
||
if editor is None:
|
||
return None
|
||
|
||
moduleName, typeName = editor
|
||
editorType = getattr(import_module(moduleName), typeName)
|
||
|
||
return editorType(parent=parent, **kwargs)
|
||
|
||
|
||
XRAY_PROTOCOL_EDITORS = (XrayProtocolEditors(),)
|