124 lines
4.1 KiB
Python
124 lines
4.1 KiB
Python
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()
|