Add compatibility on groups export for Nextcloud 21 and lower

master
Florian Charlaix 3 years ago
parent 0a60556966
commit c20c4c8ae0
  1. 51
      scripts/groups_export.py

@ -9,24 +9,49 @@ def main(path : str, php :str, output_groups : str, output_group_folders : str):
if output_group_folders:
output_group_folders = Path(output_group_folders)
r = run([php, "occ", "-V"], cwd=path, check=True, stdout=PIPE, stderr=PIPE)
version = list(map(int, r.stdout.decode().split(" ")[-1].split(".")))
r = run([php, "occ", "config:list", "--private", "--output", "json"], cwd=path, check=True, stdout=PIPE, stderr=PIPE)
config = loads(r.stdout.decode().strip())
groups = {}
offset = 0
while True:
r = run([php, "occ", "group:list", "--offset", str(offset), "--info", "--output", "json"], cwd=path, check=True, stdout=PIPE, stderr=PIPE)
new_groups = loads(r.stdout.decode().strip())
if not new_groups:
break
for group in new_groups.keys():
r = run([php, "occ", "group:info", group, "--output", "json"], cwd=path, check=True, stdout=PIPE, stderr=PIPE)
infos = loads(r.stdout.decode().strip())
new_groups[group]["displayName"] = infos["displayName"]
if version[0] >= 22:
while True:
r = run([php, "occ", "group:list", "--offset", str(offset), "--info", "--output", "json"], cwd=path, check=True, stdout=PIPE, stderr=PIPE)
new_groups = loads(r.stdout.decode().strip())
if not new_groups:
break
for group in new_groups.keys():
r = run([php, "occ", "group:info", group, "--output", "json"], cwd=path, check=True, stdout=PIPE, stderr=PIPE)
infos = loads(r.stdout.decode().strip())
new_groups[group]["displayName"] = infos["displayName"]
groups.update(new_groups)
offset = len(groups)
groups.update(new_groups)
offset = len(groups)
else:
db_type = config["system"]["dbtype"]
db_host, db_port = config["system"]["dbhost"].split(":")
if not db_port:
db_port = config["system"]["dbport"]
db_user = config["system"]["dbuser"]
db_password = config["system"]["dbpassword"]
db_name = config["system"]["dbname"]
db_prefix = config["system"]["dbtableprefix"]
if db_type == "mysql":
r = run(["mysql", "-B", "-r", "--disable-column-names", "-h", db_host, "-P", db_port, "-u", db_user, f"-p{db_password}", "-e", f"select JSON_OBJECT('gid', gid, 'displayname', displayname) from {db_prefix}groups", db_name], cwd=path, check=True, stdout=PIPE, stderr=PIPE)
for l in map(loads, filter(lambda l: l != "", r.stdout.decode().split("\n"))):
groups[l["gid"]] = {"displayName": l["displayname"]}
elif db_type == "psql":
pass
elif db_type == "sqlite":
pass
print(f"Got {offset} groups")
print(f"Got {len(groups)} groups")
with output_groups.open("w") as f:
dump({k: v["displayName"] for (k, v) in groups.items()}, f)

Loading…
Cancel
Save