aliyun_green 0.1.0 → 0.1.1

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: 5d6ca59239c803cc07eade6755e6ebc3988227d0db92f4e2b6cc297719b94285
4
- data.tar.gz: 9e0f41757f242ea64d48bc88429e91baa9eef9b2c7427a4452d449e87d49d2b8
3
+ metadata.gz: 51f696160ff4a798786b7aeb95ab6f311408f6110a43eab6135be4cf049b998a
4
+ data.tar.gz: 9380d90805a1c12a820a238eb0fdd8c44015ecce3bac434f8b2a5e5b55926111
5
5
  SHA512:
6
- metadata.gz: 5f2c7c465988ca54fa3936de13fe3c0dd8c9079e0109ade311122d0adf5237051bacd8be9784e3eb87c005a21b0e9547ffca38041d4ff99dd86c1b3d495fb732
7
- data.tar.gz: 92905da9386123993c67d758a1fe341112d928ff2cf09932f485ee4a548ebe43e392a5b212a12f5c4c2ae87ce84559a522b3a00199a6f55c696ce54377de2173
6
+ metadata.gz: b9b0b9297d363b52c750070ff99c43ed369685d9ee85c74b46f6c286fb9cbb8a0e5a8eb0e926d9cb1d5abc72d150a3fb1fb5afa63711f6a9a49f1415eb5cb243
7
+ data.tar.gz: 77ce87b6864fbdebc6f481657265919921d9267b14aa52c4714e0c05caf85f34809030eca00e7c8bcbb53f7a7b554de05dc42783d6ea96cdbf57d7c4a8908264
data/Gemfile CHANGED
@@ -5,8 +5,8 @@ source "https://rubygems.org"
5
5
  # Specify your gem's dependencies in aliyun_green.gemspec
6
6
  gemspec
7
7
 
8
+ gem "bundler"
8
9
  gem "rake", "~> 13.0"
9
-
10
10
  gem "rspec", "~> 3.0"
11
-
12
11
  gem "rubocop", "~> 1.7"
12
+ gem "pry", "~> 0.14.1"
data/Gemfile.lock CHANGED
@@ -1,16 +1,25 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- aliyun_green (0.1.0)
4
+ aliyun_green (0.1.1)
5
+ httpx
5
6
 
6
7
  GEM
7
8
  remote: https://rubygems.org/
8
9
  specs:
9
10
  ast (2.4.2)
11
+ coderay (1.1.3)
10
12
  diff-lcs (1.4.4)
13
+ http-2-next (0.5.0)
14
+ httpx (0.18.1)
15
+ http-2-next (>= 0.4.1)
16
+ method_source (1.0.0)
11
17
  parallel (1.21.0)
12
18
  parser (3.0.3.1)
13
19
  ast (~> 2.4.1)
20
+ pry (0.14.1)
21
+ coderay (~> 1.1)
22
+ method_source (~> 1.0)
14
23
  rainbow (3.0.0)
15
24
  rake (13.0.6)
16
25
  regexp_parser (2.2.0)
@@ -47,6 +56,8 @@ PLATFORMS
47
56
 
48
57
  DEPENDENCIES
49
58
  aliyun_green!
59
+ bundler
60
+ pry (~> 0.14.1)
50
61
  rake (~> 13.0)
51
62
  rspec (~> 3.0)
52
63
  rubocop (~> 1.7)
data/aliyun_green.gemspec CHANGED
@@ -31,9 +31,5 @@ Gem::Specification.new do |spec|
31
31
  spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
32
32
  spec.require_paths = ["lib"]
33
33
 
34
- # Uncomment to register a new dependency of your gem
35
- # spec.add_dependency "example-gem", "~> 1.0"
36
-
37
- # For more information and examples about making a new gem, checkout our
38
- # guide at: https://bundler.io/guides/creating_gem.html
34
+ spec.add_dependency 'httpx'
39
35
  end
