nib-crypt 0.1.0
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 +7 -0
- data/bin/nib-crypt +30 -0
- data/lib/nib.rb +1 -0
- data/lib/nib/crypt.rb +34 -0
- data/lib/nib/crypt/initializer.rb +31 -0
- data/lib/nib/crypt/key.rb +44 -0
- data/lib/nib/crypt/version.rb +5 -0
- data/lib/nib_crypt_plugin.rb +7 -0
- metadata +165 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: accbd6fd3ce0d4c615f17bb1786b6e3324e4a8cac89eae3fb154e80ada401672
|
4
|
+
data.tar.gz: 806f5d9eb3510c8dfb032fc6c4c0ce2b596f08e0334ad8ba04be54d565424a4e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 11e61d4578c3fd3be1835442141e4f63813dd24b4fc09fb8aaca8daa514f1ac7f8528f87606164ac2d42239d8f5df1e515b161122e9911ca358f65da35c40d5f
|
7
|
+
data.tar.gz: 421e59426d5ca03948d246e41d32c114483a028a1efa078eaa94512caea0650922ea31b7d2c8dcb00ff357ee2107739f2edb90c76b99ab06c57b22d4cb0733ed
|
data/bin/nib-crypt
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'nib/crypt'
|
4
|
+
|
5
|
+
desc 'Initialize a project (create or pull secret key)'
|
6
|
+
command :'crypt-init' do |c|
|
7
|
+
c.action do |_global_options, _options, args|
|
8
|
+
Nib::Crypt.init(*args)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
desc 'Encrypt a file'
|
13
|
+
arg :input
|
14
|
+
arg :output
|
15
|
+
command :encrypt do |c|
|
16
|
+
c.action do |_global_options, _options, args|
|
17
|
+
Nib::Crypt.encrypt(*args)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
desc 'Decrypt a file'
|
22
|
+
arg :input
|
23
|
+
arg :output
|
24
|
+
command :decrypt do |c|
|
25
|
+
c.action do |_global_options, _options, args|
|
26
|
+
Nib::Crypt.decrypt(*args)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
exit run(ARGV)
|
data/lib/nib.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'lib/nib/crypt'
|
data/lib/nib/crypt.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'nib/crypt/version'
|
2
|
+
require 'nib/crypt/initializer'
|
3
|
+
require 'nib/crypt/key'
|
4
|
+
|
5
|
+
module Nib
|
6
|
+
module Crypt
|
7
|
+
DEFAULT_KEY_NAME = 'secrets.aes'.freeze
|
8
|
+
|
9
|
+
module_function
|
10
|
+
|
11
|
+
def init
|
12
|
+
Initializer.new.call
|
13
|
+
end
|
14
|
+
|
15
|
+
def encrypt(input, output)
|
16
|
+
exec(script(input, output, 'e'))
|
17
|
+
end
|
18
|
+
|
19
|
+
def decrypt(input, output)
|
20
|
+
exec(script(input, output, 'd'))
|
21
|
+
end
|
22
|
+
|
23
|
+
def script(input, output, direction)
|
24
|
+
<<-"SCRIPT"
|
25
|
+
openssl enc \
|
26
|
+
-in #{input} \
|
27
|
+
-out #{output} \
|
28
|
+
-#{direction} \
|
29
|
+
-aes256 \
|
30
|
+
-pass file:#{DEFAULT_KEY_NAME}
|
31
|
+
SCRIPT
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
|
2
|
+
module Nib
|
3
|
+
module Crypt
|
4
|
+
class Initializer
|
5
|
+
attr_reader :key
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@key = Key.new
|
9
|
+
end
|
10
|
+
|
11
|
+
# rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
12
|
+
def call
|
13
|
+
if key.remote? && !key.local?
|
14
|
+
puts 'Pulling existing key from S3'
|
15
|
+
key.pull
|
16
|
+
elsif !key.local?
|
17
|
+
puts 'Key does not yet exist, creating'
|
18
|
+
key.create!
|
19
|
+
puts 'Pushing new key to to S3'
|
20
|
+
key.push
|
21
|
+
elsif !key.remote?
|
22
|
+
puts 'Pushing existing key to to S3'
|
23
|
+
key.push
|
24
|
+
else
|
25
|
+
puts 'Project already inialized'
|
26
|
+
end
|
27
|
+
end
|
28
|
+
# rubocop:enable Metrics/MethodLength, Metrics/AbcSize
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Nib
|
2
|
+
module Crypt
|
3
|
+
class Key
|
4
|
+
def create!
|
5
|
+
`openssl rand -out #{name} -hex 512`
|
6
|
+
end
|
7
|
+
|
8
|
+
def local?
|
9
|
+
@local ||= File.exist?(name)
|
10
|
+
end
|
11
|
+
|
12
|
+
def remote?
|
13
|
+
@remote ||= !`aws s3 ls s3://#{bucket}/${PWD##*/}.#{name}`.empty?
|
14
|
+
end
|
15
|
+
|
16
|
+
def push
|
17
|
+
`aws s3 cp #{name} s3://#{bucket}/${PWD##*/}.#{name}`
|
18
|
+
end
|
19
|
+
|
20
|
+
def pull
|
21
|
+
`aws s3 cp s3://#{bucket}/${PWD##*/}.#{name} #{name}`
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def name
|
27
|
+
DEFAULT_KEY_NAME
|
28
|
+
end
|
29
|
+
|
30
|
+
def bucket
|
31
|
+
ENV.fetch('NIB_CRYPT_BUCKENT_NAME') { raise MissingBucketError }
|
32
|
+
end
|
33
|
+
|
34
|
+
class MissingBucketError < StandardError
|
35
|
+
def message
|
36
|
+
<<-ERROR.tr("\n", '').gsub(/\s+/, ' ')
|
37
|
+
Please provide a bucket via the `NIB_CRYPT_BUCKENT_NAME`
|
38
|
+
environment variable
|
39
|
+
ERROR
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
metadata
ADDED
@@ -0,0 +1,165 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: nib-crypt
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- John Allen
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-01-16 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: nib
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: codeclimate-test-reporter
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.0.7
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.0.7
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: guard
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: guard-rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: guard-rubocop
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: pry
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rake
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: simplecov
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
description: An encryption plugin for Nib
|
126
|
+
email:
|
127
|
+
- john@threedogconsulting.com
|
128
|
+
executables:
|
129
|
+
- nib-crypt
|
130
|
+
extensions: []
|
131
|
+
extra_rdoc_files: []
|
132
|
+
files:
|
133
|
+
- bin/nib-crypt
|
134
|
+
- lib/nib.rb
|
135
|
+
- lib/nib/crypt.rb
|
136
|
+
- lib/nib/crypt/initializer.rb
|
137
|
+
- lib/nib/crypt/key.rb
|
138
|
+
- lib/nib/crypt/version.rb
|
139
|
+
- lib/nib_crypt_plugin.rb
|
140
|
+
homepage: https://github.com/technekes/nib-crypt
|
141
|
+
licenses:
|
142
|
+
- MIT
|
143
|
+
metadata: {}
|
144
|
+
post_install_message:
|
145
|
+
rdoc_options: []
|
146
|
+
require_paths:
|
147
|
+
- lib
|
148
|
+
- lib
|
149
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - ">="
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: '0'
|
154
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
155
|
+
requirements:
|
156
|
+
- - ">="
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
version: '0'
|
159
|
+
requirements: []
|
160
|
+
rubyforge_project:
|
161
|
+
rubygems_version: 2.7.4
|
162
|
+
signing_key:
|
163
|
+
specification_version: 4
|
164
|
+
summary: An encryption plugin for Nib
|
165
|
+
test_files: []
|