invisible_ink 0.1.0 â 0.2.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 +4 -4
- data/.docs/demo.gif +0 -0
- data/CHANGELOG.md +3 -1
- data/Gemfile +1 -0
- data/Gemfile.lock +14 -1
- data/README.md +30 -8
- data/exe/invisible_ink +113 -0
- data/invisible_ink.gemspec +1 -1
- data/lib/invisible_ink/version.rb +1 -1
- data/lib/invisible_ink.rb +3 -0
- metadata +21 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8bd2253b21ddd6d79d6b1e604bcb55779c9293edad45856b09378dbecff481b0
|
4
|
+
data.tar.gz: b7e00aa59ddcba71d5e21752f2218db99cb8e93f2ec6832996c79300898675b1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f11b44a64326320264eeb2f6b5114acddcf46b53fe4a97edf0fd5dea35f38c91d05fe016f788e83e5e8258bcbc84b056f9839b1bfbd1b2eb027f32aebca4f477
|
7
|
+
data.tar.gz: a794693278351dbd89c280c0c6013f2f11e4d1e6cc78d96911b4a128e1cc498221aefd357b71f8f20f6002df16677bb73d3a2b019f9e75521ec44bedc0fb4f75
|
data/.docs/demo.gif
ADDED
Binary file
|
data/CHANGELOG.md
CHANGED
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,15 +1,25 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
invisible_ink (0.
|
4
|
+
invisible_ink (0.2.0)
|
5
|
+
activesupport (~> 7.0)
|
5
6
|
|
6
7
|
GEM
|
7
8
|
remote: https://rubygems.org/
|
8
9
|
specs:
|
10
|
+
activesupport (7.0.4.3)
|
11
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
12
|
+
i18n (>= 1.6, < 2)
|
13
|
+
minitest (>= 5.1)
|
14
|
+
tzinfo (~> 2.0)
|
9
15
|
ast (2.4.2)
|
16
|
+
concurrent-ruby (1.2.2)
|
10
17
|
diff-lcs (1.5.0)
|
18
|
+
i18n (1.12.0)
|
19
|
+
concurrent-ruby (~> 1.0)
|
11
20
|
json (2.6.3)
|
12
21
|
language_server-protocol (3.17.0.3)
|
22
|
+
minitest (5.18.0)
|
13
23
|
parallel (1.22.1)
|
14
24
|
parser (3.2.1.1)
|
15
25
|
ast (~> 2.4.1)
|
@@ -50,6 +60,8 @@ GEM
|
|
50
60
|
language_server-protocol (~> 3.17.0.2)
|
51
61
|
rubocop (= 1.44.1)
|
52
62
|
rubocop-performance (= 1.15.2)
|
63
|
+
tzinfo (2.0.6)
|
64
|
+
concurrent-ruby (~> 1.0)
|
53
65
|
unicode-display_width (2.4.2)
|
54
66
|
|
55
67
|
PLATFORMS
|
@@ -57,6 +69,7 @@ PLATFORMS
|
|
57
69
|
x86_64-linux
|
58
70
|
|
59
71
|
DEPENDENCIES
|
72
|
+
activesupport (~> 7.0)
|
60
73
|
invisible_ink!
|
61
74
|
rake (~> 13.0)
|
62
75
|
rspec (~> 3.0)
|
data/README.md
CHANGED
@@ -1,9 +1,13 @@
|
|
1
|
-
#
|
1
|
+
# đ Invisible Ink
|
2
2
|
|
3
3
|
Encrypt text files in your open source projects so that they can be committed to
|
4
4
|
your repository without exposing sensitive information.
|
5
5
|
|
6
|
-
##
|
6
|
+
## đ¸ Demo
|
7
|
+
|
8
|
+

|
9
|
+
|
10
|
+
## â
Installation
|
7
11
|
|
8
12
|
Install the gem and add to the application's Gemfile by executing:
|
9
13
|
|
@@ -13,11 +17,29 @@ If bundler is not being used to manage dependencies, install the gem by executin
|
|
13
17
|
|
14
18
|
$ gem install invisible_ink
|
15
19
|
|
16
|
-
## Usage
|
17
20
|
|
18
|
-
|
21
|
+
## âšī¸ Usage
|
22
|
+
|
23
|
+
Once installed in your project's `Gemfile`, run `bundle exec invisible_ink
|
24
|
+
--setup` to create an encryption key saved to `invisible_ink.key`. This will
|
25
|
+
also update your `.gitignore` file to ensure the key is not saved to version
|
26
|
+
control.
|
27
|
+
|
28
|
+
Alternatively, you can set `ENV["INVISIBLE_INK_KEY"]` to the value of a 32
|
29
|
+
character hash.
|
30
|
+
|
31
|
+
### â¨ī¸ Commands
|
32
|
+
|
33
|
+
```text
|
34
|
+
Usage: invisible_ink COMMAND [options]
|
35
|
+
-w, --write FILE Encrypt a file using an encryption key and open it in the specified $EDITOR
|
36
|
+
-r, --read FILE Decrypt and display the content of an encrypted file
|
37
|
+
-s, --setup Generate an encryption key, save it to a file, and add it to .gitignore
|
38
|
+
-h, --help Display help message
|
39
|
+
-v, --version Display Gem version
|
40
|
+
```
|
19
41
|
|
20
|
-
## Development
|
42
|
+
## đ¨ Development
|
21
43
|
|
22
44
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run
|
23
45
|
`rake spec` to run the tests. You can also run `bin/console` for an interactive
|
@@ -29,7 +51,7 @@ release a new version, update the version number in `version.rb`, and then run
|
|
29
51
|
git commits and the created tag, and push the `.gem` file to
|
30
52
|
[rubygems.org](https://rubygems.org).
|
31
53
|
|
32
|
-
## Contributing
|
54
|
+
## đ Contributing
|
33
55
|
|
34
56
|
Bug reports and pull requests are welcome on GitHub at
|
35
57
|
https://github.com/stevepolitodesign/invisible_ink. This project is intended to be a
|
@@ -37,12 +59,12 @@ safe, welcoming space for collaboration, and contributors are expected to adhere
|
|
37
59
|
to the [code of
|
38
60
|
conduct](https://github.com/stevepolitodesign/invisible_ink/blob/main/CODE_OF_CONDUCT.md).
|
39
61
|
|
40
|
-
## License
|
62
|
+
## đ License
|
41
63
|
|
42
64
|
The gem is available as open source under the terms of the [MIT
|
43
65
|
License](https://opensource.org/licenses/MIT).
|
44
66
|
|
45
|
-
## Code of Conduct
|
67
|
+
## â¤ī¸ Code of Conduct
|
46
68
|
|
47
69
|
Everyone interacting in the InvisibleInk project's codebases, issue trackers,
|
48
70
|
chat rooms and mailing lists is expected to follow the [code of
|
data/exe/invisible_ink
ADDED
@@ -0,0 +1,113 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require_relative "../lib/invisible_ink"
|
3
|
+
require "optparse"
|
4
|
+
|
5
|
+
options = {}
|
6
|
+
|
7
|
+
begin
|
8
|
+
OptionParser.new do |opts|
|
9
|
+
opts.banner = "Usage: invisible_ink COMMAND [options]"
|
10
|
+
|
11
|
+
opts.on("-w", "--write FILE", String, "Encrypt a file using an encryption key and open it in the specified $EDITOR") do |file|
|
12
|
+
options[:command] = "write"
|
13
|
+
options[:file] = file
|
14
|
+
end
|
15
|
+
|
16
|
+
opts.on("-r", "--read FILE", String, "Decrypt and display the content of an encrypted file") do |file|
|
17
|
+
options[:command] = "read"
|
18
|
+
options[:file] = file
|
19
|
+
end
|
20
|
+
|
21
|
+
opts.on("-s", "--setup", "Generate an encryption key, save it to a file, and add it to .gitignore") do
|
22
|
+
options[:command] = "setup"
|
23
|
+
end
|
24
|
+
|
25
|
+
opts.on("-h", "--help", "Display help message") do
|
26
|
+
puts opts
|
27
|
+
exit
|
28
|
+
end
|
29
|
+
|
30
|
+
opts.on("-v", "--version", "Display Gem version") do
|
31
|
+
puts InvisibleInk::VERSION
|
32
|
+
exit
|
33
|
+
end
|
34
|
+
end.parse!
|
35
|
+
rescue OptionParser::MissingArgument => e
|
36
|
+
puts "ERROR: #{e.message}. The #{e.args.first} command requires a file argument."
|
37
|
+
puts ""
|
38
|
+
puts "EXAMPLE: invisible_ink #{e.args.first} path/to/file.txt"
|
39
|
+
exit 1
|
40
|
+
end
|
41
|
+
|
42
|
+
if options[:command].nil?
|
43
|
+
puts "Invalid command. Run 'invisible_ink --help' for a list of available commands."
|
44
|
+
exit 1
|
45
|
+
end
|
46
|
+
|
47
|
+
def build_encrypted_file(file_path)
|
48
|
+
ActiveSupport::EncryptedFile.new(
|
49
|
+
content_path: file_path,
|
50
|
+
key_path: "invisible_ink.key",
|
51
|
+
env_key: "INVISIBLE_INK_KEY",
|
52
|
+
raise_if_missing_key: true
|
53
|
+
)
|
54
|
+
end
|
55
|
+
|
56
|
+
def handle_missing_key_error(error)
|
57
|
+
puts "ERROR: #{error}"
|
58
|
+
puts ""
|
59
|
+
puts "Did you run 'invisible_ink setup'?"
|
60
|
+
end
|
61
|
+
|
62
|
+
case options[:command]
|
63
|
+
when "write"
|
64
|
+
file_path = options[:file]
|
65
|
+
if ENV["EDITOR"].to_s.empty?
|
66
|
+
puts "No $EDITOR to open file in. Assign one like this:"
|
67
|
+
puts ""
|
68
|
+
puts %(EDITOR="mate --wait" exe/invisible_ink write #{file_path})
|
69
|
+
puts ""
|
70
|
+
puts "For editors that fork and exit immediately, it's important to pass a wait flag;"
|
71
|
+
puts "otherwise, the file will be saved immediately with no chance to edit."
|
72
|
+
exit 1
|
73
|
+
end
|
74
|
+
begin
|
75
|
+
dir_path = File.dirname(file_path)
|
76
|
+
FileUtils.mkdir_p(dir_path)
|
77
|
+
|
78
|
+
encrypted_file = build_encrypted_file(file_path)
|
79
|
+
encrypted_file.write(nil) unless File.exist?(file_path)
|
80
|
+
|
81
|
+
encrypted_file.change do |tmp_path|
|
82
|
+
system(*Shellwords.split(ENV["EDITOR"]), tmp_path.to_s)
|
83
|
+
rescue Interrupt
|
84
|
+
puts "File not saved"
|
85
|
+
end
|
86
|
+
rescue ActiveSupport::EncryptedFile::MissingKeyError => error
|
87
|
+
handle_missing_key_error(error)
|
88
|
+
exit 1
|
89
|
+
end
|
90
|
+
when "read"
|
91
|
+
begin
|
92
|
+
encrypted_file = build_encrypted_file(options[:file])
|
93
|
+
puts encrypted_file.read
|
94
|
+
rescue ActiveSupport::EncryptedFile::MissingKeyError => error
|
95
|
+
handle_missing_key_error(error)
|
96
|
+
exit 1
|
97
|
+
end
|
98
|
+
when "setup"
|
99
|
+
if File.exist?("invisible_ink.key")
|
100
|
+
puts "ERROR: invisible_ink.key already exists"
|
101
|
+
exit 1
|
102
|
+
else
|
103
|
+
ignore_key = if File.exist?(".gitignore") && !File.read(".gitignore").empty?
|
104
|
+
"\ninvisible_ink.key"
|
105
|
+
else
|
106
|
+
"invisible_ink.key"
|
107
|
+
end
|
108
|
+
File.open(".gitignore", "a") { |file| file.puts(ignore_key) }
|
109
|
+
key = ActiveSupport::EncryptedFile.generate_key
|
110
|
+
File.write("invisible_ink.key", key)
|
111
|
+
puts "invisible_ink.key generated"
|
112
|
+
end
|
113
|
+
end
|
data/invisible_ink.gemspec
CHANGED
@@ -30,7 +30,7 @@ Gem::Specification.new do |spec|
|
|
30
30
|
spec.require_paths = ["lib"]
|
31
31
|
|
32
32
|
# Uncomment to register a new dependency of your gem
|
33
|
-
|
33
|
+
spec.add_dependency "activesupport", "~> 7.0"
|
34
34
|
|
35
35
|
# For more information and examples about making a new gem, check out our
|
36
36
|
# guide at: https://bundler.io/guides/creating_gem.html
|
data/lib/invisible_ink.rb
CHANGED
metadata
CHANGED
@@ -1,23 +1,39 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: invisible_ink
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Steve Polito
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-03-
|
12
|
-
dependencies:
|
11
|
+
date: 2023-03-20 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '7.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '7.0'
|
13
27
|
description: Encrypt text files in your open source projects so that they can be committed
|
14
28
|
to your repository without exposing sensitive information.
|
15
29
|
email:
|
16
30
|
- stevepolito@hey.com
|
17
|
-
executables:
|
31
|
+
executables:
|
32
|
+
- invisible_ink
|
18
33
|
extensions: []
|
19
34
|
extra_rdoc_files: []
|
20
35
|
files:
|
36
|
+
- ".docs/demo.gif"
|
21
37
|
- ".rspec"
|
22
38
|
- ".standard.yml"
|
23
39
|
- CHANGELOG.md
|
@@ -27,6 +43,7 @@ files:
|
|
27
43
|
- LICENSE.txt
|
28
44
|
- README.md
|
29
45
|
- Rakefile
|
46
|
+
- exe/invisible_ink
|
30
47
|
- invisible_ink.gemspec
|
31
48
|
- lib/invisible_ink.rb
|
32
49
|
- lib/invisible_ink/version.rb
|