ssbx 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +20 -0
- data/exe/ssbx +46 -16
- data/lib/ssbx/file.rb +3 -2
- data/lib/ssbx/util.rb +47 -0
- data/lib/ssbx/version.rb +1 -1
- data/lib/ssbx.rb +1 -0
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8ac01c3e11dac6e4e8ef24b14e88dbb64164dd6fd81c34c7e0408c90b26838dd
|
4
|
+
data.tar.gz: 5c0bf89484444b8b72c1e5a07df573364f75b315f8abe099ef81236a0b277055
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e28b74015ab982982ad09ab7c7e5f914acb249f8f61f3fa221d2e572ed2f52758d4622777c9000079f5e19a052ac45e1ae585f73feb4fe4e7559bf7d6d4cbdfb
|
7
|
+
data.tar.gz: ced2414f90e641209126b2205f49eb10d8d3f0822f75198e963739d5d0d2c57e5093c61c043e02dd83edbf4bd92de9b3fc835adf3f2f3e8438fc121ce954e4b5
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -23,10 +23,30 @@ Edit `~/.ssbx.yaml` to contain...
|
|
23
23
|
```yaml
|
24
24
|
user: You
|
25
25
|
pass: A secret password
|
26
|
+
# This is optional if you want to override $EDITOR.
|
27
|
+
editor: vi
|
26
28
|
```
|
27
29
|
|
28
30
|
Then use `ssbx` to view or edit a file.
|
29
31
|
|
32
|
+
## Simple Recipes
|
33
|
+
|
34
|
+
# Add a user with a simple password.
|
35
|
+
sbx -f f1.enc -a user1:userpass
|
36
|
+
|
37
|
+
# ... or
|
38
|
+
cat f1.enc | ssbx -f - -a user1:userpass > f2.enc
|
39
|
+
|
40
|
+
# Remove the user.
|
41
|
+
ssbx -f f1.enc -d user1:userpass
|
42
|
+
|
43
|
+
# File data to standard out.
|
44
|
+
ssbx -f f1.enc -o -
|
45
|
+
|
46
|
+
# Edit file data and re-encrypt the file.
|
47
|
+
ssbx -f f1.enc -e
|
48
|
+
|
49
|
+
|
30
50
|
## Development
|
31
51
|
|
32
52
|
After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/exe/ssbx
CHANGED
@@ -4,6 +4,7 @@ require "ssbx"
|
|
4
4
|
require 'optparse'
|
5
5
|
require 'yaml'
|
6
6
|
require 'pp'
|
7
|
+
require 'tempfile'
|
7
8
|
|
8
9
|
CONFIG = {
|
9
10
|
'file' => 'ssbx.enc',
|
@@ -29,6 +30,10 @@ OptionParser.new do |opts|
|
|
29
30
|
CONFIG['list'] = true
|
30
31
|
end
|
31
32
|
|
33
|
+
opts.on('-e', '--edit', "Edit the given file with EDITOR and exit.") do
|
34
|
+
CONFIG['edit'] = true
|
35
|
+
end
|
36
|
+
|
32
37
|
opts.on('-d', '--delete=user', String, "Delete user. May be used multiple times.") do |u|
|
33
38
|
CONFIG['delete_users'] << u
|
34
39
|
end
|
@@ -60,24 +65,23 @@ if CONFIG['verbose']
|
|
60
65
|
end
|
61
66
|
|
62
67
|
CONFIG['delete_users'].each do |u|
|
63
|
-
f = Ssbx::File.new
|
64
|
-
File.open(CONFIG['file'], 'r') { |io| f.read(io) }
|
68
|
+
f = Ssbx::Util.read(CONFIG['file']) { |io| Ssbx::File.new(io) }
|
65
69
|
bx = Ssbx::Box.new(f)
|
66
70
|
bx.remove_user(u)
|
67
|
-
|
71
|
+
Ssbx::Util.write(CONFIG['file']) { |io| f.write(io) }
|
68
72
|
end
|
69
73
|
|
70
|
-
if CONFIG['add_users']
|
74
|
+
if CONFIG['add_users'].length > 0
|
71
75
|
f = Ssbx::File.new
|
72
76
|
bx = Ssbx::Box.new(f)
|
73
|
-
data =
|
77
|
+
data = Ssbx::Util.read(CONFIG['file']) do |io|
|
74
78
|
bx.read(io, CONFIG['user'], CONFIG['pass'])
|
75
79
|
end
|
76
80
|
|
77
81
|
CONFIG['add_users'].each do |u|
|
78
82
|
u, p = u[0], u[1] || u[0]
|
79
83
|
|
80
|
-
|
84
|
+
Ssbx::Util.write(CONFIG['file']) do |io|
|
81
85
|
bx.write(io, u, p, data)
|
82
86
|
end
|
83
87
|
end
|
@@ -87,31 +91,57 @@ if CONFIG['set']
|
|
87
91
|
f = Ssbx::File.new
|
88
92
|
bx = Ssbx::Box.new(f)
|
89
93
|
data = File.read(CONFIG['set'])
|
90
|
-
|
91
|
-
bx.write(io,
|
92
|
-
end
|
94
|
+
Ssbx::Util.write(CONFIG['file']) do |io|
|
95
|
+
bx.write(io, u, p, data)
|
96
|
+
end
|
93
97
|
end
|
94
98
|
|
95
99
|
if CONFIG['out']
|
96
100
|
f = Ssbx::File.new
|
97
101
|
bx = Ssbx::Box.new(f)
|
98
|
-
data =
|
102
|
+
data = Ssbx::Util.read(CONFIG['file']) do |io|
|
99
103
|
bx.read(io, CONFIG['user'], CONFIG['pass'])
|
100
104
|
end
|
101
105
|
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
106
|
+
Ssbx::Util.write(CONFIG['out']) { |io| io.write(data) }
|
107
|
+
end
|
108
|
+
|
109
|
+
if CONFIG['edit']
|
110
|
+
f = Ssbx::File.new
|
111
|
+
bx = Ssbx::Box.new(f)
|
112
|
+
|
113
|
+
data = if File.file? CONFIG['file']
|
114
|
+
Ssbx::Util.read(CONFIG['file']) do |io|
|
115
|
+
bx.read(io, CONFIG['user'], CONFIG['pass'])
|
116
|
+
end
|
117
|
+
else
|
118
|
+
''
|
119
|
+
end
|
120
|
+
|
121
|
+
tmpfile = Tempfile.new("ssbx")
|
122
|
+
tmpfile.write(data)
|
123
|
+
tmpfile.flush
|
124
|
+
|
125
|
+
begin
|
126
|
+
editor = CONFIG['editor'] || ENV['EDITOR']
|
127
|
+
|
128
|
+
system("#{editor} #{tmpfile.path}")
|
129
|
+
|
130
|
+
tmpfile.rewind
|
131
|
+
data = File.read(tmpfile)
|
132
|
+
File.open(CONFIG['file'], 'wb') do |io|
|
133
|
+
bx.write(io, CONFIG['user'], CONFIG['pass'], data)
|
107
134
|
end
|
135
|
+
ensure
|
136
|
+
tmpfile.unlink
|
108
137
|
end
|
109
138
|
end
|
110
139
|
|
111
140
|
if CONFIG['list']
|
112
141
|
f = Ssbx::File.new
|
113
142
|
bx = Ssbx::Box.new(f)
|
114
|
-
|
143
|
+
|
144
|
+
Ssbx::Util.read(CONFIG['file']) do |io|
|
115
145
|
f.read(io)
|
116
146
|
end
|
117
147
|
|
data/lib/ssbx/file.rb
CHANGED
@@ -16,9 +16,10 @@ module Ssbx
|
|
16
16
|
# The file data.
|
17
17
|
attr_accessor :data
|
18
18
|
|
19
|
-
def initialize
|
19
|
+
def initialize(optional_stream = nil)
|
20
20
|
@keys = []
|
21
21
|
@data = ''
|
22
|
+
read(optional_stream) if optional_stream
|
22
23
|
end
|
23
24
|
|
24
25
|
def write(out)
|
@@ -38,7 +39,7 @@ module Ssbx
|
|
38
39
|
out.write(@data)
|
39
40
|
end
|
40
41
|
|
41
|
-
def read(istream)
|
42
|
+
def read(istream)
|
42
43
|
@keys = []
|
43
44
|
# Read the key record length...
|
44
45
|
istream.read(4).unpack('N')[0].times do
|
data/lib/ssbx/util.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
module Ssbx
|
2
|
+
module Util
|
3
|
+
def self.read(istream)
|
4
|
+
if istream.is_a? String
|
5
|
+
stream = if istream == '-'
|
6
|
+
STDIN
|
7
|
+
else
|
8
|
+
::File.open(istream, 'rb')
|
9
|
+
end
|
10
|
+
|
11
|
+
if block_given?
|
12
|
+
begin
|
13
|
+
yield stream
|
14
|
+
ensure
|
15
|
+
stream.close
|
16
|
+
end
|
17
|
+
else
|
18
|
+
stream
|
19
|
+
end
|
20
|
+
else
|
21
|
+
raise Exception.new("Unsupported type #{istream.class}.")
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.write(ostream)
|
26
|
+
if ostream.is_a? String
|
27
|
+
stream = if ostream == '-'
|
28
|
+
STDOUT
|
29
|
+
else
|
30
|
+
::File.open(ostream, 'wb')
|
31
|
+
end
|
32
|
+
|
33
|
+
if block_given?
|
34
|
+
begin
|
35
|
+
yield stream
|
36
|
+
ensure
|
37
|
+
stream.close
|
38
|
+
end
|
39
|
+
else
|
40
|
+
stream
|
41
|
+
end
|
42
|
+
else
|
43
|
+
raise Exception.new("Unsupported type #{ostream.class}.")
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
data/lib/ssbx/version.rb
CHANGED
data/lib/ssbx.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ssbx
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sam
|
@@ -59,6 +59,7 @@ files:
|
|
59
59
|
- lib/ssbx.rb
|
60
60
|
- lib/ssbx/box.rb
|
61
61
|
- lib/ssbx/file.rb
|
62
|
+
- lib/ssbx/util.rb
|
62
63
|
- lib/ssbx/version.rb
|
63
64
|
- ssbx.gemspec
|
64
65
|
homepage: https://gitlab.com/basking2/ssbx
|