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.
Files changed (50) hide show
  1. checksums.yaml +5 -13
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/Gemfile.lock +19 -5
  5. data/README.md +20 -7
  6. data/certs/seanhandley.pem +21 -0
  7. data/{keybase.gemspec → keybase-core.gemspec} +10 -5
  8. data/lib/keybase-core.rb +52 -0
  9. data/lib/{keybase → keybase-core}/crypto.rb +1 -1
  10. data/lib/{keybase → keybase-core}/error.rb +3 -3
  11. data/lib/{keybase → keybase-core}/models/dump.rb +2 -2
  12. data/lib/{keybase → keybase-core}/models/user.rb +19 -12
  13. data/lib/{keybase → keybase-core}/request/base.rb +3 -3
  14. data/lib/{keybase → keybase-core}/request/dump/all.rb +1 -1
  15. data/lib/{keybase → keybase-core}/request/dump/latest.rb +1 -1
  16. data/lib/{keybase → keybase-core}/request/key/add.rb +1 -1
  17. data/lib/{keybase → keybase-core}/request/key/revoke.rb +1 -1
  18. data/lib/{keybase → keybase-core}/request/root/get_salt_and_login_session.rb +1 -1
  19. data/lib/{keybase → keybase-core}/request/root/login.rb +1 -1
  20. data/lib/keybase-core/request/session/kill_all.rb +11 -0
  21. data/lib/{keybase → keybase-core}/request/sig/post_auth.rb +1 -1
  22. data/lib/{keybase → keybase-core}/request/user/lookup.rb +1 -1
  23. data/lib/{keybase → keybase-core}/response.rb +1 -1
  24. data/lib/{keybase → keybase-core}/token_store.rb +1 -1
  25. data/test/integration/dumps_test.rb +3 -3
  26. data/test/integration/keys_test.rb +1 -1
  27. data/test/integration/login_users_test.rb +4 -3
  28. data/test/integration/lookup_users_test.rb +5 -5
  29. data/test/test_helper.rb +4 -2
  30. data/test/unit/lib/{keybase → keybase-core}/crypto_test.rb +1 -1
  31. data/test/unit/lib/{keybase → keybase-core}/error_test.rb +2 -2
  32. data/test/unit/lib/{keybase → keybase-core}/models/dump_test.rb +4 -4
  33. data/test/unit/lib/{keybase → keybase-core}/models/user_test.rb +21 -15
  34. data/test/unit/lib/{keybase → keybase-core}/requests/base_test.rb +5 -5
  35. data/test/unit/lib/{keybase → keybase-core}/requests/dump/all_test.rb +1 -1
  36. data/test/unit/lib/{keybase → keybase-core}/requests/dump/latest_test.rb +1 -1
  37. data/test/unit/lib/{keybase → keybase-core}/requests/key/add_test.rb +1 -1
  38. data/test/unit/lib/{keybase → keybase-core}/requests/key/revoke_test.rb +1 -1
  39. data/test/unit/lib/{keybase → keybase-core}/requests/root/get_salt_test.rb +1 -1
  40. data/test/unit/lib/{keybase → keybase-core}/requests/root/login_test.rb +1 -1
  41. data/test/unit/lib/keybase-core/requests/session/kill_all.rb +19 -0
  42. data/test/unit/lib/{keybase → keybase-core}/requests/sig/post_auth_test.rb +1 -1
  43. data/test/unit/lib/{keybase → keybase-core}/requests/user/lookup_test.rb +1 -1
  44. data/test/unit/lib/{keybase → keybase-core}/response_test.rb +2 -2
  45. data/test/unit/lib/{keybase → keybase-core}/token_store_test.rb +1 -1
  46. data/test/unit/lib/{keybase_test.rb → keybase_core_test.rb} +4 -4
  47. data/test/vcr_cassettes/user_login.yml +113 -43
  48. metadata +98 -59
  49. metadata.gz.sig +0 -0
  50. data/lib/keybase.rb +0 -49
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- NjZmOGQ2MWU5MzM0NmYwNTVmZjEyMGM1YzM5YjkyNmU4ZTIxZjIzMQ==
5
- data.tar.gz: !binary |-
6
- MTE1YzllMWE1MTMyYTQzN2M3OTAyYTQ4N2QwNzhmMjcwYTE3ZWQ4Ng==
2
+ SHA1:
3
+ metadata.gz: 4b54cf8213ff3d4d2c29dda1fdc2e47f7188910e
4
+ data.tar.gz: e2b88377593501d0f938cbed9fe6899b2eb9e843
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- YTMwOTVjYTM3M2YyNzRlMTFkMzBhNmEwYTE1MTcxOWFjNTUyNDQxZjAxYzZj
10
- MmU1NDNjYTc3MmI4ZWY0ZjY1ZTQ4MGIzOGJhNDZmZDI5YTMyMTkyNzhjODU5
11
- MGUyNWJmMzMzNWM0NTM2YjdkMDYzYmQ3ZTAxODBmNTJmM2M4OWM=
12
- data.tar.gz: !binary |-
13
- N2UxOWU5NDQyMjUzZWQwZjZlMjJjN2I3MTI2YzZlMzMxODVhNTRjN2Q0NGRi
14
- MzQxNDMxMmZkYTBhOGZlM2VjMjY4ZDk5YjgxMDFkMjJjNWVlOTU2ZmRjMjM5
15
- Yzc4NTUyNzkwZjdhNDA0YWRlYmYxZmJiNmNhYzY0NDUwNDhiZTU=
6
+ metadata.gz: 018c5f57e338bb342fbcdad3fb61ac334daaae7a736be32428cccf388eabe7f9c3048c87dd76a2e85df90ff606c9ef52861009328dffb4c30bc1b0b6123bf46a
7
+ data.tar.gz: 0d28ca09014ce626d6e1b8d90df46bb477736bca0ee11a11f56ea445517de8edb25784acc516fd2dad829d0c146c60554ad5490b6a601d09e1511f9dde3eef1d
Binary file
Binary file
@@ -1,29 +1,38 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- keybase-core (0.1.1)
4
+ keybase-core (0.1.3)
5
5
  faraday (~> 0.9.0)
