artsy-auth 0.1.5 → 0.2.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
- SHA1:
3
- metadata.gz: 8ada8281ebccc37c590fadc4437297c9532f5b53
4
- data.tar.gz: 268546c0ec15eba63341d8d0d4aabecee9087b8a
2
+ SHA256:
3
+ metadata.gz: 3ba60006edb2e37220a6ba341de9ac26e26e3b4bcec129775a7f08552d40627a
4
+ data.tar.gz: da6c9ececb084317e0a8745a128e1c0a24ef3c680fb79b3b086c8c1830ff6d5d
5
5
  SHA512:
6
- metadata.gz: 3c08d5cdbec65dc6a8619ce954be786fe7ec7da2c12952141ed60fc9e721432abdc73912f024d19e2f75a3f3781ff9521f54d5a1e0033aabbef3a7d014cc6a06
7
- data.tar.gz: f1e554ba44a8262bbcb33273986a7ec537bb0666956a7068ca5d8fe2cfa1241b267e59e515c910bad2753b0cc3b7cb99d15527decc83555aa48b6da589e55fec
6
+ metadata.gz: cb51d56f276740c9268942c544452e2d82f5b07781a1e471a49ae05df13366fe3095c9e6fc926bf196e1287c249af9e89f6fd27f5b86199f4d7db766a393807c
7
+ data.tar.gz: cab76d066dddfd593a6670bdc56921d744c97173728e156304bbd5f209534b055eb24791c0dfeee6f19372b5ecc738d5785674906e9926461039b5c317649ddb
data/README.md CHANGED
@@ -1,9 +1,9 @@
1
- # Artsy Authentication [![Build Status](https://travis-ci.org/artsy/artsy-auth.svg?branch=master)](https://travis-ci.org/artsy/artsy-auth)
1
+ # Artsy Authentication [![CircleCI](https://circleci.com/gh/artsy/artsy-auth/tree/master.svg?style=shield)](https://circleci.com/gh/artsy/artsy-auth/tree/master)
2
2
 
3
3
  Ruby Gem for adding Artsy's omniauth based authentication to your app.
4
4
 
5
5
  ## Installation
6
- Add following line to your Gemfile
6
+ Add following line to your Gemfile.
7
7
 
8
8
  ```
9
9
  gem 'artsy-auth'
@@ -13,14 +13,13 @@ gem 'artsy-auth'
13
13
  Artsy Auth is based on [`Rails::Engine`](http://api.rubyonrails.org/classes/Rails/Engine.html).
14
14
 
15
15
  ### Configure
16
- Add `artsy_auth.rb` under `config/initializers`. We need to configure `ArtsyAuth` to use proper Artsy `application_id` and `application_secret`. Also it needs `artsy_url` which will be used to redirect `sign_out` to proper location, and `artsy_api_url` for login.
16
+ Add `artsy_auth.rb` under `config/initializers`. We need to configure `ArtsyAuth` to use proper Artsy `application_id` and `application_secret`. Also it needs `artsy_api_url` which will be used to redirect `sign_in` and `sign_out` to proper location.
17
17
  `callback_url` defines after a successful omniauth handshake, where should we get redirected to.
18
18
 
19
19
  ```ruby
20
- # config/initalizers/artsy_auth.rb
20
+ # config/initializers/artsy_auth.rb
21
21
  ArtsyAuth.configure do |config|
22
22
  config.artsy_api_url = 'https://stagingapi.artsy.net' # required
23
- config.artsy_url = 'https://staging.artsy.net' # required
24
23
  config.callback_url = '/admin' # optional
25
24
  config.application_id = '321322131' # required
26
25
  config.application_secret = '123123asdasd' # required
@@ -33,26 +32,34 @@ You also need to mount session related endpoints to your app, in your `config/ro
33
32
  mount ArtsyAuth::Engine => '/'
34
33
  ```
35
34
 
36
- In order to force authentication, you need to change your `ApplicationController` to inherit from ` ArtsyAuth::ApplicationController`, you also need to add (override) `authorize?` method there which gets a token and in your app you need to define how do you authorize that token, for example:
35
+ In order to force authentication, you need to include 'ArtsyAuth::Authenticated' in your controller, you also need to add (override) `authorized_artsy_token?` method there which gets a token and in your app you need to define how do you authorize that token, for example:
37
36
  ```ruby
38
- class ApplicationController < ArtsyAuth::ApplicationController
37
+ class ApplicationController < ActionController::Base
39
38
  # Prevent CSRF attacks by raising an exception.
40
39
  protect_from_forgery with: :exception
41
40
 
42
- # override applicaiton to decode token and allow only users with `tester` role
43
- def authorized?(token)
41
+ # This will make sure calls to this controller have proper session data
42
+ # if they don't it will redirect them to oauth url and once authenticated
43
+ # on successful authentication we'll call authorized_artsy_token
44
+ include ArtsyAuth::Authenticated
45
+
46
+ # override application to decode token and allow only users with `tester` role
47
+ def authorized_artsy_token?(token)
44
48
  decoded_token, _headers = JWT.decode(token, 'some-secret')
45
49
  decoded_token['roles'].include? 'tester'
46
50
  end
47
51
  end
48
52
  ```
49
- Note that this will add authentication to all of your controllers, if you want to skip Artsy's authentication for specific controller you can skip it in your controller by adding:
50
- ```ruby
51
- class TestController
52
- skip_before_action :require_artsy_authentication
53
- end
54
- ```
55
53
 
54
+ # Decoding the JWT
55
+
56
+ The JWT is signed using a different secret from the client secret for OAuth. For Artsy engineers: get it from the `internal_secret` on your corresponding `ClientApplication` model.
57
+
58
+ The JWT contains user information that you can get from an API call to get the `me` user account, you can work around not having the secret by making a request for that against the API.
59
+
60
+
61
+ # Update From Version < 0.1.7
62
+ In previous versions you would change your `ApplicationController` to inherit from `ArtsyAuth::ApplicationController`, with versions > `0.1.7` you need to `include ArtsyAuth::Authenticated` like the example above.
56
63
 
57
64
  # Contributing
58
65
 
@@ -0,0 +1,20 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>Artsy Auth</title>
6
+ </head>
7
+ <body>
8
+ <p id="placeholder" style="visibility: hidden; text-align: center;">Authenticating...</p>
9
+ <div style="display: none;">
10
+ <%= button_to 'Log in via Artsy', '/auth/artsy', form: { id: 'artsy-auth-login-form' } %>
11
+ </div>
12
+
13
+ <script>
14
+ document.getElementById("artsy-auth-login-form").submit();
15
+ setTimeout(function() {
16
+ document.getElementById("placeholder").style.visibility = "visible";
17
+ }, 1000);
18
+ </script>
19
+ </body>
20
+ </html>
data/config/routes.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  ArtsyAuth::Engine.routes.draw do
2
2
  get '/auth/:provider/callback', to: 'sessions#create'
3
+ get '/auth/:provider/new', to: 'sessions#new'
3
4
  get '/sign_out', to: 'sessions#destroy'
4
5
  end
data/lib/artsy-auth.rb CHANGED
@@ -1,8 +1,9 @@
1
+ require 'artsy-auth/authenticated'
1
2
  require 'artsy-auth/config'
2
3
  require 'artsy-auth/engine'
3
- require 'artsy-auth/version'
4
- require 'artsy-auth/application_controller'
5
4
  require 'artsy-auth/session_controller'
5
+ require 'artsy-auth/version'
6
+ require 'omniauth/rails_csrf_protection'
6
7
 
7
8
  module ArtsyAuth
8
9
  end
@@ -1,10 +1,16 @@
1
1
  module ArtsyAuth
2
- class ApplicationController < ActionController::Base
3
- before_action :require_artsy_authentication
2
+ module Authenticated
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ before_action :require_artsy_authentication
7
+ end
8
+
9
+ private
4
10
 
5
11
  def require_artsy_authentication
6
12
  if session[:access_token]
7
- head(:forbidden) unless authorized? session[:access_token]
13
+ head(:forbidden) unless authorized_artsy_token? session[:access_token]
8
14
  else
9
15
  clear_session_and_reauth! unless session[:access_token]
10
16
  end
@@ -13,10 +19,10 @@ module ArtsyAuth
13
19
  def clear_session_and_reauth!
14
20
  reset_session
15
21
  session[:redirect_to] = request.url
16
- redirect_to '/auth/artsy'
22
+ redirect_to '/auth/artsy/new'
17
23
  end
18
24
 
19
- def authorized?(token)
25
+ def authorized_artsy_token?(token)
20
26
  raise NotImplementedError
21
27
  end
22
28
  end
@@ -3,14 +3,12 @@ module ArtsyAuth
3
3
  extend self
4
4
 
5
5
  attr_accessor :artsy_api_url
6
- attr_accessor :artsy_url
7
6
  attr_accessor :application_id
8
7
  attr_accessor :application_secret
9
8
  attr_accessor :callback_url
10
9
 
11
10
  def reset
12
11
  self.artsy_api_url = nil
