exportation 0.2.0 → 0.2.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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/exportation.rb +82 -0
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fa309452b28fa8fe7c2459cdd8adc644c09dbfc0
4
- data.tar.gz: 67696b8b638f49165d57ccad2369acd3bab94921
3
+ metadata.gz: c139c57094c0c7f634a9afda6e167df8b0c643cd
4
+ data.tar.gz: e7249d12f8a456ffbbc20272b41558094b0d5e0c
5
5
  SHA512:
6
- metadata.gz: 666f9867ff1e4754cd2d5ea93152cbcb31bf2bd3f7febe7a42784b4f2e9309af2ef328a931affce03e6e16962999bb08d5fee44e2ab9f96d49c32da1ebdc70c8
7
- data.tar.gz: b129a2ff9826990e9c86439b32348132580232c79815ad4c7bb4a0edb93a2d17f1aa4984637342307a9cd2d5e3497ddbee5a05ce87462115cd6082b06efdf47d
6
+ metadata.gz: 9797508901d588ad634cf7d83e9a64afb1062ee1cc99f21e56bc423c495e299d71b79dd909c60ef14b129e501d87f7d105a4d6dca4fc3c1b48b35a7666b7f1e3
7
+ data.tar.gz: cbc708adb054e6e337fc8d47d1bbbcd0eaae6546cc2cb368403d3660e2f572576bf0ee53749801ab678391981357c583701c6920a7a4f5b00ea6d0407c7126d3
@@ -94,4 +94,86 @@ module Exportation
94
94
 
95
95
  end
96
96
 
97
+ class Keychain
98
+
99
+ attr_accessor :path, :password
100
+
101
+ def initialize(options)
102
+ @path = options[:path]
103
+ @password = options[:password]
104
+ end
105
+
106
+ def self.find_or_create_keychain(name, password, output_directory='./')
107
+ path = chain_path(name, output_directory)
108
+
109
+ unless File.exists? path
110
+ `security create-keychain -p '#{password}' #{path}`
111
+ end
112
+
113
+ Keychain.new(path: path, password: password)
114
+ end
115
+
116
+ def self.login_keychain(password)
117
+ path = `security login-keychain`.strip
118
+ Keychain.new(path: path, password: password)
119
+ end
120
+
121
+ def self.list_keychains
122
+ # Gets a list of all the user's keychains in an array
123
+ # The keychain are paths wrapped in double quotes
124
+ (`security list-keychains -d user`).scan(/(?:\w|"[^"]*")+/)
125
+ end
126
+
127
+ def import_certificate(cer_path)
128
+ # Imports a certificate into the keychain
129
+ `security import #{cer_path} -k #{@path} -T /usr/bin/codesign`
130
+ end
131
+
132
+ def import_private_key(key_path, password)
133
+ # Imports a private key into the keychain
134
+ `security import #{key_path} -k #{@path} -P '#{password}' -T /usr/bin/codesign`
135
+ end
136
+
137
+ def unlock!(seconds=3600)
138
+ # Unlocks the keychain
139
+ `security unlock-keychain -p '#{@password}' #{@path}`
140
+ `security -v set-keychain-settings -t #{seconds} -l #{@path}`
141
+ end
142
+
143
+ def add_to_keychain_list!
144
+ # Adds the keychain to the search list
145
+ keychains = (Keychain.list_keychains - ["\"#{@path}\""]).join(' ')
146
+ `security list-keychains -d user -s #{keychains} \"#{@path}\"`
147
+ end
148
+
149
+ def remove_keychain_from_list!
150
+ # Removes the keychain from the search list
151
+ keychains = (Keychain.list_keychains - ["\"#{@path}\""]).join(' ')
152
+ `security list-keychains -d user -s #{keychains}`
153
+ end
154
+
155
+ private
156
+
157
+ def self.chain_path(name, output_directory='./')
158
+ output_directory = File.expand_path output_directory
159
+ File.join(output_directory, "#{name}.keychain")
160
+ end
161
+
162
+ # Creates keychain with cert and private key (this is how Xcode knows how to sign things)
163
+ # sh "security create-keychain -p '#{keychain_password}' #{chain_path}"
164
+ # sh "security import ./Certs/apple.cer -k #{chain_path} -T /usr/bin/codesign"
165
+ # sh "security import ../build/unenc/dist.cer -k #{chain_path} -T /usr/bin/codesign"
166
+ # sh "security import ../build/unenc/dist.p12 -k #{chain_path} -P '#{private_key_password}' -T /usr/bin/codesign"
167
+
168
+ # sh "security unlock-keychain -p '#{keychain_password}' #{chain_path}"
169
+ # sh "security -v set-keychain-settings -t 3600 -l #{chain_path}"
170
+ #
171
+ # # Add keychain to list (this is literally the key to getting this all working)
172
+ # sh "security list-keychains -d user -s #{ENV['ORIGINAL_KEYCHAINS']} \"#{chain_path}\""
173
+
174
+ # Reset keychains to what was originally set for user
175
+ # sh "security list-keychains -d user -s #{ENV['ORIGINAL_KEYCHAINS']}"
176
+
177
+ end
178
+
97
179
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: exportation
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Holtz
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-20 00:00:00.000000000 Z
11
+ date: 2015-03-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dotenv