linkedin_sign_in 0.3

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.
Files changed (89) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +13 -0
  3. data/.travis.yml +18 -0
  4. data/CHANGELOG.md +3 -0
  5. data/Gemfile +6 -0
  6. data/Gemfile.lock +155 -0
  7. data/MIT-LICENSE +20 -0
  8. data/README.md +154 -0
  9. data/Rakefile +40 -0
  10. data/SECURITY.md +3 -0
  11. data/app/controllers/linkedin_sign_in/authorizations_controller.rb +17 -0
  12. data/app/controllers/linkedin_sign_in/base_controller.rb +15 -0
  13. data/app/controllers/linkedin_sign_in/callbacks_controller.rb +27 -0
  14. data/app/helpers/linkedin_sign_in/button_helper.rb +7 -0
  15. data/bin/rails +16 -0
  16. data/config/routes.rb +4 -0
  17. data/lib/linkedin-id-token.rb +190 -0
  18. data/lib/linkedin_sign_in/engine.rb +32 -0
  19. data/lib/linkedin_sign_in/identity.rb +55 -0
  20. data/lib/linkedin_sign_in/redirect_protector.rb +25 -0
  21. data/lib/linkedin_sign_in.rb +10 -0
  22. data/linkedin_sign_in.gemspec +21 -0
  23. data/test/certificate.pem +19 -0
  24. data/test/controllers/authorizations_controller_test.rb +26 -0
  25. data/test/controllers/callbacks_controller_test.rb +36 -0
  26. data/test/dummy/.ruby-version +1 -0
  27. data/test/dummy/Rakefile +6 -0
  28. data/test/dummy/app/assets/config/manifest.js +3 -0
  29. data/test/dummy/app/assets/images/.keep +0 -0
  30. data/test/dummy/app/assets/javascripts/application.js +15 -0
  31. data/test/dummy/app/assets/javascripts/cable.js +13 -0
  32. data/test/dummy/app/assets/javascripts/channels/.keep +0 -0
  33. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  34. data/test/dummy/app/channels/application_cable/channel.rb +4 -0
  35. data/test/dummy/app/channels/application_cable/connection.rb +4 -0
  36. data/test/dummy/app/controllers/application_controller.rb +2 -0
  37. data/test/dummy/app/controllers/concerns/.keep +0 -0
  38. data/test/dummy/app/helpers/application_helper.rb +2 -0
  39. data/test/dummy/app/jobs/application_job.rb +2 -0
  40. data/test/dummy/app/mailers/application_mailer.rb +4 -0
  41. data/test/dummy/app/models/application_record.rb +3 -0
  42. data/test/dummy/app/models/concerns/.keep +0 -0
  43. data/test/dummy/app/views/layouts/application.html.erb +15 -0
  44. data/test/dummy/app/views/layouts/mailer.html.erb +13 -0
  45. data/test/dummy/app/views/layouts/mailer.text.erb +1 -0
  46. data/test/dummy/bin/bundle +3 -0
  47. data/test/dummy/bin/rails +4 -0
  48. data/test/dummy/bin/rake +4 -0
  49. data/test/dummy/bin/setup +36 -0
  50. data/test/dummy/bin/update +31 -0
  51. data/test/dummy/bin/yarn +11 -0
  52. data/test/dummy/config/application.rb +20 -0
  53. data/test/dummy/config/boot.rb +5 -0
  54. data/test/dummy/config/cable.yml +10 -0
  55. data/test/dummy/config/database.yml +25 -0
  56. data/test/dummy/config/environment.rb +5 -0
  57. data/test/dummy/config/environments/development.rb +32 -0
  58. data/test/dummy/config/environments/production.rb +57 -0
  59. data/test/dummy/config/environments/test.rb +33 -0
  60. data/test/dummy/config/initializers/application_controller_renderer.rb +8 -0
  61. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  62. data/test/dummy/config/initializers/content_security_policy.rb +25 -0
  63. data/test/dummy/config/initializers/cookies_serializer.rb +5 -0
  64. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  65. data/test/dummy/config/initializers/inflections.rb +16 -0
  66. data/test/dummy/config/initializers/linkedin_sign_in.rb +4 -0
  67. data/test/dummy/config/initializers/mime_types.rb +4 -0
  68. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  69. data/test/dummy/config/locales/en.yml +33 -0
  70. data/test/dummy/config/puma.rb +34 -0
  71. data/test/dummy/config/routes.rb +2 -0
  72. data/test/dummy/config/spring.rb +6 -0
  73. data/test/dummy/config/storage.yml +34 -0
  74. data/test/dummy/config.ru +5 -0
  75. data/test/dummy/lib/assets/.keep +0 -0
  76. data/test/dummy/log/.keep +0 -0
  77. data/test/dummy/package.json +5 -0
  78. data/test/dummy/public/404.html +67 -0
  79. data/test/dummy/public/422.html +67 -0
  80. data/test/dummy/public/500.html +66 -0
  81. data/test/dummy/public/apple-touch-icon-precomposed.png +0 -0
  82. data/test/dummy/public/apple-touch-icon.png +0 -0
  83. data/test/dummy/public/favicon.ico +0 -0
  84. data/test/helpers/button_helper_test.rb +36 -0
  85. data/test/key.pem +27 -0
  86. data/test/models/identity_test.rb +48 -0
  87. data/test/models/redirect_protector_test.rb +34 -0
  88. data/test/test_helper.rb +28 -0
  89. metadata +267 -0
