# Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/ class LdapSourceConfig < ActiveRecord::Migration[6.1] def change # return if it's a new setup return if !Setting.exists?(name: 'system_init_done') LdapSource.in_batches.each_record do |source| source.update!(preferences: adjust_config(source.preferences)) end end private LDAP_SSL_MAPPING = { 'ldap' => 'off', 'ldaps' => 'ssl', }.freeze def adjust_config(preferences) ssl_legacy(preferences) change_host_and_ssl(preferences, 'ldap') change_host_and_ssl(preferences, 'ldaps') preferences.delete('host_url') preferences end def ssl_legacy(preferences) return preferences if preferences.key?('host_url') return preferences if !preferences.key?('ssl') preferences['ssl'] = 'ssl' if preferences['ssl'] preferences['ssl'] = 'off' if !preferences['ssl'] end def change_host_and_ssl(preferences, protocol) return preferences if !preferences.key?('host_url') return preferences if !preferences['host_url'].starts_with?("#{protocol}://") preferences['host'] = preferences['host_url'].sub("#{protocol}://", '') preferences['ssl'] = LDAP_SSL_MAPPING[protocol] end end