revenc 0.1.2
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/.document +5 -0
- data/.gitattributes +1 -0
- data/.gitignore +30 -0
- data/CLONING.rdoc +108 -0
- data/LICENSE +20 -0
- data/README.rdoc +198 -0
- data/Rakefile +64 -0
- data/VERSION +1 -0
- data/bin/revenc +81 -0
- data/config/cucumber.yml +7 -0
- data/examples/rsync/encrypted_data/key/encfs6.xml +35 -0
- data/examples/rsync/revenc.conf +18 -0
- data/examples/rsync/scripts/passphrase +1 -0
- data/examples/rsync/unencrypted_data/test_file1.txt +1 -0
- data/examples/rsync/unencrypted_data/test_file2.txt +1 -0
- data/examples/simple/encfs6.xml +35 -0
- data/examples/simple/passphrase +1 -0
- data/examples/simple/unencrypted_data/test_file1.txt +1 -0
- data/examples/simple/unencrypted_data/test_file2.txt +1 -0
- data/features/app.feature +59 -0
- data/features/bin.feature +35 -0
- data/features/configuration.feature +98 -0
- data/features/copy.feature +169 -0
- data/features/generator.feature +15 -0
- data/features/mount.feature +133 -0
- data/features/step_definitions/.gitignore +0 -0
- data/features/step_definitions/revenc_steps.rb +64 -0
- data/features/support/aruba.rb +21 -0
- data/features/support/env.rb +4 -0
- data/features/support/hooks.rb +6 -0
- data/features/unmount.feature +58 -0
- data/lib/revenc/app.rb +128 -0
- data/lib/revenc/encfs_wrapper.rb +96 -0
- data/lib/revenc/errors.rb +78 -0
- data/lib/revenc/io.rb +265 -0
- data/lib/revenc/lockfile.rb +66 -0
- data/lib/revenc.rb +22 -0
- data/spec/revenc/error_spec.rb +50 -0
- data/spec/revenc/io_spec.rb +185 -0
- data/spec/revenc/lockfile_spec.rb +44 -0
- data/spec/spec.opts +2 -0
- data/spec/spec_helper.rb +16 -0
- data/spec/watchr.rb +142 -0
- metadata +179 -0
data/.document
ADDED
data/.gitattributes
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
*.rb diff=ruby
|
data/.gitignore
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
## mac os
|
2
|
+
.DS_Store
|
3
|
+
|
4
|
+
## textmate
|
5
|
+
*.tmproj
|
6
|
+
tmtags
|
7
|
+
|
8
|
+
## emacs
|
9
|
+
*~
|
10
|
+
\#*
|
11
|
+
.\#*
|
12
|
+
|
13
|
+
## vim
|
14
|
+
*.swp
|
15
|
+
|
16
|
+
## project::general
|
17
|
+
coverage
|
18
|
+
rdoc
|
19
|
+
pkg
|
20
|
+
*.gemspec
|
21
|
+
|
22
|
+
## cucumber
|
23
|
+
rerun.txt
|
24
|
+
|
25
|
+
## ctags
|
26
|
+
tags
|
27
|
+
|
28
|
+
## project::specific
|
29
|
+
tmp/fixtures
|
30
|
+
tmp/aruba
|
data/CLONING.rdoc
ADDED
@@ -0,0 +1,108 @@
|
|
1
|
+
= Cloning from BasicApp
|
2
|
+
|
3
|
+
BasicApp provides no stand-alone functionality. It purpose is to
|
4
|
+
provide a repository for jump-starting a new RubyGem based CLI
|
5
|
+
application and provide a point to cloned applications to facilitate
|
6
|
+
pulling in future enhancements and fixes.
|
7
|
+
|
8
|
+
== Features/Dependencies
|
9
|
+
|
10
|
+
* Jeweler for RubyGem management http://github.com/technicalpickles/jeweler
|
11
|
+
* Rspec for unit testing http://github.com/dchelimsky/rspec
|
12
|
+
* Cucumber for functional testing http://github.com/tpope/vim-cucumber
|
13
|
+
* Aruba for CLI testing http://github.com/aslakhellesoy/aruba
|
14
|
+
|
15
|
+
== Jump-starting a new project with BasicApp
|
16
|
+
|
17
|
+
The following steps illustrate creating a new application called "oct." Oct
|
18
|
+
is a simple command line utility that prints file listing permissions in octal
|
19
|
+
notation.
|
20
|
+
|
21
|
+
cd ~/workspace
|
22
|
+
git clone git://github.com/robertwahler/basic_app.git oct
|
23
|
+
cd oct
|
24
|
+
|
25
|
+
=== Setup repository for cloned project
|
26
|
+
|
27
|
+
We are going to change the origin URL to our own server and setup a remote
|
28
|
+
for pulling in future BasicApp changes. If our own repo is setup at
|
29
|
+
git@red:oct.git, change the URL with sed:
|
30
|
+
|
31
|
+
sed -i 's/url =.*\.git$/url = git@red:oct.git/' .git/config
|
32
|
+
|
33
|
+
Push it up
|
34
|
+
|
35
|
+
git push origin master:refs/heads/master
|
36
|
+
|
37
|
+
Add BasicApp as remote
|
38
|
+
|
39
|
+
git remote add basic_app git://github.com/robertwahler/basic_app.git
|
40
|
+
|
41
|
+
=== Rename your application
|
42
|
+
|
43
|
+
We need to change the name of the application from basic_app to oct
|
44
|
+
|
45
|
+
git mv bin/basic_app bin/oct
|
46
|
+
git mv lib/basic_app.rb lib/oct.rb
|
47
|
+
git mv lib/basic_app lib/oct
|
48
|
+
|
49
|
+
# BasicApp => Oct
|
50
|
+
find ./bin -type f -exec sed -i 's/BasicApp/Oct/' '{}' +
|
51
|
+
find . -name *.rb -exec sed -i 's/BasicApp/Oct/' '{}' +
|
52
|
+
find . -name Rakefile -exec sed -i 's/BasicApp/Oct/' '{}' +
|
53
|
+
# basic_app => oct
|
54
|
+
find ./bin -type f -exec sed -i 's/basic_app/oct/' '{}' +
|
55
|
+
find ./spec -type f -exec sed -i 's/basic_app/oct/' '{}' +
|
56
|
+
find . -name *.rb -exec sed -i 's/basic_app/oct/' '{}' +
|
57
|
+
find . -name *.feature -exec sed -i 's/basic_app/oct/' '{}' +
|
58
|
+
find . -name Rakefile -exec sed -i 's/basic_app/oct/' '{}' +
|
59
|
+
|
60
|
+
Replace TODO's and update documentation
|
61
|
+
|
62
|
+
* Replace README.rdoc
|
63
|
+
* Replace LICENSE
|
64
|
+
* (OPTIONAL) git rm CLONING.rdoc
|
65
|
+
* Replace the TODO's in Rakefile and bin
|
66
|
+
|
67
|
+
Application should now be functional, lets test it
|
68
|
+
|
69
|
+
cucumber
|
70
|
+
|
71
|
+
Looks OK, commit it
|
72
|
+
|
73
|
+
git commit -a -m "renamed basic_app to oct"
|
74
|
+
|
75
|
+
== Merging of future BasicApp changes
|
76
|
+
|
77
|
+
Cherry picking method
|
78
|
+
|
79
|
+
git fetch basic_app
|
80
|
+
git cherry-pick a0f9745
|
81
|
+
|
82
|
+
Merge 2-step method
|
83
|
+
|
84
|
+
git fetch basic_app
|
85
|
+
git merge basic_app/master
|
86
|
+
|
87
|
+
Trusting pull of HEAD
|
88
|
+
|
89
|
+
git pull basic_app HEAD
|
90
|
+
|
91
|
+
Conflicted?
|
92
|
+
|
93
|
+
git mergetool
|
94
|
+
git commit
|
95
|
+
|
96
|
+
== Note on Patches/Pull Requests
|
97
|
+
|
98
|
+
* Fork the project.
|
99
|
+
* Make your feature addition or bug fix.
|
100
|
+
* Add tests for it. This is important so I don't break it in a
|
101
|
+
future version unintentionally.
|
102
|
+
* Commit, do not mess with rakefile, version, or history.
|
103
|
+
(if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
|
104
|
+
* Send me a pull request. Bonus points for topic branches.
|
105
|
+
|
106
|
+
== Copyright
|
107
|
+
|
108
|
+
Copyright (c) 2010 GearheadForHire, LLC. See LICENSE for details.
|
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2010 GearheadForHire, LLC
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
@@ -0,0 +1,198 @@
|
|
1
|
+
= Revenc
|
2
|
+
|
3
|
+
Mount an unencrypted folder as encrypted using EncFS and copy/synchronize the
|
4
|
+
encrypted files to untrusted destinations using rsync/cp
|
5
|
+
|
6
|
+
== Background
|
7
|
+
|
8
|
+
EncFS in reverse mode facilitates mounting an encrypted file system
|
9
|
+
from an unencrypted source folder. This allows keeping your files unencrypted
|
10
|
+
in a trusted environment while gaining the ability to encrypt on demand
|
11
|
+
i.e. when you want to rsync encrypted files off-site to an untrusted system.
|
12
|
+
|
13
|
+
== Why Revenc?
|
14
|
+
|
15
|
+
Revenc facilitates scripting EncFS reverse mounting and synchronizing by
|
16
|
+
providing a configuration framework and validating mounts before running tools
|
17
|
+
like rsync.
|
18
|
+
|
19
|
+
=== Benefits
|
20
|
+
|
21
|
+
* Provides conventions for EncFS reverse mounting
|
22
|
+
* Validates mountpoints before copying to prevent "rsync --delete" commands
|
23
|
+
from trying to sync empty folders
|
24
|
+
* Mount, unmount, and copy actions are protected by a mutex to prevent
|
25
|
+
recursion on long running copy/sync operations. (mount, unmount and
|
26
|
+
copy actions will fail if another instance of revenc is blocking)
|
27
|
+
* Allow short, easy to remember command lines when used with configuration files.
|
28
|
+
i.e. revenc mount, revenc unmount, revenc copy
|
29
|
+
|
30
|
+
== Installation
|
31
|
+
|
32
|
+
sudo gem install revenc
|
33
|
+
|
34
|
+
== Usage
|
35
|
+
|
36
|
+
revenc action [options]
|
37
|
+
|
38
|
+
=== Actions
|
39
|
+
|
40
|
+
==== Mount
|
41
|
+
|
42
|
+
Reverse mount using EncFS. Source and mountpoint are not required when
|
43
|
+
using a configuration file.
|
44
|
+
|
45
|
+
Mount: revenc mount <unencrypted source> <empty mountpoint>
|
46
|
+
|
47
|
+
This calls the executable "encfs" with the following by default:
|
48
|
+
|
49
|
+
cat <%= passphrasefile.name %> | ENCFS6_CONFIG=<%= keyfile.name %> \
|
50
|
+
<%= executable %> --stdinpass --reverse <%= source.name %> \
|
51
|
+
<%= mountpoint.name %> -- -o ro
|
52
|
+
|
53
|
+
==== Unmount
|
54
|
+
|
55
|
+
Unmount using EncFS. Mountpoint is required when specified by revenc.conf.
|
56
|
+
|
57
|
+
Unmount: revenc unmount <mountpoint>
|
58
|
+
|
59
|
+
This calls the executable "fusermount" with the following by default:
|
60
|
+
|
61
|
+
<%= executable %> -u <%= mountpoint.name %>
|
62
|
+
|
63
|
+
==== Copy
|
64
|
+
|
65
|
+
Recursive copy with "cp -r", for rsync copy, see examples. Source and destination
|
66
|
+
are not required when specified by revenc.conf.
|
67
|
+
|
68
|
+
Copy: revenc copy <source> <destination>
|
69
|
+
|
70
|
+
This calls the executable "cp" with the following by default:
|
71
|
+
|
72
|
+
<%= executable %> -r <%= source.name %> <%= destination.name %>
|
73
|
+
|
74
|
+
=== Setup
|
75
|
+
|
76
|
+
The following is a walk through of the steps used to create the example project
|
77
|
+
"simple" in the examples folder.
|
78
|
+
|
79
|
+
mkdir -p revenc/examples/simple/encrypted_mountpoint
|
80
|
+
mkdir -p revenc/examples/simple/unencrypted_data
|
81
|
+
mkdir -p revenc/examples/simple/copy_destination
|
82
|
+
|
83
|
+
cd revenc/examples/simple
|
84
|
+
|
85
|
+
echo "some stuff" > unencrypted_data/test_file1.txt
|
86
|
+
echo "some more stuff" > unencrypted_data/test_file2.txt
|
87
|
+
|
88
|
+
=== Create the EncFS passphrase file
|
89
|
+
|
90
|
+
You must supply EncFS with a passphrase in plain text. The passphrase is piped in on the command line
|
91
|
+
to EncFS. This file can be stored anywhere on your trusted system. Revenc expects it in the
|
92
|
+
current folder, use revenc.conf to supply a different location.
|
93
|
+
|
94
|
+
echo "my_super_secret_PassPHRase" > passphrase
|
95
|
+
chmod 600 passphrase
|
96
|
+
|
97
|
+
=== Generate the EncFS key file
|
98
|
+
|
99
|
+
Generation of your key file is done once. The same key is used for each mount action on the same
|
100
|
+
unencrypted source folder. You need to keep a copy of your key available in order to restore encrypted files.
|
101
|
+
EncFS doesn't supply a method to fully automate the generation of the key file with so it needs
|
102
|
+
to be done manually.
|
103
|
+
|
104
|
+
NOTE: The ENCFS6_CONFIG var is needed to control where the key file is created. The "${PWD}" is
|
105
|
+
used because EncFS expects full paths from the root folder.
|
106
|
+
|
107
|
+
ENCFS6_CONFIG=./encfs6.xml encfs --reverse ${PWD}/unencrypted_data ${PWD}/encrypted_mountpoint -- -o ro
|
108
|
+
|
109
|
+
You will see a message about encfs6.xml failing to load, this is OK. You should now be at the EncFS
|
110
|
+
command prompt. You can complete the key generation any way you like. The following are the responses
|
111
|
+
used to generate the sample key. Note the I opted to store filenames in plain text for clarity.
|
112
|
+
|
113
|
+
EncFS command prompt responses:
|
114
|
+
|
115
|
+
x # expert mode
|
116
|
+
1 # AES
|
117
|
+
128 # key size
|
118
|
+
1024 # block size
|
119
|
+
2 # Null => no encryption of filenames
|
120
|
+
my_super_secret_PassPHRase # passphrase we stored in the step above
|
121
|
+
my_super_secret_PassPHRase # confirm passphrase
|
122
|
+
|
123
|
+
|
124
|
+
EncFS should generate encfs6.xml, mount the folder and return you to the command prompt. You can
|
125
|
+
now work with your encrypted files.
|
126
|
+
|
127
|
+
ls encrypted_mountpoint
|
128
|
+
|
129
|
+
test_file1.txt test_file2.txt
|
130
|
+
|
131
|
+
revenc unmount encrypted_mountpoint
|
132
|
+
ls encrypted_mountpoint
|
133
|
+
|
134
|
+
<no files here>
|
135
|
+
|
136
|
+
revenc mount unencrypted_data encrypted_mountpoint
|
137
|
+
ls encrypted_mountpoint
|
138
|
+
|
139
|
+
test_file1.txt test_file2.txt
|
140
|
+
|
141
|
+
|
142
|
+
revenc copy encrypted_mountpoint copy_to_destination
|
143
|
+
ls copy_to_destination
|
144
|
+
|
145
|
+
test_file1.txt test_file2.txt
|
146
|
+
|
147
|
+
|
148
|
+
=== Configuration files
|
149
|
+
|
150
|
+
Revenc expects a passphrase file and the key file "encfs6.xml" to exist in the
|
151
|
+
current folder. You can override these locations using the revenc.conf file. Revenc
|
152
|
+
looks for its configuration file in the current folder. When you use configuration file,
|
153
|
+
you can ommit action parameters. For example:
|
154
|
+
|
155
|
+
cd examples/rsync
|
156
|
+
|
157
|
+
revenc mount
|
158
|
+
revenc copy
|
159
|
+
revenc unmount
|
160
|
+
|
161
|
+
The configuration file is YAML http://www.yaml.org/ format with ERB processing. You must
|
162
|
+
escape ERB in the action commands. These need to be lazy loaded by Revenc. Unescaped
|
163
|
+
ERB is evaluated as the configuration file is read but before Revenc parses the commands.
|
164
|
+
See the example configuration file examples/rsync/revenc.conf.
|
165
|
+
|
166
|
+
The file features/configuration.feature has more details.
|
167
|
+
|
168
|
+
|
169
|
+
== System Requirements
|
170
|
+
|
171
|
+
* POSIX system
|
172
|
+
* EncFS http://www.arg0.net/encfs
|
173
|
+
|
174
|
+
== Runtime Dependencies
|
175
|
+
|
176
|
+
* term-ansicolor
|
177
|
+
* configatron
|
178
|
+
|
179
|
+
== Development Dependencies
|
180
|
+
|
181
|
+
* rspec for unit testing http://github.com/dchelimsky/rspec
|
182
|
+
* cucumber for functional testing http://github.com/tpope/vim-cucumber
|
183
|
+
* aruba for CLI testing http://github.com/aslakhellesoy/aruba
|
184
|
+
|
185
|
+
== Note on Patches/Pull Requests
|
186
|
+
|
187
|
+
* Fork the project.
|
188
|
+
* Make your feature addition or bug fix.
|
189
|
+
* Add tests for it. This is important so I don't break it in a
|
190
|
+
future version unintentionally.
|
191
|
+
* Commit, do not mess with rakefile, version, or history.
|
192
|
+
(if you want to have your own version, that is fine but bump version
|
193
|
+
in a commit by itself I can ignore when I pull)
|
194
|
+
* Send me a pull request. Bonus points for topic branches.
|
195
|
+
|
196
|
+
== Copyright
|
197
|
+
|
198
|
+
Copyright (c) 2010 GearheadForHire, LLC. See LICENSE for details.
|
data/Rakefile
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'jeweler'
|
6
|
+
Jeweler::Tasks.new do |gem|
|
7
|
+
gem.name = "revenc"
|
8
|
+
gem.summary = %Q{Helper for reverse mounting encrypted file systems}
|
9
|
+
gem.description = %Q{Mount, unmount, and copy/synchronize encrypted files to
|
10
|
+
untrusted destinations using EncFS and rsync}
|
11
|
+
gem.email = "robert@gearheadforhire.com"
|
12
|
+
gem.homepage = "http://github.com/robertwahler/revenc"
|
13
|
+
gem.authors = ["Robert Wahler"]
|
14
|
+
|
15
|
+
gem.add_dependency 'term-ansicolor', '>= 1.0.4'
|
16
|
+
gem.add_dependency 'configatron', '>= 2.5.1'
|
17
|
+
|
18
|
+
gem.add_development_dependency "rspec", ">= 1.2.9"
|
19
|
+
gem.add_development_dependency "cucumber", ">= 0.6"
|
20
|
+
gem.add_development_dependency "aruba", ">= 0.1.7"
|
21
|
+
|
22
|
+
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
23
|
+
end
|
24
|
+
Jeweler::GemcutterTasks.new
|
25
|
+
rescue LoadError
|
26
|
+
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
27
|
+
end
|
28
|
+
|
29
|
+
require 'spec/rake/spectask'
|
30
|
+
Spec::Rake::SpecTask.new(:spec) do |spec|
|
31
|
+
spec.libs << 'lib' << 'spec'
|
32
|
+
spec.spec_files = FileList['spec/**/*_spec.rb']
|
33
|
+
end
|
34
|
+
|
35
|
+
Spec::Rake::SpecTask.new(:rcov) do |spec|
|
36
|
+
spec.libs << 'lib' << 'spec'
|
37
|
+
spec.pattern = 'spec/**/*_spec.rb'
|
38
|
+
spec.rcov = true
|
39
|
+
end
|
40
|
+
|
41
|
+
task :spec => :check_dependencies
|
42
|
+
|
43
|
+
begin
|
44
|
+
require 'cucumber/rake/task'
|
45
|
+
Cucumber::Rake::Task.new(:features)
|
46
|
+
|
47
|
+
task :features => :check_dependencies
|
48
|
+
rescue LoadError
|
49
|
+
task :features do
|
50
|
+
abort "Cucumber is not available. In order to run features, you must: sudo gem install cucumber"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
task :default => :spec
|
55
|
+
|
56
|
+
require 'rake/rdoctask'
|
57
|
+
Rake::RDocTask.new do |rdoc|
|
58
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
59
|
+
|
60
|
+
rdoc.rdoc_dir = 'rdoc'
|
61
|
+
rdoc.title = "Revenc #{version}"
|
62
|
+
rdoc.rdoc_files.include('README*')
|
63
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
64
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.2
|
data/bin/revenc
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$:.unshift(File.dirname(__FILE__) + '/../lib')
|
4
|
+
|
5
|
+
require 'revenc'
|
6
|
+
require 'optparse'
|
7
|
+
require 'term/ansicolor'
|
8
|
+
|
9
|
+
available_actions = Revenc::AVAILABLE_ACTIONS
|
10
|
+
|
11
|
+
banner = <<BANNER
|
12
|
+
Revenc is an encfs helper
|
13
|
+
|
14
|
+
Usage: revenc action [options]
|
15
|
+
BANNER
|
16
|
+
banner << "\nActions: #{available_actions.join(' ')}\n" unless available_actions.empty?
|
17
|
+
|
18
|
+
help = banner
|
19
|
+
help += <<HELP
|
20
|
+
Mount: revenc mount <unencrypted source> <empty mountpoint>
|
21
|
+
Unmount: revenc unmount <mounted encypted folder>
|
22
|
+
Copy: revenc copy <encrypted source> <destination>
|
23
|
+
Note: Copying is normally done via rsync
|
24
|
+
|
25
|
+
Options:
|
26
|
+
|
27
|
+
HELP
|
28
|
+
|
29
|
+
options = {}
|
30
|
+
OptionParser.new do |opts|
|
31
|
+
opts.banner = help
|
32
|
+
|
33
|
+
# set defaults
|
34
|
+
options[:verbose] = false
|
35
|
+
options[:coloring] = true
|
36
|
+
|
37
|
+
opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
|
38
|
+
options[:verbose] = v
|
39
|
+
end
|
40
|
+
|
41
|
+
opts.on("-c", "--[no-]coloring", "Ansi color in output") do |c|
|
42
|
+
options[:coloring] = c
|
43
|
+
end
|
44
|
+
|
45
|
+
opts.on("--version", "Display current version") do
|
46
|
+
puts "revenc, version " + Revenc.version
|
47
|
+
exit 0
|
48
|
+
end
|
49
|
+
|
50
|
+
opts.on("-d", "--dry-run", "Run action but omit the final execute step. Useful combined with --verbose") do |d|
|
51
|
+
options[:dry_run] = d
|
52
|
+
end
|
53
|
+
|
54
|
+
opts.on("--config FILE", "Load configuration options from FILE") do |file|
|
55
|
+
options[:config] = file
|
56
|
+
end
|
57
|
+
|
58
|
+
# no argument, shows at tail. This will print an options summary.
|
59
|
+
opts.on_tail("-h", "--help", "Show this message") do
|
60
|
+
puts opts
|
61
|
+
exit 0
|
62
|
+
end
|
63
|
+
|
64
|
+
begin
|
65
|
+
opts.parse!
|
66
|
+
rescue OptionParser::InvalidOption => e
|
67
|
+
puts "revenc #{e}"
|
68
|
+
puts "revenc --help for more information"
|
69
|
+
exit 1
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
if STDOUT.isatty
|
75
|
+
Term::ANSIColor::coloring = options[:coloring]
|
76
|
+
else
|
77
|
+
Term::ANSIColor::coloring = false
|
78
|
+
end
|
79
|
+
|
80
|
+
app = Revenc::App.new(FileUtils.pwd, options)
|
81
|
+
app.run
|
data/config/cucumber.yml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
<%
|
2
|
+
rerun = File.file?('rerun.txt') ? IO.read('rerun.txt') : ""
|
3
|
+
rerun_opts = rerun.to_s.strip.empty? ? "--format pretty features" : "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} #{rerun}"
|
4
|
+
std_opts = "#{rerun_opts} --format rerun --out rerun.txt --strict --tags ~@wip"
|
5
|
+
%>
|
6
|
+
default: <%= std_opts %> --no-diff
|
7
|
+
wip: --tags @wip:3 --wip features
|
@@ -0,0 +1,35 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
2
|
+
<!DOCTYPE boost_serialization>
|
3
|
+
<boost_serialization signature="serialization::archive" version="4">
|
4
|
+
<config class_id="0" tracking_level="1" version="20080816" object_id="_0">
|
5
|
+
<creator>EncFS 1.5</creator>
|
6
|
+
<cipherAlg class_id="1" tracking_level="0" version="0">
|
7
|
+
<name>ssl/aes</name>
|
8
|
+
<major>2</major>
|
9
|
+
<minor>2</minor>
|
10
|
+
</cipherAlg>
|
11
|
+
<nameAlg>
|
12
|
+
<name>nameio/null</name>
|
13
|
+
<major>1</major>
|
14
|
+
<minor>0</minor>
|
15
|
+
</nameAlg>
|
16
|
+
<keySize>128</keySize>
|
17
|
+
<blockSize>1024</blockSize>
|
18
|
+
<uniqueIV>0</uniqueIV>
|
19
|
+
<chainedNameIV>0</chainedNameIV>
|
20
|
+
<externalIVChaining>0</externalIVChaining>
|
21
|
+
<blockMACBytes>0</blockMACBytes>
|
22
|
+
<blockMACRandBytes>0</blockMACRandBytes>
|
23
|
+
<allowHoles>1</allowHoles>
|
24
|
+
<encodedKeySize>36</encodedKeySize>
|
25
|
+
<encodedKeyData>
|
26
|
+
unVmAfPQFd5t4cakBxbE7uosu4tzZbo8B513iGGNynzArOKM=
|
27
|
+
</encodedKeyData>
|
28
|
+
<saltLen>20</saltLen>
|
29
|
+
<saltData>
|
30
|
+
IcFy11sZw/w7juCI+Cro8AZVp6Q
|
31
|
+
</saltData>
|
32
|
+
<kdfIterations>97493</kdfIterations>
|
33
|
+
<desiredKDFDuration>500</desiredKDFDuration>
|
34
|
+
</config>
|
35
|
+
</boost_serialization>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
mount:
|
2
|
+
source:
|
3
|
+
name: unencrypted_data
|
4
|
+
mountpoint:
|
5
|
+
name: encrypted_data/mountpoint
|
6
|
+
passphrasefile:
|
7
|
+
name: scripts/passphrase
|
8
|
+
keyfile:
|
9
|
+
name: encrypted_data/key/encfs6.xml
|
10
|
+
cmd: cat <%%= passphrasefile.name %> | ENCFS6_CONFIG=<%%= keyfile.name %> <%%= executable %> --stdinpass --reverse <%%= source.name %> <%%= mountpoint.name %> -- -o ro
|
11
|
+
copy:
|
12
|
+
source:
|
13
|
+
name: encrypted_data # sync the encrypted data as well as the key
|
14
|
+
destination:
|
15
|
+
name: copy_destination # could be a remote host instead of a folder, i.e. user1@example.com:backups/here
|
16
|
+
executable: rsync
|
17
|
+
cmd: <%%= executable %> --perms --links --times --recursive --verbose --compress --stats --human-readable --inplace <%%= source.name %> <%%= destination.name %>
|
18
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
test
|
@@ -0,0 +1 @@
|
|
1
|
+
some stuff
|
@@ -0,0 +1 @@
|
|
1
|
+
some more stuff
|
@@ -0,0 +1,35 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
2
|
+
<!DOCTYPE boost_serialization>
|
3
|
+
<boost_serialization signature="serialization::archive" version="4">
|
4
|
+
<config class_id="0" tracking_level="1" version="20080816" object_id="_0">
|
5
|
+
<creator>EncFS 1.5</creator>
|
6
|
+
<cipherAlg class_id="1" tracking_level="0" version="0">
|
7
|
+
<name>ssl/aes</name>
|
8
|
+
<major>2</major>
|
9
|
+
<minor>2</minor>
|
10
|
+
</cipherAlg>
|
11
|
+
<nameAlg>
|
12
|
+
<name>nameio/null</name>
|
13
|
+
<major>1</major>
|
14
|
+
<minor>0</minor>
|
15
|
+
</nameAlg>
|
16
|
+
<keySize>128</keySize>
|
17
|
+
<blockSize>1024</blockSize>
|
18
|
+
<uniqueIV>0</uniqueIV>
|
19
|
+
<chainedNameIV>0</chainedNameIV>
|
20
|
+
<externalIVChaining>0</externalIVChaining>
|
21
|
+
<blockMACBytes>0</blockMACBytes>
|
22
|
+
<blockMACRandBytes>0</blockMACRandBytes>
|
23
|
+
<allowHoles>1</allowHoles>
|
24
|
+
<encodedKeySize>36</encodedKeySize>
|
25
|
+
<encodedKeyData>
|
26
|
+
BjZ2dl0VE8ezDBvAwgxLo1ODmnrLlawYrlfhG8Fe3wcQBzZu=
|
27
|
+
</encodedKeyData>
|
28
|
+
<saltLen>20</saltLen>
|
29
|
+
<saltData>
|
30
|
+
tPmiXlNgrbvvSlnGcqe4aCjGWGY
|
31
|
+
</saltData>
|
32
|
+
<kdfIterations>83342</kdfIterations>
|
33
|
+
<desiredKDFDuration>500</desiredKDFDuration>
|
34
|
+
</config>
|
35
|
+
</boost_serialization>
|
@@ -0,0 +1 @@
|
|
1
|
+
my_super_secret_PassPHRase
|
@@ -0,0 +1 @@
|
|
1
|
+
some stuff
|
@@ -0,0 +1 @@
|
|
1
|
+
some more stuff
|