brick_ftp 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/brick_ftp.rb +7 -4
- data/lib/brick_ftp/api.rb +5 -0
- data/lib/brick_ftp/api/authentication/session.rb +6 -4
- data/lib/brick_ftp/api/base.rb +28 -72
- data/lib/brick_ftp/api/behavior.rb +13 -7
- data/lib/brick_ftp/api/bundle.rb +11 -6
- data/lib/brick_ftp/api/bundle_content.rb +11 -13
- data/lib/brick_ftp/api/bundle_download.rb +11 -11
- data/lib/brick_ftp/api/file.rb +13 -3
- data/lib/brick_ftp/api/file_operation.rb +6 -0
- data/lib/brick_ftp/api/file_operation/copy.rb +10 -0
- data/lib/brick_ftp/api/file_operation/move.rb +10 -0
- data/lib/brick_ftp/api/file_operation/upload.rb +49 -0
- data/lib/brick_ftp/api/folder.rb +11 -6
- data/lib/brick_ftp/api/folder_behavior.rb +12 -0
- data/lib/brick_ftp/api/group.rb +10 -7
- data/lib/brick_ftp/api/history/file.rb +14 -13
- data/lib/brick_ftp/api/history/folder.rb +14 -13
- data/lib/brick_ftp/api/history/login.rb +14 -13
- data/lib/brick_ftp/api/history/site.rb +14 -13
- data/lib/brick_ftp/api/history/user.rb +14 -13
- data/lib/brick_ftp/api/notification.rb +8 -5
- data/lib/brick_ftp/api/permission.rb +11 -5
- data/lib/brick_ftp/api/public_key.rb +9 -5
- data/lib/brick_ftp/api/user.rb +30 -29
- data/lib/brick_ftp/api_component.rb +79 -0
- data/lib/brick_ftp/api_definition.rb +66 -0
- data/lib/brick_ftp/client.rb +5 -5
- data/lib/brick_ftp/http_client.rb +4 -4
- data/lib/brick_ftp/version.rb +1 -1
- metadata +9 -6
- data/lib/brick_ftp/api/behavior_folder.rb +0 -8
- data/lib/brick_ftp/api/file_copy.rb +0 -8
- data/lib/brick_ftp/api/file_move.rb +0 -8
- data/lib/brick_ftp/api/file_upload.rb +0 -43
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3865f1640bda9de3a80c620e958bf9de23901ca0
|
4
|
+
data.tar.gz: 12ebd6763744542fd4657910bb5e4cffd2635ada
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 912c304822601600468a880b45d572f8ea744c912d589576448004a3bdee956fa83366892581a6f4116405d69ebef98f5eaf22e6c2f711cf0c42f07662587ff9
|
7
|
+
data.tar.gz: 4fdc3e3a5471577f2462b072242d15bb74a1bbde3b5dd45ee12e3bc9f8a1f3fbcc3b9927ad8dd1b0508486b953bedb46afd3db93a92484d08244e5bc56cb27d3
|
data/lib/brick_ftp.rb
CHANGED
@@ -4,6 +4,8 @@ require 'brick_ftp/configuration'
|
|
4
4
|
require 'brick_ftp/http_client'
|
5
5
|
require 'brick_ftp/client'
|
6
6
|
require 'brick_ftp/api'
|
7
|
+
require 'brick_ftp/api_component'
|
8
|
+
require 'brick_ftp/api_definition'
|
7
9
|
require 'brick_ftp/api/base'
|
8
10
|
require 'brick_ftp/api/authentication'
|
9
11
|
require 'brick_ftp/api/authentication/session'
|
@@ -22,12 +24,13 @@ require 'brick_ftp/api/bundle'
|
|
22
24
|
require 'brick_ftp/api/bundle_content'
|
23
25
|
require 'brick_ftp/api/bundle_download'
|
24
26
|
require 'brick_ftp/api/behavior'
|
25
|
-
require 'brick_ftp/api/
|
27
|
+
require 'brick_ftp/api/folder_behavior'
|
26
28
|
require 'brick_ftp/api/folder'
|
27
29
|
require 'brick_ftp/api/file'
|
28
|
-
require 'brick_ftp/api/
|
29
|
-
require 'brick_ftp/api/
|
30
|
-
require 'brick_ftp/api/
|
30
|
+
require 'brick_ftp/api/file_operation'
|
31
|
+
require 'brick_ftp/api/file_operation/move'
|
32
|
+
require 'brick_ftp/api/file_operation/copy'
|
33
|
+
require 'brick_ftp/api/file_operation/upload'
|
31
34
|
|
32
35
|
module BrickFTP
|
33
36
|
# Return configuration.
|
data/lib/brick_ftp/api.rb
CHANGED
@@ -2,10 +2,12 @@ module BrickFTP
|
|
2
2
|
module API
|
3
3
|
module Authentication
|
4
4
|
class Session < BrickFTP::API::Base
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
5
|
+
endpoint :post, :create, '/api/rest/v1/sessions.json'
|
6
|
+
endpoint :delete, :delete, '/api/rest/v1/sessions.json'
|
7
|
+
|
8
|
+
attribute :id
|
9
|
+
attribute :username, writable: true
|
10
|
+
attribute :password, writable: true
|
9
11
|
|
10
12
|
def self.create(params = {})
|
11
13
|
super.tap { |x| BrickFTP.config.session = x }
|
data/lib/brick_ftp/api/base.rb
CHANGED
@@ -3,107 +3,63 @@ require 'cgi'
|
|
3
3
|
module BrickFTP
|
4
4
|
module API
|
5
5
|
class Base
|
6
|
-
class NoSuchAPIError < StandardError; end
|
7
|
-
|
8
|
-
class UndefinedAttributesError < StandardError
|
9
|
-
def initialize(undefined_attributes = [])
|
10
|
-
super "No such attributes: #{undefined_attributes.join(', ')}"
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
6
|
def self.inherited(subclass)
|
15
|
-
subclass.
|
16
|
-
@api = {}
|
17
|
-
@writable_attributes = []
|
18
|
-
@readonly_attributes = []
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
class << self
|
23
|
-
attr_reader :api, :writable_attributes, :readonly_attributes
|
7
|
+
subclass.include APIDefinition
|
24
8
|
end
|
25
9
|
|
26
|
-
def self.
|
27
|
-
|
28
|
-
end
|
29
|
-
|
30
|
-
def self.define_api(method, path)
|
31
|
-
@api[method] = path
|
32
|
-
end
|
33
|
-
|
34
|
-
def self.define_writable_attributes(*attributes)
|
35
|
-
@writable_attributes = attributes
|
36
|
-
attr_reader *@writable_attributes.map { |x| x.to_s.tr('-', '_') }
|
37
|
-
end
|
38
|
-
|
39
|
-
def self.define_readonly_attributes(*attributes)
|
40
|
-
@readonly_attributes = attributes
|
41
|
-
attr_reader *@readonly_attributes.map { |x| x.to_s.tr('-', '_') }
|
42
|
-
end
|
43
|
-
|
44
|
-
def self.api_path_for(method, params = {})
|
45
|
-
raise NoSuchAPIError, "#{method} #{self.name}" unless @api.key?(method)
|
46
|
-
@api[method] % Hash[params.map { |k, v| [k, CGI.escape(v.to_s)] }]
|
47
|
-
end
|
48
|
-
|
49
|
-
QUERY_PARAMS = %i(page per_page start_at recursive).freeze
|
50
|
-
|
51
|
-
def self.all(path_params = {})
|
52
|
-
path_params.symbolize_keys!
|
53
|
-
query_params = QUERY_PARAMS.each_with_object({}) do |name, res|
|
54
|
-
res.update(name => path_params.delete(name)) if path_params.key?(name)
|
55
|
-
end
|
56
|
-
|
57
|
-
path = api_path_for(:index, path_params)
|
58
|
-
unless query_params.empty?
|
59
|
-
query = query_params.each_with_object([]) do |(k, v), res|
|
60
|
-
res << "#{CGI.escape(k.to_s)}=#{CGI.escape(v.to_s)}"
|
61
|
-
end.join('&')
|
62
|
-
path = "#{path}?#{query}"
|
63
|
-
end
|
10
|
+
def self.all(params = {})
|
11
|
+
params.symbolize_keys!
|
64
12
|
|
65
|
-
BrickFTP::HTTPClient.new.
|
13
|
+
data = BrickFTP::HTTPClient.new.send(
|
14
|
+
endpoints[:index][:http_method],
|
15
|
+
api_path_for(:index, params),
|
16
|
+
params: api_component_for(:index).except_path_and_query(params)
|
17
|
+
)
|
18
|
+
data.map { |x| new(x.symbolize_keys) }
|
66
19
|
end
|
67
20
|
|
68
21
|
def self.find(id)
|
69
|
-
|
70
|
-
|
71
|
-
|
22
|
+
data = BrickFTP::HTTPClient.new.send(
|
23
|
+
endpoints[:show][:http_method],
|
24
|
+
api_path_for(:show, id)
|
25
|
+
)
|
72
26
|
data.empty? ? nil : new(data.symbolize_keys)
|
73
27
|
end
|
74
28
|
|
75
|
-
def self.create(params = {}
|
29
|
+
def self.create(params = {})
|
76
30
|
params.symbolize_keys!
|
77
|
-
undefined_attributes = params.keys - writable_attributes
|
78
|
-
raise UndefinedAttributesError, undefined_attributes unless undefined_attributes.empty?
|
79
31
|
|
80
|
-
data = BrickFTP::HTTPClient.new.
|
32
|
+
data = BrickFTP::HTTPClient.new.send(
|
33
|
+
endpoints[:create][:http_method],
|
34
|
+
api_path_for(:create, params),
|
35
|
+
params: api_component_for(:create).except_path_and_query(params)
|
36
|
+
)
|
81
37
|
data = {} if data.is_a?(Array)
|
82
38
|
new(data.symbolize_keys)
|
83
39
|
end
|
84
40
|
|
85
41
|
def initialize(params = {})
|
86
|
-
undefined_attributes = params.keys - self.class.attributes
|
87
|
-
raise UndefinedAttributesError, undefined_attributes unless undefined_attributes.empty?
|
88
|
-
|
89
42
|
params.each { |k, v| instance_variable_set(:"@#{k}", v) }
|
90
43
|
end
|
91
44
|
|
92
45
|
def update(params = {})
|
93
46
|
params.symbolize_keys!
|
94
|
-
undefined_attributes = params.keys - self.class.writable_attributes
|
95
|
-
raise UndefinedAttributesError, undefined_attributes unless undefined_attributes.empty?
|
96
47
|
|
97
|
-
data = BrickFTP::HTTPClient.new.
|
48
|
+
data = BrickFTP::HTTPClient.new.send(
|
49
|
+
self.class.endpoints[:update][:http_method],
|
50
|
+
self.class.api_path_for(:update, self),
|
51
|
+
params: self.class.api_component_for(:update).except_path_and_query(params)
|
52
|
+
)
|
98
53
|
data.each { |k, v| instance_variable_set(:"@#{k}", v) }
|
99
54
|
|
100
55
|
self
|
101
56
|
end
|
102
57
|
|
103
58
|
def destroy
|
104
|
-
|
105
|
-
|
106
|
-
|
59
|
+
BrickFTP::HTTPClient.new.send(
|
60
|
+
self.class.endpoints[:delete][:http_method],
|
61
|
+
self.class.api_path_for(:delete, self),
|
62
|
+
)
|
107
63
|
true
|
108
64
|
end
|
109
65
|
end
|
@@ -1,13 +1,19 @@
|
|
1
1
|
module BrickFTP
|
2
2
|
module API
|
3
3
|
class Behavior < Base
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
4
|
+
endpoint :get, :index, '/api/rest/v1/behaviors.json'
|
5
|
+
endpoint :get, :show, '/api/rest/v1/behaviors/%{id}.json'
|
6
|
+
endpoint :post, :create, '/api/rest/v1/behaviors.json'
|
7
|
+
endpoint :put, :update, '/api/rest/v1/behaviors/%{id}.json'
|
8
|
+
endpoint :delete, :delete, '/api/rest/v1/behaviors/%{id}.json'
|
9
|
+
|
10
|
+
attribute :id
|
11
|
+
attribute :path
|
12
|
+
attribute :behavior
|
13
|
+
attribute :value
|
14
|
+
attribute :path, writable: true
|
15
|
+
attribute :behavior, writable: true
|
16
|
+
attribute :value, writable: true
|
11
17
|
end
|
12
18
|
end
|
13
19
|
end
|
data/lib/brick_ftp/api/bundle.rb
CHANGED
@@ -1,12 +1,17 @@
|
|
1
1
|
module BrickFTP
|
2
2
|
module API
|
3
3
|
class Bundle < Base
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
4
|
+
endpoint :get, :index, '/api/rest/v1/bundles.json'
|
5
|
+
endpoint :get, :show, '/api/rest/v1/bundles/%{id}.json'
|
6
|
+
endpoint :post, :create, '/api/rest/v1/bundles.json'
|
7
|
+
endpoint :delete, :delete, '/api/rest/v1/bundles/%{id}.json'
|
8
|
+
|
9
|
+
attribute :id
|
10
|
+
attribute :code
|
11
|
+
attribute :url
|
12
|
+
attribute :user_id
|
13
|
+
attribute :created_at
|
14
|
+
attribute :paths, writable: true
|
10
15
|
end
|
11
16
|
end
|
12
17
|
end
|
@@ -1,20 +1,18 @@
|
|
1
1
|
module BrickFTP
|
2
2
|
module API
|
3
3
|
class BundleContent < Base
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
endpoint :post, :index, ->(params) {
|
5
|
+
params.key?(:path) ? '/api/rest/v1/bundles/folders/%{path}' : '/api/rest/v1/bundles/folders'
|
6
|
+
}
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
data.map { |x| new(x.symbolize_keys) }
|
17
|
-
end
|
8
|
+
attribute :id
|
9
|
+
attribute :path
|
10
|
+
attribute :type
|
11
|
+
attribute :size
|
12
|
+
attribute :crc32
|
13
|
+
attribute :md5
|
14
|
+
attribute :code, writable: true
|
15
|
+
attribute :host, writable: true
|
18
16
|
end
|
19
17
|
end
|
20
18
|
end
|
@@ -1,18 +1,18 @@
|
|
1
1
|
module BrickFTP
|
2
2
|
module API
|
3
3
|
class BundleDownload < Base
|
4
|
-
|
5
|
-
define_writable_attributes :code, :host, :paths
|
6
|
-
define_readonly_attributes :id, :path, :type, :size, :crc32, :md5, :download_uri
|
4
|
+
endpoint :post, :index, '/api/rest/v1/bundles/files.json'
|
7
5
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
6
|
+
attribute :id
|
7
|
+
attribute :path
|
8
|
+
attribute :type
|
9
|
+
attribute :size
|
10
|
+
attribute :crc32
|
11
|
+
attribute :md5
|
12
|
+
attribute :download_uri
|
13
|
+
attribute :code, writable: true
|
14
|
+
attribute :host, writable: true
|
15
|
+
attribute :paths, writable: true
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
data/lib/brick_ftp/api/file.rb
CHANGED
@@ -1,9 +1,19 @@
|
|
1
1
|
module BrickFTP
|
2
2
|
module API
|
3
3
|
class File < Base
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
endpoint :get, :show, '/api/rest/v1/files/%{path}'
|
5
|
+
endpoint :delete, :delete, '/api/rest/v1/files/%{path}'
|
6
|
+
|
7
|
+
attribute :id
|
8
|
+
attribute :path
|
9
|
+
attribute :type
|
10
|
+
attribute :size
|
11
|
+
attribute :mtime
|
12
|
+
attribute :crc32
|
13
|
+
attribute :md5
|
14
|
+
attribute :download_uri
|
15
|
+
attribute :provided_mtime
|
16
|
+
attribute :permissions
|
7
17
|
end
|
8
18
|
end
|
9
19
|
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module BrickFTP
|
2
|
+
module API
|
3
|
+
module FileOperation
|
4
|
+
class Upload < BrickFTP::API::Base
|
5
|
+
endpoint :post, :create, '/api/rest/v1/files/%{path}'
|
6
|
+
|
7
|
+
attribute :id
|
8
|
+
attribute :ref
|
9
|
+
attribute :http_method
|
10
|
+
attribute :upload_uri
|
11
|
+
attribute :partsize
|
12
|
+
attribute :part_number
|
13
|
+
attribute :available_parts
|
14
|
+
attribute :headers
|
15
|
+
attribute :parameters
|
16
|
+
attribute :send
|
17
|
+
attribute :path
|
18
|
+
attribute :action
|
19
|
+
attribute :ask_about_overwrites
|
20
|
+
attribute :type
|
21
|
+
attribute :size
|
22
|
+
attribute :mtime
|
23
|
+
attribute :crc32
|
24
|
+
attribute :md5
|
25
|
+
attribute :expires
|
26
|
+
attribute :next_partsize
|
27
|
+
attribute :provided_mtime
|
28
|
+
attribute :permission
|
29
|
+
attribute :action, writable: true
|
30
|
+
attribute :ref, writable: true
|
31
|
+
attribute :part, writable: true
|
32
|
+
attribute :restart, writable: true
|
33
|
+
|
34
|
+
def self.create(path:, source:)
|
35
|
+
api_client = BrickFTP::HTTPClient.new
|
36
|
+
step1 = api_client.post(api_path_for(:create, path: path), params: { action: 'put' })
|
37
|
+
|
38
|
+
upload_uri = URI.parse(step1['upload_uri'])
|
39
|
+
upload_client = BrickFTP::HTTPClient.new(upload_uri.host)
|
40
|
+
upload_client.put(step1['upload_uri'], params: source)
|
41
|
+
|
42
|
+
step3 = api_client.post(api_path_for(:create, path: path), params: { action: 'end', ref: step1['ref'] })
|
43
|
+
|
44
|
+
new(step1.merge(step3).symbolize_keys)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/lib/brick_ftp/api/folder.rb
CHANGED
@@ -1,13 +1,18 @@
|
|
1
1
|
module BrickFTP
|
2
2
|
module API
|
3
3
|
class Folder < Base
|
4
|
-
|
5
|
-
|
6
|
-
define_readonly_attributes :id, :path, :type, :size, :mtime, :crc32, :md5, :provided_mtime, :permissions
|
4
|
+
endpoint :get, :index, '/api/rest/v1/folders/%{path}', :page, :per_page, :search, :'sort_by[path]', :'sort_by[size]', :'sort_by[modified_at_datetime]'
|
5
|
+
endpoint :post, :create, '/api/rest/v1/folders/%{path}'
|
7
6
|
|
8
|
-
|
9
|
-
|
10
|
-
|
7
|
+
attribute :id
|
8
|
+
attribute :path
|
9
|
+
attribute :type
|
10
|
+
attribute :size
|
11
|
+
attribute :mtime
|
12
|
+
attribute :crc32
|
13
|
+
attribute :md5
|
14
|
+
attribute :provided_mtime
|
15
|
+
attribute :permissions
|
11
16
|
end
|
12
17
|
end
|
13
18
|
end
|
data/lib/brick_ftp/api/group.rb
CHANGED
@@ -1,13 +1,16 @@
|
|
1
1
|
module BrickFTP
|
2
2
|
module API
|
3
3
|
class Group < Base
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
4
|
+
endpoint :get, :index, '/api/rest/v1/groups.json'
|
5
|
+
endpoint :get, :show, '/api/rest/v1/groups/%{id}.json'
|
6
|
+
endpoint :post, :create, '/api/rest/v1/groups.json'
|
7
|
+
endpoint :put, :update, '/api/rest/v1/groups/%{id}.json'
|
8
|
+
endpoint :delete, :delete, '/api/rest/v1/groups/%{id}.json'
|
9
|
+
|
10
|
+
attribute :id
|
11
|
+
attribute :name, writable: true
|
12
|
+
attribute :notes, writable: true
|
13
|
+
attribute :user_ids, writable: true
|
11
14
|
end
|
12
15
|
end
|
13
16
|
end
|
@@ -2,19 +2,20 @@ module BrickFTP
|
|
2
2
|
module API
|
3
3
|
module History
|
4
4
|
class File < BrickFTP::API::Base
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
5
|
+
endpoint :get, :index, '/api/rest/v1/history/files/%{path}', :page, :per_page, :start_at
|
6
|
+
|
7
|
+
attribute :id
|
8
|
+
attribute :when
|
9
|
+
attribute :user_id
|
10
|
+
attribute :username
|
11
|
+
attribute :action
|
12
|
+
attribute :failure_type
|
13
|
+
attribute :path
|
14
|
+
attribute :source
|
15
|
+
attribute :destination
|
16
|
+
attribute :targets
|
17
|
+
attribute :ip
|
18
|
+
attribute :interface
|
18
19
|
end
|
19
20
|
end
|
20
21
|
end
|
@@ -2,19 +2,20 @@ module BrickFTP
|
|
2
2
|
module API
|
3
3
|
module History
|
4
4
|
class Folder < BrickFTP::API::Base
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
5
|
+
endpoint :get, :index, '/api/rest/v1/history/folders/%{path}', :page, :per_page, :start_at
|
6
|
+
|
7
|
+
attribute :id
|
8
|
+
attribute :when
|
9
|
+
attribute :user_id
|
10
|
+
attribute :username
|
11
|
+
attribute :action
|
12
|
+
attribute :failure_type
|
13
|
+
attribute :path
|
14
|
+
attribute :source
|
15
|
+
attribute :destination
|
16
|
+
attribute :targets
|
17
|
+
attribute :ip
|
18
|
+
attribute :interface
|
18
19
|
end
|
19
20
|
end
|
20
21
|
end
|
@@ -2,19 +2,20 @@ module BrickFTP
|
|
2
2
|
module API
|
3
3
|
module History
|
4
4
|
class Login < BrickFTP::API::Base
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
5
|
+
endpoint :get, :index, '/api/rest/v1/history/login.json', :page, :per_page, :start_at
|
6
|
+
|
7
|
+
attribute :id
|
8
|
+
attribute :when
|
9
|
+
attribute :user_id
|
10
|
+
attribute :username
|
11
|
+
attribute :action
|
12
|
+
attribute :failure_type
|
13
|
+
attribute :path
|
14
|
+
attribute :source
|
15
|
+
attribute :destination
|
16
|
+
attribute :targets
|
17
|
+
attribute :ip
|
18
|
+
attribute :interface
|
18
19
|
end
|
19
20
|
end
|
20
21
|
end
|
@@ -2,19 +2,20 @@ module BrickFTP
|
|
2
2
|
module API
|
3
3
|
module History
|
4
4
|
class Site < BrickFTP::API::Base
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
5
|
+
endpoint :get, :index, '/api/rest/v1/history.json', :page, :per_page, :start_at
|
6
|
+
|
7
|
+
attribute :id
|
8
|
+
attribute :when
|
9
|
+
attribute :user_id
|
10
|
+
attribute :username
|
11
|
+
attribute :action
|
12
|
+
attribute :failure_type
|
13
|
+
attribute :path
|
14
|
+
attribute :source
|
15
|
+
attribute :destination
|
16
|
+
attribute :targets
|
17
|
+
attribute :ip
|
18
|
+
attribute :interface
|
18
19
|
end
|
19
20
|
end
|
20
21
|
end
|
@@ -2,19 +2,20 @@ module BrickFTP
|
|
2
2
|
module API
|
3
3
|
module History
|
4
4
|
class User < BrickFTP::API::Base
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
5
|
+
endpoint :get, :index, '/api/rest/v1/history/users/%{user_id}.json', :page, :per_page, :start_at
|
6
|
+
|
7
|
+
attribute :id
|
8
|
+
attribute :when
|
9
|
+
attribute :user_id
|
10
|
+
attribute :username
|
11
|
+
attribute :action
|
12
|
+
attribute :failure_type
|
13
|
+
attribute :path
|
14
|
+
attribute :source
|
15
|
+
attribute :destination
|
16
|
+
attribute :targets
|
17
|
+
attribute :ip
|
18
|
+
attribute :interface
|
18
19
|
end
|
19
20
|
end
|
20
21
|
end
|
@@ -1,11 +1,14 @@
|
|
1
1
|
module BrickFTP
|
2
2
|
module API
|
3
3
|
class Notification < Base
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
4
|
+
endpoint :get, :index, '/api/rest/v1/notifications.json'
|
5
|
+
endpoint :post, :create, '/api/rest/v1/notifications.json'
|
6
|
+
endpoint :delete, :delete, '/api/rest/v1/notifications/%{id}.json'
|
7
|
+
|
8
|
+
attribute :id
|
9
|
+
attribute :path, writable: true
|
10
|
+
attribute :user_id, writable: true
|
11
|
+
attribute :username, writable: true
|
9
12
|
end
|
10
13
|
end
|
11
14
|
end
|
@@ -1,11 +1,17 @@
|
|
1
1
|
module BrickFTP
|
2
2
|
module API
|
3
3
|
class Permission < Base
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
4
|
+
endpoint :get, :index, '/api/rest/v1/permissions.json'
|
5
|
+
endpoint :post, :create, '/api/rest/v1/permissions.json'
|
6
|
+
endpoint :delete, :delete, '/api/rest/v1/permissions/%{id}.json'
|
7
|
+
|
8
|
+
attribute :id
|
9
|
+
attribute :recursive
|
10
|
+
attribute :path, writable: true
|
11
|
+
attribute :permission, writable: true
|
12
|
+
attribute :user_id, writable: true
|
13
|
+
attribute :username, writable: true
|
14
|
+
attribute :group_id, writable: true
|
9
15
|
end
|
10
16
|
end
|
11
17
|
end
|
@@ -1,11 +1,15 @@
|
|
1
1
|
module BrickFTP
|
2
2
|
module API
|
3
3
|
class PublicKey < Base
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
4
|
+
endpoint :get, :index, '/api/rest/v1/users/%{user_id}/public_keys.json'
|
5
|
+
endpoint :post, :create, '/api/rest/v1/users/%{user_id}/public_keys.json'
|
6
|
+
endpoint :delete, :delete, '/api/rest/v1/public_keys/%{id}.json'
|
7
|
+
|
8
|
+
attribute :id
|
9
|
+
attribute :fingerprint
|
10
|
+
attribute :created_at
|
11
|
+
attribute :title, writable: true
|
12
|
+
attribute :public_key, writable: true
|
9
13
|
end
|
10
14
|
end
|
11
15
|
end
|
data/lib/brick_ftp/api/user.rb
CHANGED
@@ -1,35 +1,36 @@
|
|
1
1
|
module BrickFTP
|
2
2
|
module API
|
3
3
|
class User < Base
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
4
|
+
endpoint :get, :index, '/api/rest/v1/users.json'
|
5
|
+
endpoint :get, :show, '/api/rest/v1/users/%{id}.json'
|
6
|
+
endpoint :post, :create, '/api/rest/v1/users.json'
|
7
|
+
endpoint :put, :update, '/api/rest/v1/users/%{id}.json'
|
8
|
+
endpoint :delete, :delete, '/api/rest/v1/users/%{id}.json'
|
9
|
+
|
10
|
+
attribute :id
|
11
|
+
attribute :last_login_at
|
12
|
+
attribute :time_zone
|
13
|
+
attribute :language
|
14
|
+
attribute :site_admin
|
15
|
+
attribute :username, writable: true
|
16
|
+
attribute :password, writable: true
|
17
|
+
attribute :name, writable: true
|
18
|
+
attribute :email, writable: true
|
19
|
+
attribute :notes, writable: true
|
20
|
+
attribute :group_ids, writable: true
|
21
|
+
attribute :ftp_permission, writable: true
|
22
|
+
attribute :web_permission, writable: true
|
23
|
+
attribute :sftp_permission, writable: true
|
24
|
+
attribute :dav_permission, writable: true
|
25
|
+
attribute :restapi_permission, writable: true
|
26
|
+
attribute :attachments_permission, writable: true
|
27
|
+
attribute :self_managed, writable: true
|
28
|
+
attribute :require_password_change, writable: true
|
29
|
+
attribute :allowed_ips, writable: true
|
30
|
+
attribute :user_root, writable: true
|
31
|
+
attribute :grant_permission, writable: true
|
32
|
+
attribute :ssl_required, writable: true
|
33
|
+
attribute :authentication_method, writable: true
|
33
34
|
end
|
34
35
|
end
|
35
36
|
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
module BrickFTP
|
2
|
+
class APIComponent
|
3
|
+
attr_reader :path_template, :query_keys
|
4
|
+
|
5
|
+
def initialize(path_template, query_keys = [])
|
6
|
+
@path_template = path_template.respond_to?(:call) ? path_template : ->(_) { path_template }
|
7
|
+
@query_keys = query_keys.map(&:to_sym)
|
8
|
+
end
|
9
|
+
|
10
|
+
def path(params)
|
11
|
+
params = normalize_params(params)
|
12
|
+
|
13
|
+
path_params = build_path_params_from(params)
|
14
|
+
escaped_path_params = path_params.each_with_object({}) do |(k, v), res|
|
15
|
+
res[k] = CGI.escape(v.to_s)
|
16
|
+
end
|
17
|
+
|
18
|
+
path = path_template.call(params) % escaped_path_params
|
19
|
+
query = build_query_string_from(params)
|
20
|
+
query.empty? ? path : "#{path}?#{query}"
|
21
|
+
end
|
22
|
+
|
23
|
+
def build_path_params_from(params = {})
|
24
|
+
params = normalize_params(params)
|
25
|
+
|
26
|
+
path_variables(params).each_with_object({}) do |key, res|
|
27
|
+
res[key] = params[key]
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def build_query_params_from(params = {})
|
32
|
+
params = normalize_params(params)
|
33
|
+
|
34
|
+
query_keys.each_with_object({}) do |name, res|
|
35
|
+
next unless params.key?(name)
|
36
|
+
res[name] = params[name]
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def build_query_string_from(params = {})
|
41
|
+
params = normalize_params(params)
|
42
|
+
|
43
|
+
pairs = build_query_params_from(params).each_with_object([]) do |(k, v), res|
|
44
|
+
res << "#{CGI.escape(k.to_s)}=#{CGI.escape(v.to_s)}"
|
45
|
+
end
|
46
|
+
pairs.join('&')
|
47
|
+
end
|
48
|
+
|
49
|
+
def except_path_and_query(params = {})
|
50
|
+
params = normalize_params(params)
|
51
|
+
|
52
|
+
exceptions = path_variables(params) + query_keys
|
53
|
+
params.reject { |k, _| exceptions.include?(k) }
|
54
|
+
end
|
55
|
+
|
56
|
+
private
|
57
|
+
|
58
|
+
def path_variables(params = {})
|
59
|
+
@path_variables ||= path_template.call(params).scan(/%\{([^}]+)\}/).map { |m| m.first.to_sym }
|
60
|
+
end
|
61
|
+
|
62
|
+
def normalize_params(params = {})
|
63
|
+
case params
|
64
|
+
when Hash
|
65
|
+
params.symbolize_keys
|
66
|
+
when BrickFTP::API::Base
|
67
|
+
keys = path_variables(params) + query_keys
|
68
|
+
keys.each_with_object({}) do |key, res|
|
69
|
+
res[key] = params.send(key)
|
70
|
+
end
|
71
|
+
else
|
72
|
+
keys = path_variables(params) + query_keys
|
73
|
+
keys.each_with_object({}) do |key, res|
|
74
|
+
res[key] = params
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
module BrickFTP
|
2
|
+
module APIDefinition
|
3
|
+
def self.included(klass)
|
4
|
+
klass.class_eval do
|
5
|
+
@endpoints = {}
|
6
|
+
@writable_attributes = []
|
7
|
+
@readonly_attributes = []
|
8
|
+
|
9
|
+
class << self
|
10
|
+
attr_reader :endpoints, :writable_attributes, :readonly_attributes
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
klass.extend ClassMethods
|
15
|
+
end
|
16
|
+
|
17
|
+
module ClassMethods
|
18
|
+
# Define API endpoint.
|
19
|
+
# @param http_method [:Symbol] any one of :get, :post, :put, :delete
|
20
|
+
# @param name [Symbol] any one of :index, :show, :create, :update, :destroy
|
21
|
+
# @param path_template [Stryng] template of endpoint path.
|
22
|
+
# @param query_keys [Array] array of query_string's parameter name.
|
23
|
+
def endpoint(http_method, name, path_template, *query_keys)
|
24
|
+
endpoints[name] = {
|
25
|
+
http_method: http_method,
|
26
|
+
path_template: path_template,
|
27
|
+
query_keys: query_keys,
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
31
|
+
# Define attribute.
|
32
|
+
# @param name [Symbol] name of attribute.
|
33
|
+
# @param writable [Boolean]
|
34
|
+
def attribute(name, writable: false)
|
35
|
+
if writable
|
36
|
+
writable_attributes << name.to_sym
|
37
|
+
else
|
38
|
+
readonly_attributes << name.to_sym
|
39
|
+
end
|
40
|
+
attr_reader name.to_s.tr('-', '_')
|
41
|
+
end
|
42
|
+
|
43
|
+
# Return all attributes.
|
44
|
+
# @return [Array]
|
45
|
+
def attributes
|
46
|
+
writable_attributes + readonly_attributes
|
47
|
+
end
|
48
|
+
|
49
|
+
# Build path for API endpoint.
|
50
|
+
# @param name [Symbol]
|
51
|
+
# @param params [Hash] mixed path parameters and query parameters.
|
52
|
+
# @return [String]
|
53
|
+
def api_path_for(name, params = {})
|
54
|
+
api_component_for(name).path(params)
|
55
|
+
end
|
56
|
+
|
57
|
+
# Build BrickFTP::APIComponent.
|
58
|
+
# @param name [Symbol]
|
59
|
+
# @return [BrickFTP::APIComponent]
|
60
|
+
def api_component_for(name)
|
61
|
+
raise BrickFTP::API::NoSuchAPI, "#{name} #{self.name}" unless endpoints.key?(name)
|
62
|
+
BrickFTP::APIComponent.new(endpoints[name][:path_template], endpoints[name][:query_keys])
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
data/lib/brick_ftp/client.rb
CHANGED
@@ -281,9 +281,9 @@ module BrickFTP
|
|
281
281
|
|
282
282
|
# shows the behaviors that apply to the given path.
|
283
283
|
# @see https://brickftp.com/ja/docs/rest-api/behaviors/
|
284
|
-
# @return [Array] array of BrickFTP::API::
|
284
|
+
# @return [Array] array of BrickFTP::API::FolderBehavior
|
285
285
|
def list_folder_behaviors(path:)
|
286
|
-
BrickFTP::API::
|
286
|
+
BrickFTP::API::FolderBehavior.all(path: path)
|
287
287
|
end
|
288
288
|
|
289
289
|
# Lists the contents of the folder provided in the URL.
|
@@ -326,7 +326,7 @@ module BrickFTP
|
|
326
326
|
# @param move_destination [String]
|
327
327
|
# @return [BrickFTP::API::FileMove]
|
328
328
|
def move_file(path:, move_destination:)
|
329
|
-
BrickFTP::API::
|
329
|
+
BrickFTP::API::FileOperation::Move.create(path: path, move_destination: move_destination)
|
330
330
|
end
|
331
331
|
|
332
332
|
# Copy a file or folder to the destination provided in the copy_destination parameter.
|
@@ -335,7 +335,7 @@ module BrickFTP
|
|
335
335
|
# @param copy_destination [String]
|
336
336
|
# @return [BrickFTP::API::FileCopy]
|
337
337
|
def copy_file(path:, copy_destination:)
|
338
|
-
BrickFTP::API::
|
338
|
+
BrickFTP::API::FileOperation::Copy.create(path: path, copy_destination: copy_destination)
|
339
339
|
end
|
340
340
|
|
341
341
|
# Delete a file.
|
@@ -352,7 +352,7 @@ module BrickFTP
|
|
352
352
|
# @param source [String] path for source file.
|
353
353
|
# @return [BrickFTP::API::FileUpload]
|
354
354
|
def upload_file(path:, source:)
|
355
|
-
BrickFTP::API::
|
355
|
+
BrickFTP::API::FileOperation::Upload.create(path: path, source: source)
|
356
356
|
end
|
357
357
|
end
|
358
358
|
end
|
@@ -30,8 +30,8 @@ module BrickFTP
|
|
30
30
|
@conn.use_ssl = true
|
31
31
|
end
|
32
32
|
|
33
|
-
def get(path)
|
34
|
-
case res = request(:get, path)
|
33
|
+
def get(path, params: {})
|
34
|
+
case res = request(:get, path, params: params)
|
35
35
|
when Net::HTTPSuccess
|
36
36
|
res.body.nil? || res.body.empty? ? {} : JSON.parse(res.body)
|
37
37
|
else
|
@@ -60,8 +60,8 @@ module BrickFTP
|
|
60
60
|
end
|
61
61
|
end
|
62
62
|
|
63
|
-
def delete(path)
|
64
|
-
case res = request(:delete, path)
|
63
|
+
def delete(path, params: {})
|
64
|
+
case res = request(:delete, path, params: params)
|
65
65
|
when Net::HTTPSuccess
|
66
66
|
true
|
67
67
|
else
|
data/lib/brick_ftp/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: brick_ftp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- koshigoe
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-10-
|
11
|
+
date: 2016-10-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -117,15 +117,16 @@ files:
|
|
117
117
|
- lib/brick_ftp/api/authentication/session.rb
|
118
118
|
- lib/brick_ftp/api/base.rb
|
119
119
|
- lib/brick_ftp/api/behavior.rb
|
120
|
-
- lib/brick_ftp/api/behavior_folder.rb
|
121
120
|
- lib/brick_ftp/api/bundle.rb
|
122
121
|
- lib/brick_ftp/api/bundle_content.rb
|
123
122
|
- lib/brick_ftp/api/bundle_download.rb
|
124
123
|
- lib/brick_ftp/api/file.rb
|
125
|
-
- lib/brick_ftp/api/
|
126
|
-
- lib/brick_ftp/api/
|
127
|
-
- lib/brick_ftp/api/
|
124
|
+
- lib/brick_ftp/api/file_operation.rb
|
125
|
+
- lib/brick_ftp/api/file_operation/copy.rb
|
126
|
+
- lib/brick_ftp/api/file_operation/move.rb
|
127
|
+
- lib/brick_ftp/api/file_operation/upload.rb
|
128
128
|
- lib/brick_ftp/api/folder.rb
|
129
|
+
- lib/brick_ftp/api/folder_behavior.rb
|
129
130
|
- lib/brick_ftp/api/group.rb
|
130
131
|
- lib/brick_ftp/api/history.rb
|
131
132
|
- lib/brick_ftp/api/history/file.rb
|
@@ -137,6 +138,8 @@ files:
|
|
137
138
|
- lib/brick_ftp/api/permission.rb
|
138
139
|
- lib/brick_ftp/api/public_key.rb
|
139
140
|
- lib/brick_ftp/api/user.rb
|
141
|
+
- lib/brick_ftp/api_component.rb
|
142
|
+
- lib/brick_ftp/api_definition.rb
|
140
143
|
- lib/brick_ftp/client.rb
|
141
144
|
- lib/brick_ftp/configuration.rb
|
142
145
|
- lib/brick_ftp/http_client.rb
|
@@ -1,43 +0,0 @@
|
|
1
|
-
module BrickFTP
|
2
|
-
module API
|
3
|
-
class FileUpload < Base
|
4
|
-
define_api :create, '/api/rest/v1/files/%{path}'
|
5
|
-
define_writable_attributes :action, :ref, :part, :restart
|
6
|
-
define_readonly_attributes :id,
|
7
|
-
:ref,
|
8
|
-
:http_method,
|
9
|
-
:upload_uri,
|
10
|
-
:partsize,
|
11
|
-
:part_number,
|
12
|
-
:available_parts,
|
13
|
-
:headers,
|
14
|
-
:parameters,
|
15
|
-
:send,
|
16
|
-
:path,
|
17
|
-
:action,
|
18
|
-
:ask_about_overwrites,
|
19
|
-
:type,
|
20
|
-
:size,
|
21
|
-
:mtime,
|
22
|
-
:crc32,
|
23
|
-
:md5,
|
24
|
-
:expires,
|
25
|
-
:next_partsize,
|
26
|
-
:provided_mtime,
|
27
|
-
:permissions
|
28
|
-
|
29
|
-
def self.create(path: , source:)
|
30
|
-
api_client = BrickFTP::HTTPClient.new
|
31
|
-
step1 = api_client.post(api_path_for(:create, path: path), params: { action: 'put' })
|
32
|
-
|
33
|
-
upload_uri = URI.parse(step1['upload_uri'])
|
34
|
-
upload_client = BrickFTP::HTTPClient.new(upload_uri.host)
|
35
|
-
upload_client.put(step1['upload_uri'], params: source)
|
36
|
-
|
37
|
-
step3 = api_client.post(api_path_for(:create, path: path), params: { action: 'end', ref: step1['ref'] })
|
38
|
-
|
39
|
-
new(step1.merge(step3).symbolize_keys)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|