exportation 0.2.1 → 0.2.2
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/README.md +64 -4
- data/bin/exportation +0 -4
- data/lib/exportation.rb +28 -9
- metadata +15 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0eb69604d7c56805983df50adaca88fd09073ba3
|
4
|
+
data.tar.gz: 0848757c3e31f1b16808165cf7ec91f86fd913c6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 339cf3b94b9288cc9054b70279fb3fb4e0289890832117f5f88d4c62f31f40b4e2a0097ff1da5f20893c06ea31be72df9f80a545cc33c5e602d2192f8b139a64
|
7
|
+
data.tar.gz: b66e0c20cafac106853f1ad1dda6bfaa897e8074b4eaf8cf1a6a8e7a4a0592a2ec3773fe85b3071e7a9fe2818999ca5c7f08ec5817fac1c0f77651b63d9cabfd
|
data/README.md
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
# exportation
|
2
|
-
|
2
|
+
[](https://twitter.com/joshdholtz)
|
3
|
+
[](https://github.com/joshdholtz/exportation/blob/master/LICENSE)
|
4
|
+
[](http://rubygems.org/gems/exportation)
|
5
|
+
[](https://travis-ci.org/joshdholtz/exportation)
|
6
|
+
|
7
|
+
CLI tool (and Ruby API) of easy exporting, encrypting, and decrypting of certificates and private keys. It can also add certificates and private keys to an existing or new keychain :grinning:
|
3
8
|
|
4
9
|
**Important:** The `export` command will take control of your "Keychain Access" app so keep all hands off your computer while that command runs
|
5
10
|
|
@@ -19,7 +24,7 @@ Info Take all hands off your computer! exportation is going to take control of
|
|
19
24
|
- Export **and** encrypt certificates **and** private keys **into** repos
|
20
25
|
- CI tools (may need these to distrubute builds to Apple TestFlight Beta :apple:)
|
21
26
|
- For other developers (for when you are on vacation and they need to make a distribution build :grimacing:)
|
22
|
-
|
27
|
+
|
23
28
|
### How
|
24
29
|
- Makes use of AppleScript to control "Keychain Access"
|
25
30
|
- Opens "Keychain Access"
|
@@ -39,7 +44,6 @@ Info Take all hands off your computer! exportation is going to take control of
|
|
39
44
|
|
40
45
|
### Features in progress
|
41
46
|
- Integrate with [fastlane](https://github.com/KrauseFx/fastlane) :rocket:
|
42
|
-
- Create a separate keychain with the certificates and private keys for use on CI systems :grinning:
|
43
47
|
|
44
48
|
### Caveats
|
45
49
|
- Some phases of the script might run slow due to using AppleScript
|
@@ -66,7 +70,7 @@ gem install exportation
|
|
66
70
|

|
67
71
|
**You won't need to give Heroes, Script Editor, or Steam permissions for exportation** :wink:
|
68
72
|
|
69
|
-
## Commands
|
73
|
+
## CLI Commands
|
70
74
|
Exportation has three different commands: `export`, `encrypt`, and `decrypt`.
|
71
75
|
|
72
76
|
### Export from Keychain Access
|
@@ -87,6 +91,62 @@ exportation encrypt exported.cer exported.p12 --password dudethis
|
|
87
91
|
exportation decrypt exported.cer.enc exported.p12.enc --password dudethis
|
88
92
|
```
|
89
93
|
|
94
|
+
## Ruby API
|
95
|
+
|
96
|
+
### Exportation::Export
|
97
|
+
```ruby
|
98
|
+
Exportation::Export.new(
|
99
|
+
path: "/path/to/export/to",
|
100
|
+
filename: "base_exported_file_name", #dist.cer and dist.p12
|
101
|
+
name: "YourCompany LLC",
|
102
|
+
password: "shhhh"
|
103
|
+
).run
|
104
|
+
```
|
105
|
+
|
106
|
+
### Exportation::Crypter
|
107
|
+
|
108
|
+
#### Encrypt
|
109
|
+
```ruby
|
110
|
+
Exportation::Crypter.new(
|
111
|
+
files: ["dist.cer","dist.p12"],
|
112
|
+
password: "shhhh",
|
113
|
+
output: "./"
|
114
|
+
).run :en
|
115
|
+
```
|
116
|
+
|
117
|
+
#### Decrypt
|
118
|
+
```ruby
|
119
|
+
Exportation::Crypter.new(
|
120
|
+
files: ["dist.cer.enc","dist.p12.enc"],
|
121
|
+
password: "shhhh",
|
122
|
+
output: "./"
|
123
|
+
).run :de
|
124
|
+
```
|
125
|
+
|
126
|
+
### Exportation::Keychain
|
127
|
+
```ruby
|
128
|
+
# Create keychain - name of chain, password, output directory
|
129
|
+
keychain = Exportation::Keychain.find_or_create_keychain('JoshChain', 'joshiscool', './example')
|
130
|
+
|
131
|
+
# Get login keychain
|
132
|
+
keychain = Exportation::Keychain.login_keychain("password")
|
133
|
+
|
134
|
+
# Import a certificate into keychain
|
135
|
+
keychain.import_certificate './example/dist.cer'
|
136
|
+
|
137
|
+
# Import a private key into keychain
|
138
|
+
keychain.import_private_key './example/dist.p12', 'da_password'
|
139
|
+
|
140
|
+
# Unlock keychain
|
141
|
+
keychain.unlock!
|
142
|
+
|
143
|
+
# Adds keychain to search list
|
144
|
+
keychain.add_to_keychain_list!
|
145
|
+
|
146
|
+
# Removes keychain from search list
|
147
|
+
keychain.remove_keychain_from_list!
|
148
|
+
```
|
149
|
+
|
90
150
|
## Using the internals
|
91
151
|
|
92
152
|
### Compiling and running the AppleScript directly
|
data/bin/exportation
CHANGED
@@ -39,10 +39,6 @@ class ExportationApplication
|
|
39
39
|
options.password = ask("Password for private key (default: ''): ") unless options.password
|
40
40
|
end
|
41
41
|
|
42
|
-
options.path = './' if is_empty?(options.path)
|
43
|
-
options.filename = 'exported' if is_empty?(options.filename)
|
44
|
-
options.password = '' if is_empty?(options.password)
|
45
|
-
|
46
42
|
raise "'name' is required" if is_empty?(options.name)
|
47
43
|
log "Info".blue, "Take all hands off your computer! exportation is going to take control of 'Keychain Access'".blue
|
48
44
|
|
data/lib/exportation.rb
CHANGED
@@ -12,6 +12,10 @@ module Exportation
|
|
12
12
|
File.join(gem_path, 'applescript', 'exportation.scpt')
|
13
13
|
end
|
14
14
|
|
15
|
+
def self.is_empty?(str)
|
16
|
+
str.nil? || str.length == 0
|
17
|
+
end
|
18
|
+
|
15
19
|
class Export
|
16
20
|
|
17
21
|
attr_accessor :path, :filename, :name, :password
|
@@ -21,9 +25,20 @@ module Exportation
|
|
21
25
|
@filename = options[:filename]
|
22
26
|
@name = options[:name]
|
23
27
|
@password = options[:password]
|
28
|
+
|
29
|
+
@path = './' if Exportation.is_empty?(@path)
|
30
|
+
@filename = 'exported' if Exportation.is_empty?(@filename)
|
31
|
+
@password = '' if Exportation.is_empty?(@password)
|
24
32
|
end
|
25
33
|
|
26
34
|
def run
|
35
|
+
bash = run_command
|
36
|
+
puts "Running: #{bash}"
|
37
|
+
`#{bash}`
|
38
|
+
end
|
39
|
+
|
40
|
+
def run_command
|
41
|
+
raise "name is required" if Exportation.is_empty?(@name)
|
27
42
|
|
28
43
|
abs_path = File.expand_path path
|
29
44
|
abs_path += '/' unless abs_path.end_with? '/'
|
@@ -32,11 +47,7 @@ module Exportation
|
|
32
47
|
"\"#{abs_path}\" " +
|
33
48
|
"\"#{filename}\" " +
|
34
49
|
"\"#{name}\" " +
|
35
|
-
"\"#{password}\"
|
36
|
-
|
37
|
-
puts "Running: #{bash}"
|
38
|
-
`#{bash}`
|
39
|
-
|
50
|
+
"\"#{password}\""
|
40
51
|
end
|
41
52
|
|
42
53
|
end
|
@@ -52,6 +63,14 @@ module Exportation
|
|
52
63
|
end
|
53
64
|
|
54
65
|
def run(crypt, force = false)
|
66
|
+
run_commands(crypt, force).each do |bash|
|
67
|
+
puts "Running: #{bash}"
|
68
|
+
`#{bash}`
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def run_commands(crypt, force = false)
|
73
|
+
raise "password is required" if Exportation.is_empty?(@password)
|
55
74
|
|
56
75
|
unless force
|
57
76
|
if crypt == :en
|
@@ -68,6 +87,7 @@ module Exportation
|
|
68
87
|
end
|
69
88
|
|
70
89
|
# Does the stuff
|
90
|
+
commands = []
|
71
91
|
files.each do |file|
|
72
92
|
file = './' + file unless file.start_with? '/'
|
73
93
|
if File.exists? file
|
@@ -82,14 +102,13 @@ module Exportation
|
|
82
102
|
output_file = output_file.gsub('.enc','')
|
83
103
|
end
|
84
104
|
|
85
|
-
|
86
|
-
puts "Running: #{bash}"
|
87
|
-
`#{bash}`
|
105
|
+
commands << "openssl aes-256-cbc -k \"#{password}\" -in #{file} -out #{output_file} -a"
|
88
106
|
else
|
89
|
-
|
107
|
+
raise "File does not exist - #{file}"
|
90
108
|
end
|
91
109
|
end
|
92
110
|
|
111
|
+
commands
|
93
112
|
end
|
94
113
|
|
95
114
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: exportation
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Josh Holtz
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '1.6'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rspec
|
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'
|
69
83
|
description: CLI tool of easy exporting, encrypting, and decrypting of certificates
|
70
84
|
and private keys using Keychain Acess and openssl
|
71
85
|
email: me@joshholtz.com
|