gpgenv 0.1.0 → 0.1.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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/README.md +4 -5
- data/bin/gpgenv +2 -2
- data/gpgenv.gemspec +2 -0
- data/lib/gpgenv/exec_command.rb +5 -9
- data/lib/gpgenv/export_command.rb +27 -0
- data/lib/gpgenv/import_command.rb +32 -0
- data/lib/gpgenv/main_command.rb +18 -0
- data/lib/gpgenv/shell_command.rb +6 -9
- data/lib/gpgenv/version.rb +1 -1
- metadata +19 -4
- data/bin/gpgshell +0 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 017ba30f555fd557cc878944b5d0506b8b8d0ccf
|
4
|
+
data.tar.gz: 0f42e386012535c8a387b1fd31080dee5c717ce6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ab81c8a64d35121baea8cb225b7a4598cec12ce6a5e30da6b1adc6340dbc5f81da9f4bb3e1fac60c9afb6d5de9015d8fa6691d56fbb5f6637fa684fc5254d24a
|
7
|
+
data.tar.gz: 75ffe58628a24a6bf6a3bbd4386b475ec3ae5a3fc96315c3a665104203eaef8bdf8e9bca956b75891714c3a093011532c717de3e52868f8324a43e881c4b63fb
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -17,13 +17,13 @@ Gpgenv plays very nicely with [pass](http://www.passwordstore.org/). For example
|
|
17
17
|
|
18
18
|
```bash
|
19
19
|
# Set up a shortcut to your passwordstore home directory
|
20
|
-
export GPGENV_HOME=$HOME/.password-store
|
20
|
+
export GPGENV_HOME=$HOME/.password-store/env
|
21
21
|
|
22
22
|
# Insert your oauth token into your password store:
|
23
|
-
pass insert myservice/OAUTH_TOKEN
|
23
|
+
pass insert env/myservice/OAUTH_TOKEN
|
24
24
|
|
25
25
|
# Use gpgenv to spawn a bash session:
|
26
|
-
gpgenv
|
26
|
+
gpgenv myservice bash
|
27
27
|
|
28
28
|
# From the new bash session, use your oauth token to hit the service:
|
29
29
|
curl https://$user:$OAUTH_TOKEN@myservice.com/get_some_data
|
@@ -34,8 +34,7 @@ As an admin, I am guilty of occasionally storing sensitive credentials on disk.
|
|
34
34
|
extremely common. Your .netrc file probably contains all sorts of sensitive data, and even if you use a gpg-encrypted .netrc file, many tools
|
35
35
|
simply don't understand gpg. Storing this stuff in plaintext is dangerous - but you do it anyway because the alternatives are just too painful.
|
36
36
|
|
37
|
-
I love [pass](http://www.passwordstore.org/), because it makes it easy to store passwords encrypted. But it doesn't make it easy to *use* them
|
38
|
-
(tbh, that isn't its job). I wrote `gpgenv` to bridge that gap, and make it easy for me to never store sensitive information in an unencrypted format
|
37
|
+
I love [pass](http://www.passwordstore.org/), because it makes it easy to store passwords encrypted. But it doesn't make it easy to *use* them in any capacity other than copy-and-pasting them. I wrote `gpgenv` to bridge that gap, and make it easy for me to never store sensitive information in an unencrypted format
|
39
38
|
on my own machine. I hope that you find it useful as well, and you use it to stop yourself from committing security sins.
|
40
39
|
|
41
40
|
## Installation
|
data/bin/gpgenv
CHANGED
data/gpgenv.gemspec
CHANGED
@@ -26,6 +26,8 @@ Gem::Specification.new do |spec|
|
|
26
26
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
27
27
|
spec.require_paths = ["lib"]
|
28
28
|
|
29
|
+
spec.add_dependency 'clamp'
|
30
|
+
|
29
31
|
spec.add_development_dependency "bundler", "~> 1.9"
|
30
32
|
spec.add_development_dependency "rake", "~> 10.0"
|
31
33
|
spec.add_development_dependency "rspec"
|
data/lib/gpgenv/exec_command.rb
CHANGED
@@ -1,18 +1,14 @@
|
|
1
|
+
require 'clamp'
|
1
2
|
require 'gpgenv'
|
2
3
|
|
3
4
|
module Gpgenv
|
4
|
-
class ExecCommand
|
5
|
+
class ExecCommand < Clamp::Command
|
5
6
|
|
6
|
-
|
7
|
+
parameter "ARGUMENTS ...", "arguments", :attribute_name => :args
|
7
8
|
|
8
|
-
def
|
9
|
-
@args = args
|
10
|
-
end
|
11
|
-
|
12
|
-
def run
|
13
|
-
fail("Usage: gpgenv dir1 dir2 dir3 ... command") unless args.size >= 2
|
14
|
-
directories = args[0..-2]
|
9
|
+
def execute
|
15
10
|
cmd = args.last
|
11
|
+
directories = args[0..-2]
|
16
12
|
hash = Gpgenv.read_files(directories)
|
17
13
|
hash.each{ |k,v| ENV[k]=v }
|
18
14
|
exec cmd
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'clamp'
|
2
|
+
|
3
|
+
module Gpgenv
|
4
|
+
class ExportCommand < Clamp::Command
|
5
|
+
parameter 'DIRS ...', 'dirs', :attribute_name => :directories
|
6
|
+
|
7
|
+
option '--file', 'FILE', 'env file to read from', :default => '.env'
|
8
|
+
|
9
|
+
def full_dir
|
10
|
+
if ENV['GPGENV_HOME']
|
11
|
+
"#{ENV['GPGENV_HOME']}/#{dir}"
|
12
|
+
else
|
13
|
+
dir
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def execute
|
18
|
+
hash = Gpgenv.read_files(directories)
|
19
|
+
str = ''
|
20
|
+
hash.each do |k,v|
|
21
|
+
str << "#{k}=#{v}\n"
|
22
|
+
end
|
23
|
+
File.write(file, str)
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'clamp'
|
2
|
+
|
3
|
+
module Gpgenv
|
4
|
+
class ImportCommand < Clamp::Command
|
5
|
+
option '--dir', 'DIRECTORY', 'directory, relative to $GPGENV_HOME, to store files in', :attribute_name => 'dir', :required => true
|
6
|
+
option '--file', 'FILE', 'env file to read from', :default => '.env'
|
7
|
+
|
8
|
+
def full_dir
|
9
|
+
if ENV['GPGENV_HOME']
|
10
|
+
index = ENV['GPGENV_HOME'].index('.password-store')
|
11
|
+
prefix = ENV['GPGENV_HOME'][index+16..-1]
|
12
|
+
"#{prefix}/#{dir}"
|
13
|
+
else
|
14
|
+
dir
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def execute
|
19
|
+
IO.foreach(file) do |line|
|
20
|
+
line = line.strip
|
21
|
+
i = line.index('=')
|
22
|
+
key=line[0..i-1]
|
23
|
+
value=line[i+1..-1]
|
24
|
+
value = value[1..-2] if value[0] == '"' && value[-1] == '"'
|
25
|
+
cmd="echo \"#{Shellwords.shellescape(value)}\" | pass insert -f -m #{full_dir}/#{key}"
|
26
|
+
puts cmd
|
27
|
+
system "echo \"#{Shellwords.shellescape(key)}\" | pass insert -f -m #{full_dir}/#{key}"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'clamp'
|
2
|
+
require 'gpgenv/exec_command'
|
3
|
+
require 'gpgenv/import_command'
|
4
|
+
require 'gpgenv/export_command'
|
5
|
+
require 'gpgenv/shell_command'
|
6
|
+
|
7
|
+
module Gpgenv
|
8
|
+
class MainCommand < Clamp::Command
|
9
|
+
subcommand 'exec', 'Exec a command', Gpgenv::ExecCommand
|
10
|
+
subcommand 'import', 'Import from .env to gpgenv', ImportCommand
|
11
|
+
subcommand 'export', 'Export from gpgenv to .env', ExportCommand
|
12
|
+
subcommand 'shell', 'Print out "export" commands, for use with eval', ShellCommand
|
13
|
+
|
14
|
+
def execute
|
15
|
+
super
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/gpgenv/shell_command.rb
CHANGED
@@ -1,18 +1,15 @@
|
|
1
1
|
require 'gpgenv'
|
2
2
|
require 'shellwords'
|
3
|
+
require 'clamp'
|
3
4
|
|
4
5
|
module Gpgenv
|
5
|
-
class ShellCommand
|
6
|
+
class ShellCommand < Clamp::Command
|
6
7
|
|
7
|
-
|
8
|
+
parameter "DIRECTORIES ...", "directories", :attribute_name => :directories
|
8
9
|
|
9
|
-
def
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
def run
|
14
|
-
fail("Usage: gpgshell dir1 dir2 ...") unless args.size >= 1
|
15
|
-
hash = Gpgenv.read_files(args)
|
10
|
+
def execute
|
11
|
+
fail("You must specify at least one directory") unless directories.size >= 1
|
12
|
+
hash = Gpgenv.read_files(directories)
|
16
13
|
hash.each do |k, v|
|
17
14
|
puts "export #{k}=#{Shellwords.escape(v)}"
|
18
15
|
end
|
data/lib/gpgenv/version.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gpgenv
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Shea
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-01-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: clamp
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: bundler
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -71,7 +85,6 @@ email:
|
|
71
85
|
- michael.shea@heroku.com
|
72
86
|
executables:
|
73
87
|
- gpgenv
|
74
|
-
- gpgshell
|
75
88
|
extensions: []
|
76
89
|
extra_rdoc_files: []
|
77
90
|
files:
|
@@ -83,12 +96,14 @@ files:
|
|
83
96
|
- README.md
|
84
97
|
- Rakefile
|
85
98
|
- bin/gpgenv
|
86
|
-
- bin/gpgshell
|
87
99
|
- gpgenv.gemspec
|
88
100
|
- lib/gpgenv.rb
|
89
101
|
- lib/gpgenv/config.rb
|
90
102
|
- lib/gpgenv/error.rb
|
91
103
|
- lib/gpgenv/exec_command.rb
|
104
|
+
- lib/gpgenv/export_command.rb
|
105
|
+
- lib/gpgenv/import_command.rb
|
106
|
+
- lib/gpgenv/main_command.rb
|
92
107
|
- lib/gpgenv/shell_command.rb
|
93
108
|
- lib/gpgenv/version.rb
|
94
109
|
homepage: https://github.com/heroku/gpgenv
|