layer-api 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: 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