files/gitlab-cookbooks/package/libraries/helpers/redis_helper.rb (30 lines of code) (raw):

require 'erb' require_relative '../../../gitlab/libraries/redis_uri' module RedisHelper class << self def build_redis_url(ssl:, host:, port:, path:, password:) scheme = ssl ? 'rediss:/' : 'redis:/' uri = URI(scheme) uri.host = host if host uri.port = port if port uri.path = path if path # In case the password has non-alphanumeric passwords, be sure to encode it uri.password = encode_redis_password(password) if password uri end def build_sentinels_urls(sentinels:, password:) return [] if sentinels.nil? || sentinels.empty? sentinels.map do |sentinel| build_redis_url( ssl: sentinel['ssl'], host: sentinel['host'], port: sentinel['port'], path: '', password: password ) end end # RFC 3986 says that the userinfo value should be percent-encoded: # https://datatracker.ietf.org/doc/html/rfc3986#section-3.2.1. # Note that CGI.escape and URI.encode_www_form_component encodes # a space as "+" instead of "%20". While this appears to be handled with # the Ruby client, the Go client doesn't work with "+". def encode_redis_password(password) ERB::Util.url_encode(password) end end end