kerio-api 0.1.1 → 0.2.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
  SHA1:
3
- metadata.gz: 60bd63df0d044c5d5256cba7d703fd42e3248d06
4
- data.tar.gz: bc687188f6d8b8ff5762909da3b5c0694dd6efad
3
+ metadata.gz: f69373b20fb3918fec7293e08e4313713d522494
4
+ data.tar.gz: 810d75d6bb149cce9f7309718493288fdf76c040
5
5
  SHA512:
6
- metadata.gz: 962ee0afe9eddd3f706c5bd3b5501f79f315b8b49766971f56d3a71c05b3210ee922f5d5d659fa8798b10d42d790ba0f8c4068585043e6c99dc58b2452495e35
7
- data.tar.gz: 9865eece372c496c9afee9e218663a7d3fb1fb62cddab3ebeb532abbf354bb6573e9af8cff9159b60bbd6917c3deefc231df062a693e44ba7f08e0bf41ac7c79
6
+ metadata.gz: b9d2ad2390a67da3333e1382b121d726d0ef36fa712ddfc56f6b1e1445258fec0aeaa50acb1946d256073fee1ca3d6625ec27803580dbc8f6ccaec3b4aed0c0d
7
+ data.tar.gz: 7cd701832de49f9aa31823239f392a22648d599f4caeb72e70254582289110d259a1f4b00e5b85680d7f3fff8f00f0c47545b9dcfd4d7eacd73cd209c300363d
@@ -1,23 +1,18 @@
1
1
  require 'kerio-api/session'
2
- require 'kerio-api/interface/generic'
3
- require 'kerio-api/interface/session'
2
+ require 'kerio-api/chainable_method'
3
+ require 'kerio-api/method/generic'
4
4
 
5
5
  module Kerio
6
6
  module Api
7
7
  class Client
8
- def initialize (params)
8
+ include Kerio::Api::ChainableMethod
9
9
 
10
+ def initialize (params)
10
11
  @session = Kerio::Api::Session.new(params[:url])
11
12
  end
12
13
 
13
14
  def method_missing(method, *args, &block)
14
-
15
- # prefer special implementation over the generic one
16
- return Kerio::Api::Interface.const_get(method).new(method, @session)
17
-
18
- rescue NameError
19
-
20
- return Kerio::Api::Interface::Generic.new(method, @session)
15
+ return next_method(names: [method], session: @session, args: args)
21
16
  end
22
17
  end
23
18
  end
@@ -0,0 +1,48 @@
1
+ module Kerio
2
+ module Api
3
+ module Method
4
+ class Generic
5
+ include Kerio::Api::ChainableMethod
6
+
7
+ def initialize (params)
8
+
9
+ @names = params[:names]
10
+
11
+ @session = params[:session]
12
+
13
+ @args = params[:args]
14
+
15
+ __invoke_method if @args.count > 0
16
+ end
17
+
18
+ def __invoke_method
19
+ if @resp.nil?
20
+ name = @names.join('.')
21
+ @resp = @session.json_method(name, @args[0])
22
+ end
23
+ end
24
+
25
+ def __result
26
+ __invoke_method
27
+ return @resp['result']
28
+ end
29
+
30
+ def [](index)
31
+ return __result[index]
32
+ end
33
+
34
+ def pretty_print pp
35
+ pp __result
36
+ end
37
+
38
+ def method_missing(method, *args, &block)
39
+
40
+ @names.push(method)
41
+
42
+ return next_method(names: @names, session: @session, args: args)
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+
@@ -0,0 +1,17 @@
1
+ module Kerio
2
+ module Api
3
+ module Method
4
+ module Session
5
+ class Login < Kerio::Api::Method::Generic
6
+
7
+ # we need special implementation of login method to remember the token
8
+ def __invoke_method
9
+
10
+ super
11
+ @session.token = @resp['result']['token']
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,16 @@
1
+ module Kerio
2
+ module Api
3
+ module Method
4
+ module Session
5
+ class Logout < Kerio::Api::Method::Generic
6
+
7
+ #make sure the method is invoked immediately
8
+ def initialize(params)
9
+ super
10
+ __invoke_method
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,18 @@
1
+ require 'json'
2
+
3
+ module Kerio
4
+ module Api
5
+ module Method
6
+ class Upload < Kerio::Api::Method::Generic
7
+
8
+ def __invoke_method
9
+ if @resp.nil?
10
+ raw = @session.upload_file(File.new(@args[0]))
11
+
12
+ @resp = JSON.parse(raw)
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -1,11 +1,10 @@
1
1
  require 'json'
2
- require 'httparty'
2
+ require 'httmultiparty'
3
3
  require 'kerio-api/error'
4
4
 
5
5
  module Kerio
6
6
  module Api
7
7
  class Session
8
-
9
8
  attr_writer :token
10
9
 
11
10
  def initialize(url)
@@ -15,33 +14,60 @@ module Kerio
15
14
  @cookie = nil
16
15
  end
17
16
 
18
- def request(method, params)
17
+ def headers
18
+ headers = {
19
+ 'Accept' => 'application/json-rpc',
20
+ }
21
+ headers['X-Token'] = @token if not @token.nil?
22
+ headers['Cookie'] = @cookie if not @cookie.nil?
23
+
24
+ headers
25
+ end
26
+
27
+ def process_json_response(resp)
28
+ @cookie = resp.headers['Set-Cookie'] if not resp.headers['Set-Cookie'].nil?
29
+
30
+ raise Kerio::Api::Error.new(resp, headers) if ((not resp["error"].nil?) || (resp.code != 200))
31
+ end
32
+
33
+ def json_method(name, params)
34
+
19
35
  body = {
20
36
  jsonrpc: '2.0',
21
37
  id: Kernel.rand(10**12),
22
- method: method,
38
+ method: name,
23
39
  params: params,
24
40
  }
25
41
  body['token'] = @token if not @token.nil?
26
42
 
27
- headers = {
28
- 'Accept' => 'application/json-rpc',
29
- }
30
- headers['X-Token'] = @token if not @token.nil?
31
- headers['Cookie'] = @cookie if not @cookie.nil?
32
-
33
- resp = HTTParty.post(
43
+ resp = HTTMultiParty.post(
34
44
  @url.to_s,
35
45
  body: JSON.generate(body),
36
46
  headers: headers,
37
47
  verify: false,
38
48
  follow_redirects: true,
39
49
  )
40
- @cookie = resp.headers['Set-Cookie'] if not resp.headers['Set-Cookie'].nil?
41
50
 
42
- raise Kerio::Api::Error.new(resp, headers) if not resp["error"].nil?
51
+ process_json_response(resp)
52
+ return resp
53
+ end
54
+
55
+ def upload_file(file)
56
+ h = headers
57
+ h['Accept'] = '*/*'
58
+ h['Content-Type'] = 'multipart/form-data';
59
+
60
+ resp = HTTMultiParty.post(
61
+ @url.to_s + '/upload',
62
+ headers: h,
63
+ verify: false,
64
+ query: {
65
+ 'newFile.bin': file,
66
+ }
67
+ )
43
68
 
44
- return resp["result"]
69
+ process_json_response(resp)
70
+ return resp
45
71
  end
46
72
  end
47
73
  end
metadata CHANGED
@@ -1,85 +1,85 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kerio-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Petr Baloun
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-12-11 00:00:00.000000000 Z
11
+ date: 2016-12-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: httparty
14
+ name: httmultiparty
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.14'
19
+ version: 0.3.16
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.14'
26
+ version: 0.3.16
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: json
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '2'
33
+ version: 2.0.2
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: '2'
40
+ version: 2.0.2
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '3'
47
+ version: '3.5'
48
48
  type: :development
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: '3'
54
+ version: '3.5'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: webmock
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: 2.3.1
62
62
  type: :development
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: 2.3.1
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: bundler
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0'
75
+ version: '1.12'
76
76
  type: :development
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: '1.12'
83
83
  description: This gem allows simple access to administration API of Kerio products
84
84
  email: balounp@gmail.com
85
85
  executables: []
@@ -89,8 +89,10 @@ files:
89
89
  - lib/kerio-api.rb
90
90
  - lib/kerio-api/client.rb
91
91
  - lib/kerio-api/error.rb
92
- - lib/kerio-api/interface/generic.rb
93
- - lib/kerio-api/interface/session.rb
92
+ - lib/kerio-api/method/generic.rb
93
+ - lib/kerio-api/method/session/login.rb
94
+ - lib/kerio-api/method/session/logout.rb
95
+ - lib/kerio-api/method/upload.rb
94
96
  - lib/kerio-api/session.rb
95
97
  homepage: https://github.com/balous/ruby-kerio-api
96
98
  licenses:
@@ -1,16 +0,0 @@
1
- module Kerio
2
- module Api
3
- module Interface
4
- class Generic
5
- def initialize (name, session)
6
- @name = name
7
- @session = session
8
- end
9
-
10
- def method_missing(method, *args, &block)
11
- return @session.request("#{@name}.#{method}", args[0])
12
- end
13
- end
14
- end
15
- end
16
- end
@@ -1,21 +0,0 @@
1
- require 'kerio-api/interface/generic'
2
-
3
- module Kerio
4
- module Api
5
- module Interface
6
- class Session < Kerio::Api::Interface::Generic
7
-
8
- # we need special implementation of login method to remember the token
9
- def login(params)
10
-
11
- result = @session.request(
12
- 'Session.login',
13
- params,
14
- )
15
-
16
- @session.token = result['token']
17
- end
18
- end
19
- end
20
- end
21
- end