artsy-auth 0.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 1cf1e6c6b3b49a4acdcd25dccd98ce3ae28a04c7
4
+ data.tar.gz: 04708d532731280d1043d3613c775351a027f699
5
+ SHA512:
6
+ metadata.gz: 89a733670ad984119f5a7d03ff96d22ff9fbe15c4f313fcdf3a3623e5d6463fabce0e6aa611528310fcea0786d22b76387eb3153abd0463adcbb4e92f22d73f8
7
+ data.tar.gz: 87b350bdbb4270269baebe4d50ae9fc7ec63a3e2baebfd3baee6d6e78454d6d3fc57beae4cd472fd8d6c3b059b390216ca8ddbd9b2f2265f9711713f145e61e9
data/README.md ADDED
@@ -0,0 +1,59 @@
1
+ # Artsy Authentication
2
+
3
+ Ruby Gem for adding Artsy's omniauth based authentication to your app.
4
+
5
+ ## Installation
6
+ Add following line to your Gemfile
7
+
8
+ ```
9
+ gem 'artsy-auth'
10
+ ```
11
+
12
+ ## Usage
13
+ Artsy Auth is based on [`Rails::Engine`](http://api.rubyonrails.org/classes/Rails/Engine.html).
14
+
15
+ ### Configure
16
+ Add `artsy_auth.rb` under `config/initializer`. 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.
17
+ `callback_url` defines after a successful omniauth handshake, where should we get redirected to.
18
+
19
+ ```ruby
20
+ # config/initalizers/artsy_auth.rb
21
+ ArtsyAuth.config.artsy_url = 'https://stagingapi.artsy.net'
22
+ ArtsyAuth.config.callback_url = '/admin'
23
+ ArtsyAuth.config.application_id = '321322131'
24
+ ArtsyAuth.config.application_secret = '123123asdasd'
25
+ ```
26
+
27
+ You also need to mount session related endpoints to your app, in your `config/routes.rb`. Add following line to your current routes.
28
+ ```ruby
29
+ # config/routes.rb
30
+ mount ArtsyAuth::Engine => '/'
31
+ ```
32
+
33
+ In order to force authenticaiton, 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:
34
+ ```ruby
35
+ class ApplicationController < ArtsyAuth::ApplicationController
36
+ # Prevent CSRF attacks by raising an exception.
37
+ protect_from_forgery with: :exception
38
+
39
+ # override applicaiton to decode token and allow only users with `tester` role
40
+ def authorized?(token)
41
+ decoded_token, _headers = JWT.decode(token, 'some-secret')
42
+ decoded_token['roles'].include? 'tester'
43
+ end
44
+ end
45
+ ```
46
+ Note that this will add authenticaiton 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:
47
+ ```ruby
48
+ class TestController
49
+ skip_before_action :require_artsy_authentication
50
+ end
51
+ ```
52
+
53
+
54
+ # Contributing
55
+
56
+ * Fork the project.
57
+ * Make your feature addition or bug fix with tests.
58
+ * Update CHANGELOG.
59
+ * Send a pull request. Bonus points for topic branches.
data/Rakefile ADDED
@@ -0,0 +1,12 @@
1
+ require 'rubygems'
2
+ require 'bundler/gem_tasks'
3
+ Bundler.setup(:default, :development)
4
+
5
+ require 'rspec/core'
6
+ require 'rspec/core/rake_task'
7
+
8
+ RSpec::Core::RakeTask.new(:spec) do |spec|
9
+ spec.pattern = FileList['spec/**/*_spec.rb']
10
+ end
11
+
12
+ task :default => :spec
@@ -0,0 +1,3 @@
1
+ ArtsyAuth::Engine.middleware.use OmniAuth::Builder do
2
+ provider :artsy, ArtsyAuth.config.application_id, ArtsyAuth.config.application_secret
3
+ end
data/config/routes.rb ADDED
@@ -0,0 +1,4 @@
1
+ ArtsyAuth::Engine.routes.draw do
2
+ get '/auth/:provider/callback', to: 'sessions#create'
3
+ get '/sign_out', to: 'sessions#destroy'
4
+ end
@@ -0,0 +1,23 @@
1
+ module ArtsyAuth
2
+ class ApplicationController < ActionController::Base
3
+ before_action :require_artsy_authentication
4
+
5
+ def require_artsy_authentication
6
+ if session[:access_token]
7
+ head(:forbidden) unless authorized? session[:access_token]
8
+ else
9
+ clear_session_and_reauth! unless session[:access_token]
10
+ end
11
+ end
12
+
13
+ def clear_session_and_reauth!
14
+ reset_session
15
+ session[:redirect_to] = request.url
16
+ redirect_to '/auth/artsy'
17
+ end
18
+
19
+ def authorized?(token)
20
+ raise NotImplementedError
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,10 @@
1
+ module ArtsyAuth
2
+ mattr_accessor :config
3
+ end
4
+
5
+ ArtsyAuth.config = OpenStruct.new(
6
+ artsy_url: ENV['artsy_url'] || 'http://localhost:3000',
7
+ callback_url: ENV['callback_url'] || 'http://localhost:3000/',
8
+ application_id: ENV['application_id'],
9
+ application_secret: ENV['application_secret']
10
+ )
@@ -0,0 +1,8 @@
1
+ require 'omniauth'
2
+ require 'omniauth-artsy'
3
+
4
+ module ArtsyAuth
5
+ class Engine < ::Rails::Engine
6
+ isolate_namespace ArtsyAuth
7
+ end
8
+ end
@@ -0,0 +1,22 @@
1
+ module ArtsyAuth
2
+ class SessionsController < ApplicationController
3
+ skip_before_action :require_artsy_authentication
4
+ def create
5
+ session[:user_id] = auth_hash['uid']
6
+ session[:email] = auth_hash['info']['raw_info']['email']
7
+ session[:access_token] = auth_hash['credentials']['token']
8
+ redirect_to "#{ArtsyAuth.config[:callback_url]}"
9
+ end
10
+
11
+ def destroy
12
+ reset_session
13
+ redirect_to "#{ArtsyAuth.config[:artsy_url]}/users/sign_out"
14
+ end
15
+
16
+ protected
17
+
18
+ def auth_hash
19
+ request.env['omniauth.auth']
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,3 @@
1
+ module ArtsyAuth
2
+ VERSION = '0.1.0'.freeze
3
+ end
data/lib/artsy-auth.rb ADDED
@@ -0,0 +1,8 @@
1
+ require 'artsy-auth/config'
2
+ require 'artsy-auth/engine'
3
+ require 'artsy-auth/version'
4
+ require 'artsy-auth/application_controller'
5
+ require 'artsy-auth/session_controller'
6
+
7
+ module ArtsyAuth
8
+ end
metadata ADDED
@@ -0,0 +1,166 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: artsy-auth
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Artsy
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-03-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: omniauth-oauth2
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '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'
27
+ - !ruby/object:Gem::Dependency
28
+ name: omniauth-artsy
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rails
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 4.2.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 4.2.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry
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: rspec-rails
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubocop
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: guard-rubocop
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'
125
+ description: See summary.
126
+ email:
127
+ - it@artsymail.com
128
+ executables: []
129
+ extensions: []
130
+ extra_rdoc_files: []
131
+ files:
132
+ - README.md
133
+ - Rakefile
134
+ - config/initializers/omniauth.rb
135
+ - config/routes.rb
136
+ - lib/artsy-auth.rb
137
+ - lib/artsy-auth/application_controller.rb
138
+ - lib/artsy-auth/config.rb
139
+ - lib/artsy-auth/engine.rb
140
+ - lib/artsy-auth/session_controller.rb
141
+ - lib/artsy-auth/version.rb
142
+ homepage: http://artsy.net
143
+ licenses: []
144
+ metadata: {}
145
+ post_install_message:
146
+ rdoc_options: []
147
+ require_paths:
148
+ - lib
149
+ required_ruby_version: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - ">="
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ required_rubygems_version: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
159
+ requirements: []
160
+ rubyforge_project:
161
+ rubygems_version: 2.4.8
162
+ signing_key:
163
+ specification_version: 4
164
+ summary: ArtsyAuth is a rails based gem that adds Artsy authentication with authorization
165
+ to your app.
166
+ test_files: []