cloud_encrypted_sync 0.3.0 → 0.3.1
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
data/README.md
CHANGED
@@ -23,11 +23,14 @@ preferred cloud.
|
|
23
23
|
CES runs as a command line tool and takes options as CLI arguments and/or from a config file.
|
24
24
|
Arguments passed at the command line take precedence over those in the config file.
|
25
25
|
|
26
|
-
### Example
|
26
|
+
### Example (assuming CES S3 Adapter gem is installed)
|
27
27
|
|
28
|
-
ces --adapter
|
29
|
-
--s3-
|
30
|
-
--
|
28
|
+
ces --adapter s3 \
|
29
|
+
--s3-bucket my-backup-bucket \
|
30
|
+
--s3-access-key-id ACCESS_KEY_ID \
|
31
|
+
--s3-access-id SECRET_ACCESS_KEY \
|
32
|
+
--encryption-key MYENCRYPTIONKEY \
|
33
|
+
/path/to/source/folder
|
31
34
|
|
32
35
|
## Configuration
|
33
36
|
|
@@ -37,13 +40,13 @@ The default location for the config file is `~/.cloud_encrypted_sync/config.rc.y
|
|
37
40
|
|
38
41
|
### Available Settings
|
39
42
|
|
40
|
-
CES requires the following configuration settings. Any of
|
41
|
-
the `config.rc.yml`
|
43
|
+
CES requires the following configuration settings. Any of these may alternatively be placed in
|
44
|
+
the `config.rc.yml` except for `--data-dir` (which tells CES which folder contains the config
|
42
45
|
file to use).
|
43
46
|
|
44
|
-
* `--adapter
|
47
|
+
* `--adapter ADAPTERNAME` The name of the adapter to use. See instructions for your preferred
|
45
48
|
adapter for instructions of what to place here.
|
46
|
-
* `--encryption-key
|
49
|
+
* `--encryption-key XXX` The encryption key (shocking, I know).
|
47
50
|
|
48
51
|
In addition to these settings, your chosen adapter will probably also have additional adapter
|
49
52
|
specific settings as well, such as credentials to log into your cloud storage account. Adapter
|
@@ -53,6 +56,33 @@ tries to do something weird).
|
|
53
56
|
|
54
57
|
## Creating your own adapter
|
55
58
|
|
56
|
-
|
59
|
+
To create your own adapter to a cloud storage service, you'll need to do the following.
|
60
|
+
|
61
|
+
* Create a Ruby Gem named `cloud_encrypted_sync_*_adapter` where `*` is the name of your adapter.
|
62
|
+
It is recommended that you name your adapter after the cloud service that it interfaces to.
|
63
|
+
(eg. cloud_encrypted_sync_s3_adapter ). CES will not be able to find and load your adapter
|
64
|
+
unless it precisely matches this naming convention.
|
65
|
+
* Your gem needs to provide a class within the `CloudEncryptedSync::Adapters` namespace that
|
66
|
+
inherites from `Template`. The name of this class will determine the value that users pass with
|
67
|
+
`--adaper` on the command line to select your adapter. For instance, if you name your class
|
68
|
+
`MySuperDooperAdapter`, then users will need to pass `--adapter my_super_dooper_adapter` at the
|
69
|
+
command line to select your adapter.
|
70
|
+
* See the [Baseline](https://github.com/jsgarvin/cloud_encrypted_sync_baseline_adapter/blob/master/lib/baseline/adapter.rb)
|
71
|
+
class in [cloud_encrypted_sync_baseline_adapter](https://github.com/jsgarvin/cloud_encrypted_sync_baseline_adapter "Cloud Encrypted Sync Baseline Adapter")
|
72
|
+
for a list of methods that your adapter class needs to respond to, what arguments they need to
|
73
|
+
accept, and what values they're expected to return.
|
74
|
+
|
75
|
+
Note: [cloud_encrypted_sync_baseline_adapter](https://github.com/jsgarvin/cloud_encrypted_sync_baseline_adapter "Cloud Encrypted Sync Baseline Adapter")
|
76
|
+
is a forkable repository that should make the above steps easier. Simply fork it, rename it,
|
77
|
+
update it as necessary, and push it to rubygems.org.
|
78
|
+
|
79
|
+
### Testing your adapter locally before publishing to rubygems.org
|
80
|
+
|
81
|
+
It is likely that, before publishing your new adapter to rubygems.org, you'll want to build and
|
82
|
+
install your gem locally to test it with CES. When you do this you'll also want to have the CES
|
83
|
+
gem itself built and installed locally, rather than installed from rubygems.org. It has been found
|
84
|
+
that when CES has been installed from rubygems.org, it is unable to find and load locally built
|
85
|
+
adapters, and visa-versa. The CES author is very interested in any patches that provide an elegant
|
86
|
+
solution to this annoyance.
|
57
87
|
|
58
88
|
[](https://codeclimate.com/github/jsgarvin/cloud_encrypted_sync)
|
@@ -73,7 +73,7 @@ module CloudEncryptedSync
|
|
73
73
|
end
|
74
74
|
parser.on('--adapter ADAPTERNAME', 'Name of cloud adapter to use.') do |adapter_name|
|
75
75
|
clo[:adapter_name] = adapter_name
|
76
|
-
|
76
|
+
fetch_selected_adapter_or_raise(adapter_name).parse_command_line_options(parser)
|
77
77
|
end
|
78
78
|
parser.on('--encryption-key KEY') do |key|
|
79
79
|
clo[:encryption_key] = key
|
@@ -84,6 +84,12 @@ module CloudEncryptedSync
|
|
84
84
|
return clo
|
85
85
|
end
|
86
86
|
|
87
|
+
def fetch_selected_adapter_or_raise(adapter_name)
|
88
|
+
if AdapterLiaison.instance.adapters[adapter_name.to_sym]
|
89
|
+
return AdapterLiaison.instance.adapters[adapter_name.to_sym]
|
90
|
+
end
|
91
|
+
raise Errors::IncompleteConfigurationError.new("Unrecognized adapter. Available choices are: #{AdapterLiaison.instance.adapters.keys.join(', ')}.")
|
92
|
+
end
|
87
93
|
end
|
88
94
|
end
|
89
95
|
end
|
@@ -74,7 +74,7 @@ module CloudEncryptedSync
|
|
74
74
|
|
75
75
|
def delete_remote_files
|
76
76
|
remote_files_to_delete.each_pair do |key,path|
|
77
|
-
|
77
|
+
print "\nDeleting Remote: #{path}"
|
78
78
|
liaison.delete(key)
|
79
79
|
self.finalize_required = true
|
80
80
|
end
|
@@ -84,9 +84,9 @@ module CloudEncryptedSync
|
|
84
84
|
local_files_to_delete.each_pair do |key,relative_path|
|
85
85
|
full_path = Index.full_file_path(relative_path)
|
86
86
|
if !File.exist?(full_path)
|
87
|
-
|
87
|
+
print "\nNot Deleting Local: #{relative_path}"
|
88
88
|
else
|
89
|
-
|
89
|
+
print "\nDeleting Local: #{relative_path}"
|
90
90
|
File.delete(full_path)
|
91
91
|
self.finalize_required = true
|
92
92
|
end
|
@@ -30,6 +30,11 @@ module CloudEncryptedSync
|
|
30
30
|
assert_raise(Errors::IncompleteConfigurationError) { Configuration.settings }
|
31
31
|
end
|
32
32
|
|
33
|
+
test 'should gracefully fail with invalid adapter provided' do
|
34
|
+
::ARGV = '--adapter nonexistent --bucket foobar'.split(/\s/)
|
35
|
+
assert_raise(Errors::IncompleteConfigurationError) { Configuration.settings }
|
36
|
+
end
|
37
|
+
|
33
38
|
test 'should create data folder if it does not exist' do
|
34
39
|
::ARGV = '--adapter dummy --bucket foobar --data-dir /test --encryption-key somestringofcharacters /some/path'.split(/\s/)
|
35
40
|
assert ! File.exist?('/test')
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cloud_encrypted_sync
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-11-
|
12
|
+
date: 2012-11-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mocha
|