Skip to content

Instantly share code, notes, and snippets.

@jay7x
Created August 22, 2025 05:56
Show Gist options
  • Select an option

  • Save jay7x/513bec647bf1ecb95de994eb030c0915 to your computer and use it in GitHub Desktop.

Select an option

Save jay7x/513bec647bf1ecb95de994eb030c0915 to your computer and use it in GitHub Desktop.
Read users from known LDAP providers and create them in Gitlab
# Read users from known LDAP providers and create them in Gitlab
# Tested on Gitlab v18.1
# Create users on behalf of this user
creator = User.find_by(username: 'root')
# Add user to default organization
organization_id = Organizations::Organization.find_by(name: 'Default').id
Gitlab::Auth::Ldap::Config.providers.each do |provider|
Gitlab::Auth::Ldap::Adapter.open(provider) do |adapter|
uid_field = adapter.config.uid
ldap_users = adapter.users(uid_field, '*')
ldap_users.each do |ldap_user|
extern_uid = ldap_user.dn
email = ldap_user.email.first.strip.downcase
username = ldap_user.username.strip.downcase
name = ldap_user.name
next unless email && username
# Skip if user already exists
next if User.find_by_email(email) || User.find_by_username(username)
puts "Creating user: #{username} (#{email}, #{extern_uid})..."
new_user_srv = Users::CreateService.new(creator,
username: username,
email: email,
name: name || username,
organization_id: organization_id,
skip_confirmation: true,
force_random_password: true,
password_automatically_set: true,
extern_uid: extern_uid,
provider: provider,
)
new_user = new_user_srv.execute
if new_user.error?
puts "Failed to create user #{username}: #{new_user.errors.full_messages.join(', ')}"
else
puts "Successfully created user: #{username}"
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment