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.
@@ -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
@@ -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)
@@ -0,0 +1 @@
1
+ require 'lib/nib/crypt'
@@ -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
@@ -0,0 +1,5 @@
1
+ module Nib
2
+ module Crypt
3
+ VERSION = '0.1.0'.freeze
4
+ end
5
+ end
@@ -0,0 +1,7 @@
1
+ module Nib
2
+ module Crypt
3
+ def self.applies?
4
+ true
5
+ end
6
+ end
7
+ 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: []