@@ -0,0 +1,110 @@
1
+ require "httpx"
2
+ require "time"
3
+
4
+ # TODO: validate config
5
+ # TODO: 支持clientInfo
6
+
7
+ module AliyunGreen
8
+ class Client
9
+ attr_accessor :endpoint, :api_version, :access_key_id,:access_key_secret, :enable_internal
10
+
11
+ def initialize(config)
12
+ self.endpoint = config[:endpoint]
13
+ self.api_version = config[:api_version]
14
+ self.access_key_id = config[:access_key_id]
15
+ self.access_key_secret = config[:access_key_secret]
16
+ self.enable_internal = config[:enable_internal]
17
+ end
18
+
19
+ def post(uri , tasks, params = {})
20
+ payload = {
21
+ bizType: 'default',
22
+ scenes: ["antispam"],
23
+ tasks: tasks
24
+ }
25
+
26
+ url = "https://#{get_host(self.endpoint)}#{uri}"
27
+
28
+ mix_headers = default_headers
29
+ request_body = payload.to_json
30
+
31
+ mix_headers['content-md5'] = Digest::MD5.base64digest request_body
32
+ mix_headers['content-length'] = request_body.length.to_s
33
+
34
+ string2sign = string_to_sign('/green/text/scan', mix_headers, params)
35
+ mix_headers.merge!(authorization: authorization(string2sign))
36
+
37
+ response = HTTPX.with(headers: mix_headers).post(url, body: payload.to_json)
38
+
39
+ r = JSON.parse(response)
40
+
41
+ raise AliyunGreen::Error::SignatureDoesNotMatchError if r["Code"] == 'SignatureDoesNotMatch'
42
+ raise AliyunGreen::Error::ClientError.new(r["msg"], r["code"]) if r["code"] != 200
43
+
44
+ r
45
+ end
46
+
47
+ def string_to_sign(uri, headers, query = {})
48
+ header_string = [
49
+ 'POST',
50
+ headers['accept'],
51
+ headers['content-md5'] || '',
52
+ headers['content-type'] || '',
53
+ headers['date'],
54
+ ].join("\n")
55
+ "#{header_string}\n#{canonicalized_headers(headers)}#{canonicalized_resource(uri, query)}"
56
+ end
57
+
58
+ def canonicalized_headers(headers)
59
+ headers.keys.select { |key| key.to_s.start_with? 'x-acs-' }
60
+ .sort.map { |key| "#{key}:#{headers[key].strip}\n" }.join
61
+ end
62
+
63
+ def canonicalized_resource(uri, query_hash = {})
64
+ query_string = query_hash.sort.map { |key, value| "#{key}=#{value}" }.join('&')
65
+ query_string.empty? ? uri : "#{uri}?#{query_string}"
66
+ end
67
+
68
+ def authorization(string_to_sign)
69
+ "acs #{self.access_key_id}:#{signature(string_to_sign)}"
70
+ end
71
+
72
+ def signature(string_to_sign)
73
+ Base64.encode64(OpenSSL::HMAC.digest('sha1', self.access_key_secret, string_to_sign)).strip
74
+ end
75
+
76
+ def default_headers
77
+ default_headers = {
78
+ 'accept' => 'application/json',
79
+ 'content-type' => 'application/json',
80
+ 'date' => Time.now.httpdate,
81
+ 'host' => get_host(self.endpoint),
82
+ 'x-acs-version' => self.api_version,
83
+ 'x-acs-signature-nonce' => SecureRandom.hex(16),
84
+ 'x-acs-signature-version' => '1.0',
85
+ 'x-acs-signature-method' => 'HMAC-SHA1',
86
+ }
87
+ default_headers
88
+ end
89
+
90
+ def get_host(endpoint)
91
+ externals = {
92
+ 'cn-shanghai' => 'green.cn-shanghai.aliyuncs.com',
93
+ 'cn-beijing' => 'green.cn-beijing.aliyuncs.com',
94
+ 'cn-shenzhen' => 'green.cn-shenzhen.aliyuncs.com',
95
+ 'ap-southeast-1' => 'green.ap-southeast-1.aliyuncs.com'
96
+ }
97
+ internals = {
98
+ 'cn-shanghai' => 'green-vpc.cn-shanghai.aliyuncs.com',
99
+ 'cn-beijing' => 'green-vpc.cn-beijing.aliyuncs.com',
100
+ 'cn-shenzhen' => 'green-vpc.cn-shenzhen.aliyuncs.com',
101
+ 'ap-southeast-1' => 'green-vpc.ap-southeast-1.aliyuncs.com'
102
+ }
103
+ if self.enable_internal
104
+ internals[endpoint]
105
+ else
106
+ externals[endpoint]
107
+ end
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,23 @@
1
+ module AliyunGreen
2
+ class Configuration
3
+ attr_accessor :access_key_id, :access_key_secret,
4
+ :region_id, :api_version, :enable_internal
5
+
6
+ def initialize
7
+ @access_key_id = ""
8
+ @access_key_secret = ""
9
+ @endpoint = "cn-beijing"
10
+ @api_version = "2018-05-09"
11
+ @enable_internal = false
12
+ end
13
+
14
+ def to_hash
15
+ {
16
+ endpoint: @endpoint,
17
+ api_version: @api_version,
18
+ access_key_id: @access_key_id,
19
+ access_key_secret: @access_key_secret,
20
+ }
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,18 @@
1
+ module AliyunGreen
2
+ class Error < StandardError
3
+ attr_reader :code
4
+ ClientError = Class.new(self)
5
+
6
+ # 596 账号未授权、账号欠费、账号未开通、账号被禁等原因,具体可以参考返回的msg。
7
+ PermissionDenyError = Class.new(ClientError)
8
+
9
+ # SignatureDoesNotMatch
10
+ SignatureDoesNotMatchError = Class.new(ClientError)
11
+
12
+ def initialize(message = '', code = nil)
13
+ super(message)
14
+
15
+ @code = code
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,24 @@
1
+ module AliyunGreen
2
+ module Text
3
+ def self.scan(content, data_id = nil)
4
+ tasks = [
5
+ {
6
+ dataId: data_id,
7
+ content: content
8
+ }
9
+ ]
10
+
11
+ response = AliyunGreen.client.post('/green/text/scan', tasks)
12
+
13
+ response
14
+ end
15
+
16
+ def self.bulk_scan
17
+ # TODO
18
+ end
19
+
20
+ def self.feedback
21
+ # TODO
22
+ end
23
+ end
24
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module AliyunGreen
4
- VERSION = "0.1.0"
4
+ VERSION = "0.1.1"
5
5
  end