@@ -0,0 +1,36 @@
1
+ require "test_helper"
2
+
3
+ class LinkedinSignIn::ButtonHelperTest < ActionView::TestCase
4
+ test "generating a login button with text content" do
5
+ assert_dom_equal <<-HTML, linkedin_sign_in_button("Log in with Linkedin", proceed_to: "https://www.example.com/login")
6
+ <form action="/linkedin_sign_in/authorization" accept-charset="UTF-8" method="post">
7
+ <input name="utf8" type="hidden" value="&#x2713;" />
8
+ <input name="proceed_to" type="hidden" value="https://www.example.com/login" />
9
+ <button type="submit">Log in with Linkedin</button>
10
+ </form>
11
+ HTML
12
+ end
13
+
14
+ test "generating a login button with HTML content" do
15
+ assert_dom_equal <<-HTML, linkedin_sign_in_button(proceed_to: "https://www.example.com/login") { image_tag("linkedin.png") }
16
+ <form action="/linkedin_sign_in/authorization" accept-charset="UTF-8" method="post">
17
+ <input name="utf8" type="hidden" value="&#x2713;" />
18
+ <input name="proceed_to" type="hidden" value="https://www.example.com/login" />
19
+ <button type="submit"><img src="/images/linkedin.png"></button>
20
+ </form>
21
+ HTML
22
+ end
23
+
24
+ test "generating a login button with custom attributes" do
25
+ button = linkedin_sign_in_button("Log in with Linkedin", proceed_to: "https://www.example.com/login",
26
+ class: "login-button", data: { disable_with: "Loading Linkedin login…" })
27
+
28
+ assert_dom_equal <<-HTML, button
29
+ <form action="/linkedin_sign_in/authorization" accept-charset="UTF-8" method="post">
30
+ <input name="utf8" type="hidden" value="&#x2713;" />
31
+ <input name="proceed_to" type="hidden" value="https://www.example.com/login" />
32
+ <button type="submit" class="login-button" data-disable-with="Loading Linkedin login…">Log in with Linkedin</button>
33
+ </form>
34
+ HTML
35
+ end
36
+ end
data/test/key.pem ADDED
@@ -0,0 +1,27 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIIEowIBAAKCAQEArZztTnC23cY+H+iP2lDCZAiX6wzb6dL9pY1CaGquoalj5qGY
3
+ HJfdp4wb7fdZ6ST3xmgstGWC34s1DQUSpH6OrtzF77m5LWKpN0lQno8tE1BNdT8E
4
+ cdbv8dHNqwk2umO6aQKDvVK98qHHA5pHHj/DKaHx1nra3WscoZLZasuoKTO1fpI4
5
+ /mp8kkJOF6gyZReBVx7fNhzDSt8W41ychKMjLnRlCEgQ5/6xvG9y8RCmsFIi1QiO
6
+ eIN/i/zouJ2QhFzQnf5r1qVRaD6RUBjKClt0vSsRaML35A0sVmMIGJ1p7DtLnl0v
7
+ lmDC/PCjtUH+1ZhGfdbu8NfxIjFcYrnM8cnEnwIDAQABAoIBAQCFsPlg1RVMlJNU
8
+ eP8Fq/j1lVR/UYird6mRacUAqV5O6SUf/cIoCp5Knm8Hgdl/2tLeu2vpgt4UDJvO
9
+ qeBgQYDYkPPvlcJOe9I428E0SKb6X3U2W0+t5kkhm2FYWyEEyTVMFf6itOvGwuOB
10
+ F7W6SnmcPrP/aN3PceM7XN0GC0w0ZPOgpsKO4zJiXyA+NQhOdV/xsUtAgM/zXPVb
11
+ UzJyixPDqJfBHBNCkP6FcJxkc+cLlxnZaG7ug2qfWzvj0l2EepcWQ3R/E56mixcN
12
+ nIoha07jBMJhX0KbRgcZsMmvR0/Z2sLkUgphTI/EdIsPQ/zvfqSQTQAKjDB4Orsi
13
+ quaIerupAoGBANVfWh+d4GnhcxtHYb1CCS6CU1dJDh6vGifeLvAAxuiAOBAepQUs
14
+ 9+ewVaS7ARnZ7jwtqOOKRDvAZpEukh7lqFj5haqzuRrImTO6v/Lk8XAA2RC7hY6v
15
+ b65WszIYgGemSubJot7Tevk/lu8lhdkZKp+OZdPU9NS2cEPCcQ3zDchbAoGBANBM
16
+ IVJuQHutAzCTKfjhbZCn78e7AA/eQGMycZUM6i60muYC7L57P0W++ycK6A1cJ49X
17
+ XJ9VvKtjtfqITbIUGuvaFii7XAaGMV85LffJ5t1DjucLScIBDxYp5EJz5/Qj2RDw
18
+ hWJZ+IF0Z4+k1jmIM+eyoNzmjWyYvgpmhFfhx0gNAoGAHcRyt0x4PW1FeL3JpfSr
19
+ gUCPTfMUNDWriXpWxAbnuRICQEV2MjWm1DzmhdfM/IVJ1j1sfWoRwOBDrud3XTYe
20
+ +WK+QiVWoqTvsqbQFpvYDw8fOVVf+ZsCEqln0IpYh51Mf8wLm9iXJGS5st1iQfpf
21
+ 1uivzhC8o1xcZyeeTBrnhlcCgYBHp7ja04SpRwZO4oFQ1bPMTIlHC0RlMQ6zUToT
22
+ jULOWGDk+WKZ0GoewylA8BaN6gLN477ALU1fJEkI63TW6uWr9vUig/mPYQCBAnmW
23
+ wUUDHud9AbwY2iZneHfGiHrl2KMmmac5AzxixDmQB6OOXRWGAkQmWcWS8ySFDWk/
24
+ ljLozQKBgE1gv+PXyxFOsuKNAylj2h8SlfzyOReS7XgPOX3x27yhp18Y8Wq9jeBr
25
+ INjRFL7CpydZZOB5B8i4CLqa3B0dA/lIYbc5FaLefBY+mt82YtpMsYP1I4bAe/ub
26
+ K7fp2z10/eKfa2e5mcTS2WBwJmVz0cR8Plqd2zPb3+yE+JMiU/k7
27
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,48 @@
1
+ require 'test_helper'
2
+ require 'jwt'
3
+
4
+ class LinkedinSignIn::IdentityTest < ActiveSupport::TestCase
5
+ setup do
6
+ stub_request(:get, "https://api.linkedin.com/v1/people/~:(id,firstName,lastName,picture-url,email-address,positions)?format=json").
7
+ to_return \
8
+ status: 200,
9
+ body: {
10
+ id: "573222559223877",
11
+ firstName: "Vincent",
12
+ lastName: "Robert",
13
+ emailAddress: "vincent@genezys.net",
14
+ pictureUrl: "https://example.com/avatar.png",
15
+ positions: {
16
+ values: [
17
+ { isCurrent: true, company: { name: "Touch & Sell" } },
18
+ { isCurrent: false, company: { name: "Cantor" } }
19
+ ]
20
+ }
21
+ }.to_json
22
+ end
23
+
24
+ test "extracting user ID" do
25
+ assert_equal "573222559223877", LinkedinSignIn::Identity.new("fake_token").user_id
26
+ end
27
+
28
+ test "extracting first name" do
29
+ assert_equal "Vincent", LinkedinSignIn::Identity.new("fake_token").first_name
30
+ end
31
+
32
+ test "extracting last name" do
33
+ assert_equal "Robert", LinkedinSignIn::Identity.new("fake_token").last_name
34
+ end
35
+
36
+ test "extracting email address" do
37
+ assert_equal "vincent@genezys.net", LinkedinSignIn::Identity.new("fake_token").email_address
38
+ end
39
+
40
+ test "extracting avatar URL" do
41
+ assert_equal "https://example.com/avatar.png",
42
+ LinkedinSignIn::Identity.new("fake_token").avatar_url
43
+ end
44
+
45
+ test "extracting current company name" do
46
+ assert_equal "Touch & Sell", LinkedinSignIn::Identity.new("fake_token").current_company_name
47
+ end
48
+ end
@@ -0,0 +1,34 @@
1
+ require 'test_helper'
2
+ require 'linkedin_sign_in/redirect_protector'
3
+
4
+ class LinkedinSignIn::RedirectProtectorTest < ActiveSupport::TestCase
5
+ test "disallows URL target with different host than source" do
6
+ assert_raises LinkedinSignIn::RedirectProtector::Violation do
7
+ LinkedinSignIn::RedirectProtector.ensure_same_origin 'https://malicious.example.com', 'https://genezys.net'
8
+ end
9
+ end
10
+
11
+ test "disallows URL target with different port than source" do
12
+ assert_raises LinkedinSignIn::RedirectProtector::Violation do
13
+ LinkedinSignIn::RedirectProtector.ensure_same_origin 'https://genezys.net:10443', 'https://genezys.net'
14
+ end
15
+ end
16
+
17
+ test "disallows URL target with different protocol than source" do
18
+ assert_raises LinkedinSignIn::RedirectProtector::Violation do
19
+ LinkedinSignIn::RedirectProtector.ensure_same_origin 'http://genezys.net', 'https://genezys.net'
20
+ end
21
+ end
22
+
23
+ test "allows URL target with same origin as source" do
24
+ assert_nothing_raised do
25
+ LinkedinSignIn::RedirectProtector.ensure_same_origin 'https://genezys.net', 'https://genezys.net'
26
+ end
27
+ end
28
+
29
+ test "allows path target" do
30
+ assert_nothing_raised do
31
+ LinkedinSignIn::RedirectProtector.ensure_same_origin '/callback', 'https://genezys.net'
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,28 @@
1
+ ENV['RAILS_ENV'] = 'test'
2
+
3
+ FAKE_LINKEDIN_CLIENT_ID = '86179201039-eks5VfVc46WoFYyZVUDpQHeZFDRCqno3.apps.linkedinusercontent.com'
4
+ FAKE_LINKEDIN_CLIENT_SECRET = 'r(XsBajmyMddruvf$jDgLyPK'
5
+
6
+ require_relative '../test/dummy/config/environment'
7
+
8
+ require 'rails/test_help'
9
+ require 'webmock/minitest'
10
+ require 'byebug'
11
+
12
+ require 'openssl'
13
+ LINKEDIN_PRIVATE_KEY = OpenSSL::PKey::RSA.new(File.read(File.expand_path('key.pem', __dir__)))
14
+ LINKEDIN_X509_CERTIFICATE = OpenSSL::X509::Certificate.new(File.read(File.expand_path('certificate.pem', __dir__)))
15
+
16
+ if LINKEDIN_X509_CERTIFICATE.not_after <= Time.now
17
+ raise "Test certificate is expired. Generate a new one and run the tests again: `bundle exec rake test:certificate:generate`."
18
+ end
19
+
20
+ require 'linkedin-id-token'
21
+ # LinkedinSignIn::Identity.validator = Validator.new(x509_cert: LINKEDIN_X509_CERTIFICATE)
22
+
23
+ class ActionView::TestCase
24
+ private
25
+ def assert_dom_equal(expected, actual, message = nil)
26
+ super expected.remove(/(\A|\n)\s*/), actual, message
27
+ end
28
+ end
metadata ADDED
@@ -0,0 +1,267 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: linkedin_sign_in
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.3'
5
+ platform: ruby
6
+ authors:
7
+ - Vincent Robert
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-11-02 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 5.2.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 5.2.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: oauth2
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 1.4.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 1.4.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.15'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.15'
55
+ - !ruby/object:Gem::Dependency
56
+ name: jwt
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: 1.5.6
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: 1.5.6
69
+ - !ruby/object:Gem::Dependency
70
+ name: webmock
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: 3.4.2
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: 3.4.2
83
+ description:
84
+ email:
85
+ - vincent.robert@genezys.net
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - ".gitignore"
91
+ - ".travis.yml"
92
+ - CHANGELOG.md
93
+ - Gemfile
94
+ - Gemfile.lock
95
+ - MIT-LICENSE
96
+ - README.md
97
+ - Rakefile
98
+ - SECURITY.md
99
+ - app/controllers/linkedin_sign_in/authorizations_controller.rb
100
+ - app/controllers/linkedin_sign_in/base_controller.rb
101
+ - app/controllers/linkedin_sign_in/callbacks_controller.rb
102
+ - app/helpers/linkedin_sign_in/button_helper.rb
103
+ - bin/rails
104
+ - config/routes.rb
105
+ - lib/linkedin-id-token.rb
106
+ - lib/linkedin_sign_in.rb
107
+ - lib/linkedin_sign_in/engine.rb
108
+ - lib/linkedin_sign_in/identity.rb
109
+ - lib/linkedin_sign_in/redirect_protector.rb
110
+ - linkedin_sign_in.gemspec
111
+ - test/certificate.pem
112
+ - test/controllers/authorizations_controller_test.rb
113
+ - test/controllers/callbacks_controller_test.rb
114
+ - test/dummy/.ruby-version
115
+ - test/dummy/Rakefile
116
+ - test/dummy/app/assets/config/manifest.js
117
+ - test/dummy/app/assets/images/.keep
118
+ - test/dummy/app/assets/javascripts/application.js
119
+ - test/dummy/app/assets/javascripts/cable.js
120
+ - test/dummy/app/assets/javascripts/channels/.keep
121
+ - test/dummy/app/assets/stylesheets/application.css
122
+ - test/dummy/app/channels/application_cable/channel.rb
123
+ - test/dummy/app/channels/application_cable/connection.rb
124
+ - test/dummy/app/controllers/application_controller.rb
125
+ - test/dummy/app/controllers/concerns/.keep
126
+ - test/dummy/app/helpers/application_helper.rb
127
+ - test/dummy/app/jobs/application_job.rb
128
+ - test/dummy/app/mailers/application_mailer.rb
129
+ - test/dummy/app/models/application_record.rb
130
+ - test/dummy/app/models/concerns/.keep
131
+ - test/dummy/app/views/layouts/application.html.erb
132
+ - test/dummy/app/views/layouts/mailer.html.erb
133
+ - test/dummy/app/views/layouts/mailer.text.erb
134
+ - test/dummy/bin/bundle
135
+ - test/dummy/bin/rails
136
+ - test/dummy/bin/rake
137
+ - test/dummy/bin/setup
138
+ - test/dummy/bin/update
139
+ - test/dummy/bin/yarn
140
+ - test/dummy/config.ru
141
+ - test/dummy/config/application.rb
142
+ - test/dummy/config/boot.rb
143
+ - test/dummy/config/cable.yml
144
+ - test/dummy/config/database.yml
145
+ - test/dummy/config/environment.rb
146
+ - test/dummy/config/environments/development.rb
147
+ - test/dummy/config/environments/production.rb
148
+ - test/dummy/config/environments/test.rb
149
+ - test/dummy/config/initializers/application_controller_renderer.rb
150
+ - test/dummy/config/initializers/backtrace_silencers.rb
151
+ - test/dummy/config/initializers/content_security_policy.rb
152
+ - test/dummy/config/initializers/cookies_serializer.rb
153
+ - test/dummy/config/initializers/filter_parameter_logging.rb
154
+ - test/dummy/config/initializers/inflections.rb
155
+ - test/dummy/config/initializers/linkedin_sign_in.rb
156
+ - test/dummy/config/initializers/mime_types.rb
157
+ - test/dummy/config/initializers/wrap_parameters.rb
158
+ - test/dummy/config/locales/en.yml
159
+ - test/dummy/config/puma.rb
160
+ - test/dummy/config/routes.rb
161
+ - test/dummy/config/spring.rb
162
+ - test/dummy/config/storage.yml
163
+ - test/dummy/lib/assets/.keep
164
+ - test/dummy/log/.keep
165
+ - test/dummy/package.json
166
+ - test/dummy/public/404.html
167
+ - test/dummy/public/422.html
168
+ - test/dummy/public/500.html
169
+ - test/dummy/public/apple-touch-icon-precomposed.png
170
+ - test/dummy/public/apple-touch-icon.png
171
+ - test/dummy/public/favicon.ico
172
+ - test/helpers/button_helper_test.rb
173
+ - test/key.pem
174
+ - test/models/identity_test.rb
175
+ - test/models/redirect_protector_test.rb
176
+ - test/test_helper.rb
177
+ homepage: https://github.com/genezys/linkedin_sign_in
178
+ licenses:
179
+ - MIT
180
+ metadata: {}
181
+ post_install_message:
182
+ rdoc_options: []
183
+ require_paths:
184
+ - lib
185
+ required_ruby_version: !ruby/object:Gem::Requirement
186
+ requirements:
187
+ - - ">="
188
+ - !ruby/object:Gem::Version
189
+ version: 1.9.3
190
+ required_rubygems_version: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ requirements: []
196
+ rubyforge_project:
197
+ rubygems_version: 2.7.6
198
+ signing_key:
199
+ specification_version: 4
200
+ summary: Sign in (or up) with Linkedin for Rails applications
201
+ test_files:
202
+ - test/certificate.pem
203
+ - test/controllers/authorizations_controller_test.rb
204
+ - test/controllers/callbacks_controller_test.rb
205
+ - test/dummy/.ruby-version
206
+ - test/dummy/Rakefile
207
+ - test/dummy/app/assets/config/manifest.js
208
+ - test/dummy/app/assets/images/.keep
209
+ - test/dummy/app/assets/javascripts/application.js
210
+ - test/dummy/app/assets/javascripts/cable.js
211
+ - test/dummy/app/assets/javascripts/channels/.keep
212
+ - test/dummy/app/assets/stylesheets/application.css
213
+ - test/dummy/app/channels/application_cable/channel.rb
214
+ - test/dummy/app/channels/application_cable/connection.rb
215
+ - test/dummy/app/controllers/application_controller.rb
216
+ - test/dummy/app/controllers/concerns/.keep
217
+ - test/dummy/app/helpers/application_helper.rb
218
+ - test/dummy/app/jobs/application_job.rb
219
+ - test/dummy/app/mailers/application_mailer.rb
220
+ - test/dummy/app/models/application_record.rb
221
+ - test/dummy/app/models/concerns/.keep
222
+ - test/dummy/app/views/layouts/application.html.erb
223
+ - test/dummy/app/views/layouts/mailer.html.erb
224
+ - test/dummy/app/views/layouts/mailer.text.erb
225
+ - test/dummy/bin/bundle
226
+ - test/dummy/bin/rails
227
+ - test/dummy/bin/rake
228
+ - test/dummy/bin/setup
229
+ - test/dummy/bin/update
230
+ - test/dummy/bin/yarn
231
+ - test/dummy/config.ru
232
+ - test/dummy/config/application.rb
233
+ - test/dummy/config/boot.rb
234
+ - test/dummy/config/cable.yml
235
+ - test/dummy/config/database.yml
236
+ - test/dummy/config/environment.rb
237
+ - test/dummy/config/environments/development.rb
238
+ - test/dummy/config/environments/production.rb
239
+ - test/dummy/config/environments/test.rb
240
+ - test/dummy/config/initializers/application_controller_renderer.rb
241
+ - test/dummy/config/initializers/backtrace_silencers.rb
242
+ - test/dummy/config/initializers/content_security_policy.rb
243
+ - test/dummy/config/initializers/cookies_serializer.rb
244
+ - test/dummy/config/initializers/filter_parameter_logging.rb
245
+ - test/dummy/config/initializers/inflections.rb
246
+ - test/dummy/config/initializers/linkedin_sign_in.rb
247
+ - test/dummy/config/initializers/mime_types.rb
248
+ - test/dummy/config/initializers/wrap_parameters.rb
249
+ - test/dummy/config/locales/en.yml
250
+ - test/dummy/config/puma.rb
251
+ - test/dummy/config/routes.rb
252
+ - test/dummy/config/spring.rb
253
+ - test/dummy/config/storage.yml
254
+ - test/dummy/lib/assets/.keep
255
+ - test/dummy/log/.keep
256
+ - test/dummy/package.json
257
+ - test/dummy/public/404.html
258
+ - test/dummy/public/422.html
259
+ - test/dummy/public/500.html
260
+ - test/dummy/public/apple-touch-icon-precomposed.png
261
+ - test/dummy/public/apple-touch-icon.png
262
+ - test/dummy/public/favicon.ico
263
+ - test/helpers/button_helper_test.rb
264
+ - test/key.pem
265
+ - test/models/identity_test.rb
266
+ - test/models/redirect_protector_test.rb
267
+ - test/test_helper.rb