-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathfetch_token
executable file
·107 lines (90 loc) · 3.19 KB
/
fetch_token
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#!/usr/bin/env python
"""Fetch a JWT from the Auth0 service acc. to the variables of the .env file.
Overwrite single variables using the respective command line options, or by specifying
another .env file to load.
"""
import argparse
import logging
import os
import sys
from pathlib import Path
SCRIPT_DIRPATH = Path(__file__).resolve().parent
TEST_DATA_DIRPATH = SCRIPT_DIRPATH / "test"
sys.path.insert(0, str(TEST_DATA_DIRPATH))
from auth import TEST_AUTH0_PASSWORD, TEST_AUTH0_USERNAME # type: ignore
from boxtribute_server.auth import request_jwt # type: ignore
from dotenv import load_dotenv
logger = logging.getLogger(__name__)
logger.addHandler(logging.StreamHandler())
def _create_cli_parser():
parser = argparse.ArgumentParser(description=globals()["__doc__"])
parser.add_argument("-u", "--username")
parser.add_argument("-p", "--password")
parser.add_argument("-d", "--dotenv-filepath")
parser.add_argument(
"-v", "--verbose", action="store_true", help="show env variables"
)
parser.add_argument(
"-t",
"--test",
action="store_true",
help="fetch JWT for test user, ignoring -u and -p options",
)
parser.add_argument(
"-m", "--management-api", action="store_true", help="fetch management API token"
)
return parser
def main():
parser = _create_cli_parser()
options = parser.parse_args()
if (
options.username is None
and options.password is None
and options.dotenv_filepath is None
and not options.test
and not options.management_api
):
# Exit with help message if no CLI arguments passed
parser.print_help()
raise SystemExit(0)
if options.verbose:
logger.setLevel(logging.DEBUG)
if options.dotenv_filepath is not None:
load_dotenv(options.dotenv_filepath, override=True)
for k, v in sorted(os.environ.items()):
if "AUTH0" in k:
logger.debug(f"{k}={v}")
parameters = dict(
audience=os.environ["AUTH0_AUDIENCE"],
domain=os.environ["AUTH0_DOMAIN"],
)
if options.test:
extras = dict(
client_id=os.environ["TEST_AUTH0_CLIENT_ID"],
client_secret=os.environ["TEST_AUTH0_CLIENT_SECRET"],
username=TEST_AUTH0_USERNAME,
password=TEST_AUTH0_PASSWORD,
)
elif options.management_api:
extras = dict(
client_id=os.environ["AUTH0_MANAGEMENT_API_CLIENT_ID"],
client_secret=os.environ["AUTH0_MANAGEMENT_API_CLIENT_SECRET"],
audience=os.environ["AUTH0_MANAGEMENT_API_AUDIENCE"],
grant_type="client_credentials",
username=None,
password=None,
)
else:
extras = dict(
client_id=os.environ["AUTH0_CLIENT_ID"],
client_secret=os.environ["AUTH0_CLIENT_SECRET"],
username=options.username or os.environ["AUTH0_USERNAME"],
password=options.password or os.environ["AUTH0_PASSWORD"],
)
parameters.update(extras)
success, result = request_jwt(**parameters)
if not success:
raise SystemExit(result)
return result["access_token"]
if __name__ == "__main__":
print(main())