13
- self.artsy_url = nil
14
12
  self.callback_url = '/'
15
13
  self.application_id = nil
16
14
  self.application_secret = nil
@@ -1,6 +1,7 @@
1
1
  module ArtsyAuth
2
- class SessionsController < ApplicationController
3
- skip_before_action :require_artsy_authentication
2
+ class SessionsController < ActionController::Base
3
+ def new; end
4
+
4
5
  def create
5
6
  session[:user_id] = auth_hash['uid']
6
7
  session[:email] = auth_hash['info']['raw_info']['email']
@@ -10,7 +11,7 @@ module ArtsyAuth
10
11
 
11
12
  def destroy
12
13
  reset_session
13
- redirect_to "#{ArtsyAuth.config.artsy_url}/users/sign_out"
14
+ redirect_to "#{ArtsyAuth.config.artsy_api_url}/users/sign_out"
14
15
  end
15
16
 
16
17
  protected
@@ -19,4 +20,4 @@ module ArtsyAuth
19
20
  request.env['omniauth.auth']
20
21
  end
21
22
  end
22
- end
23
+ end
@@ -1,3 +1,3 @@
1
1
  module ArtsyAuth
2
- VERSION = '0.1.5'.freeze
2
+ VERSION = '0.2.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: artsy-auth
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Artsy
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-04-03 00:00:00.000000000 Z
11
+ date: 2021-08-02 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: omniauth-artsy
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 0.4.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 0.4.0
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: omniauth-oauth2
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -25,19 +39,19 @@ dependencies:
25
39
  - !ruby/object:Gem::Version
26
40
  version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
- name: omniauth-artsy
42
+ name: omniauth-rails_csrf_protection
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
45
  - - ">="
32
46
  - !ruby/object:Gem::Version
33
- version: 0.2.2
47
+ version: 1.0.0
34
48
  type: :runtime
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
52
  - - ">="
39
53
  - !ruby/object:Gem::Version
40
- version: 0.2.2
54
+ version: 1.0.0
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rails
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -53,7 +67,21 @@ dependencies:
53
67
  - !ruby/object:Gem::Version
54
68
  version: 4.2.0
55
69
  - !ruby/object:Gem::Dependency
56
- name: rspec
70
+ name: capybara
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: guard-rubocop
57
85
  requirement: !ruby/object:Gem::Requirement
58
86
  requirements:
59
87
  - - ">="
@@ -80,6 +108,20 @@ dependencies:
80
108
  - - ">="
81
109
  - !ruby/object:Gem::Version
82
110
  version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rspec
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
83
125
  - !ruby/object:Gem::Dependency
84
126
  name: rspec-rails
85
127
  requirement: !ruby/object:Gem::Requirement
@@ -109,7 +151,21 @@ dependencies:
109
151
  - !ruby/object:Gem::Version
110
152
  version: '0'
111
153
  - !ruby/object:Gem::Dependency
112
- name: guard-rubocop
154
+ name: selenium-webdriver
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: webdrivers
113
169
  requirement: !ruby/object:Gem::Requirement
114
170
  requirements:
115
171
  - - ">="
@@ -131,18 +187,19 @@ extra_rdoc_files: []
131
187
  files:
132
188
  - README.md
133
189
  - Rakefile
190
+ - app/views/artsy_auth/sessions/new.erb
134
191
  - config/initializers/omniauth.rb
135
192
  - config/routes.rb
136
193
  - lib/artsy-auth.rb
137
- - lib/artsy-auth/application_controller.rb
194
+ - lib/artsy-auth/authenticated.rb
138
195
  - lib/artsy-auth/config.rb
139
196
  - lib/artsy-auth/engine.rb
140
197
  - lib/artsy-auth/session_controller.rb
141
198
  - lib/artsy-auth/version.rb
142
- homepage: http://artsy.net
199
+ homepage: https://www.artsy.net
143
200
  licenses: []
144
201
  metadata: {}
145
- post_install_message:
202
+ post_install_message:
146
203
  rdoc_options: []
147
204
  require_paths:
148
205
  - lib
@@ -157,10 +214,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
157
214
  - !ruby/object:Gem::Version
158
215
  version: '0'
159
216
  requirements: []
160
- rubyforge_project:
161
- rubygems_version: 2.4.8
162
- signing_key:
217
+ rubygems_version: 3.2.23
218
+ signing_key:
163
219
  specification_version: 4
164
- summary: ArtsyAuth is a rails based gem that adds Artsy authentication with authorization
220
+ summary: ArtsyAuth is a Rails engine that adds Artsy authentication with authorization
165
221
  to your app.
166
222
  test_files: []