# plugins/md5_authentication/plugin.rb # frozen_string_literal: true # name: md5_authentication # about: A plugin to authenticate users with MD5 passwords from legacy systems # version: 0.2 # authors: saint # url: https://gitea.federated.computer/saint/discourse-md5_authentication.git # plugins/md5_authentication/plugin.rb after_initialize do Rails.logger.info("MD5 Authentication Plugin: Initialized") class ::User module LegacyMd5Authentication def self.included(base) base.singleton_class.prepend(ClassMethods) end module ClassMethods def authenticate(login, password) Rails.logger.info("LegacyMd5Authentication: Trying to authenticate user with login #{login}") user = nil if login.include?('@') # Assume it's an email address user_email = UserEmail.find_by(email: login.downcase.strip) user = user_email ? User.find(user_email.user_id) : nil else # Assume it's a username user = User.find_by(username: login.downcase.strip) end if user Rails.logger.info("LegacyMd5Authentication: User found: #{user.username}") if user.custom_fields['md5_password'] && user.custom_fields['md5_password'] == Digest::MD5.hexdigest(password) Rails.logger.info("LegacyMd5Authentication: MD5 password match for user: #{user.username}") user.update!(password: password) user.custom_fields['md5_password'] = nil user.save_custom_fields return user else Rails.logger.info("LegacyMd5Authentication: MD5 password did not match for user: #{user.username}") end else Rails.logger.info("LegacyMd5Authentication: No user found with login #{login}") end super(login, password) end end end include LegacyMd5Authentication end end