keybase-core 0.1.2 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -13
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/Gemfile.lock +19 -5
- data/README.md +20 -7
- data/certs/seanhandley.pem +21 -0
- data/{keybase.gemspec → keybase-core.gemspec} +10 -5
- data/lib/keybase-core.rb +52 -0
- data/lib/{keybase → keybase-core}/crypto.rb +1 -1
- data/lib/{keybase → keybase-core}/error.rb +3 -3
- data/lib/{keybase → keybase-core}/models/dump.rb +2 -2
- data/lib/{keybase → keybase-core}/models/user.rb +19 -12
- data/lib/{keybase → keybase-core}/request/base.rb +3 -3
- data/lib/{keybase → keybase-core}/request/dump/all.rb +1 -1
- data/lib/{keybase → keybase-core}/request/dump/latest.rb +1 -1
- data/lib/{keybase → keybase-core}/request/key/add.rb +1 -1
- data/lib/{keybase → keybase-core}/request/key/revoke.rb +1 -1
- data/lib/{keybase → keybase-core}/request/root/get_salt_and_login_session.rb +1 -1
- data/lib/{keybase → keybase-core}/request/root/login.rb +1 -1
- data/lib/keybase-core/request/session/kill_all.rb +11 -0
- data/lib/{keybase → keybase-core}/request/sig/post_auth.rb +1 -1
- data/lib/{keybase → keybase-core}/request/user/lookup.rb +1 -1
- data/lib/{keybase → keybase-core}/response.rb +1 -1
- data/lib/{keybase → keybase-core}/token_store.rb +1 -1
- data/test/integration/dumps_test.rb +3 -3
- data/test/integration/keys_test.rb +1 -1
- data/test/integration/login_users_test.rb +4 -3
- data/test/integration/lookup_users_test.rb +5 -5
- data/test/test_helper.rb +4 -2
- data/test/unit/lib/{keybase → keybase-core}/crypto_test.rb +1 -1
- data/test/unit/lib/{keybase → keybase-core}/error_test.rb +2 -2
- data/test/unit/lib/{keybase → keybase-core}/models/dump_test.rb +4 -4
- data/test/unit/lib/{keybase → keybase-core}/models/user_test.rb +21 -15
- data/test/unit/lib/{keybase → keybase-core}/requests/base_test.rb +5 -5
- data/test/unit/lib/{keybase → keybase-core}/requests/dump/all_test.rb +1 -1
- data/test/unit/lib/{keybase → keybase-core}/requests/dump/latest_test.rb +1 -1
- data/test/unit/lib/{keybase → keybase-core}/requests/key/add_test.rb +1 -1
- data/test/unit/lib/{keybase → keybase-core}/requests/key/revoke_test.rb +1 -1
- data/test/unit/lib/{keybase → keybase-core}/requests/root/get_salt_test.rb +1 -1
- data/test/unit/lib/{keybase → keybase-core}/requests/root/login_test.rb +1 -1
- data/test/unit/lib/keybase-core/requests/session/kill_all.rb +19 -0
- data/test/unit/lib/{keybase → keybase-core}/requests/sig/post_auth_test.rb +1 -1
- data/test/unit/lib/{keybase → keybase-core}/requests/user/lookup_test.rb +1 -1
- data/test/unit/lib/{keybase → keybase-core}/response_test.rb +2 -2
- data/test/unit/lib/{keybase → keybase-core}/token_store_test.rb +1 -1
- data/test/unit/lib/{keybase_test.rb → keybase_core_test.rb} +4 -4
- data/test/vcr_cassettes/user_login.yml +113 -43
- metadata +98 -59
- metadata.gz.sig +0 -0
- data/lib/keybase.rb +0 -49
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
MTE1YzllMWE1MTMyYTQzN2M3OTAyYTQ4N2QwNzhmMjcwYTE3ZWQ4Ng==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 4b54cf8213ff3d4d2c29dda1fdc2e47f7188910e
|
4
|
+
data.tar.gz: e2b88377593501d0f938cbed9fe6899b2eb9e843
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
MmU1NDNjYTc3MmI4ZWY0ZjY1ZTQ4MGIzOGJhNDZmZDI5YTMyMTkyNzhjODU5
|
11
|
-
MGUyNWJmMzMzNWM0NTM2YjdkMDYzYmQ3ZTAxODBmNTJmM2M4OWM=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
N2UxOWU5NDQyMjUzZWQwZjZlMjJjN2I3MTI2YzZlMzMxODVhNTRjN2Q0NGRi
|
14
|
-
MzQxNDMxMmZkYTBhOGZlM2VjMjY4ZDk5YjgxMDFkMjJjNWVlOTU2ZmRjMjM5
|
15
|
-
Yzc4NTUyNzkwZjdhNDA0YWRlYmYxZmJiNmNhYzY0NDUwNDhiZTU=
|
6
|
+
metadata.gz: 018c5f57e338bb342fbcdad3fb61ac334daaae7a736be32428cccf388eabe7f9c3048c87dd76a2e85df90ff606c9ef52861009328dffb4c30bc1b0b6123bf46a
|
7
|
+
data.tar.gz: 0d28ca09014ce626d6e1b8d90df46bb477736bca0ee11a11f56ea445517de8edb25784acc516fd2dad829d0c146c60554ad5490b6a601d09e1511f9dde3eef1d
|
checksums.yaml.gz.sig
ADDED
Binary file
|
data.tar.gz.sig
ADDED
Binary file
|
data/Gemfile.lock
CHANGED
@@ -1,29 +1,38 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
keybase-core (0.1.
|
4
|
+
keybase-core (0.1.3)
|
5
5
|
faraday (~> 0.9.0)
|
6
|
-
scrypt (~>
|
6
|
+
scrypt (~> 2.0.0)
|
7
7
|
|
8
8
|
GEM
|
9
9
|
remote: https://rubygems.org/
|
10
10
|
specs:
|
11
11
|
addressable (2.3.5)
|
12
|
+
coveralls (0.7.0)
|
13
|
+
multi_json (~> 1.3)
|
14
|
+
rest-client
|
15
|
+
simplecov (>= 0.7)
|
16
|
+
term-ansicolor
|
17
|
+
thor
|
12
18
|
crack (0.4.2)
|
13
19
|
safe_yaml (~> 1.0.0)
|
14
20
|
docile (1.1.3)
|
15
21
|
faraday (0.9.0)
|
16
22
|
multipart-post (>= 1.2, < 3)
|
17
|
-
ffi (1.9.
|
23
|
+
ffi (1.9.6)
|
18
24
|
ffi-compiler (0.1.3)
|
19
25
|
ffi (>= 1.0.0)
|
20
26
|
rake
|
27
|
+
mime-types (2.2)
|
21
28
|
minitest (5.3.1)
|
22
29
|
multi_json (1.9.2)
|
23
30
|
multipart-post (2.0.0)
|
24
|
-
rake (10.
|
31
|
+
rake (10.3.2)
|
32
|
+
rest-client (1.6.7)
|
33
|
+
mime-types (>= 1.16)
|
25
34
|
safe_yaml (1.0.1)
|
26
|
-
scrypt (
|
35
|
+
scrypt (2.0.0)
|
27
36
|
ffi-compiler (>= 0.0.2)
|
28
37
|
rake
|
29
38
|
simplecov (0.8.2)
|
@@ -31,6 +40,10 @@ GEM
|
|
31
40
|
multi_json
|
32
41
|
simplecov-html (~> 0.8.0)
|
33
42
|
simplecov-html (0.8.0)
|
43
|
+
term-ansicolor (1.3.0)
|
44
|
+
tins (~> 1.0)
|
45
|
+
thor (0.19.1)
|
46
|
+
tins (1.0.1)
|
34
47
|
vcr (2.8.0)
|
35
48
|
webmock (1.8.11)
|
36
49
|
addressable (>= 2.2.7)
|
@@ -41,6 +54,7 @@ PLATFORMS
|
|
41
54
|
ruby
|
42
55
|
|
43
56
|
DEPENDENCIES
|
57
|
+
coveralls (~> 0.7.0)
|
44
58
|
keybase-core!
|
45
59
|
minitest (~> 5.3.1)
|
46
60
|
simplecov (~> 0.8.2)
|
data/README.md
CHANGED
@@ -1,8 +1,9 @@
|
|
1
|
-
|
1
|
+
![Keybase](https://keybase.io/images/logo.png)
|
2
2
|
|
3
|
-
|
3
|
+
Gem wrapper for [keybase.io](https://keybase.io) core API functions.
|
4
|
+
|
5
|
+
[![Build Status](https://secure.travis-ci.org/keybase/ruby-core.png?branch=master)] (http://travis-ci.org/keybase/ruby-core) [![Gem Version](https://badge.fury.io/rb/keybase-core.png)](http://badge.fury.io/rb/keybase-core) [![Dependency Status](https://gemnasium.com/seanhandley/ruby-core.svg)](https://gemnasium.com/seanhandley/ruby-core) [![Coverage Status](https://coveralls.io/repos/seanhandley/ruby-core/badge.png?branch=master)](https://coveralls.io/r/seanhandley/ruby-core?branch=master) [![Code Climate](https://codeclimate.com/github/keybase/ruby-core.png)](https://codeclimate.com/github/keybase/ruby-core)
|
4
6
|
|
5
|
-
[![Build Status](https://secure.travis-ci.org/keybase/ruby-core.png?branch=master)](http://travis-ci.org/keybase/ruby-core) [![Gem Version](https://badge.fury.io/rb/keybase-core.png)](http://badge.fury.io/rb/keybase-core)
|
6
7
|
|
7
8
|
## Installing
|
8
9
|
|
@@ -37,7 +38,7 @@ Upon login, you'll get back a user object. Your user object is essentially a lar
|
|
37
38
|
The login will also initiate an ongoing session which allows the authenticated actions: `key/add`, `key/revoke`, `sig/post_auth`
|
38
39
|
|
39
40
|
```ruby
|
40
|
-
me = Keybase.login('chris', 'passphrase')
|
41
|
+
me = Keybase::Core.login('chris', 'passphrase')
|
41
42
|
me.basics.username #=> "chris"
|
42
43
|
me.private_keys.primary.kid #=> "a140c70404a13370f7..."
|
43
44
|
```
|
@@ -103,7 +104,7 @@ me.post_auth('----- BEGIN PGP MESSAGE ----- ...')
|
|
103
104
|
A user object is a large dictionary (wrapped as a Ruby object) and contains pretty much everything about a user that you have access to.
|
104
105
|
|
105
106
|
```ruby
|
106
|
-
user = Keybase.lookup('username')
|
107
|
+
user = Keybase::Core.lookup('username')
|
107
108
|
user.basics.username
|
108
109
|
#=> "chris"
|
109
110
|
user.profile.bio
|
@@ -123,15 +124,27 @@ user.public_keys.primary.updated_at
|
|
123
124
|
Dumps represent a history of the public dumps of the site. You can use it to track or mirror the site as you wish. If you have a previous dump of the site, you can apply changes to sync up without downloading the entire site.
|
124
125
|
|
125
126
|
```ruby
|
126
|
-
dump = Keybase.dump_latest
|
127
|
+
dump = Keybase::Core.dump_latest
|
127
128
|
dump.full_data_sha256
|
128
129
|
#=> "66e72ba9906e8eec544ae74ee22c249e6879ddcd856df0c9679d7a79f26ce259"
|
129
130
|
dump.changes_from_parent
|
130
131
|
#=> "https://s3.amazonaws.com/keybase_data_dumps/2014-03-24-18-06-15--1b43379e593576fe395ad90e--changes.json"
|
131
132
|
|
132
|
-
dumps = Keybase.dump_all #=> [#<Keybase::Dump:0x00000102584280...]
|
133
|
+
dumps = Keybase::Core.dump_all #=> [#<Keybase::Dump:0x00000102584280...]
|
133
134
|
```
|
134
135
|
|
136
|
+
## Signing
|
137
|
+
|
138
|
+
Keybase-Core is cryptographically signed. To be sure the gem you install hasn’t been tampered with:
|
139
|
+
|
140
|
+
* Add the public key as a trusted certificate, `gem cert --add <(curl -Ls https://raw.github.com/keybase/ruby-core/master/certs/seanhandley.pem)`
|
141
|
+
|
142
|
+
* Install the gem with `gem install keybase-core -P HighSecurity`
|
143
|
+
|
144
|
+
The HighSecurity trust profile will verify signed gems and all dependencies.
|
145
|
+
|
146
|
+
You may use the MediumSecurity option if you prefer - this will allow the installation of unsigned dependencies
|
147
|
+
|
135
148
|
## Further Reading
|
136
149
|
|
137
150
|
Please check out the [Keybase API Documentation](https://keybase.io/__/api-docs/1.0) for a comprehensive explanation of the API and its capabilities.
|
@@ -0,0 +1,21 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIDgDCCAmigAwIBAgIBATANBgkqhkiG9w0BAQUFADBDMRUwEwYDVQQDDAxzZWFu
|
3
|
+
LmhhbmRsZXkxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixkARkW
|
4
|
+
A2NvbTAeFw0xNDA0MTQyMDU4NTdaFw0xNTA0MTQyMDU4NTdaMEMxFTATBgNVBAMM
|
5
|
+
DHNlYW4uaGFuZGxleTEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPy
|
6
|
+
LGQBGRYDY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4HPIH4Rf
|
7
|
+
OT3DGY3SKNGED5JTGTppjFF1+UxxYp9TGWygK9PLRtzl4oUjg6KufdC+o4oLs8dr
|
8
|
+
6FfmghU2TzwYiDXaPIi6Aje7QluEABMv7CIDLjfb2oyZWtXDgUfWa2ujyOg/BZht
|
9
|
+
3+OGXrfiLWX1qniCUQpc/UGak8A/Wt+GYDgWq+zcwwNjyc2qjMOrTp6XEl/Tij+z
|
10
|
+
J0yu2TX/I3VrRFenMe1imVDKC4G+8VW/D8nDUU2CljzBLPq7eMrX9gDKiwJ35RtO
|
11
|
+
Edxeau1wk0d9i3DDjeGRrI2s8teVZqwQifMktg4Z6Cx2l9VFEPM/TGGe8vbbv7nk
|
12
|
+
7zynHXUBA51ITQIDAQABo38wfTAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNV
|
13
|
+
HQ4EFgQUcjDSomiyoRKqvzDaty24lxwcBrowIQYDVR0RBBowGIEWc2Vhbi5oYW5k
|
14
|
+
bGV5QGdtYWlsLmNvbTAhBgNVHRIEGjAYgRZzZWFuLmhhbmRsZXlAZ21haWwuY29t
|
15
|
+
MA0GCSqGSIb3DQEBBQUAA4IBAQAlbH5LrrDhbw/1BHMeyj/fINdOKhXPL3Lmr9Zu
|
16
|
+
bLybRMMSCrjL0BhwKrorwYBwztV4fjJffw+Lb+iioVcwWefiG8WqFor5DrnpXZW2
|
17
|
+
P+YnhEacW+DwBEy8ZV1XzwuvAZiKnmo1wh3RBpDiJaKW6cxn5/SbpiBa4DHrB6Tw
|
18
|
+
MMM2c0XtOSba8ISf9/EzymLsUQCGXodoLjDMNDiYDOwnALSsjP/phM8LXdk04Kue
|
19
|
+
5vYyMKBp8sXR+QZc4U1ho78vyyA02njxn+qub9oG9x5j+C+IdbFyyn78wChQ/YZA
|
20
|
+
t9QfTw+WVknE8zEJI5EFtpDk1aGaIKJ4WhzdnWRmIwad9Y60
|
21
|
+
-----END CERTIFICATE-----
|
@@ -1,19 +1,19 @@
|
|
1
1
|
Gem::Specification.new do |gem|
|
2
2
|
gem.name = 'keybase-core'
|
3
|
-
gem.version = '0.1.
|
4
|
-
gem.date = '2014-
|
3
|
+
gem.version = '0.1.4'
|
4
|
+
gem.date = '2014-10-16'
|
5
5
|
gem.summary = 'keybase-core'
|
6
6
|
gem.description = 'Core Ruby lib for keybase.io'
|
7
7
|
gem.authors = [ 'Max Krohn', 'Sean Handley' ]
|
8
|
-
gem.email = '
|
8
|
+
gem.email = 'sean.handley@gmail.com'
|
9
9
|
gem.files = `git ls-files`.split("\n")
|
10
10
|
gem.homepage = 'https://github.com/keybase/ruby-core'
|
11
11
|
gem.license = 'BSD-3-Clause'
|
12
12
|
|
13
|
-
gem.required_ruby_version = '
|
13
|
+
gem.required_ruby_version = '> 2.0.0'
|
14
14
|
|
15
15
|
# Runtime Dependencies
|
16
|
-
gem.add_runtime_dependency 'scrypt', '~>
|
16
|
+
gem.add_runtime_dependency 'scrypt', '~> 2.0.0'
|
17
17
|
gem.add_runtime_dependency 'faraday', '~> 0.9.0'
|
18
18
|
|
19
19
|
# Development Dependencies
|
@@ -22,4 +22,9 @@ Gem::Specification.new do |gem|
|
|
22
22
|
gem.add_development_dependency 'minitest', '~> 5.3.1'
|
23
23
|
gem.add_development_dependency 'simplecov', '~> 0.8.2'
|
24
24
|
gem.add_development_dependency 'yard', '~> 0.8.7.4'
|
25
|
+
gem.add_development_dependency 'coveralls', '~> 0.7.0'
|
26
|
+
|
27
|
+
# Gem Signing
|
28
|
+
gem.cert_chain = ['certs/seanhandley.pem']
|
29
|
+
gem.signing_key = File.expand_path("~/.ssh/gem-private_key.pem") if $0 =~ /gem\z/
|
25
30
|
end
|
data/lib/keybase-core.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'json'
|
3
|
+
require 'date'
|
4
|
+
require 'scrypt'
|
5
|
+
require 'openssl'
|
6
|
+
require 'base64'
|
7
|
+
require 'securerandom'
|
8
|
+
|
9
|
+
module Keybase
|
10
|
+
module Core
|
11
|
+
require_relative 'keybase-core/crypto'
|
12
|
+
require_relative 'keybase-core/error'
|
13
|
+
require_relative 'keybase-core/models/user'
|
14
|
+
require_relative 'keybase-core/models/dump'
|
15
|
+
require_relative 'keybase-core/request/base'
|
16
|
+
require_relative 'keybase-core/request/dump/all'
|
17
|
+
require_relative 'keybase-core/request/dump/latest'
|
18
|
+
require_relative 'keybase-core/request/key/add'
|
19
|
+
require_relative 'keybase-core/request/key/revoke'
|
20
|
+
require_relative 'keybase-core/request/root/get_salt_and_login_session'
|
21
|
+
require_relative 'keybase-core/request/root/login'
|
22
|
+
require_relative 'keybase-core/request/session/kill_all'
|
23
|
+
require_relative 'keybase-core/request/sig/post_auth'
|
24
|
+
require_relative 'keybase-core/request/user/lookup'
|
25
|
+
require_relative 'keybase-core/response'
|
26
|
+
require_relative 'keybase-core/token_store'
|
27
|
+
|
28
|
+
# Lookup a user on Keybase
|
29
|
+
#
|
30
|
+
# @param [String] username the username of the user you are searching for
|
31
|
+
# @raise [Keybase::UserNotFoundError] if the user is not found
|
32
|
+
# @raise [Keybase::InputError] if the username is empty or invalid
|
33
|
+
# @return [Keybase::Model::User] the user, if they exist
|
34
|
+
def self.lookup(username)
|
35
|
+
User.lookup(username)
|
36
|
+
end
|
37
|
+
|
38
|
+
# Retrieve the dump history from Keybase
|
39
|
+
#
|
40
|
+
# @return [[Keybase::Dump]] a collection of all Keybase dumps
|
41
|
+
def self.dump_all
|
42
|
+
Dump.all
|
43
|
+
end
|
44
|
+
|
45
|
+
# Retrieve the latest dump from Keybase
|
46
|
+
#
|
47
|
+
# @return [Keybase::Dump] latest Keybase dump
|
48
|
+
def self.dump_latest
|
49
|
+
Dump.latest
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -1,14 +1,14 @@
|
|
1
|
-
module Keybase
|
1
|
+
module Keybase::Core
|
2
2
|
# @private
|
3
3
|
class Error < StandardError
|
4
4
|
def self.raise_unless_successful(status)
|
5
5
|
return if status['code'] == 0
|
6
6
|
message = status['fields'] ? error_with_fields(status) : status['desc']
|
7
|
-
err = Keybase::errors[status['code']]
|
7
|
+
err = Keybase::Core::errors[status['code']]
|
8
8
|
if err
|
9
9
|
raise err, message
|
10
10
|
else
|
11
|
-
raise Keybase::Error, "Error #{status['code']}: #{message}"
|
11
|
+
raise Keybase::Core::Error, "Error #{status['code']}: #{message}"
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
@@ -1,4 +1,4 @@
|
|
1
|
-
module Keybase
|
1
|
+
module Keybase::Core
|
2
2
|
# A dump object containing hashes, IDs and data links
|
3
3
|
# from which a mirror can be configured.
|
4
4
|
class Dump
|
@@ -13,7 +13,7 @@ module Keybase
|
|
13
13
|
@parent_dump_id = params['parent_dump_id']
|
14
14
|
@changes_from_parent = params['changes_from_parent']
|
15
15
|
@changes_sha256 = params['changes_sha256']
|
16
|
-
@created_at = Time.at(params['ctime'])
|
16
|
+
@created_at = Time.at(params['ctime'])
|
17
17
|
end
|
18
18
|
|
19
19
|
# Retrieve the dump history from Keybase
|
@@ -1,4 +1,4 @@
|
|
1
|
-
module Keybase
|
1
|
+
module Keybase::Core
|
2
2
|
# A Keybase user containing all attributes you have permission to see
|
3
3
|
class User
|
4
4
|
|
@@ -42,6 +42,12 @@ module Keybase
|
|
42
42
|
return new(response['me'])
|
43
43
|
end
|
44
44
|
|
45
|
+
# Log out of Keybase
|
46
|
+
#
|
47
|
+
def logout
|
48
|
+
return Request::Session.kill_all
|
49
|
+
end
|
50
|
+
|
45
51
|
# Post a self-signed authentication certificate to Keybase
|
46
52
|
#
|
47
53
|
# This requires login first.
|
@@ -129,13 +135,13 @@ module Keybase
|
|
129
135
|
|
130
136
|
def set_basics(params)
|
131
137
|
@basics = OpenStruct.new(params.merge(created_at: nil, updated_at: nil))
|
132
|
-
@basics.created_at = Time.at(@basics.ctime)
|
133
|
-
@basics.updated_at = Time.at(@basics.mtime)
|
138
|
+
@basics.created_at = Time.at(@basics.ctime) if @basics.ctime
|
139
|
+
@basics.updated_at = Time.at(@basics.mtime) if @basics.mtime
|
134
140
|
end
|
135
141
|
|
136
142
|
def set_profile(params)
|
137
143
|
@profile = OpenStruct.new(params.merge(updated_at: nil))
|
138
|
-
@profile.updated_at = Time.at(@profile.mtime)
|
144
|
+
@profile.updated_at = Time.at(@profile.mtime) if @profile.mtime
|
139
145
|
end
|
140
146
|
|
141
147
|
def set_emails(params)
|
@@ -148,20 +154,21 @@ module Keybase
|
|
148
154
|
|
149
155
|
def set_public_keys(params)
|
150
156
|
@public_keys = OpenStruct.new(params)
|
151
|
-
|
152
|
-
v.merge!('created_at' => Time.at(v['ctime']).to_datetime)
|
153
|
-
v.merge!('updated_at' => Time.at(v['mtime']).to_datetime)
|
154
|
-
@public_keys.send("#{k}=".to_sym, OpenStruct.new(v))
|
155
|
-
end
|
157
|
+
@public_keys = update_collection(params, @public_keys)
|
156
158
|
end
|
157
159
|
|
158
160
|
def set_private_keys(params)
|
159
161
|
@private_keys = OpenStruct.new(params)
|
162
|
+
@private_keys = update_collection(params, @private_keys)
|
163
|
+
end
|
164
|
+
|
165
|
+
def update_collection(params, collection)
|
160
166
|
params.each do |k,v|
|
161
|
-
v.merge!('created_at' => Time.at(v['ctime'])
|
162
|
-
v.merge!('updated_at' => Time.at(v['mtime'])
|
163
|
-
|
167
|
+
v.merge!('created_at' => Time.at(v['ctime']))
|
168
|
+
v.merge!('updated_at' => Time.at(v['mtime']))
|
169
|
+
collection.send("#{k}=".to_sym, OpenStruct.new(v))
|
164
170
|
end
|
171
|
+
collection
|
165
172
|
end
|
166
173
|
|
167
174
|
end
|
@@ -1,15 +1,15 @@
|
|
1
|
-
module Keybase
|
1
|
+
module Keybase::Core
|
2
2
|
# @private
|
3
3
|
module Request
|
4
4
|
API_BASE_URL = 'https://keybase.io'
|
5
5
|
class Base
|
6
6
|
|
7
7
|
def self.get(url, params={})
|
8
|
-
|
8
|
+
Response.new(conn.get(url, params)).body
|
9
9
|
end
|
10
10
|
|
11
11
|
def self.post(url, params={})
|
12
|
-
response =
|
12
|
+
response = Response.new(conn.post(url, params))
|
13
13
|
TokenStore.cookie = response.cookie if response.cookie
|
14
14
|
response.body
|
15
15
|
end
|