From d708be7478d9a65775d89c6498c4c148e3bda096 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20L=C3=BCrenbaum?= <luis.luerenbaum@redbots.de> Date: Fri, 27 Sep 2024 11:13:37 +0200 Subject: [PATCH] feat: Added option to upload random profile pictures when importing users from a file. --- lib/import_user.py | 21 +++++++++++++++++++-- lib/random_user.py | 2 +- user_import_udm_rest_api.py | 3 ++- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/lib/import_user.py b/lib/import_user.py index 9fd169e..9ca95ec 100644 --- a/lib/import_user.py +++ b/lib/import_user.py @@ -1,6 +1,9 @@ # SPDX-FileCopyrightText: 2023 Bundesministerium des Innern und für Heimat, PG ZenDiS "Projektgruppe für Aufbau ZenDiS" # SPDX-License-Identifier: Apache-2.0 +import base64 +import glob +import random import re import sys import logging @@ -8,7 +11,8 @@ import pandas as pd class ImportUser: - def __init__(self, callback, import_filename, create_admin_accounts = False): + def __init__(self, callback, import_filename, create_admin_accounts = False, use_images = False): + self.input_dir_imgs_base = "./data/images_" self.input_file = import_filename self.skip_rows = 0 self.columnnames_map = { @@ -80,8 +84,21 @@ class ImportUser: if 'organisation' not in person or pd.isna(person['organisation']): person['organisation'] = person['email'].rpartition('@')[-1] person['is_admin'] = False + if use_images: + person["jpegPhoto"] = self.__get_image() callback(person) if create_admin_accounts: person['username'] = person['username']+'-admin' person['is_admin'] = True - callback(person) \ No newline at end of file + callback(person) + + def __get_image(self): + if (not hasattr(self, "input_filelist_img_list")): + self.input_filelist_img_list= [] + if (len(self.input_filelist_img_list) == 0): + for gender in ("m", "f"): + self.input_filelist_img_list.extend(glob.glob(self.input_dir_imgs_base+gender+'/*.jpg')) + + selected_image = random.choice(self.input_filelist_img_list) + with open(selected_image, "rb") as image_file: + return base64.b64encode(image_file.read()).decode() \ No newline at end of file diff --git a/lib/random_user.py b/lib/random_user.py index 957f8c9..406dddf 100644 --- a/lib/random_user.py +++ b/lib/random_user.py @@ -49,7 +49,7 @@ class RandomUser: def __get_random_list_entry(self, category): if not category in self.lists: - with open(self.input_files_list[category]) as f: + with open(self.input_files_list[category], encoding="utf-8") as f: lines_with_comments = f.read().splitlines() self.lists[category] = [entry for entry in lines_with_comments if not entry.startswith('#')] return random.choice(self.lists[category]) diff --git a/user_import_udm_rest_api.py b/user_import_udm_rest_api.py index 0bc1676..d27ac7e 100755 --- a/user_import_udm_rest_api.py +++ b/user_import_udm_rest_api.py @@ -42,6 +42,7 @@ p.add('--create_oxcontexts', env_var='CREATE_OXCONTEXT', default=False, help='Op p.add('--default_oxcontext', env_var='DEFAULT_OXCONTEXT', default=1, help='Optional: Set the default OX context ID to use when creating users.') p.add('--import_domain', env_var='IMPORT_DOMAIN', required=True, help='The domain name of your openDesk instance - omit the "portal." or other service specific hostnames.') p.add('--import_filename', env_var='IMPORT_FILENAME', required=False, default=None, help='The filename containing the user account details for the import - see template.ods for reference. If filename is not provided or related file is not found random users will be imported.') +p.add('--import_use_images', env_var='IMPORT_USE_IMAGES', default=False, help='Optional: Set to "True" if each user should be uploaded with a random profile picture when "import_filename" was set.') p.add('--import_maildomain', env_var='IMPORT_MAILDOMAIN', required=False, help='Optional: If you are using a different maildomain please specify it, otherwise `IMPORT_DOMAIN` is used.') p.add('--import_random_amount', env_var='IMPORT_RANDOM_AMOUNT', default=10, help='The number of random accounts to import if the "import_filename" was not set or found.') p.add('--loglevel', env_var='LOGLEVEL', default='INFO', help='Set the loglevel: DEBUG, INFO, WARNING, ERROR, CRITICAL. Default: WARNING') @@ -95,7 +96,7 @@ if not options.import_filename: logging.info(f"Accounts that have been created:\n{ucs.get_imported_credentials_list()}") elif os.path.isfile(options.import_filename): logging.info(f"Importing users from '{options.import_filename}'") - ImportUser(import_callback, import_filename=options.import_filename, create_admin_accounts=options.create_admin_accounts) + ImportUser(import_callback, import_filename=options.import_filename, create_admin_accounts=options.create_admin_accounts, use_images=options.import_use_images) else: logging.error(f"File to import from '{options.import_filename}' was not found.") -- GitLab