21700: Install Bundler system-wide in Rails postinst
[arvados.git] / tools / arvbox / lib / arvbox / docker / edit_users.py
1 #!/opt/arvados-py/bin/python3
2 # Copyright (C) The Arvados Authors. All rights reserved.
3 #
4 # SPDX-License-Identifier: AGPL-3.0
5
6 import ruamel.yaml
7 import sys
8 import getpass
9 import os
10
11 def print_help():
12     print("%s <path/to/config.yaml> <clusterid> add <username> <email> [pass]" % (sys.argv[0]))
13     print("%s <path/to/config.yaml> <clusterid> remove <username>" % (" " * len(sys.argv[0])))
14     print("%s <path/to/config.yaml> <clusterid> list" % (" " * len(sys.argv[0])))
15     exit()
16
17 if len(sys.argv) < 4:
18     print_help()
19
20 fn = sys.argv[1]
21 cl = sys.argv[2]
22 op = sys.argv[3]
23
24 if op == "remove" and len(sys.argv) < 5:
25     print_help()
26 if op == "add" and len(sys.argv) < 6:
27     print_help()
28
29 if op in ("add", "remove"):
30     user = sys.argv[4]
31
32 if not os.path.exists(fn):
33     open(fn, "w").close()
34
35 with open(fn, "r") as f:
36     conf = ruamel.yaml.round_trip_load(f)
37
38 if not conf:
39     conf = {}
40
41 conf["Clusters"] = conf.get("Clusters", {})
42 conf["Clusters"][cl] = conf["Clusters"].get(cl, {})
43 conf["Clusters"][cl]["Login"] = conf["Clusters"][cl].get("Login", {})
44 conf["Clusters"][cl]["Login"]["Test"] = conf["Clusters"][cl]["Login"].get("Test", {})
45 conf["Clusters"][cl]["Login"]["Test"]["Users"] = conf["Clusters"][cl]["Login"]["Test"].get("Users", {})
46
47 users_obj = conf["Clusters"][cl]["Login"]["Test"]["Users"]
48
49 if op == "add":
50     email = sys.argv[5]
51     if len(sys.argv) == 7:
52         p = sys.argv[6]
53     else:
54         p = getpass.getpass("Password for %s: " % user)
55
56     users_obj[user] = {
57         "Email": email,
58         "Password": p
59     }
60     print("Added %s" % user)
61 elif op == "remove":
62     del users_obj[user]
63     print("Removed %s" % user)
64 elif op == "list":
65     print(ruamel.yaml.round_trip_dump(users_obj))
66 else:
67     print("Operations are 'add', 'remove' and 'list'")
68
69 with open(fn, "w") as f:
70     f.write(ruamel.yaml.round_trip_dump(conf))