Create dummy LDAP users

This commit is contained in:
Tim Schubert 2018-03-21 18:58:39 +01:00
parent c6b7dc1bc3
commit 45c6330148

View file

@ -5,6 +5,9 @@ import gitlab
from mimetypes import guess_type from mimetypes import guess_type
DEFAULT_REPOS = ['solutions', 'exercises']
BASEDN = 'ou=people,dc=tu-bs,dc=de'
gl = gitlab.Gitlab.from_config() gl = gitlab.Gitlab.from_config()
gl.auth() gl.auth()
@ -43,7 +46,11 @@ def parse_users_csv(csvfile, encoding='utf-8'):
reader = csv.DictReader(lines, delimiter=';', quotechar='"') reader = csv.DictReader(lines, delimiter=';', quotechar='"')
for line in reader: for line in reader:
yield line['Nutzernamen'], group_name(line['Gruppe']) user = object()
user.id = line['Nutzernamen']
user.email = line['E-Mail']
user.name = line['Vorname'] + ' ' + line['Nachname']
user.group = group_name(line['Gruppe'])
def create_student(user_id, email, tutorial): def create_student(user_id, email, tutorial):
@ -87,21 +94,14 @@ def create_course(course_name):
return course return course
"""TODO
- add users (LDAP) with custom attribute for group, matrikelnummer
+ if user exists set custom attributes
- create search for custom attribute (-> checkout repos for group)
"""
def create_course_project(name, course): def create_course_project(name, course):
try: try:
gl.projects.create( gl.projects.create({
{'name': name, 'name': name,
'namespace_id': course.id, 'namespace_id': course.id,
'visibility': 'internal' 'visibility': 'internal'
}) })
except gitlab.exceptions.GitlabHttpError as e: except gitlab.exceptions.GitlabHttpError as e:
print(e) print(e)
@ -114,12 +114,42 @@ def setup_user_project(user, base, course):
fork = course.projects.list(name=user) fork = course.projects.list(name=user)
if len(fork) == 0: if len(fork) == 0:
fork = base.forks.create({'name': user, 'namespace': base.namspace}) fork = base.forks.create({
fork.members.create({'user_id': user, 'access_level': gitlab.DEVELOPER_ACCESS}) 'name': user.id,
'namespace': base.namspace,
'visibility': 'private'
})
fork.members.create({
'user_id': user.id,
'access_level': gitlab.DEVELOPER_ACCESS
})
return fork return fork
def create_dummy_ldap_user(user):
"""Creates a dummy user for users that do not exist in gitlab
but in LDAP and have not logged in yet"""
users = gl.users.list(search=user)
if len(users) == 0:
dummy = gl.users.create({
'email': user.email,
'username': user.name,
'name': user.id,
'provider': 'main',
'skip_confirmation': true,
'extern_uid': 'uid=%s,%s' % (user.id, basedn),
'password': secrets.token_urlsafe(nbytes=32)
})
return dummy
else:
return users[0]
if __name__ == '__main__': if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Import groups and users from data source') parser = argparse.ArgumentParser(description='Import groups and users from data source')
@ -133,8 +163,9 @@ if __name__ == '__main__':
course = args.course[0] course = args.course[0]
course = create_course(course) course = create_course(course)
course_project = create_course_project('solutions', course)
course_project = create_course_project('exercises', course) for repo in DEFAULT_REPOS:
course_project = create_course_project(repo, course)
users = None users = None
@ -146,5 +177,13 @@ if __name__ == '__main__':
print('MIME type not recognized') print('MIME type not recognized')
for user, group in users: for user in users:
create_dummy_user_ldap(user)
setup_user_project(user, course) setup_user_project(user, course)
"""TODO
- add users (LDAP) with custom attribute for group, matrikelnummer
+ if user exists set custom attributes
- create search for custom attribute (-> checkout repos for group)
"""