ruby-taxii2 0.3.2 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 59094f4d94c54c1468ac70bb38ed293f0d7faa99b4626d409742060c48b0bd74
4
- data.tar.gz: c7d004ebbb8774848c1874db3ebc93f4f27eccc5662193d9ed5c0e2cb3872c40
3
+ metadata.gz: 63e72e43df228b51f6e48e1dce072dd46b5ea9b78a21976e15652db519cb0bfb
4
+ data.tar.gz: 1087dc2974412eee95183b7ad4cad21b2368fc0125216c717a53b3bb0754aaf7
5
5
  SHA512:
6
- metadata.gz: 325da7bd11690bf0837a17809526cd051c3482dbae094af1740b2561b0a5492809ea51ff093f568d63eba48a196eb363b5d56491b50bdde7de2a025f2a852d0b
7
- data.tar.gz: 7ab0a2f04941f2884c9c5a3100b4991f414b37e84f3a6d6aaf1733d3ccaeafe2f9399a54cbfc1e80e42f9eea670db8695ec740d854310ad02b90cd7408cd11b6
6
+ metadata.gz: 20c9964fd2ef313301bb39011b997e7ae48047fba14c1de0d87aacc4abb5e4fddc6360d332abed47eeaad6a342a4d5fb263d76d496bcf4561eb2e277709dfe34
7
+ data.tar.gz: 8006a381beb5cdd27a967d630323b999b07fe7c163382c80bafc90745614bccb5acb38c85e3b9c45a8a9b92c638e98c1f7d6b8ddb6099fa7a933940e3d5b61d8
@@ -12,6 +12,7 @@ jobs:
12
12
  os: [ubuntu-latest, windows-latest]
13
13
  ruby: ['2.7', '3.0', '3.1', head]
14
14
  runs-on: ${{ matrix.os }}
15
+ permissions: write-all
15
16
  steps:
16
17
  - uses: actions/checkout@v3
17
18
  - name: Set up Ruby
@@ -21,4 +22,10 @@ jobs:
21
22
  bundler: latest
22
23
  - run: bundle
23
24
  - run: bundle exec rspec
25
+ - name: SimpleCov Ruby ${{ matrix.ruby }}
26
+ uses: joshmfrankel/simplecov-check-action@main
27
+ if: ${{ matrix.os == 'ubuntu-latest' && matrix.ruby == '3.1' }}
28
+ with:
29
+ github_token: ${{ secrets.GITHUB_TOKEN }}
30
+ check_job_name: SimpleCov ${{ matrix.ruby }}
24
31
  - run: bundle exec gem build
data/README.md CHANGED
@@ -28,7 +28,7 @@ require 'taxii'
28
28
  # You can use a json file configuration
29
29
  # client = Taxii::configure(config: 'my.config.json')
30
30
  # or a direct configuration
31
- client = Taxii::configure(user: 'user', pass: 'pass', url: 'url')
31
+ client = Taxii::configure(user: 'user', pass: 'pass', url: 'url', logger: Logger.new(STDOUT))
32
32
  collections = client.discover_collections
33
33
 
34
34
  # List collections (name, type and availability)
@@ -47,20 +47,16 @@ poll_request_message = Taxii::Messages::PollRequest.new(
47
47
  )
48
48
 
49
49
  client.get_content_blocks(poll_request_message).each do |message|
50
- begin
51
- # Try to parse the response as a Content_Block
52
- pp Taxii::Messages::ContentBlock.new(message)
53
- # You can also convert it to json
54
- # pp Taxii::Messages::ContentBlock.new(message).as_json
55
- rescue
56
- puts 'This is not a ContentBlock'
57
- end
50
+ message = Taxii.parse(body)
51
+ puts "Received a #{message.class}"
52
+ puts message.as_json if message.is_a?(Taxii::Messages::ContentBlock)
58
53
  end
59
54
  ```
60
55
 
61
- ## Development
62
-
63
-
64
56
  ## Contributing
65
57
 
66
58
  Bug reports and pull requests are welcome on GitHub at https://github.com/crondaemon/ruby-taxii2.
59
+
60
+ # See also
61
+
62
+ Ruby Stix2: https://github.com/crondaemon/ruby-stix2
data/lib/taxii/client.rb CHANGED
@@ -2,12 +2,10 @@ module Taxii
2
2
  module Client
3
3
  def self.included(klass)
4
4
  klass.class_eval do
5
- attr_accessor :url, :user, :pass, :client_cert, :client_key, :ca_cert
5
+ attr_accessor :url, :user, :pass, :logger, :client_cert, :client_key, :ca_cert
6
6
  attr_reader :xml
7
7
  def initialize(*args)
8
8
  Hash[*args].each {|k,v| self.send(format('%s=',k),v)}
9
- @user ||= 'admin'
10
- @pass ||= 'avalanche'
11
9
  @xml = Nori.new(strip_namespaces: true)
12
10
  self
13
11
  end
@@ -42,7 +40,9 @@ module Taxii
42
40
  payload = Taxii::Messages::DiscoveryRequest.new.to_xml
43
41
  response = build_request(url: self.url, payload: payload).execute
44
42
  parsed = xml.parse(response.body)
45
- parsed['Discovery_Response'].fetch('Service_Instance',[])
43
+ discovery_response = parsed['Discovery_Response']
44
+ raise("Error getting Discovery_Response: #{parsed}") if !discovery_response
45
+ discovery_response.fetch('Service_Instance', [])
46
46
  end
47
47
 
48
48
  def discovery_service_url
@@ -61,18 +61,22 @@ module Taxii
61
61
  @poll_service_url ||= get_service_address('POLL')
62
62
  end
63
63
 
64
- def discover_feeds(url = self.collection_management_service_url)
64
+ def discover_feeds(url: self.collection_management_service_url, format: Taxii::Messages::TAXII_10_HEADERS)
65
65
  msg = Taxii::Messages::FeedInformationRequest.new.to_xml
66
- http = build_request(url: url, payload: msg, format: Taxii::Messages::TAXII_10_HEADERS)
66
+ http = build_request(url: url, payload: msg, format: format)
67
67
  parsed = xml.parse(http.execute.body)
68
- parsed['Feed_Information_Response'].fetch('Feed', [])
68
+ feed_information_response = parsed['Feed_Information_Response']
69
+ raise("Error getting Feed_Information_Response: #{parsed}") if !feed_information_response
70
+ feed_information_response.fetch('Feed', [])
69
71
  end
70
72
 
71
- def discover_collections(url = self.collection_management_service_url)
73
+ def discover_collections(url: self.collection_management_service_url, format: Taxii::Messages::TAXII_10_HEADERS)
72
74
  msg = Taxii::Messages::CollectionInformationRequest.new.to_xml
73
- http = build_request(url: url, payload: msg, format: Taxii::Messages::TAXII_10_HEADERS)
75
+ http = build_request(url: url, payload: msg, format: format)
74
76
  parsed = xml.parse(http.execute.body)
75
- parsed['Collection_Information_Response'].fetch('Collection', [])
77
+ collection_information_response = parsed['Collection_Information_Response']
78
+ raise("Error getting Collection_Information_Response: #{parsed}") if !collection_information_response
79
+ collection_information_response.fetch('Collection', [])
76
80
  end
77
81
 
78
82
  def scheme_protocol
@@ -1,28 +1,8 @@
1
- require 'json'
2
-
3
1
  module Taxii
4
2
  module Messages
5
- class ContentBlock < Hashie::Dash
6
- def initialize(body)
7
- parsed = Nori.new(strip_namespaces: true).parse(body)
8
- @body = parsed['Content_Block']['Content']
9
- @body
10
- end
11
-
12
- def to_s
13
- @body.to_s
14
- end
15
-
16
- def inspect
17
- self.to_s
18
- end
19
-
20
- def as_json
21
- JSON.parse(@body)
22
- end
23
-
24
- def pretty_print(pp)
25
- puts self.to_s
3
+ class ContentBlock < Message
4
+ def self.object_path
5
+ ['Content_Block', 'Content']
26
6
  end
27
7
  end
28
8
  end
@@ -0,0 +1,13 @@
1
+ module Taxii
2
+ module Messages
3
+ class ExclusiveBeginTimestamp < Message
4
+ def self.object_path
5
+ ['Exclusive_Begin_Timestamp']
6
+ end
7
+
8
+ def as_json
9
+ @body
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module Taxii
2
+ module Messages
3
+ class InclusiveEndTimestamp < Message
4
+ def self.object_path
5
+ ['Inclusive_End_Timestamp']
6
+ end
7
+
8
+ def as_json
9
+ @body
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,28 @@
1
+ require 'json'
2
+
3
+ module Taxii
4
+ module Messages
5
+ class Message
6
+ def initialize(body)
7
+ parsed = Nori.new(strip_namespaces: true).parse(body)
8
+ @body = parsed.dig(*self.class.object_path)
9
+ end
10
+
11
+ def to_s
12
+ @body.to_s
13
+ end
14
+
15
+ def inspect
16
+ self.to_s
17
+ end
18
+
19
+ def as_json
20
+ JSON.parse(@body)
21
+ end
22
+
23
+ def pretty_print(pp)
24
+ puts self.to_s
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,9 @@
1
+ module Taxii
2
+ module Messages
3
+ class RecordCount < Message
4
+ def self.object_path
5
+ ['Record_Count']
6
+ end
7
+ end
8
+ end
9
+ end
@@ -31,6 +31,7 @@ module Taxii
31
31
  @content_xml = Nokogiri::XML(response.body, nil, nil, PARSE_OPTIONS)
32
32
 
33
33
  blocks += response_blocks
34
+ @logger.info("#{blocks.count} blocks received") if @logger
34
35
  end
35
36
 
36
37
  blocks
@@ -61,7 +62,9 @@ module Taxii
61
62
  when Taxii::Messages::PollRequest, Taxii::Messages::PollFulfillmentRequest
62
63
  request_message.to_xml
63
64
  else
65
+ # :nocov:
64
66
  fail ArgumentError, 'request message must be String or PollRequest'
67
+ # :nocov:
65
68
  end
66
69
  end
67
70
  end
data/lib/taxii/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Taxii
2
- VERSION = '0.3.2'
2
+ VERSION = '0.3.3'
3
3
  end
data/lib/taxii.rb CHANGED
@@ -9,6 +9,7 @@ require 'json'
9
9
  require 'taxii/version'
10
10
  require 'taxii/time_extensions'
11
11
  require 'taxii/messages'
12
+ require 'taxii/messages/message'
12
13
  require 'taxii/messages/parameters'
13
14
  require 'taxii/messages/discovery_request'
14
15
  require 'taxii/messages/poll_request'
@@ -16,6 +17,9 @@ require 'taxii/messages/poll_fulfillment_request'
16
17
  require 'taxii/messages/feed_information_request'
17
18
  require 'taxii/messages/collection_information_request'
18
19
  require 'taxii/messages/content_block'
20
+ require 'taxii/messages/record_count'
21
+ require 'taxii/messages/exclusive_begin_timestamp'
22
+ require 'taxii/messages/inclusive_end_timestamp'
19
23
  require 'taxii/client'
20
24
  require 'taxii/poll_client'
21
25
 
@@ -27,7 +31,7 @@ module Taxii
27
31
  pass = options[:pass]
28
32
  url = options[:url]
29
33
 
30
- if user && pass && url
34
+ if url
31
35
  configuration = { user: user, pass: pass, url: url }
32
36
  elsif File.exist?(config)
33
37
  configuration = JSON.parse(File.read(config))
@@ -35,6 +39,8 @@ module Taxii
35
39
  raise('You must provide user+pass+url, ora a config file, or have a default $HOME/.taxii.json')
36
40
  end
37
41
 
42
+ configuration[:logger] = options[:logger]
43
+
38
44
  client.new(configuration)
39
45
  end
40
46
 
@@ -46,4 +52,18 @@ module Taxii
46
52
  PollClient.new(user: 'guest', pass: 'guest', url: 'http://taxiitest.mitre.org/services/discovery/')
47
53
  end
48
54
 
55
+ def self.parse(body)
56
+ parsed = Nori.new(strip_namespaces: true).parse(body)
57
+ if parsed['Content_Block']
58
+ Messages::ContentBlock.new(body)
59
+ elsif parsed['Exclusive_Begin_Timestamp']
60
+ Messages::ExclusiveBeginTimestamp.new(body)
61
+ elsif parsed['Inclusive_End_Timestamp']
62
+ Messages::InclusiveEndTimestamp.new(body)
63
+ elsif parsed['Record_Count']
64
+ Messages::RecordCount.new(body)
65
+ else
66
+ raise("Message unsupported. Objects: #{parsed.keys}")
67
+ end
68
+ end
49
69
  end
data/ruby-taxii.gemspec CHANGED
@@ -8,6 +8,7 @@ Gem::Specification.new do |spec|
8
8
  spec.version = Taxii::VERSION
9
9
  spec.authors = ['Dario Lombardo']
10
10
  spec.email = ['lomato@gmail.com']
11
+ spec.license = 'GPL-2.0-or-later'
11
12
 
12
13
  spec.summary = %q{ ruby taxii client }
13
14
  spec.description = %q{ implement api-alike for python libtaxii https://github.com/TAXIIProject/libtaxii }
@@ -18,21 +19,21 @@ Gem::Specification.new do |spec|
18
19
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
20
  spec.require_paths = ['lib']
20
21
 
21
- spec.add_dependency 'nokogiri'
22
- spec.add_dependency 'nori'
23
- spec.add_dependency 'gyoku'
24
- spec.add_dependency 'hashie'
25
- spec.add_dependency 'rest-client'
22
+ spec.add_dependency 'nokogiri', '~> 1.15.2'
23
+ spec.add_dependency 'nori', '~> 2.6.0'
24
+ spec.add_dependency 'gyoku', '~> 1.4.0'
25
+ spec.add_dependency 'hashie', '~> 5.0.0'
26
+ spec.add_dependency 'rest-client', '~> 2.1.0'
26
27
 
27
28
  spec.add_development_dependency 'bundler', '~> 2.3'
28
29
  spec.add_development_dependency 'rake', '~> 13.0'
29
- spec.add_development_dependency 'rspec'
30
- spec.add_development_dependency 'guard'
31
- spec.add_development_dependency 'guard-rspec'
32
- spec.add_development_dependency 'guard-bundler'
33
- spec.add_development_dependency 'simplecov'
34
- spec.add_development_dependency 'vcr'
35
- spec.add_development_dependency 'webmock'
36
- spec.add_development_dependency 'pry'
37
- spec.add_development_dependency 'pry-byebug'
30
+ spec.add_development_dependency 'rspec', '~> 3.12.0'
31
+ spec.add_development_dependency 'guard', '~> 2.18.0'
32
+ spec.add_development_dependency 'guard-rspec', '~> 4.7.3'
33
+ spec.add_development_dependency 'guard-bundler', '~> 3.0.1'
34
+ spec.add_development_dependency 'simplecov', '~> 0.22.0'
35
+ spec.add_development_dependency 'vcr', '~> 6.1.0'
36
+ spec.add_development_dependency 'webmock', '~> 3.18.1'
37
+ spec.add_development_dependency 'pry', '~> 0.13.0'
38
+ spec.add_development_dependency 'pry-byebug', '~> 3.10.1'
38
39
  end
metadata CHANGED
@@ -1,85 +1,85 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-taxii2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dario Lombardo
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-06-05 00:00:00.000000000 Z
11
+ date: 2023-06-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: 1.15.2
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: 1.15.2
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: nori
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: 2.6.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: 2.6.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: gyoku
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: 1.4.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: 1.4.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: hashie
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: 5.0.0
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: 5.0.0
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rest-client
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ">="
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0'
75
+ version: 2.1.0
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ">="
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '0'
82
+ version: 2.1.0
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: bundler
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -112,128 +112,128 @@ dependencies:
112
112
  name: rspec
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - ">="
115
+ - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: '0'
117
+ version: 3.12.0
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - ">="
122
+ - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: '0'
124
+ version: 3.12.0
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: guard
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - ">="
129
+ - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: '0'
131
+ version: 2.18.0
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - ">="
136
+ - - "~>"
137
137
  - !ruby/object:Gem::Version
138
- version: '0'
138
+ version: 2.18.0
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: guard-rspec
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - ">="
143
+ - - "~>"
144
144
  - !ruby/object:Gem::Version
145
- version: '0'
145
+ version: 4.7.3
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
- - - ">="
150
+ - - "~>"
151
151
  - !ruby/object:Gem::Version
152
- version: '0'
152
+ version: 4.7.3
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: guard-bundler
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
- - - ">="
157
+ - - "~>"
158
158
  - !ruby/object:Gem::Version
159
- version: '0'
159
+ version: 3.0.1
160
160
  type: :development
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
- - - ">="
164
+ - - "~>"
165
165
  - !ruby/object:Gem::Version
166
- version: '0'
166
+ version: 3.0.1
167
167
  - !ruby/object:Gem::Dependency
168
168
  name: simplecov
169
169
  requirement: !ruby/object:Gem::Requirement
170
170
  requirements:
171
- - - ">="
171
+ - - "~>"
172
172
  - !ruby/object:Gem::Version
173
- version: '0'
173
+ version: 0.22.0
174
174
  type: :development
175
175
  prerelease: false
176
176
  version_requirements: !ruby/object:Gem::Requirement
177
177
  requirements:
178
- - - ">="
178
+ - - "~>"
179
179
  - !ruby/object:Gem::Version
180
- version: '0'
180
+ version: 0.22.0
181
181
  - !ruby/object:Gem::Dependency
182
182
  name: vcr
183
183
  requirement: !ruby/object:Gem::Requirement
184
184
  requirements:
185
- - - ">="
185
+ - - "~>"
186
186
  - !ruby/object:Gem::Version
187
- version: '0'
187
+ version: 6.1.0
188
188
  type: :development
189
189
  prerelease: false
190
190
  version_requirements: !ruby/object:Gem::Requirement
191
191
  requirements:
192
- - - ">="
192
+ - - "~>"
193
193
  - !ruby/object:Gem::Version
194
- version: '0'
194
+ version: 6.1.0
195
195
  - !ruby/object:Gem::Dependency
196
196
  name: webmock
197
197
  requirement: !ruby/object:Gem::Requirement
198
198
  requirements:
199
- - - ">="
199
+ - - "~>"
200
200
  - !ruby/object:Gem::Version
201
- version: '0'
201
+ version: 3.18.1
202
202
  type: :development
203
203
  prerelease: false
204
204
  version_requirements: !ruby/object:Gem::Requirement
205
205
  requirements:
206
- - - ">="
206
+ - - "~>"
207
207
  - !ruby/object:Gem::Version
208
- version: '0'
208
+ version: 3.18.1
209
209
  - !ruby/object:Gem::Dependency
210
210
  name: pry
211
211
  requirement: !ruby/object:Gem::Requirement
212
212
  requirements:
213
- - - ">="
213
+ - - "~>"
214
214
  - !ruby/object:Gem::Version
215
- version: '0'
215
+ version: 0.13.0
216
216
  type: :development
217
217
  prerelease: false
218
218
  version_requirements: !ruby/object:Gem::Requirement
219
219
  requirements:
220
- - - ">="
220
+ - - "~>"
221
221
  - !ruby/object:Gem::Version
222
- version: '0'
222
+ version: 0.13.0
223
223
  - !ruby/object:Gem::Dependency
224
224
  name: pry-byebug
225
225
  requirement: !ruby/object:Gem::Requirement
226
226
  requirements:
227
- - - ">="
227
+ - - "~>"
228
228
  - !ruby/object:Gem::Version
229
- version: '0'
229
+ version: 3.10.1
230
230
  type: :development
231
231
  prerelease: false
232
232
  version_requirements: !ruby/object:Gem::Requirement
233
233
  requirements:
234
- - - ">="
234
+ - - "~>"
235
235
  - !ruby/object:Gem::Version
236
- version: '0'
236
+ version: 3.10.1
237
237
  description: " implement api-alike for python libtaxii https://github.com/TAXIIProject/libtaxii "
238
238
  email:
239
239
  - lomato@gmail.com
@@ -256,17 +256,22 @@ files:
256
256
  - lib/taxii/messages/collection_information_request.rb
257
257
  - lib/taxii/messages/content_block.rb
258
258
  - lib/taxii/messages/discovery_request.rb
259
+ - lib/taxii/messages/exclusive_begin_timestamp.rb
259
260
  - lib/taxii/messages/feed_information_request.rb
261
+ - lib/taxii/messages/inclusive_end_timestamp.rb
262
+ - lib/taxii/messages/message.rb
260
263
  - lib/taxii/messages/parameters.rb
261
264
  - lib/taxii/messages/poll_fulfillment_request.rb
262
265
  - lib/taxii/messages/poll_request.rb
266
+ - lib/taxii/messages/record_count.rb
263
267
  - lib/taxii/parsers/sax_poll_response.rb
264
268
  - lib/taxii/poll_client.rb
265
269
  - lib/taxii/time_extensions.rb
266
270
  - lib/taxii/version.rb
267
271
  - ruby-taxii.gemspec
268
272
  homepage: https://github.com/crondaemon/ruby-taxii2
269
- licenses: []
273
+ licenses:
274
+ - GPL-2.0-or-later
270
275
  metadata: {}
271
276
  post_install_message:
272
277
  rdoc_options: []
@@ -283,7 +288,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
283
288
  - !ruby/object:Gem::Version
284
289
  version: '0'
285
290
  requirements: []
286
- rubygems_version: 3.3.7
291
+ rubygems_version: 3.3.26
287
292
  signing_key:
288
293
  specification_version: 4
289
294
  summary: ruby taxii client