keyring 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f67fb1efea2eb2eaa09bacafab9ef4e75fba84cd
4
- data.tar.gz: 1a19d3f9507d0e606f08b0e60c9710d2e677432a
3
+ metadata.gz: ce4f04bde155cc548222940ab51bf72adc2e6357
4
+ data.tar.gz: 050a04df00a9229f8125081a79f99f7e2b5c5a05
5
5
  SHA512:
6
- metadata.gz: 73ef48738d5a0193754a983abbce3d5d666ea619fe4d25044d0dfe7350ef4667847aa7085fe35c9bbc4dc6a777b4fb1f77f1c6296ec8bbde108e991f553056cb
7
- data.tar.gz: af4063ca11ba35150b2a8697aa58a468e8fe86d773a94d2d8c4486eb2710980e886265b5acd9a9e20a41edc590b3432c08a91f37055d1b82506d176e1039d493
6
+ metadata.gz: 85f263a69ac38e96fca4ccba27afda79097d0f226e0fe93938c0fddfb5b703a507e995d3ba065ddc5daf7302083963033f715bfe91205cac2bead32fa0601aec
7
+ data.tar.gz: b4d625b3e639b98c9a8afed3a06c59ffd324271b7377f85da8593c284fdce8997788095ea9e57fab46fcae388dd344341debc82c138afad95487185277b6370c
data/README.md CHANGED
@@ -6,14 +6,15 @@ This library provides a easy way to access the system keyring service from ruby.
6
6
  It can be used in any application that needs safe password storage.
7
7
 
8
8
  The keyring services supported by this library:
9
- * Mac OS X Keychain: the Apple Keychain service in Mac OS X.
9
+ * Mac OS X Keychain: the Apple Keychain service in Mac OS X
10
+ * GNOME 2 Keyring
10
11
  * In-memory keychain
11
12
 
12
13
  Additional keyring services we'd like to support:
13
14
  * KDE KWallet
14
- * GNOME 2 Keyring
15
- * SecretServiceKeyring: for newer GNOME and KDE environments.
15
+ * SecretServiceKeyring: for newer GNOME and KDE environments
16
16
  * Windows Credential Manager
17
+ * Windows Credential Manager, aka Windows Vault
17
18
 
18
19
  ## Installation
19
20
 
@@ -42,9 +43,20 @@ Keyring#get_password:
42
43
 
43
44
  'service' is an arbitrary string identifying your application.
44
45
 
