Fix installation failing when Redis password contains special characters (#13156)
* Add support for special characters in Redis passwords Fixes #13154 * Refactor
This commit is contained in:
		
							parent
							
								
									047fde18c3
								
							
						
					
					
						commit
						ce17cea221
					
				
					 2 changed files with 17 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -14,7 +14,9 @@ def setup_redis_env_url(prefix = nil, defaults = true)
 | 
			
		|||
  ENV[prefix + 'REDIS_URL'] = if [password, host, port, db].all?(&:nil?)
 | 
			
		||||
                                ENV['REDIS_URL']
 | 
			
		||||
                              else
 | 
			
		||||
                                "redis://#{password.blank? ? '' : ":#{password}@"}#{host}:#{port}/#{db}"
 | 
			
		||||
                                Addressable::URI.parse("redis://#{host}:#{port}/#{db}").tap do |uri|
 | 
			
		||||
                                  uri.password = password if password.present?
 | 
			
		||||
                                end.normalize.to_str
 | 
			
		||||
                              end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -336,7 +336,20 @@ namespace :mastodon do
 | 
			
		|||
      if prompt.yes?('Save configuration?')
 | 
			
		||||
        cmd = TTY::Command.new(printer: :quiet)
 | 
			
		||||
 | 
			
		||||
        File.write(Rails.root.join('.env.production'), "# Generated with mastodon:setup on #{Time.now.utc}\n\n" + env.each_pair.map { |key, value| "#{key}=#{value}" }.join("\n") + "\n")
 | 
			
		||||
        env_contents = env.each_pair.map do |key, value|
 | 
			
		||||
          if value.is_a?(String) && value =~ /[\s\#\\"]/
 | 
			
		||||
            if value =~ /[']/
 | 
			
		||||
              value = value.to_s.gsub(/[\\"\$]/) { |x| "\\#{x}" }
 | 
			
		||||
              "#{key}=\"#{value}\""
 | 
			
		||||
            else
 | 
			
		||||
              "#{key}='#{value}'"
 | 
			
		||||
            end
 | 
			
		||||
          else
 | 
			
		||||
            "#{key}=#{value}"
 | 
			
		||||
          end
 | 
			
		||||
        end.join("\n")
 | 
			
		||||
 | 
			
		||||
        File.write(Rails.root.join('.env.production'), "# Generated with mastodon:setup on #{Time.now.utc}\n\n" + env_contents + "\n")
 | 
			
		||||
 | 
			
		||||
        if using_docker
 | 
			
		||||
          prompt.ok 'Below is your configuration, save it to an .env.production file outside Docker:'
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue