Initial commit: xray-manager v0.2 with Debian 13 support
This commit is contained in:
@@ -0,0 +1,123 @@
|
||||
import argparse
|
||||
import sys
|
||||
|
||||
from . import handlers
|
||||
|
||||
|
||||
def build_parser() -> argparse.ArgumentParser:
|
||||
parser = argparse.ArgumentParser(prog="xray-manager")
|
||||
|
||||
subparsers = parser.add_subparsers(dest="group", required=True)
|
||||
|
||||
# ---------- user ----------
|
||||
user_parser = subparsers.add_parser("user")
|
||||
user_subparser = user_parser.add_subparsers(dest="command", required=True)
|
||||
|
||||
# user add
|
||||
user_add_parser = user_subparser.add_parser("add")
|
||||
user_add_parser.add_argument("username")
|
||||
user_add_parser.add_argument(
|
||||
"-c",
|
||||
"--connection",
|
||||
nargs="+",
|
||||
default=[],
|
||||
help="Connections to add, e.g. shadowsocks:ru1 vless:us1",
|
||||
)
|
||||
user_add_parser.set_defaults(handler=handlers.user_add)
|
||||
|
||||
# user show
|
||||
user_show_parser = user_subparser.add_parser("show")
|
||||
user_show_parser.add_argument("username", nargs="?")
|
||||
user_show_parser.add_argument("-a", "--all", action="store_true")
|
||||
user_show_parser.set_defaults(handler=handlers.user_show)
|
||||
|
||||
# user modify
|
||||
user_modify_parser = user_subparser.add_parser("modify")
|
||||
user_modify_parser.add_argument("username")
|
||||
user_modify_parser.add_argument(
|
||||
"-a",
|
||||
"--add",
|
||||
dest="to_add",
|
||||
nargs="+",
|
||||
default=[],
|
||||
metavar="SPEC",
|
||||
help="Connections to add",
|
||||
)
|
||||
user_modify_parser.add_argument(
|
||||
"-d",
|
||||
"--delete",
|
||||
dest="to_delete",
|
||||
nargs="+",
|
||||
default=[],
|
||||
metavar="SPEC",
|
||||
help="Connections to delete",
|
||||
)
|
||||
user_modify_parser.set_defaults(handler=handlers.user_modify)
|
||||
|
||||
# user delete
|
||||
user_delete_parser = user_subparser.add_parser("delete")
|
||||
group = user_delete_parser.add_mutually_exclusive_group(required=True)
|
||||
group.add_argument("username", nargs="?")
|
||||
group.add_argument("-a", "--all", action="store_true")
|
||||
user_delete_parser.set_defaults(handler=handlers.user_delete)
|
||||
|
||||
# -------- profile ---------
|
||||
profile_parser = subparsers.add_parser("profile")
|
||||
profile_subparser = profile_parser.add_subparsers(
|
||||
dest="command", required=True
|
||||
)
|
||||
|
||||
# profile build
|
||||
profile_build_parser = profile_subparser.add_parser("build")
|
||||
group = profile_build_parser.add_mutually_exclusive_group(required=True)
|
||||
group.add_argument("username", nargs="?")
|
||||
group.add_argument("-a", "--all", action="store_true")
|
||||
profile_build_parser.set_defaults(handler=handlers.profile_build)
|
||||
|
||||
# profile show
|
||||
profile_show_parser = profile_subparser.add_parser("show")
|
||||
group = profile_show_parser.add_mutually_exclusive_group(required=True)
|
||||
group.add_argument("username", nargs="?")
|
||||
group.add_argument("-a", "--all", action="store_true")
|
||||
profile_show_parser.set_defaults(handler=handlers.profile_show)
|
||||
|
||||
# profile clear
|
||||
profile_clear_parser = profile_subparser.add_parser("clear")
|
||||
group = profile_clear_parser.add_mutually_exclusive_group(required=True)
|
||||
group.add_argument("username", nargs="?")
|
||||
group.add_argument("-a", "--all", action="store_true")
|
||||
profile_clear_parser.set_defaults(handler=handlers.profile_clear)
|
||||
|
||||
# profile delete
|
||||
profile_delete_parser = profile_subparser.add_parser("delete")
|
||||
group = profile_delete_parser.add_mutually_exclusive_group(required=True)
|
||||
group.add_argument("username", nargs="?")
|
||||
group.add_argument("-a", "--all", action="store_true")
|
||||
profile_delete_parser.set_defaults(handler=handlers.profile_delete)
|
||||
|
||||
# profile qrcode
|
||||
profile_qrcode_parser = profile_subparser.add_parser("qrcode")
|
||||
group = profile_qrcode_parser.add_mutually_exclusive_group(required=True)
|
||||
group.add_argument("username", nargs="?")
|
||||
group.add_argument("-a", "--all", action="store_true")
|
||||
profile_qrcode_parser.set_defaults(handler=handlers.profile_qrcode)
|
||||
|
||||
return parser
|
||||
|
||||
|
||||
def main():
|
||||
parser = build_parser()
|
||||
|
||||
try:
|
||||
args = parser.parse_args()
|
||||
func = args.handler
|
||||
kwargs = vars(args)
|
||||
kwargs.pop("handler")
|
||||
func(**kwargs)
|
||||
except ValueError as e:
|
||||
print(e, file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user