123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360 |
- #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)
|