#DATA main_init = """# init.ldif ########## # # Table of Content # ########## # Корневая запись (базовый DN) ## ROOT DN # All ou ## UID FOR HANDLERS ## UID FOR OU=USERS # All cn ## CN FOR OU=GROUP # Все пользователи ########## # # ROOT-DB # ########## dn: dc=ldap,dc=sharix,dc=ru objectClass: dcObject objectClass: organization dc: ldap o: Sharix LDAP Server """ extra_test_users = """ dn: uid=11111111111,ou=users,dc=ldap,dc=sharix,dc=ru objectClass: sharixAccount uid: 11111111111 cn: Django Admin sn: First #maybe set the same for all for the beggining? Now for testing - let's make it like Django main admin password userPassword: {ARGON2}$argon2id$v=19$m=65536,t=3,p=1$85j887FtSxU4NRVTLx2Tiw$AE/HdQ9y446Vl9zdiKMXgDLID3D43pYC+ZleNiy/bMs givenName: Admin displayName: Django Admin mail: test@sharix-app.org jpegPhoto: 0 telephoneNumber: 11111111111 """ uid_django_user=""" dn: uid=django_tickets,ou=apps,dc=ldap,dc=sharix,dc=ru objectClass: handlerAccount uid: django_tickets cn: django_tickets displayName: Django Tickets sn: notificator #maybe set the same for all for the beggining? Or make it like apikey? Now for testing - let's make it like Django main admin password userPassword: {ARGON2}$argon2id$v=19$m=65536,t=3,p=1$8kx90bsuQRoLoQ3F4Uh+Pw$PboqW5EPEfzQlFh3uDeWoXP8rXs7v510fwQgtoA2Lew """ extra_groups = """ dn: cn=django_admin,ou=groups,dc=ldap,dc=sharix,dc=ru objectClass: groupOfNames cn: django_admin description: Group for Django Admins member: uid=11111111111,ou=users,dc=ldap,dc=sharix,dc=ru """ extra_apps = """ dn: cn=django,ou=apps,dc=ldap,dc=sharix,dc=ru objectClass: groupOfNames cn: django description: Group for Django users member: cn=django_tickets,ou=apps,dc=ldap,dc=sharix,dc=ru dn: cn=ejabberd,ou=apps,dc=ldap,dc=sharix,dc=ru objectClass: groupOfNames cn: ejabberd description: Group for Ejabberd users member: cn=11111111111,ou=users,dc=ldap,dc=sharix,dc=ru dn: cn=local,ou=apps,dc=ldap,dc=sharix,dc=ru objectClass: groupOfNames cn: local description: Group for Local users member: cn=11111111111,ou=users,dc=ldap,dc=sharix,dc=ru dn: cn=mail,ou=apps,dc=ldap,dc=sharix,dc=ru objectClass: groupOfNames cn: mail description: Group for Mail users member: cn=11111111111,ou=users,dc=ldap,dc=sharix,dc=ru """ handlers = [ ("open_access_request_pending", "ACCREQ pending"), ("open_access_request_accepted", "ACCREQ accepted"), ("open_access_request_declined", "ACCREQ declined"), ("open_neg_request_pending", "NEGREQ pending"), ("open_neg_request_accepted", "NEGERQ accepted"), ("open_neg_request_declined", "NEGREQ declined"), ("open_st_request_new", "STREQ new"), ("open_st_request_reopened", "STREQ reopened"), ("open_st_request_assigned", "STREQ assigned"), ("open_st_request_inprocess", "STREQ inprocess"), ("open_st_request_wontfix", "STREQ wontfix"), ("open_st_request_done", "STREQ done"), ] groups = [ ('METASERVICE-ADMIN' , 21), ('METASERVICE-SUPERVISOR' , 22), ('METASERVICE-SUPPORT' , 23), ('METASERVICE-TECHSUPPORT', 24), ('PARTNER-ADMIN' , 31), ('PARTNER-SUPERVISOR' , 32), ('PARTNER-SUPPORT' , 33), ('PARTNER-TECHSUPPORT' , 34), ('METASERVICE-PROVIDER' , 41), ('METASERVICE-CLIENT' , 51), ('METASERVICE-GUEST' , 61), ] groups_dict = dict(groups) test_users = [ ('METASERVICE-ADMIN' , 'Metaservice', 'Admin' , 1), ('METASERVICE-SUPERVISOR' , 'Metaservice', 'Supervisor' , 3), ('METASERVICE-SUPPORT' , 'Metaservice', 'Support' , 3), ('METASERVICE-TECHSUPPORT', 'Metaservice', 'TechSupport', 3), ('PARTNER-ADMIN' , 'Parter' , 'Admin' , 1), ('PARTNER-SUPERVISOR' , 'Parter' , 'Supervisor' , 3), ('PARTNER-SUPPORT' , 'Parter' , 'Support' , 3), ('PARTNER-TECHSUPPORT' , 'Parter' , 'TechSupport', 3), ('METASERVICE-PROVIDER' , 'Metaservice', 'Provider' , 3), ('METASERVICE-CLIENT' , 'Metaservice', 'Client' , 3), ('METASERVICE-GUEST' , 'Metaservice', 'Guest' , 3), ] test_users_dict = {user[0]: user[3] for user in test_users} ous = [ ("users" , "Подразделение для пользователей"), ("groups" , "Подразделение для групп (опционально)"), ("apps" , "Подразделение для классификации обработчиков и приложений (опционально)"), ("appgroups", "Подразделение с аккаунтами приложений с их описанием и может быть apikey"), ] # SUPPORT FUNCTIONS def int_to_roman(num): val = [ 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 ] syms = [ "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" ] roman_num = "" i = 0 while num > 0: for _ in range(num // val[i]): roman_num += syms[i] num -= val[i] i += 1 return roman_num def get_handlers_txt(): txt = "" for name, display_name in handlers: HANDLERS_PASSWORD = "{ARGON2}$argon2id$v=19$m=65536,t=3,p=1$8kx90bsuQRoLoQ3F4Uh+Pw$PboqW5EPEfzQlFh3uDeWoXP8rXs7v510fwQgtoA2Lew" txt +=f"""dn: uid={name},ou=apps,dc=ldap,dc=sharix,dc=ru objectClass: handlerAccount uid: {name} cn: {name} sn: handler displayName: {display_name} #maybe set the same for all for the beggining? Or make it like apikey? Now for testing - let's make it like Django main admin password userPassword: {HANDLERS_PASSWORD} """ return txt def get_users_txt(): USERS_PASSWORD = "{ARGON2}$argon2id$v=19$m=65536,t=3,p=1$8kx90bsuQRoLoQ3F4Uh+Pw$PboqW5EPEfzQlFh3uDeWoXP8rXs7v510fwQgtoA2Lew" txt = "" for group_name, place, role, count in test_users: for i in range(1, count + 1): phone_number=f"{groups_dict[group_name]}0{i}" uid = phone_number cn = place sn = f"{int_to_roman(i)}" givenName = role displayName = f"{place} {role} {int_to_roman(i)}" # TODO: Почта для разных пользователей # mail = f"test-{group_name.lower()}-{i}@domain.org" mail = "test@sharix-app.org" telephoneNumber = phone_number user_entry = f""" dn: uid={uid},ou=users,dc=ldap,dc=sharix,dc=ru objectClass: sharixAccount uid: {uid} cn: {cn} sn: {sn} userPassword: {USERS_PASSWORD} givenName: {givenName} displayName: {displayName} mail: {mail} jpegPhoto: 0 telephoneNumber: {telephoneNumber} """ txt += user_entry return txt def get_groups_txt(): txt = "" for group, uid in groups: txt += f""" dn: cn={group},ou=groups,dc=ldap,dc=sharix,dc=ru objectClass: groupOfNames cn: {group} description: Group for {group.replace("-", " ").title()} """ count = test_users_dict[group] for i in range(1, count + 1): user_id=f"{uid}0{i}" txt += f"member: uid={user_id},ou=users,dc=ldap,dc=sharix,dc=ru\n" return txt def get_ou_txt(): return "\n".join( f"""# {desc} dn: ou={name},dc=ldap,dc=sharix,dc=ru objectClass: organizationalUnit ou: {name} """ for name, desc in ous ) def get_group_handlers(): return """ dn: cn=handlers,ou=apps,dc=ldap,dc=sharix,dc=ru objectClass: groupOfNames cn: handlers description: Group for Handlers """ + "\n".join([ f"member: cn={name},ou=handlers,dc=ldap,dc=sharix,dc=ru" for name, _ in handlers ]) # OUTPUT ldiff file print(main_init) print(""" ########## # # OU # ########## """) print(get_ou_txt()) print(""" ########## # # UID FOR Django tickets module app user # ########## """) print(uid_django_user) print(""" ########## # # UID FOR HANDLERS # ########## """) print(get_handlers_txt()) print(""" ########## # # UID FOR OU=USERS # ########## """) print(get_users_txt()) print(""" ########## # # Extra UID FOR OU=USERS # ########## """) print(extra_test_users) print(""" ########## # # CN FOR OU=GROUP # ########## """) print(get_groups_txt()) print(extra_groups) print( """ ########## # # CN FOR OU=APPS # ########## """) print(get_group_handlers()) print(extra_apps)