spare_keys 1.0.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/lib/spare_keys.rb +65 -0
- metadata +92 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c9b94b0eda4e51b2b148b20cf0ee0eee82cdb894
|
4
|
+
data.tar.gz: b9b74df48d7e8f8c8cb714ca221121c0717781e0
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 2cb40f2a8c219607828b1bd074f7ee603116593c70653986e626c1baf22f0afd7d9624bf414ae14f42d16c47c94970c5fd39f6bc9d885e7f941509808ee7cd58
|
7
|
+
data.tar.gz: 4e15ac6554ae06a38589b6688927471dd0ba0a6ac4ac30b89af63410aba5a61f3e737d16adf9c021481e0017ebf02e94e68ad97be33ced79eeac17a9b173da41
|
data/lib/spare_keys.rb
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
|
2
|
+
# Temporarily reconfigures the active keychain
|
3
|
+
class SpareKeys
|
4
|
+
|
5
|
+
# Temporarily adds the specified keychain to the top of the search list, reverting it after the block is invoked.
|
6
|
+
#
|
7
|
+
# If no block is supplied, reverting the state becomes the responsibility of the caller.
|
8
|
+
# Params:
|
9
|
+
# +keychain_path+:: path to keychain to switch to
|
10
|
+
# +clear_list+:: when true, the search list will be initially cleared to prevent fallback to a different keychain
|
11
|
+
# +type+:: if specified, replaces default/login keychain ("default", "login", nil)
|
12
|
+
# +domain+:: if specified, performs keychain operations using the specified domain
|
13
|
+
def self.use_keychain(keychain_path, clear_list = false, type = nil, domain = nil)
|
14
|
+
domain_flag = "-d #{domain}" if domain
|
15
|
+
|
16
|
+
original_list = `security list-keychains #{domain_flag} | xargs`
|
17
|
+
original_keychain = `security #{type}-keychain #{domain_flag} | xargs` if type
|
18
|
+
|
19
|
+
`security #{type}-keychain #{domain_flag} -s #{keychain_path}` if type
|
20
|
+
|
21
|
+
list_tail = original_list unless clear_list
|
22
|
+
`security list-keychains #{domain_flag} -s #{keychain_path} #{list_tail}`
|
23
|
+
|
24
|
+
if block_given?
|
25
|
+
begin
|
26
|
+
yield if block_given?
|
27
|
+
ensure
|
28
|
+
original_keychain = `security #{type}-keychain #{domain_flag} -s #{original_keychain}` if type
|
29
|
+
`security list-keychains #{domain_flag} -s #{original_list}`
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# Creates a secure temporary keychain and adds it to the top of the
|
35
|
+
# search list, reverting the list and deleting the keychain after the block is invoked.
|
36
|
+
#
|
37
|
+
# If no block is supplied, reverting the state becomes the responsibility of the caller.
|
38
|
+
# Params:
|
39
|
+
# +clear_list+:: when true, the search list will be initially cleared to prevent fallback to a different keychain
|
40
|
+
# +type+:: if specified, replaces default/login keychain ("default", "login", nil)
|
41
|
+
# +domain+:: if specified, performs keychain operations using the specified domain
|
42
|
+
def self.temp_keychain(clear_list = false, type = nil, domain = nil) # :yields: keychain_path
|
43
|
+
require 'tempfile'
|
44
|
+
require 'securerandom'
|
45
|
+
|
46
|
+
password = SecureRandom.hex
|
47
|
+
temp_keychain = Dir::Tmpname.make_tmpname(['spare-keys-', '.keychain'], nil)
|
48
|
+
|
49
|
+
`security create-keychain -p "#{password}" #{temp_keychain}`
|
50
|
+
`security unlock-keychain -p "#{password}" #{temp_keychain}`
|
51
|
+
|
52
|
+
if block_given?
|
53
|
+
begin
|
54
|
+
use_keychain(temp_keychain, clear_list, type) {
|
55
|
+
yield temp_keychain
|
56
|
+
}
|
57
|
+
ensure
|
58
|
+
`security delete-keychain #{temp_keychain}`
|
59
|
+
end
|
60
|
+
else
|
61
|
+
use_keychain(temp_keychain, clear_list, type)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
metadata
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: spare_keys
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Richard Szalay
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-08-09 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rspec
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.2'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.2'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.9.6
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.9.6
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.12'
|
48
|
+
- - '>='
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: 1.12.5
|
51
|
+
type: :development
|
52
|
+
prerelease: false
|
53
|
+
version_requirements: !ruby/object:Gem::Requirement
|
54
|
+
requirements:
|
55
|
+
- - ~>
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: '1.12'
|
58
|
+
- - '>='
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: 1.12.5
|
61
|
+
description: Isolates keychain access for use with keychain-dependent utilities
|
62
|
+
email: richard@richardszalay.com
|
63
|
+
executables: []
|
64
|
+
extensions: []
|
65
|
+
extra_rdoc_files: []
|
66
|
+
files:
|
67
|
+
- lib/spare_keys.rb
|
68
|
+
homepage: https://github.com/richardszalay/spare-keys
|
69
|
+
licenses:
|
70
|
+
- MIT
|
71
|
+
metadata: {}
|
72
|
+
post_install_message:
|
73
|
+
rdoc_options: []
|
74
|
+
require_paths:
|
75
|
+
- lib
|
76
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - '>='
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '0'
|
81
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
82
|
+
requirements:
|
83
|
+
- - '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
requirements: []
|
87
|
+
rubyforge_project:
|
88
|
+
rubygems_version: 2.4.8
|
89
|
+
signing_key:
|
90
|
+
specification_version: 4
|
91
|
+
summary: Temporarily keychain switcher
|
92
|
+
test_files: []
|