yakg 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. data/Gemfile.lock +3 -3
  2. data/README.md +99 -0
  3. data/VERSION +1 -1
  4. metadata +91 -93
data/Gemfile.lock CHANGED
@@ -1,6 +1,6 @@
1
1
  GIT
2
2
  remote: https://github.com/tmaher/corefoundation.git
3
- revision: 73a97c6e7d268d21d17f671c94e98185153c5e3f
3
+ revision: e4cb21a7985577c44cd0aa8f9f17e9b6b6e09141
4
4
  specs:
5
5
  corefoundation (0.1.4)
6
6
  ffi
@@ -8,7 +8,7 @@ GIT
8
8
  PATH
9
9
  remote: .
10
10
  specs:
11
- yakg (0.0.1)
11
+ yakg (0.0.2)
12
12
  corefoundation
13
13
  ffi
14
14
 
@@ -24,7 +24,7 @@ GEM
24
24
  rspec-core (~> 2.12.0)
25
25
  rspec-expectations (~> 2.12.0)
26
26
  rspec-mocks (~> 2.12.0)
27
- rspec-core (2.12.0)
27
+ rspec-core (2.12.1)
28
28
  rspec-expectations (2.12.0)
29
29
  diff-lcs (~> 1.1.3)
30
30
  rspec-mocks (2.12.0)
data/README.md ADDED
@@ -0,0 +1,99 @@
1
+ Yet Another Keyring Gem
2
+ =======================
3
+
4
+ Storing passwords in plaintext makes me a sad panda. Let's use Apple's
5
+ Keychain utility!
6
+
7
+ ```
8
+ tmaher@bananaweizen:~$ irb
9
+ irb(main):001:0> require 'yakg'
10
+ => true
11
+ irb(main):002:0> Yakg.set "someuser", "s3|<r1+"
12
+ => true
13
+ irb(main):003:0> Yakg.get "someuser"
14
+ => "s3|<r1+"
15
+ irb(main):004:0> Yakg.unset "someuser"
16
+ => true
17
+ irb(main):005:0> Yakg.get "someuser"
18
+ => nil
19
+ irb(main):006:0> Yakg.set "user1", "password1"
20
+ => true
21
+ irb(main):007:0> Yakg.set "user2", "2password"
22
+ => true
23
+ irb(main):008:0> Yakg.list
24
+ => ["user1", "user2"]
25
+ ```
26
+
27
+ In addition to usernames, Keychain also has the notion of "service
28
+ name". It's a free-form string, useful for namespacing different
29
+ accounts. Let's take a look...
30
+
31
+ ```
32
+ rb(main):009:0> Yakg.DEFAULT_SERVICE_NAME
33
+ => "ruby-yakg-gem"
34
+ irb(main):010:0> Yakg.DEFAULT_SERVICE_NAME = "awesome other service"
35
+ => "awesome other service"
36
+ irb(main):011:0> Yakg.list
37
+ => []
38
+ irb(main):012:0> Yakg.set "user1", "kitties!"
39
+ => true
40
+ irb(main):013:0> Yakg.set "harry.bovik", "dogs"
41
+ => true
42
+ irb(main):014:0> Yakg.list
43
+ => ["user1", "harry.bovik"]
44
+ irb(main):015:0> Yakg.list "ruby-yakg-gem"
45
+ => ["user1", "user2"]
46
+ irb(main):016:0> Yakg.get "user1", "ruby-yakg-gem"
47
+ => "password1"
48
+ irb(main):017:0> Yakg.get "user1"
49
+ => "kitties!"
50
+ irb(main):018:0> ^D
51
+ tmaher@bananaweizen:~$ irb
52
+ irb(main):001:0> require 'yakg'
53
+ => true
54
+ irb(main):002:0> Yakg.list
55
+ => ["user1", "user2"]
56
+ irb(main):003:0> Yakg.list "awesome other service"
57
+ => ["user1", "harry.bovik"]
58
+ irb(main):004:0> Yakg.list
59
+ => ["user1", "user2"]
60
+ irb(main):005:0> Yakg.unset "user1"
61
+ => true
62
+ irb(main):006:0> Yakg.list
63
+ => ["user2"]
64
+ irb(main):007:0> Yakg.list "awesome other service"
65
+ => ["user1", "harry.bovik"]
66
+ ```
67
+
68
+ Technical Details
69
+ =================
70
+
71
+ This gem wrapps Apple's Security Framework (a C library) using the
72
+ excellent `ffi` gem. References for the full Keychain Services API can
73
+ be found at
74
+ https://developer.apple.com/library/mac/#documentation/security/Reference/keychainservices/Reference/reference.html
75
+
76
+ My views on the virtues of wrapping Security Framework and calling it
77
+ from the Ruby process, as opposed to use of helper programs such as
78
+ `git-password`, can be found at https://gist.github.com/4116645
79
+
80
+
81
+ Related Work
82
+ ============
83
+
84
+ * https://github.com/xli/mac-keychain also wraps Security Framework
85
+ but with RubyCocoa. That makes it more difficult to use with local
86
+ Ruby builds
87
+
88
+ * https://github.com/seattlerb/osx_keychain uses RubyInline to call
89
+ into the underlying C library. That necessitates a C compiler.
90
+
91
+ * https://github.com/jprichardson/keychain_manager shells out to call
92
+ the `security` CLI tool. It's also less oriented around password
93
+ management, and more geared towards PKI.
94
+
95
+ * https://github.com/fcheung/keychain also wraps Security Framework
96
+ with ffi. It's far more feature-complete than Yakg, but I wanted a
97
+ more minimalist API. Both approaches absolutely have their place.
98
+ Yakg shares some code, specifically fcheung/corefoundation for error
99
+ message string handling, and I am indebted to Mr. Cheung for it.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.1
1
+ 0.0.2
metadata CHANGED
@@ -1,104 +1,106 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: yakg
3
- version: !ruby/object:Gem::Version
4
- hash: 29
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 0
9
- - 1
10
- version: 0.0.1
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Tom Maher
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2012-11-25 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
21
- version_requirements: &id001 !ruby/object:Gem::Requirement
22
- none: false
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- hash: 3
27
- segments:
28
- - 0
29
- version: "0"
30
- prerelease: false
31
- type: :runtime
12
+ date: 2012-11-25 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
32
15
  name: ffi
33
- requirement: *id001
34
- - !ruby/object:Gem::Dependency
35
- version_requirements: &id002 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
36
17
  none: false
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- hash: 3
41
- segments:
42
- - 0
43
- version: "0"
44
- prerelease: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
45
22
  type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
46
31
  name: corefoundation
47
- requirement: *id002
48
- - !ruby/object:Gem::Dependency
49
- version_requirements: &id003 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
50
33
  none: false
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- hash: 3
55
- segments:
56
- - 0
57
- version: "0"
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
58
39
  prerelease: false
59
- type: :development
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
60
47
  name: woof_util
61
- requirement: *id003
62
- - !ruby/object:Gem::Dependency
63
- version_requirements: &id004 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
64
49
  none: false
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- hash: 3
69
- segments:
70
- - 0
71
- version: "0"
72
- prerelease: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
73
54
  type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
74
63
  name: rake
75
- requirement: *id004
76
- - !ruby/object:Gem::Dependency
77
- version_requirements: &id005 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
78
65
  none: false
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- hash: 3
83
- segments:
84
- - 0
85
- version: "0"
86
- prerelease: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
87
70
  type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
88
79
  name: rspec
89
- requirement: *id005
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
90
94
  description: Use Ruby's DL mechanism to access the MacOS Keychain
91
95
  email: tmaher@tursom.org
92
96
  executables: []
93
-
94
97
  extensions: []
95
-
96
98
  extra_rdoc_files: []
97
-
98
- files:
99
+ files:
99
100
  - .gitignore
100
101
  - Gemfile
101
102
  - Gemfile.lock
103
+ - README.md
102
104
  - Rakefile
103
105
  - VERSION
104
106
  - lib/yakg.rb
@@ -110,36 +112,32 @@ files:
110
112
  - yakg.gemspec
111
113
  homepage: https://github.com/tmaher/yakg
112
114
  licenses: []
113
-
114
115
  post_install_message:
115
116
  rdoc_options: []
116
-
117
- require_paths:
117
+ require_paths:
118
118
  - lib
119
- required_ruby_version: !ruby/object:Gem::Requirement
119
+ required_ruby_version: !ruby/object:Gem::Requirement
120
120
  none: false
121
- requirements:
122
- - - ">="
123
- - !ruby/object:Gem::Version
124
- hash: 3
125
- segments:
121
+ requirements:
122
+ - - ! '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ segments:
126
126
  - 0
127
- version: "0"
128
- required_rubygems_version: !ruby/object:Gem::Requirement
127
+ hash: -4137837794244479460
128
+ required_rubygems_version: !ruby/object:Gem::Requirement
129
129
  none: false
130
- requirements:
131
- - - ">="
132
- - !ruby/object:Gem::Version
133
- hash: 3
134
- segments:
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ segments:
135
135
  - 0
136
- version: "0"
136
+ hash: -4137837794244479460
137
137
  requirements: []
138
-
139
138
  rubyforge_project:
140
- rubygems_version: 1.8.24
139
+ rubygems_version: 1.8.23
141
140
  signing_key:
142
141
  specification_version: 3
143
142
  summary: Yet Another Keyring Gem
144
143
  test_files: []
145
-