6
- scrypt (~> 1.2.1)
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.3)
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.1.1)
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 (1.2.1)
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
- # Keybase Core Gem
1
+ ![Keybase](https://keybase.io/images/logo.png)
2
2
 
3
- API client gem for [keybase.io](https://keybase.io)
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.2'
4
- gem.date = '2014-03-25'
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 = 'themax@gmail.com'
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 = '~> 2.1.0'
13
+ gem.required_ruby_version = '> 2.0.0'
14
14
 
15
15
  # Runtime Dependencies
16
- gem.add_runtime_dependency 'scrypt', '~> 1.2.1'
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
@@ -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,4 +1,4 @@
1
- module Keybase
1
+ module Keybase::Core
2
2
  # @private
3
3
  class Crypto
4
4
  SCRYPT_VARS = {'N' => 2**15, 'r' => 8, 'p' => 1, 'key_length' => 224, 'chunk' => 192..-1}
@@ -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']).to_datetime
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).to_datetime if @basics.ctime
133
- @basics.updated_at = Time.at(@basics.mtime).to_datetime if @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).to_datetime if @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
- params.each do |k,v|
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']).to_datetime)
162
- v.merge!('updated_at' => Time.at(v['mtime']).to_datetime)
163
- @private_keys.send("#{k}=".to_sym, OpenStruct.new(v))
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
- Keybase::Response.new(conn.get(url, params)).body
8
+ Response.new(conn.get(url, params)).body
9
9
  end
10
10
 
11
11
  def self.post(url, params={})
12
- response = Keybase::Response.new(conn.post(url, params))
12
+ response = Response.new(conn.post(url, params))
13
13
  TokenStore.cookie = response.cookie if response.cookie
14
14
  response.body
15
15
  end
@@ -1,5 +1,5 @@
1
1
  # GET dump/all.json
2
- module Keybase
2
+ module Keybase::Core
3
3
  module Request
4
4
  class Dump < Base
5
5
  def self.all
@@ -1,5 +1,5 @@
1
1
  # GET dump/latest.json
2
- module Keybase
2
+ module Keybase::Core
3
3
  module Request
4
4
  class Dump < Base
5
5
  def self.latest
@@ -2,7 +2,7 @@
2
2
  # public_key: "-----BEGIN PGP PUBLIC..."
3
3
  # private_key: "hKRib2R5gqRwcml2gqRkY..."
4
4
  # is_primary: true
5
- module Keybase
5
+ module Keybase::Core
6
6
  module Request
7
7
  class Key < Base
8
8
  def self.add(params)
@@ -1,7 +1,7 @@
1
1
  # POST /key/revoke.json
2
2
  # revocation_type: 0
3
3
  # kid: "a140c70404a13370f7..."
4
- module Keybase
4
+ module Keybase::Core
5
5
  module Request
6
6
  class Key < Base
7
7
  def self.revoke(kid)
@@ -1,5 +1,5 @@
1
1
  # GET /getsalt.json?email_or_username=EMAIL_OR_USERNAME
2
- module Keybase
2
+ module Keybase::Core
3
3
  module Request
4
4
  class Root < Base
5
5
  def self.get_salt_and_login_session(email_or_username)
@@ -2,7 +2,7 @@
2
2
  # email_or_username: "chris"
3
3
  # hmac_pwh: "38902fe098f..."
4
4
  # login_session: "lgHZIwfee99..."
5
- module Keybase
5
+ module Keybase::Core
6
6
  module Request
7
7
  class Root < Base
8
8
  def self.login(email_or_username, hmac_pwh, login_session)
@@ -0,0 +1,11 @@
1
+ # POST /session/killall.json
2
+ module Keybase::Core
3
+ module Request
4
+ class Session < Base
5
+ def self.kill_all
6
+ post('session/killall.json', csrf_token: TokenStore.csrf)
7
+ true
8
+ end
9
+ end
10
+ end
11
+ end