46
+ By default keyring will attempt to pick the best backend supported on your system. You can specify a particular backend:
47
+
48
+ require 'keyring'
49
+ keyring = Keyring.new(Keyring::Backend::Memory.new)
50
+
51
+ ## Platform notes
52
+
53
+ Gnome Keyring uses the [GirFFI](https://github.com/mvz/gir_ffi) bindings, which
54
+ requires the introspection bindings to be installed (as well as gnome-keyring).
55
+ `apt-get install gnome-keyring libgirepository1.0-dev` for Debian/Ubuntu.
56
+
45
57
  ## Credits
46
58
 
47
- Copyright 2013, Jason Heiss
59
+ Copyright 2013-2014, Jason Heiss, wvengen
48
60
 
49
61
  Inspired by the keyring library for Python:
50
62
  https://bitbucket.org/kang/python-keyring-lib
data/keyring.gemspec CHANGED
@@ -25,4 +25,8 @@ Gem::Specification.new do |spec|
25
25
  spec.add_development_dependency "rake"
26
26
  spec.add_development_dependency 'mocha'
27
27
  spec.add_dependency 'slop'
28
+
29
+ if RUBY_PLATFORM =~ /linux/
30
+ spec.add_dependency 'gir_ffi-gnome_keyring', '~> 0.0.3'
31
+ end
28
32
  end
@@ -15,7 +15,7 @@ class Keyring::Backend
15
15
  if supported.empty?
16
16
  raise(NotImplementedError)
17
17
  end
18
- supported.max{|b| b.priority}
18
+ supported.max{|a, b| a.priority <=> b.priority }
19
19
  end
20
20
 
21
21
  #
@@ -0,0 +1,64 @@
1
+ # keyring: System keyring abstraction library
2
+ # License: MIT (http://www.opensource.org/licenses/mit-license.php)
3
+
4
+ # This is a keyring backend for the Gnome Keyring
5
+ # https://wiki.gnome.org/GnomeKeyring
6
+ # http://en.wikipedia.org/wiki/GNOME_Keyring
7
+
8
+ class Keyring::Backend::GnomeKeyring < Keyring::Backend
9
+ register_implementation(self)
10
+
11
+ def initialize
12
+ require 'gir_ffi-gnome_keyring'
13
+ rescue LoadError
14
+ end
15
+ def supported?
16
+ defined?(::GnomeKeyring) && true
17
+ end
18
+ def priority
19
+ 1
20
+ end
21
+
22
+ def set_password(service, username, password)
23
+ attrs = get_attrs_for(service, username)
24
+ name = "#{service} (#{username})"
25
+ status, item_id = ::GnomeKeyring.item_create_sync nil, :generic_secret, name, attrs, password, true
26
+ item_id if status == :ok
27
+ end
28
+ def get_password(service, username)
29
+ if item = find_first(service, username)
30
+ item.secret
31
+ else
32
+ false
33
+ end
34
+ end
35
+ def delete_password(service, username)
36
+ if item = find_first(service, username)
37
+ status, info = ::GnomeKeyring.item_delete_sync nil, item.item_id
38
+ status == :ok
39
+ else
40
+ false
41
+ end
42
+ end
43
+
44
+ protected
45
+
46
+ def find_first(service, username)
47
+ if list = find(service, username)
48
+ list.first
49
+ end
50
+ end
51
+
52
+ def find(service, username)
53
+ attrs = get_attrs_for(service, username)
54
+ status, keys = ::GnomeKeyring.find_items_sync :generic_secret, attrs
55
+ keys if status == :ok
56
+ end
57
+
58
+ def get_attrs_for(service, username)
59
+ attrs = ::GnomeKeyring::AttributeList.new
60
+ attrs.append_string 'service', service.to_s
61
+ attrs.append_string 'username', username.to_s
62
+ attrs
63
+ end
64
+ end
@@ -4,6 +4,10 @@
4
4
  # This is a keyring backend for the Apple Keychain
5
5
  # http://en.wikipedia.org/wiki/Keychain_(Apple)
6
6
 
7
+ # Consider switching to ruby-keychain gem to avoid password in command line
8
+ # https://rubygems.org/gems/ruby-keychain
9
+ # https://github.com/fcheung/keychain
10
+
7
11
  require 'open3'
8
12
 
9
13
  class Keyring::Backend::MacosxKeychain < Keyring::Backend
@@ -2,5 +2,5 @@
2
2
  # License: MIT (http://www.opensource.org/licenses/mit-license.php)
3
3
 
4
4
  class Keyring
5
- VERSION = "0.2.0"
5
+ VERSION = "0.3.0"
6
6
  end
data/test/test_backend.rb CHANGED
@@ -8,18 +8,35 @@ class KeyringBackendTests < Test::Unit::TestCase
8
8
  def setup
9
9
  @backend = Keyring::Backend.new
10
10
  end
11
-
11
+
12
12
  class Keyring::Backend::Test < Keyring::Backend; end
13
+ class BackendHighPriority < Keyring::Backend
14
+ def priority; 100 end
15
+ def supported?; true end
16
+ end
17
+ class BackendLowPriority < Keyring::Backend
18
+ def priority; 10 end
19
+ def supported?; true end
20
+ end
21
+
13
22
  def test_register_implementation
14
23
  Keyring::Backend.register_implementation(Keyring::Backend::Test)
15
24
  assert Keyring::Backend.implementations.include?(Keyring::Backend::Test)
16
25
  Keyring::Backend.implementations.delete(Keyring::Backend::Test)
17
26
  end
27
+
18
28
  def test_create
19
29
  # This should be a bit more thorough
20
30
  assert_kind_of Keyring::Backend, Keyring::Backend.create
31
+
32
+ # check that backend with highest priority is selected
33
+ Keyring::Backend.register_implementation(BackendHighPriority)
34
+ Keyring::Backend.register_implementation(BackendLowPriority)
35
+ assert_kind_of BackendHighPriority, Keyring::Backend.create
36
+ Keyring::Backend.implementations.delete(BackendLowPriority)
37
+ Keyring::Backend.implementations.delete(BackendHighPriority)
21
38
  end
22
-
39
+
23
40
  def test_supported
24
41
  refute @backend.supported?
25
42
  end
@@ -0,0 +1,56 @@
1
+ # keyring: System keyring abstraction library
2
+ # License: MIT (http://www.opensource.org/licenses/mit-license.php)
3
+
4
+ # These tests require Gnome Keyring to be installed and are skipped otherwise
5
+
6
+ require 'test/unit'
7
+ require 'mocha/setup'
8
+ require 'keyring'
9
+
10
+ begin
11
+ require 'gir_ffi-gnome_keyring'
12
+
13
+ class KeyringBackendGnomeKeyringTests < Test::Unit::TestCase
14
+
15
+ def setup
16
+ @backend = Keyring::Backend::GnomeKeyring.new
17
+ @backend.delete_password('service', 'username')
18
+ end
19
+
20
+ def teardown
21
+ @backend.delete_password('service', 'username')
22
+ end
23
+
24
+ def test_supported
25
+ assert @backend.supported?
26
+ end
27
+
28
+ def test_priority
29
+ assert_equal 1, @backend.priority
30
+ end
31
+
32
+ def test_no_default_password
33
+ refute @backend.get_password('service', 'username')
34
+ end
35
+
36
+ def test_set_password
37
+ @backend.set_password('service', 'username', 'password')
38
+ assert_equal 'password', @backend.get_password('service', 'username')
39
+ end
40
+
41
+ def test_delete_nonexistent_password
42
+ refute @backend.delete_password('service', 'username')
43
+ end
44
+
45
+ def test_delete_existing_password
46
+ @backend.set_password('service', 'username', 'password')
47
+ @backend.delete_password('service', 'username')
48
+ refute @backend.get_password('service', 'username')
49
+ end
50
+
51
+ end
52
+
53
+
54
+ rescue LoadError
55
+ puts "Skipping GnomeKeyring tests because the native bindings could not be loaded."
56
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: keyring
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Heiss
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-24 00:00:00.000000000 Z
11
+ date: 2014-12-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -84,12 +84,14 @@ files:
84
84
  - keyring.gemspec
85
85
  - lib/keyring.rb
86
86
  - lib/keyring/backend.rb
87
+ - lib/keyring/backends/gnome_keyring.rb
87
88
  - lib/keyring/backends/macosx_keychain.rb
88
89
  - lib/keyring/backends/memory.rb
89
90
  - lib/keyring/cli.rb
90
91
  - lib/keyring/version.rb
91
92
  - test/keyring_tests.rb
92
93
  - test/test_backend.rb
94
+ - test/test_backend_gnome_keyring.rb
93
95
  - test/test_backend_macosx_keychain.rb
94
96
  - test/test_backend_memory.rb
95
97
  - test/test_cli.rb
@@ -124,13 +126,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
124
126
  version: '0'
125
127
  requirements: []
126
128
  rubyforge_project:
127
- rubygems_version: 2.2.0.rc.1
129
+ rubygems_version: 2.2.2
128
130
  signing_key:
129
131
  specification_version: 4
130
132
  summary: Store and access your passwords safely
131
133
  test_files:
132
134
  - test/keyring_tests.rb
133
135
  - test/test_backend.rb
136
+ - test/test_backend_gnome_keyring.rb
134
137
  - test/test_backend_macosx_keychain.rb
135
138
  - test/test_backend_memory.rb
136
139
  - test/test_cli.rb
@@ -145,3 +148,4 @@ test_files:
145
148
  - test/testcmds/macosx/security-notfound
146
149
  - test/testcmds/macosx/security-righthelp
147
150
  - test/testcmds/macosx/security-wronghelp
151
+ has_rdoc: