Skip to content

Commit aaeb1b6

Browse files
committed
Adds consistent CLI for running the server and adding users.
1 parent a8263fd commit aaeb1b6

File tree

3 files changed

+98
-34
lines changed

3 files changed

+98
-34
lines changed

intelmq/__main__.py

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
# SPDX-FileCopyrightText: 2023 Filip Pokorný
2+
# SPDX-License-Identifier: AGPL-3.0-or-later
3+
4+
import argparse
5+
import getpass
6+
import sys
7+
8+
from intelmq import __version__
9+
from intelmq.app.api.session import SessionStore
10+
from intelmq.app.server import run
11+
from intelmq.bin.intelmqctl import IntelMQController, ReturnType
12+
from intelmq.app.config import Config
13+
14+
ARGPARSER_EPILOG = """\
15+
Run 'intelmq COMMAND --help' for more information on a command.
16+
17+
For more help on how to use IntelMQ, head to https://docs.intelmq.org/
18+
"""
19+
20+
21+
def print_version(*args, **kwargs):
22+
print(__version__)
23+
24+
25+
def server_start(host: str = None, port: int = None, debug: bool = None, no_check: bool = False, *args, **kwargs):
26+
27+
if not no_check and IntelMQController(no_file_logging=True).check()[0]:
28+
return 1
29+
30+
return run(
31+
host=host,
32+
port=port,
33+
debug=debug
34+
)
35+
36+
37+
def server_adduser(username: str, password: str = None, *args, **kwargs):
38+
config = Config()
39+
40+
if config.session_store is None:
41+
sys.exit("Could not add user - no session store configured in configuration!")
42+
43+
session_store = SessionStore(str(config.session_store), config.session_duration)
44+
password = getpass.getpass() if password is None else password
45+
session_store.add_user(username, password)
46+
print(f"Added user {username} to intelmq session file.")
47+
48+
49+
def intelmq_api_adduser():
50+
"""
51+
Backwards compatibility for 'intelmq-api-adduser' script.
52+
"""
53+
if sys.argv[0].endswith("intelmq-api-adduser"):
54+
sys.argv[0] = "intelmq"
55+
sys.argv.insert(1, "server")
56+
sys.argv.insert(2, "adduser")
57+
main()
58+
59+
60+
def main():
61+
parser = argparse.ArgumentParser(prog="intelmq", usage="intelmq [OPTIONS] COMMAND", epilog=ARGPARSER_EPILOG,
62+
formatter_class=argparse.RawDescriptionHelpFormatter)
63+
parser.set_defaults(func=(lambda *_, **__: parser.print_help())) # wrapper to accept args and kwargs
64+
parser._optionals.title = "Options"
65+
parser.add_argument("-v", "--version", action="store_true", help="print version and exit", default=None)
66+
commands = parser.add_subparsers(metavar="", title="Commands")
67+
68+
# intelmq server
69+
srv_parser = commands.add_parser("server", help="control IntelMQ server", usage="intelmq server [COMMAND]")
70+
srv_parser.set_defaults(func=(lambda *_, **__: srv_parser.print_help())) # wrapper to accept args and kwargs
71+
srv_parser._optionals.title = "Options"
72+
srv_subcommands = srv_parser.add_subparsers(metavar="", title="Commands")
73+
74+
# intelmq server start
75+
srv_start = srv_subcommands.add_parser("start", help="start the server", usage="intelmq server start [OPTIONS]")
76+
srv_start.set_defaults(func=server_start)
77+
srv_start._optionals.title = "Options"
78+
srv_start.add_argument("--debug", action="store_true", dest="debug", default=None)
79+
srv_start.add_argument("--host", type=str, dest="host")
80+
srv_start.add_argument("--port", type=int, dest="port")
81+
srv_start.add_argument("--no-check", action="store_true")
82+
83+
# intelmq server adduser
84+
srv_adduser = srv_subcommands.add_parser("adduser", help="adds new user", usage="intelmq server adduser [OPTIONS]")
85+
srv_adduser.set_defaults(func=server_adduser)
86+
srv_adduser._optionals.title = "Options"
87+
srv_adduser.add_argument('--username', required=True, help='the username of the account', type=str)
88+
srv_adduser.add_argument('--password', required=False, help='the password of the account', type=str)
89+
90+
args = parser.parse_args()
91+
args.func = print_version if args.version else args.func
92+
return args.func(**vars(args))
93+
94+
95+
if __name__ == "__main__":
96+
main()

scripts/intelmq-api-adduser

Lines changed: 0 additions & 34 deletions
This file was deleted.

setup.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,8 @@
109109
'intelmqdump = intelmq.bin.intelmqdump:main',
110110
'intelmq_psql_initdb = intelmq.bin.intelmq_psql_initdb:main',
111111
'intelmqsetup = intelmq.bin.intelmqsetup:main',
112+
'intelmq-api-adduser = intelmq.__main__:intelmq_api_adduser',
113+
'intelmq = intelmq.__main__:main'
112114
] + BOTS,
113115
},
114116
)

0 commit comments

Comments
 (0)