ruby-keychain 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 6e04321838eb56846f4466e1445a61fc151e0277
4
+ data.tar.gz: e72847b0ff4e7ae119c5c28f73f3fa572fcc36b0
5
+ SHA512:
6
+ metadata.gz: cdaddc9163798d7310dbb46112f5b70840243c16d1635736a4b7b15f0f9ee16166e72cce2cb2bbd6028e0be6b2d859f4aa61f4f5a8dfddf7443eeac6c1124a3a
7
+ data.tar.gz: 62e46ccd6d53e9d9e5b9f87b8818c25ac447d324086ee6435545281dc66138f5c7c3c545e8c37d5d4dff829c7fbcb3234ade5c13091457f26a93f6e049595598
data/README.markdown CHANGED
@@ -1,4 +1,4 @@
1
- # @markup markdown
1
+ [![Build Status](https://travis-ci.org/fcheung/keychain.png)](https://travis-ci.org/fcheung/keychain)
2
2
 
3
3
  A set of ruby bindings for the OS X keychain, written using ffi
4
4
 
data/lib/keychain.rb CHANGED
@@ -54,6 +54,7 @@ module Keychain
54
54
  # @param [String] path Path to the keychain file
55
55
  # @return [Keychain::Keychain] a keychain object
56
56
  def open(path)
57
+ raise ArgumentError unless path
57
58
  out_buffer = FFI::MemoryPointer.new(:pointer)
58
59
  status = Sec.SecKeychainOpen(path,out_buffer);
59
60
  Sec.check_osstatus(status)
data/lib/keychain/item.rb CHANGED
@@ -85,6 +85,7 @@ class Keychain::Item < Sec::Base
85
85
  return @unsaved_password if @unsaved_password
86
86
  out_buffer = FFI::MemoryPointer.new(:pointer)
87
87
  status = Sec.SecItemCopyMatching({Sec::Query::ITEM_LIST => CF::Array.immutable([self]),
88
+ Sec::Query::SEARCH_LIST => [self.keychain],
88
89
  Sec::Query::CLASS => klass,
89
90
  Sec::Query::RETURN_DATA => true}.to_cf, out_buffer)
90
91
  Sec.check_osstatus(status)
@@ -131,7 +132,7 @@ class Keychain::Item < Sec::Base
131
132
  end
132
133
 
133
134
  def update
134
- status = Sec.SecItemUpdate({Sec::Query::ITEM_LIST => [self], Sec::INVERSE_ATTR_MAP[:klass] => klass}.to_cf, build_new_attributes);
135
+ status = Sec.SecItemUpdate({Sec::Query::SEARCH_LIST => [self.keychain], Sec::Query::ITEM_LIST => [self], Sec::INVERSE_ATTR_MAP[:klass] => klass}.to_cf, build_new_attributes);
135
136
  Sec.check_osstatus(status)
136
137
 
137
138
  result = FFI::MemoryPointer.new :pointer
@@ -167,6 +168,7 @@ class Keychain::Item < Sec::Base
167
168
 
168
169
  def build_refresh_query
169
170
  query = CF::Dictionary.mutable
171
+ query[Sec::Query::SEARCH_LIST] = CF::Array.immutable([self.keychain])
170
172
  query[Sec::Query::ITEM_LIST] = CF::Array.immutable([self])
171
173
  query[Sec::Query::RETURN_ATTRIBUTES] = CF::Boolean::TRUE
172
174
  query[Sec::Query::RETURN_REF] = CF::Boolean::TRUE
@@ -8,6 +8,9 @@ module Sec
8
8
  attach_function 'SecKeychainCreate', [:string, :uint32, :pointer, :char, :pointer, :pointer], :osstatus
9
9
  attach_function 'SecItemCopyMatching', [:pointer, :pointer], :osstatus
10
10
 
11
+ attach_function 'SecKeychainSetSearchList', [:pointer], :osstatus
12
+ attach_function 'SecKeychainCopySearchList', [:pointer], :osstatus
13
+
11
14
  #@private
12
15
  class KeychainSettings < FFI::Struct
13
16
  layout :version, :uint32,
@@ -40,6 +43,19 @@ module Keychain
40
43
  class Keychain < Sec::Base
41
44
  register_type 'SecKeychain'
42
45
 
46
+ # Add the keychain to the default searchlist
47
+ #
48
+ #
49
+ def add_to_search_list
50
+ list = FFI::MemoryPointer.new(:pointer)
51
+ status = Sec.SecKeychainCopySearchList(list)
52
+ Sec.check_osstatus(status)
53
+ ruby_list = CF::Base.typecast(list.read_pointer).to_ruby
54
+ ruby_list << self unless ruby_list.include?(self)
55
+ status = Sec.SecKeychainSetSearchList(CF::Array.immutable(ruby_list))
56
+ Sec.check_osstatus(status)
57
+ self
58
+ end
43
59
  # Returns whether the keychain will be locked if the machine goes to sleep
44
60
  #
45
61
  # @return [Boolean]
@@ -1,4 +1,4 @@
1
1
  module Keychain
2
2
  # The current version string
3
- VERSION = '0.1.1'
3
+ VERSION = '0.1.2'
4
4
  end
@@ -26,6 +26,10 @@ describe Keychain do
26
26
  keychain = Keychain.open(File.join(ENV['HOME'], 'Library','Keychains', 'login.keychain'))
27
27
  keychain.path.should == Keychain.default.path
28
28
  end
29
+
30
+ it 'should raise when passed a nil path' do
31
+ expect {Keychain.open(nil)}.to raise_error(ArgumentError)
32
+ end
29
33
  end
30
34
 
31
35
  describe 'create' do
@@ -106,10 +110,9 @@ describe Keychain do
106
110
  shared_examples_for 'item collection' do
107
111
 
108
112
  before(:each) do
109
- @keychain_1 = Keychain.create(File.join(Dir.tmpdir, "other_keychain_spec_#{Time.now.to_i}_#{Time.now.usec}_#{rand(1000)}.keychain"), 'pass')
110
- @keychain_2 = Keychain.create(File.join(Dir.tmpdir, "keychain_2_#{Time.now.to_i}_#{Time.now.usec}_#{rand(1000)}.keychain"), 'pass')
111
- @keychain_3 = Keychain.create(File.join(Dir.tmpdir, "keychain_3_#{Time.now.to_i}_#{Time.now.usec}_#{rand(1000)}.keychain"), 'pass')
112
-
113
+ @keychain_1 = Keychain.create(File.join(Dir.tmpdir, "other_keychain_spec_#{Time.now.to_i}_#{Time.now.usec}_#{rand(1000)}.keychain"), 'pass').add_to_search_list
114
+ @keychain_2 = Keychain.create(File.join(Dir.tmpdir, "keychain_2_#{Time.now.to_i}_#{Time.now.usec}_#{rand(1000)}.keychain"), 'pass').add_to_search_list
115
+ @keychain_3 = Keychain.create(File.join(Dir.tmpdir, "keychain_3_#{Time.now.to_i}_#{Time.now.usec}_#{rand(1000)}.keychain"), 'pass').add_to_search_list
113
116
  add_fixtures
114
117
  end
115
118
 
metadata CHANGED
@@ -1,36 +1,32 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-keychain
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
5
- prerelease:
4
+ version: 0.1.2
6
5
  platform: ruby
7
6
  authors:
8
7
  - Frederick Cheung
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-11-21 00:00:00.000000000 Z
11
+ date: 2013-11-01 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: ffi
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: corefoundation
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ~>
36
32
  - !ruby/object:Gem::Version
@@ -38,7 +34,6 @@ dependencies:
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ~>
44
39
  - !ruby/object:Gem::Version
@@ -46,7 +41,6 @@ dependencies:
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: rspec
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
45
  - - ~>
52
46
  - !ruby/object:Gem::Version
@@ -54,7 +48,6 @@ dependencies:
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
52
  - - ~>
60
53
  - !ruby/object:Gem::Version
@@ -62,52 +55,46 @@ dependencies:
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: rake
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - '>='
68
60
  - !ruby/object:Gem::Version
69
61
  version: '0'
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - '>='
76
67
  - !ruby/object:Gem::Version
77
68
  version: '0'
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: yard
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
- - - ! '>='
73
+ - - '>='
84
74
  - !ruby/object:Gem::Version
85
75
  version: '0'
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
- - - ! '>='
80
+ - - '>='
92
81
  - !ruby/object:Gem::Version
93
82
  version: '0'
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: redcarpet
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
- - - ! '>='
87
+ - - '>='
100
88
  - !ruby/object:Gem::Version
101
89
  version: '0'
102
90
  type: :development
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
- - - ! '>='
94
+ - - '>='
108
95
  - !ruby/object:Gem::Version
109
96
  version: '0'
110
- description: ! 'Ruby wrapper for OS X''s keychain '
97
+ description: 'Ruby wrapper for OS X''s keychain '
111
98
  email: frederick.cheung@gmail.com
112
99
  executables: []
113
100
  extensions: []
@@ -129,27 +116,26 @@ files:
129
116
  homepage: http://github.com/fcheung/keychain
130
117
  licenses:
131
118
  - MIT
119
+ metadata: {}
132
120
  post_install_message:
133
121
  rdoc_options: []
134
122
  require_paths:
135
123
  - lib
136
124
  required_ruby_version: !ruby/object:Gem::Requirement
137
- none: false
138
125
  requirements:
139
- - - ! '>='
126
+ - - '>='
140
127
  - !ruby/object:Gem::Version
141
128
  version: 1.9.2
142
129
  required_rubygems_version: !ruby/object:Gem::Requirement
143
- none: false
144
130
  requirements:
145
- - - ! '>='
131
+ - - '>='
146
132
  - !ruby/object:Gem::Version
147
133
  version: '0'
148
134
  requirements: []
149
135
  rubyforge_project:
150
- rubygems_version: 1.8.24
136
+ rubygems_version: 2.1.9
151
137
  signing_key:
152
- specification_version: 3
138
+ specification_version: 4
153
139
  summary: Ruby wrapper for OS X's keychain
154
140
  test_files: []
155
141
  has_rdoc: