rom-ldap 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CHANGELOG.md +251 -0
- data/CONTRIBUTING.md +18 -0
- data/README.md +172 -0
- data/TODO.md +33 -0
- data/config/responses.yml +328 -0
- data/lib/dry/monitor/ldap/colorizers/default.rb +17 -0
- data/lib/dry/monitor/ldap/colorizers/rouge.rb +31 -0
- data/lib/dry/monitor/ldap/logger.rb +58 -0
- data/lib/rom-ldap.rb +1 -0
- data/lib/rom/ldap.rb +22 -0
- data/lib/rom/ldap/alias.rb +30 -0
- data/lib/rom/ldap/associations.rb +6 -0
- data/lib/rom/ldap/associations/core.rb +23 -0
- data/lib/rom/ldap/associations/many_to_many.rb +18 -0
- data/lib/rom/ldap/associations/many_to_one.rb +22 -0
- data/lib/rom/ldap/associations/one_to_many.rb +32 -0
- data/lib/rom/ldap/associations/one_to_one.rb +19 -0
- data/lib/rom/ldap/associations/self_ref.rb +35 -0
- data/lib/rom/ldap/attribute.rb +327 -0
- data/lib/rom/ldap/client.rb +185 -0
- data/lib/rom/ldap/client/authentication.rb +118 -0
- data/lib/rom/ldap/client/operations.rb +233 -0
- data/lib/rom/ldap/commands.rb +6 -0
- data/lib/rom/ldap/commands/create.rb +41 -0
- data/lib/rom/ldap/commands/delete.rb +17 -0
- data/lib/rom/ldap/commands/update.rb +35 -0
- data/lib/rom/ldap/constants.rb +193 -0
- data/lib/rom/ldap/dataset.rb +286 -0
- data/lib/rom/ldap/dataset/conversion.rb +62 -0
- data/lib/rom/ldap/dataset/dsl.rb +299 -0
- data/lib/rom/ldap/dataset/persistence.rb +44 -0
- data/lib/rom/ldap/directory.rb +126 -0
- data/lib/rom/ldap/directory/capabilities.rb +71 -0
- data/lib/rom/ldap/directory/entry.rb +200 -0
- data/lib/rom/ldap/directory/env.rb +155 -0
- data/lib/rom/ldap/directory/operations.rb +282 -0
- data/lib/rom/ldap/directory/password.rb +122 -0
- data/lib/rom/ldap/directory/root.rb +187 -0
- data/lib/rom/ldap/directory/tokenization.rb +66 -0
- data/lib/rom/ldap/directory/transactions.rb +31 -0
- data/lib/rom/ldap/directory/vendors/active_directory.rb +129 -0
- data/lib/rom/ldap/directory/vendors/apache_ds.rb +27 -0
- data/lib/rom/ldap/directory/vendors/e_directory.rb +16 -0
- data/lib/rom/ldap/directory/vendors/open_directory.rb +12 -0
- data/lib/rom/ldap/directory/vendors/open_dj.rb +25 -0
- data/lib/rom/ldap/directory/vendors/open_ldap.rb +35 -0
- data/lib/rom/ldap/directory/vendors/three_eight_nine.rb +16 -0
- data/lib/rom/ldap/directory/vendors/unknown.rb +22 -0
- data/lib/rom/ldap/dsl.rb +76 -0
- data/lib/rom/ldap/errors.rb +47 -0
- data/lib/rom/ldap/expression.rb +77 -0
- data/lib/rom/ldap/expression_encoder.rb +174 -0
- data/lib/rom/ldap/extensions.rb +50 -0
- data/lib/rom/ldap/extensions/active_support_notifications.rb +26 -0
- data/lib/rom/ldap/extensions/compatibility.rb +11 -0
- data/lib/rom/ldap/extensions/dsml.rb +165 -0
- data/lib/rom/ldap/extensions/msgpack.rb +23 -0
- data/lib/rom/ldap/extensions/optimised_json.rb +25 -0
- data/lib/rom/ldap/extensions/rails_log_subscriber.rb +38 -0
- data/lib/rom/ldap/formatter.rb +26 -0
- data/lib/rom/ldap/functions.rb +207 -0
- data/lib/rom/ldap/gateway.rb +145 -0
- data/lib/rom/ldap/ldif.rb +74 -0
- data/lib/rom/ldap/ldif/exporter.rb +77 -0
- data/lib/rom/ldap/ldif/importer.rb +95 -0
- data/lib/rom/ldap/mapper_compiler.rb +19 -0
- data/lib/rom/ldap/matchers.rb +69 -0
- data/lib/rom/ldap/message_queue.rb +7 -0
- data/lib/rom/ldap/oid.rb +101 -0
- data/lib/rom/ldap/parsers/abstract_syntax.rb +91 -0
- data/lib/rom/ldap/parsers/attribute.rb +290 -0
- data/lib/rom/ldap/parsers/filter_syntax.rb +133 -0
- data/lib/rom/ldap/pdu.rb +285 -0
- data/lib/rom/ldap/plugin/pagination.rb +145 -0
- data/lib/rom/ldap/plugins.rb +7 -0
- data/lib/rom/ldap/projection_dsl.rb +38 -0
- data/lib/rom/ldap/relation.rb +135 -0
- data/lib/rom/ldap/relation/exporting.rb +72 -0
- data/lib/rom/ldap/relation/reading.rb +461 -0
- data/lib/rom/ldap/relation/writing.rb +64 -0
- data/lib/rom/ldap/responses.rb +17 -0
- data/lib/rom/ldap/restriction_dsl.rb +45 -0
- data/lib/rom/ldap/schema.rb +123 -0
- data/lib/rom/ldap/schema/attributes_inferrer.rb +59 -0
- data/lib/rom/ldap/schema/dsl.rb +13 -0
- data/lib/rom/ldap/schema/inferrer.rb +50 -0
- data/lib/rom/ldap/schema/type_builder.rb +133 -0
- data/lib/rom/ldap/scope.rb +19 -0
- data/lib/rom/ldap/search_request.rb +249 -0
- data/lib/rom/ldap/socket.rb +210 -0
- data/lib/rom/ldap/tasks/ldap.rake +103 -0
- data/lib/rom/ldap/tasks/ldif.rake +80 -0
- data/lib/rom/ldap/transaction.rb +29 -0
- data/lib/rom/ldap/type_map.rb +88 -0
- data/lib/rom/ldap/types.rb +158 -0
- data/lib/rom/ldap/version.rb +17 -0
- data/lib/rom/plugins/relation/ldap/active_directory.rb +182 -0
- data/lib/rom/plugins/relation/ldap/auto_restrictions.rb +69 -0
- data/lib/rom/plugins/relation/ldap/e_directory.rb +27 -0
- data/lib/rom/plugins/relation/ldap/instrumentation.rb +35 -0
- data/lib/rouge/lexers/ldap.rb +72 -0
- data/lib/rouge/themes/ldap.rb +49 -0
- metadata +231 -0
@@ -0,0 +1,145 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'logger'
|
4
|
+
require 'rom/gateway'
|
5
|
+
require 'rom/ldap/directory'
|
6
|
+
require 'rom/ldap/dataset'
|
7
|
+
|
8
|
+
module ROM
|
9
|
+
module LDAP
|
10
|
+
# @abstract
|
11
|
+
# Responsible for initialising connection, binding to server.
|
12
|
+
# Wrapping the connection in the directory and then dataset abstractions,
|
13
|
+
# and passing them to the relations.
|
14
|
+
#
|
15
|
+
class Gateway < ROM::Gateway
|
16
|
+
|
17
|
+
adapter :ldap
|
18
|
+
|
19
|
+
# @!attribute [r] directory
|
20
|
+
# @return [String]
|
21
|
+
attr_reader :directory
|
22
|
+
|
23
|
+
# @!attribute [r] logger
|
24
|
+
# @return [Object] configured gateway logger
|
25
|
+
attr_reader :logger
|
26
|
+
|
27
|
+
# Initialize an LDAP gateway
|
28
|
+
#
|
29
|
+
# Gateways are typically initialized via ROM::Configuration object
|
30
|
+
#
|
31
|
+
# @overload initialize(uri, options)
|
32
|
+
# Connects to a directory via options
|
33
|
+
#
|
34
|
+
# @example
|
35
|
+
# ROM.container(:ldap, uri, {})
|
36
|
+
#
|
37
|
+
# @param uri [String] 'ldap://127.0.0.1:389' or nil
|
38
|
+
#
|
39
|
+
# @option options :username [String] BINDDN Directory admin username.
|
40
|
+
#
|
41
|
+
# @option options :password [String] BINDDN Directory admin password.
|
42
|
+
#
|
43
|
+
# @option options :base [String] BASE Directory search base.
|
44
|
+
#
|
45
|
+
# @option options :timeout [Integer] Connection timeout in seconds.
|
46
|
+
#
|
47
|
+
# @option options :logger [Object] Defaults to $stdout
|
48
|
+
#
|
49
|
+
# @return [LDAP::Gateway]
|
50
|
+
#
|
51
|
+
def initialize(uri = nil, **options)
|
52
|
+
@directory = Directory.new(uri, options)
|
53
|
+
@logger = options.fetch(:logger) { ::Logger.new(STDOUT) }
|
54
|
+
|
55
|
+
options.fetch(:extensions, EMPTY_ARRAY).each do |ext|
|
56
|
+
next unless LDAP.available_extension?(ext)
|
57
|
+
|
58
|
+
LDAP.load_extensions(ext)
|
59
|
+
end
|
60
|
+
|
61
|
+
super()
|
62
|
+
end
|
63
|
+
|
64
|
+
# Used by attribute_inferrer to query attributes.
|
65
|
+
#
|
66
|
+
# @param filter [String]
|
67
|
+
#
|
68
|
+
# @return [Array<Directory::Entry>]
|
69
|
+
#
|
70
|
+
# @api public
|
71
|
+
#
|
72
|
+
def [](filter)
|
73
|
+
directory.query_attributes(filter)
|
74
|
+
end
|
75
|
+
alias_method :call, :[]
|
76
|
+
|
77
|
+
# Directory attributes identifiers and descriptions.
|
78
|
+
#
|
79
|
+
# @see Schema::Inferrer
|
80
|
+
# @see Schema::TypeBuilder
|
81
|
+
#
|
82
|
+
# @return [Array<String>]
|
83
|
+
#
|
84
|
+
# @api public
|
85
|
+
#
|
86
|
+
def attribute_types
|
87
|
+
directory.attribute_types
|
88
|
+
end
|
89
|
+
|
90
|
+
# Check for presence of entries under new filter.
|
91
|
+
#
|
92
|
+
# @param name [String] An ldap compatible filter string.
|
93
|
+
#
|
94
|
+
# @return [Boolean]
|
95
|
+
#
|
96
|
+
# @api public
|
97
|
+
#
|
98
|
+
def dataset?(name)
|
99
|
+
dataset(name).any?
|
100
|
+
end
|
101
|
+
|
102
|
+
# An enumerable object for chainable queries.
|
103
|
+
#
|
104
|
+
# @param name [String] An ldap compatible filter string.
|
105
|
+
# Used as the param to schema block in relation classes.
|
106
|
+
#
|
107
|
+
# @return [Dataset] Scoped by name filter.
|
108
|
+
#
|
109
|
+
# @api public
|
110
|
+
#
|
111
|
+
def dataset(name)
|
112
|
+
Dataset.new(name: name, directory: directory)
|
113
|
+
end
|
114
|
+
|
115
|
+
# @param logger [Logger]
|
116
|
+
#
|
117
|
+
# @api public
|
118
|
+
#
|
119
|
+
def use_logger(logger)
|
120
|
+
directory.logger = @logger = logger
|
121
|
+
end
|
122
|
+
|
123
|
+
# Underlying directory type
|
124
|
+
#
|
125
|
+
# @return [Symbol]
|
126
|
+
#
|
127
|
+
# @api public
|
128
|
+
#
|
129
|
+
def directory_type
|
130
|
+
directory.type
|
131
|
+
end
|
132
|
+
|
133
|
+
# Disconnect from the server.
|
134
|
+
#
|
135
|
+
# @return [?]
|
136
|
+
#
|
137
|
+
# @api public
|
138
|
+
#
|
139
|
+
def disconnect
|
140
|
+
directory.disconnect
|
141
|
+
end
|
142
|
+
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rom/ldap/ldif/importer'
|
4
|
+
require 'rom/ldap/ldif/exporter'
|
5
|
+
|
6
|
+
require 'rom/initializer'
|
7
|
+
#
|
8
|
+
# @see https://docs.oracle.com/cd/E10773_01/doc/oim.1014/e10531/ldif_appendix.htm
|
9
|
+
#
|
10
|
+
module ROM
|
11
|
+
module LDAP
|
12
|
+
module_function
|
13
|
+
|
14
|
+
#
|
15
|
+
# LDAP Data Interchange Format (LDIF)
|
16
|
+
#
|
17
|
+
# Refines Array and Hash with #to_ldif method.
|
18
|
+
#
|
19
|
+
# @see Directory::Entry
|
20
|
+
# @see Relation::Exporting
|
21
|
+
#
|
22
|
+
module LDIF
|
23
|
+
# @example
|
24
|
+
#
|
25
|
+
# ROM::LDAP::LDIF("version: 3\n") => [{}]
|
26
|
+
#
|
27
|
+
# @param ldif [String]
|
28
|
+
#
|
29
|
+
# @return [Array<Hash>]
|
30
|
+
#
|
31
|
+
# @api private
|
32
|
+
def self.to_tuples(ldif, &block)
|
33
|
+
Importer.new(ldif).to_tuples(&block)
|
34
|
+
end
|
35
|
+
|
36
|
+
# Extend functionality of Hash class.
|
37
|
+
#
|
38
|
+
refine ::Hash do
|
39
|
+
# Convert hash to LDIF format
|
40
|
+
#
|
41
|
+
# @return [String]
|
42
|
+
#
|
43
|
+
# @api public
|
44
|
+
def to_ldif
|
45
|
+
Exporter.new([self]).to_ldif
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# Extend functionality of Array class.
|
50
|
+
#
|
51
|
+
refine ::Array do
|
52
|
+
# Convert array to LDIF format
|
53
|
+
#
|
54
|
+
# @return [String]
|
55
|
+
#
|
56
|
+
# @api public
|
57
|
+
def to_ldif
|
58
|
+
Exporter.new(self).to_ldif
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
# Parser for LDIF format
|
64
|
+
# rubocop:disable Naming/MethodName
|
65
|
+
#
|
66
|
+
# alias for LDIF.to_tuples
|
67
|
+
#
|
68
|
+
# @api public
|
69
|
+
def LDIF(ldif, &block)
|
70
|
+
LDIF.to_tuples(ldif, &block)
|
71
|
+
end
|
72
|
+
# rubocop:enable Naming/MethodName
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rom/initializer'
|
4
|
+
require 'rom/ldap/functions'
|
5
|
+
|
6
|
+
module ROM
|
7
|
+
module LDAP
|
8
|
+
module LDIF
|
9
|
+
# Export Entry objects as LDIF files.
|
10
|
+
#
|
11
|
+
# @param tuple [Array<Hash>]
|
12
|
+
#
|
13
|
+
# @api private
|
14
|
+
class Exporter
|
15
|
+
|
16
|
+
extend Initializer
|
17
|
+
|
18
|
+
param :tuples, type: Types::Strict::Array.of(Types::Strict::Hash)
|
19
|
+
|
20
|
+
# @return [String]
|
21
|
+
#
|
22
|
+
def to_ldif
|
23
|
+
tuples.map { |tuple| create_entry(tuple) }.join(NEW_LINE)
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
# @param tuple [Hash]
|
29
|
+
#
|
30
|
+
# @return [Array<String>]
|
31
|
+
#
|
32
|
+
def create_entry(tuple)
|
33
|
+
ary = []
|
34
|
+
tuple.each do |key, values|
|
35
|
+
values.each { |value| ary << key_value_pair(key, value) }
|
36
|
+
end
|
37
|
+
ary << NEW_LINE
|
38
|
+
ary
|
39
|
+
end
|
40
|
+
|
41
|
+
# @param key [String]
|
42
|
+
# @param value [String]
|
43
|
+
#
|
44
|
+
# @return [String]
|
45
|
+
#
|
46
|
+
def key_value_pair(key, value)
|
47
|
+
if /userpassword/i.match?(key)
|
48
|
+
value = Functions[:to_base64].call(value)
|
49
|
+
"#{key}:: #{value}"
|
50
|
+
elsif value_is_binary?(value)
|
51
|
+
value = Functions[:to_base64].call(value, strict: false)
|
52
|
+
value = value.gsub(/#{NEW_LINE}/m, "#{NEW_LINE} ")
|
53
|
+
"#{key}:: #{value}"
|
54
|
+
else
|
55
|
+
"#{key}: #{value}"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
# jpegphoto:<file:///tmp/myphoto.jpg
|
60
|
+
# userpassword::qwerty
|
61
|
+
#
|
62
|
+
# @param value [String]
|
63
|
+
#
|
64
|
+
# @return [Boolean]
|
65
|
+
def value_is_binary?(value)
|
66
|
+
return true if value.start_with?(':', '<')
|
67
|
+
|
68
|
+
value.each_byte do |byte|
|
69
|
+
return true if (byte < 32) || (byte > 126)
|
70
|
+
end
|
71
|
+
false
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rom/initializer'
|
4
|
+
|
5
|
+
module ROM
|
6
|
+
module LDAP
|
7
|
+
module LDIF
|
8
|
+
# LDIF to importable tuples.
|
9
|
+
#
|
10
|
+
# @param ldif [String]
|
11
|
+
#
|
12
|
+
# @api private
|
13
|
+
class Importer
|
14
|
+
|
15
|
+
extend Initializer
|
16
|
+
|
17
|
+
param :ldif, type: Types::Strict::String
|
18
|
+
|
19
|
+
# @example =>
|
20
|
+
#
|
21
|
+
# [{
|
22
|
+
# :dn => "ou=users, dc=rom, dc=ldap",
|
23
|
+
# "ou" => "users",
|
24
|
+
# "objectClass" => "organizationalUnit"
|
25
|
+
# }]
|
26
|
+
#
|
27
|
+
# @return [Array<Hash>]
|
28
|
+
#
|
29
|
+
def to_tuples
|
30
|
+
dataset.map do |entry|
|
31
|
+
next if entry.any? { |l| l.match?(/^version/) }
|
32
|
+
|
33
|
+
abort 'update statements not allowed' if entry.any? { |l| l.match?(/^changetype/) }
|
34
|
+
|
35
|
+
tuple = parse(entry)
|
36
|
+
|
37
|
+
block_given? ? yield(tuple) : tuple
|
38
|
+
end.compact
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def dataset
|
44
|
+
ldif
|
45
|
+
.split(NEW_LINE)
|
46
|
+
.reject(&method(:comment?))
|
47
|
+
.chunk(&method(:divider?))
|
48
|
+
.reject(&:first)
|
49
|
+
.map(&:pop)
|
50
|
+
end
|
51
|
+
|
52
|
+
def comment?(line)
|
53
|
+
line.match?(/^#/)
|
54
|
+
end
|
55
|
+
|
56
|
+
def divider?(line)
|
57
|
+
line.eql?(EMPTY_STRING)
|
58
|
+
end
|
59
|
+
|
60
|
+
# @param entry [Array<String>]
|
61
|
+
#
|
62
|
+
# @return [Hash]
|
63
|
+
#
|
64
|
+
def parse(entry)
|
65
|
+
entry.map(&method(:key_pair)).inject(&method(:merge))
|
66
|
+
end
|
67
|
+
|
68
|
+
#
|
69
|
+
# @return [Hash]
|
70
|
+
#
|
71
|
+
def key_pair(line)
|
72
|
+
_, key, _, value = line.match(LDIF_LINE_REGEX).to_a
|
73
|
+
|
74
|
+
key = key.to_sym if key.eql?('dn')
|
75
|
+
value = File.binread(Regexp.last_match(1)) if value.match(BIN_FILE_REGEX)
|
76
|
+
value = Functions[:identify_value].call(value)
|
77
|
+
|
78
|
+
{ key => value }
|
79
|
+
end
|
80
|
+
|
81
|
+
def merge(original, additional)
|
82
|
+
key, value = additional.to_a.first
|
83
|
+
|
84
|
+
if original.key?(key)
|
85
|
+
original[key] = [*original[key], value]
|
86
|
+
original
|
87
|
+
else
|
88
|
+
original.merge(additional)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rom/mapper_compiler'
|
4
|
+
|
5
|
+
module ROM
|
6
|
+
module LDAP
|
7
|
+
class MapperCompiler < ROM::MapperCompiler
|
8
|
+
# def visit_attribute(node)
|
9
|
+
# name, _, meta_options = node
|
10
|
+
|
11
|
+
# if meta_options[:wrapped]
|
12
|
+
# [name, from: meta_options[:alias]]
|
13
|
+
# else
|
14
|
+
# [name]
|
15
|
+
# end
|
16
|
+
# end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ROM
|
4
|
+
module LDAP
|
5
|
+
# Type Builder
|
6
|
+
#
|
7
|
+
# @see https://ldap.com/matching-rules/
|
8
|
+
#
|
9
|
+
# Matching Rules - 2.5.13
|
10
|
+
#
|
11
|
+
# @return [Array<String>]
|
12
|
+
#
|
13
|
+
# @api private
|
14
|
+
STRING_MATCHERS = %w[
|
15
|
+
2.5.13.0 objectIdentifierMatch
|
16
|
+
2.5.13.1 distinguishedNameMatch
|
17
|
+
2.5.13.2 caseIgnoreMatch
|
18
|
+
2.5.13.3 caseIgnoreOrderingMatch
|
19
|
+
2.5.13.4 caseIgnoreSubstringsMatch
|
20
|
+
2.5.13.5 caseExactMatch
|
21
|
+
2.5.13.6 caseExactOrderingMatch
|
22
|
+
2.5.13.7 caseExactSubstringsMatch
|
23
|
+
2.5.13.8 numericStringMatch
|
24
|
+
2.5.13.9 numericStringOrderingMatch
|
25
|
+
2.5.13.10 numericStringSubstringsMatch
|
26
|
+
2.5.13.11 caseIgnoreListMatch
|
27
|
+
2.5.13.12 caseIgnoreListSubstringsMatch
|
28
|
+
2.5.13.17 octetStringMatch
|
29
|
+
2.5.13.18 octetStringOrderingMatch
|
30
|
+
2.5.13.20 telephoneNumberMatch
|
31
|
+
2.5.13.21 telephoneNumberSubstringsMatch
|
32
|
+
2.5.13.24 protocolInformationMatch
|
33
|
+
2.5.13.30 objectIdentifierFirstComponentMatch
|
34
|
+
|
35
|
+
1.3.6.1.1.16.2 uuidMatch
|
36
|
+
1.3.6.1.1.16.3 uuidOrderingMatch
|
37
|
+
|
38
|
+
1.3.6.1.4.1.1466.109.114.1 caseExactIA5Match
|
39
|
+
1.3.6.1.4.1.1466.109.114.2 caseIgnoreIA5Match
|
40
|
+
1.3.6.1.4.1.1466.109.114.3 caseIgnoreIA5SubstringsMatch
|
41
|
+
].freeze
|
42
|
+
|
43
|
+
# @return [Array<String>]
|
44
|
+
#
|
45
|
+
# @api private
|
46
|
+
BOOLEAN_MATCHERS = %w[
|
47
|
+
2.5.13.13 booleanMatch
|
48
|
+
].freeze
|
49
|
+
|
50
|
+
#
|
51
|
+
# @return [Array<String>]
|
52
|
+
#
|
53
|
+
# @api private
|
54
|
+
INTEGER_MATCHERS = %w[
|
55
|
+
2.5.13.14 integerMatch
|
56
|
+
2.5.13.15 integerOrderingMatch
|
57
|
+
].freeze
|
58
|
+
|
59
|
+
# @return [Array<String>]
|
60
|
+
#
|
61
|
+
# @api private
|
62
|
+
TIME_MATCHERS = %w[
|
63
|
+
csnMatch
|
64
|
+
2.5.13.25 uTCTimeMatch
|
65
|
+
2.5.13.27 generalizedTimeMatch
|
66
|
+
2.5.13.28 generalizedTimeOrderingMatch
|
67
|
+
].freeze
|
68
|
+
end
|
69
|
+
end
|