This file is indexed.

/usr/lib/ruby/vendor_ruby/client_side_validations/active_record/middleware.rb is in ruby-client-side-validations 3.2.6+gh-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
module ClientSideValidations::ActiveRecord
  class Middleware

    def self.is_class?(klass)
      klass.abstract_class.blank? && klass < ::ActiveRecord::Base
    end

    def self.is_unique?(klass, attribute, value, params)
      klass = find_topmost_superclass(klass)
      value = type_cast_value(klass, attribute, value)
      column = klass.columns_hash[attribute.to_s]
      value = column.limit ? value.to_s.mb_chars[0, column.limit] : value.to_s if column.text?

      t = klass.arel_table

      if params[:case_sensitive] == 'true'
        if t.engine.connection.adapter_name =~ /^mysql/i
          relation = Arel::Nodes::SqlLiteral.new("BINARY #{t[attribute].eq(value).to_sql}")
        else
          relation = t[attribute].eq(value)
        end
      else
        relation = t[attribute].matches(value)
      end

      if relation.is_a?(Arel::Nodes::SqlLiteral)
        relation = Arel::Nodes::SqlLiteral.new("BINARY #{t[attribute].eq(value).to_sql} AND #{t[klass.primary_key].not_eq(params[:id]).to_sql}")
      else
        relation = relation.and(t[klass.primary_key].not_eq(params[:id])) if params[:id]
      end

      (params[:scope] || {}).each do |attribute, value|
        value    = type_cast_value(klass, attribute, value)
        if relation.is_a?(Arel::Nodes::SqlLiteral)
          relation =  Arel::Nodes::SqlLiteral.new("#{relation} AND #{t[attribute].eq(value).to_sql}")
        else
          relation = relation.and(t[attribute].eq(value))
        end
      end

      !klass.where(relation).exists?
    end

    private

    def self.type_cast_value(klass, attribute, value)
      klass.columns_hash[attribute].type_cast(value)
    end

    def self.find_topmost_superclass(klass)
      if is_class?(klass.superclass)
        find_topmost_superclass(klass.superclass)
      else
        klass
      end
    end

  end
end