data/lib/aliyun_green.rb CHANGED
@@ -1,8 +1,28 @@
1
1
  # frozen_string_literal: true
2
-
3
2
  require_relative "aliyun_green/version"
3
+ require_relative "aliyun_green/text"
4
+ require_relative "aliyun_green/error"
5
+ require_relative "aliyun_green/client"
6
+ require_relative "aliyun_green/configuration"
4
7
 
5
8
  module AliyunGreen
6
- class Error < StandardError; end
7
- # Your code goes here...
9
+ attr_writer :configuration
10
+
11
+ def self.configuration
12
+ @configuration ||= Configuration.new
13
+ end
14
+
15
+ def self.configure
16
+ yield(configuration)
17
+ end
18
+
19
+ def self.client
20
+ AliyunGreen::Client.new(
21
+ endpoint: 'cn-beijing',
22
+ api_version: '2018-05-09',
23
+ access_key_id: AliyunGreen.configuration.access_key_id,
24
+ access_key_secret: AliyunGreen.configuration.access_key_secret,
25
+ enable_internal: AliyunGreen.configuration.enable_internal
26
+ )
27
+ end
8
28
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aliyun_green
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - 42up
@@ -9,7 +9,21 @@ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
11
  date: 2021-12-07 00:00:00.000000000 Z
12
- dependencies: []
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: httpx
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  description: Write a longer description or delete this line.
14
28
  email:
15
29
  - foobar@v2up.com
@@ -29,6 +43,10 @@ files:
29
43
  - bin/console
30
44
  - bin/setup
31
45
  - lib/aliyun_green.rb
46
+ - lib/aliyun_green/client.rb
47
+ - lib/aliyun_green/configuration.rb
48
+ - lib/aliyun_green/error.rb
49
+ - lib/aliyun_green/text.rb
32
50
  - lib/aliyun_green/version.rb
33
51
  homepage: https://github.com/42up/aliyun_green
34
52
  licenses: