tigre-client 0.3.8 → 0.3.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Gemfile.lock CHANGED
@@ -1,8 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- tigre-client (0.3.7)
4
+ tigre-client (0.3.8)
5
5
  faraday (~> 0.6.0)
6
+ right_aws (~> 2.1.0)
6
7
 
7
8
  GEM
8
9
  remote: http://rubygems.org/
@@ -16,6 +17,9 @@ GEM
16
17
  json (1.5.1)
17
18
  multipart-post (1.1.0)
18
19
  rack (1.2.2)
20
+ right_aws (2.1.0)
21
+ right_http_connection (>= 1.2.5)
22
+ right_http_connection (1.3.0)
19
23
  rspec (2.5.0)
20
24
  rspec-core (~> 2.5.0)
21
25
  rspec-expectations (~> 2.5.0)
@@ -4,6 +4,8 @@ module Tigre
4
4
  extend Tigre::CommonParams
5
5
  extend Tigre::CommonGetters
6
6
 
7
+ # required
8
+ # analysis_id => String
7
9
  def get(analysis_id)
8
10
  if analysis_id == ''
9
11
  raise "Missing analysis_id parameter"
@@ -1,3 +1,5 @@
1
+ require 'digest'
2
+
1
3
  module Tigre
2
4
  class Sample
3
5
 
@@ -6,24 +8,92 @@ module Tigre
6
8
  extend Tigre::TagComponents
7
9
 
8
10
  # required params
9
- # file_location => String path to the file
10
11
  # md5 => String
11
12
  # optional params
13
+ # file_location => String path to the file
12
14
  # options => Hash
13
15
  # :tags => String => I.E 'foo'
14
16
  # :tags => String (comma seperated) => I.E 'foo,bar,baz'
15
17
  # :tags => Array => ['foo', 'bar', 'baz']
18
+ # :dbts => Hash {:key1 => value, :key2 => value} where the key is what the name of the
19
+ # attribute is and the value should be a boolean
20
+ # :mutex_name_list => String (comma seperated) => I.E 'foo,bar,baz'
21
+ # :mutex_name_list => Array => ['foo', 'bar', 'baz']
16
22
  def self.post(file_location, md5, options={})
17
- if file_location == ''|| md5 == ''
18
- raise ArguementError, "File_location or md5 parameter cannot be empty"
19
- end
23
+ raise "md5 parameter cannot be empty" if md5 == ''
20
24
 
21
25
  options[:tags] = package_array_list(options[:tags]) if options[:tags]
22
26
 
23
- post_data = {:file => File.new(file_location), :md5 => md5}
24
- Tigre.post_connection('/samples', post_data.merge(options))
27
+ post_data = {:md5 => md5}
28
+
29
+ unless file_location == ''
30
+ if Tigre.s3_enabled?
31
+ process_after = true
32
+ else
33
+ post_data[:file] = File.new(file_location)
34
+ end
35
+ end
36
+
37
+ post_data[:metadatas] = self.get_metadatas(options)
38
+
39
+ result = Tigre.post_connection('/samples', post_data.merge(options))
40
+
41
+ case
42
+ when result[1] == 'success_nofile' && process_after
43
+ result = self.send_file_to_s3(md5, file_location)
44
+ when result[1] == 'success' && process_after && options[:force]
45
+ result = self.send_file_to_s3(md5, file_location)
46
+ end
47
+
48
+ result
49
+ end
50
+
51
+ def self.get_metadatas(options)
52
+ hash = {}
53
+ if options[:dbts]
54
+ hash[:dbts] = options[:dbts]
55
+ end
56
+
57
+ if options[:mutex_name_list]
58
+ hash[:mutex_name_list] = package_array_list(options[:mutex_name_list])
59
+ end
60
+ hash.empty? ? nil : hash
61
+ end
62
+
63
+ def self.send_file_to_s3(md5, file)
64
+ Tigre.logger.info 'Uploading file directly to S3'
65
+ s3 = RightAws::S3.new(Tigre.s3_key, Tigre.s3_secret)
66
+ bucket = s3.bucket(Tigre.s3_bucket)
67
+ file_name = [md5[0],md5[1],md5[2],md5[3],md5].join('/')
68
+
69
+ bucket.put(file_name, IO.binread(file))
70
+
71
+ Tigre.logger.info 'Updating sample with filename / filesize'
72
+ f = File.new(file, 'r')
73
+ digest_hash = self.calculate_checksums(f)
74
+ post_data = {:md5 => md5,
75
+ :sample => {:file_original_filename => File.basename(f),
76
+ :file_size => File.size(f),
77
+ :sha1 => digest_hash[:sha1],
78
+ :sha256 => digest_hash[:sha256]
79
+ }
80
+ }
81
+ Tigre.post_connection('/samples', post_data)
25
82
  end
26
-
83
+
84
+ def self.calculate_checksums(file)
85
+ sha1 = Sample.calculate_file_digest(Digest::SHA1.new, file)
86
+ sha256 = Sample.calculate_file_digest(Digest::SHA2.new, file)
87
+ {:sha1 => sha1, :sha256 => sha256}
88
+ end
89
+
90
+ def self.calculate_file_digest(digest, file)
91
+ File.open(file, "rb") do |f|
92
+ digest.update f.read(8192) until f.eof
93
+ end
94
+ digest.hexdigest
95
+ end
96
+
27
97
  # required params
28
98
  # md5 => String
29
99
  # params_hash => Hash
@@ -1,5 +1,5 @@
1
1
  module Tigre
2
2
  module Client
3
- VERSION = "0.3.8"
3
+ VERSION = "0.3.9"
4
4
  end
5
5
  end
data/lib/tigre-client.rb CHANGED
@@ -1,6 +1,7 @@
1
- # faraday
1
+ # 3rd party libs
2
2
  require 'faraday'
3
3
  require 'tigre-client/multipart_with_file'
4
+ require 'right_aws'
4
5
 
5
6
  # common functionality libraries
6
7
  require 'tigre-client/common/analysis_components'
@@ -15,15 +16,19 @@ require 'tigre-client/sample'
15
16
  require 'tigre-client/url'
16
17
 
17
18
  module Tigre
18
-
19
+
19
20
  class << self
20
- attr_accessor :token, :server, :endpoint, :conn, :logger
21
-
21
+ attr_accessor :token, :server, :endpoint, :conn, :logger, :s3_key, :s3_secret, :s3_bucket
22
+
22
23
  def configure
23
24
  yield self
24
25
  true
25
26
  end
26
-
27
+
28
+ def s3_enabled?
29
+ !Tigre.s3_key.nil? && !Tigre.s3_secret.nil? && !Tigre.s3_bucket.nil?
30
+ end
31
+
27
32
  def build_get_connection
28
33
  @conn = Faraday.new(:url => "#{Tigre.server}") do |builder|
29
34
  builder.adapter :net_http
@@ -38,13 +43,13 @@ module Tigre
38
43
  builder.adapter :net_http
39
44
  end
40
45
  end
41
-
46
+
42
47
  def get_connection(uri_string)
43
48
  build_get_connection
44
49
  response = Tigre.conn.get(Tigre.endpoint + uri_string, 'API-TOKEN' => Tigre.token)
45
50
  [response.status, response.body]
46
51
  end
47
-
52
+
48
53
  def post_connection(uri_string, data)
49
54
  build_post_connection
50
55
  response = Tigre.conn.post do |req|
@@ -54,11 +59,11 @@ module Tigre
54
59
  end
55
60
  [response.status, response.body]
56
61
  end
57
-
62
+
58
63
  # TODO do we need a post_connection and a post_file_connection?
59
64
  # def post_file_connection(uri_string, data)
60
65
  # build_post_connection
61
- #
66
+ #
62
67
  # response = Tigre.conn.post do |req|
63
68
  # req.url Tigre.endpoint + uri_string
64
69
  # req.headers['API-TOKEN'] = Tigre.token
@@ -66,10 +71,9 @@ module Tigre
66
71
  # end
67
72
  # [response.status, response.body]
68
73
  # end
69
-
74
+
70
75
  def put_connection(uri_string, data)
71
76
  build_post_connection
72
-
73
77
  response = Tigre.conn.put do |req|
74
78
  req.url Tigre.endpoint + uri_string
75
79
  req.headers['API-TOKEN'] = Tigre.token
@@ -77,7 +81,7 @@ module Tigre
77
81
  end
78
82
  [response.status, response.body]
79
83
  end
80
-
84
+
81
85
  end
82
-
86
+
83
87
  end
data/tigre-client.gemspec CHANGED
@@ -25,5 +25,6 @@ Gem::Specification.new do |s|
25
25
  s.add_development_dependency "json"
26
26
 
27
27
  s.add_dependency('faraday', '~> 0.6.0')
28
+ s.add_dependency('right_aws', '~> 2.1.0')
28
29
 
29
30
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: tigre-client
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.3.8
5
+ version: 0.3.9
6
6
  platform: ruby
7
7
  authors:
8
8
  - Marcio Castilho
@@ -11,7 +11,7 @@ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
13
 
14
- date: 2011-05-05 00:00:00 -04:00
14
+ date: 2011-05-09 00:00:00 -04:00
15
15
  default_executable:
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
@@ -47,6 +47,17 @@ dependencies:
47
47
  version: 0.6.0
48
48
  type: :runtime
49
49
  version_requirements: *id003
50
+ - !ruby/object:Gem::Dependency
51
+ name: right_aws
52
+ prerelease: false
53
+ requirement: &id004 !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ~>
57
+ - !ruby/object:Gem::Version
58
+ version: 2.1.0
59
+ type: :runtime
60
+ version_requirements: *id004
50
61
  description: Tigre Client API Library
51
62
  email:
52
63
  - marcioc@sunbelt-software.com