layer-api 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 734b3f9e8434613a0090e380e64b9a60cbc973e6
4
- data.tar.gz: 24108e6722b990dd10ae2895d7e4342772955991
3
+ metadata.gz: f73dcb10bde1c4923d430f252668e95dc1ceccd8
4
+ data.tar.gz: 181d8cae90f4038cb2c3f5ac2a57da7c9654278d
5
5
  SHA512:
6
- metadata.gz: 754057aedd74b4bf0a72efdd63f499723d04ff4391857fadfbfd3c077b7a2e8eb586849eea8d8f99dbf461aa0c63de7560988fc9e2c97bf6b80ffd658f1e564b
7
- data.tar.gz: 33116fef4ff9492f0184690eac1b2957fb87387062d4e7c24dc55c65f1e10eacf97a4dccd986acc2837a8d039784706d3e6876e1003d4a3880c1e53a6f0b2f53
6
+ metadata.gz: 0955b0188b5926dd72b1f2647fdc213f75683cea78ab4ff79fe1fcea7e7e3415a1d1ec78e1fb09262fc86066bf5ba3bb2953c708416df4bca6757c08f8624d0e
7
+ data.tar.gz: 6a00b6aed1c2ecf85c80563d5bdbf787fc784c51ea461665f6baa724db4a9370d3d008f04ff222a57336f3f887e8522f681f59dde9cd074ce5add97bd77701b0
data/README.md CHANGED
@@ -142,6 +142,19 @@ layer.block_user("owner_id", "user_id")
142
142
  layer.unblock_user("owner_id", "user_id")
143
143
  ```
144
144
 
145
+ ### Generating Identity Tokens
146
+ See: [the official authentication guide](https://developer.layer.com/docs/android/guides#authentication)
147
+
148
+ Make sure the following environment variables are set:
149
+ `ENV['LAYER_KEY_ID']`
150
+ `ENV['LAYER_PROVIDER_ID']`
151
+ `ENV['LAYER_PRIVATE_KEY']`
152
+
153
+ ```ruby
154
+ # Returns a valid signed identity token.
155
+ layer.generate_identity_token(user_id: "1234", nonce: "your_random_nonce")
156
+ ```
157
+
145
158
  ## Development
146
159
 
147
160
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake rspec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
data/layer-api.gemspec CHANGED
@@ -27,4 +27,5 @@ Gem::Specification.new do |spec|
27
27
  spec.add_development_dependency "pry", "~> 0.10.1"
28
28
 
29
29
  spec.add_dependency "faraday", "~> 0.9.1"
30
+ spec.add_dependency "jwt", "~> 1.5.1"
30
31
  end
data/lib/layer/api.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'faraday'
2
2
  require 'json'
3
+ require 'jwt'
3
4
 
4
5
  require "layer/api/version"
5
6
  require "layer/api/configuration"
@@ -1,6 +1,7 @@
1
1
  require "layer/api/client/conversations"
2
2
  require "layer/api/client/announcements"
3
3
  require "layer/api/client/users"
4
+ require "layer/api/client/identity_token"
4
5
 
5
6
  module Layer
6
7
  module Api
@@ -0,0 +1,61 @@
1
+ module Layer
2
+ module Api
3
+ class IdentityToken
4
+ attr_reader :user_id, :nonce, :expires_at
5
+
6
+ def initialize(options = {})
7
+ @user_id = options[:user_id]
8
+ @nonce = options[:nonce]
9
+ @expires_at = (options[:expires_at] || Time.now+(1209600))
10
+ end
11
+
12
+ def to_s
13
+ get_jwt
14
+ end
15
+
16
+ def layer_key_id
17
+ ENV['LAYER_KEY_ID']
18
+ end
19
+
20
+ def layer_provider_id
21
+ ENV['LAYER_PROVIDER_ID']
22
+ end
23
+
24
+ private
25
+
26
+ def get_jwt
27
+ JWT.encode(claim, private_key, 'RS256', headers)
28
+ end
29
+
30
+ def headers
31
+ {
32
+ typ: 'JWT',
33
+ cty: 'layer-eit;v=1',
34
+ kid: layer_key_id
35
+ }
36
+ end
37
+
38
+ def claim
39
+ {
40
+ iss: layer_provider_id,
41
+ prn: user_id.to_s,
42
+ iat: Time.now.to_i,
43
+ exp: expires_at.to_i,
44
+ nce: nonce
45
+ }
46
+ end
47
+
48
+ def private_key
49
+ # Cloud66 stores newlines as \n instead of \\n
50
+ key = ENV['LAYER_PRIVATE_KEY'].dup
51
+ OpenSSL::PKey::RSA.new(key.gsub!("\\n","\n"))
52
+ end
53
+ end
54
+
55
+ class Client
56
+ def generate_identity_token(options = {})
57
+ IdentityToken.new(options).to_s
58
+ end
59
+ end
60
+ end
61
+ end
@@ -10,9 +10,8 @@ module Layer
10
10
  when 500..599 then Layer::Api::ServerError
11
11
  else self
12
12
  end
13
+ klass.new(response)
13
14
  end
14
-
15
- klass.new(response)
16
15
  end
17
16
 
18
17
  def initialize(response)
@@ -1,5 +1,5 @@
1
1
  module Layer
2
2
  module Api
3
- VERSION = "0.2.0"
3
+ VERSION = "0.3.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: layer-api
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
  - Jake Kelly
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-07-21 00:00:00.000000000 Z
11
+ date: 2015-07-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -126,6 +126,20 @@ dependencies:
126
126
  - - "~>"
127
127
  - !ruby/object:Gem::Version
128
128
  version: 0.9.1
129
+ - !ruby/object:Gem::Dependency
130
+ name: jwt
131
+ requirement: !ruby/object:Gem::Requirement
132
+ requirements:
133
+ - - "~>"
134
+ - !ruby/object:Gem::Version
135
+ version: 1.5.1
136
+ type: :runtime
137
+ prerelease: false
138
+ version_requirements: !ruby/object:Gem::Requirement
139
+ requirements:
140
+ - - "~>"
141
+ - !ruby/object:Gem::Version
142
+ version: 1.5.1
129
143
  description: Simple wrapper for the Layer Platform API
130
144
  email:
131
145
  - jake.kelly10@gmail.com
@@ -146,6 +160,7 @@ files:
146
160
  - lib/layer/api/client.rb
147
161
  - lib/layer/api/client/announcements.rb
148
162
  - lib/layer/api/client/conversations.rb
163
+ - lib/layer/api/client/identity_token.rb
149
164
  - lib/layer/api/client/users.rb
150
165
  - lib/layer/api/configuration.rb
151
166
  - lib/layer/api/connection.rb