mumukit-login 0.1.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/mumukit/login.rb +1 -0
- data/lib/mumukit/login/controller.rb +12 -4
- data/lib/mumukit/login/current_user_store.rb +44 -0
- data/lib/mumukit/login/framework.rb +2 -1
- data/lib/mumukit/login/framework/rails.rb +11 -4
- data/lib/mumukit/login/framework/sinatra.rb +39 -0
- data/lib/mumukit/login/helpers.rb +3 -1
- data/lib/mumukit/login/helpers/authentication_helpers.rb +1 -1
- data/lib/mumukit/login/helpers/authorization_helpers.rb +15 -0
- data/lib/mumukit/login/helpers/login_controller_helpers.rb +18 -12
- data/lib/mumukit/login/helpers/user_permissions_helpers.rb +13 -0
- data/lib/mumukit/login/origin_redirector.rb +1 -1
- data/lib/mumukit/login/version.rb +1 -1
- metadata +5 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e9469b5574895337bee449aca6ffb6a5be57ee70
|
4
|
+
data.tar.gz: f2bc55e4e42e7c7d0b8925400b8ceb16387acd1b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cc7eaf5d94e79e2bb5a1f76659507e9e43bcb44c9b35536e1c1ae340a6503d025b267b3023168b1273a05c92b3d83ff434052d1b6d364203e97236c207808c59
|
7
|
+
data.tar.gz: 8e7c0fdb09272ddff505c397fc37b65ebffa1e1d45d390970a88a88ca21f9f66c0f8ac3e5c752cf67c32cb87e4184e09631e4d364afa22fe49301f01b8169ddf
|
data/lib/mumukit/login.rb
CHANGED
@@ -4,6 +4,14 @@ class Mumukit::Login::Controller
|
|
4
4
|
@native = native
|
5
5
|
end
|
6
6
|
|
7
|
+
def current_user_store
|
8
|
+
if env['HTTP_AUTHORIZATION']
|
9
|
+
Mumukit::Login::JWTCurrentUserStore.new self
|
10
|
+
else
|
11
|
+
Mumukit::Login::SessionCurrentUserStore.new self
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
7
15
|
def env
|
8
16
|
@framework.env @native
|
9
17
|
end
|
@@ -16,14 +24,14 @@ class Mumukit::Login::Controller
|
|
16
24
|
@framework.render_html!(html, @native)
|
17
25
|
end
|
18
26
|
|
19
|
-
def request
|
20
|
-
Rack::Request.new(env)
|
21
|
-
end
|
22
|
-
|
23
27
|
def url_for(path)
|
24
28
|
URI.join(request.base_url, path).to_s
|
25
29
|
end
|
26
30
|
|
31
|
+
def request
|
32
|
+
Rack::Request.new(env)
|
33
|
+
end
|
34
|
+
|
27
35
|
def session
|
28
36
|
request.session
|
29
37
|
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
class Mumukit::Login::SessionCurrentUserStore
|
2
|
+
def initialize(controller)
|
3
|
+
@controller = controller
|
4
|
+
end
|
5
|
+
|
6
|
+
def get_uid
|
7
|
+
@controller.session[:user_uid]
|
8
|
+
end
|
9
|
+
|
10
|
+
def clear!
|
11
|
+
@controller.session[:user_uid] = nil
|
12
|
+
end
|
13
|
+
|
14
|
+
def set!(uid, values)
|
15
|
+
@controller.session[:user_uid] = uid
|
16
|
+
values.each { |k, v| @controller.session[k] = v }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
class Mumukit::Login::JWTCurrentUserStore
|
21
|
+
def initialize(controller)
|
22
|
+
@controller = controller
|
23
|
+
end
|
24
|
+
|
25
|
+
def get_uid
|
26
|
+
token.uid
|
27
|
+
end
|
28
|
+
|
29
|
+
def clear!
|
30
|
+
raise 'JWT tokens are read-only'
|
31
|
+
end
|
32
|
+
|
33
|
+
def set!(*)
|
34
|
+
raise 'JWT tokens are read-only'
|
35
|
+
end
|
36
|
+
|
37
|
+
def token
|
38
|
+
@token ||= Mumukit::Auth::Token.decode_header(authorization_header).tap(&:verify_client!)
|
39
|
+
end
|
40
|
+
|
41
|
+
def authorization_header
|
42
|
+
@controller.env['HTTP_AUTHORIZATION']
|
43
|
+
end
|
44
|
+
end
|
@@ -23,16 +23,22 @@ module Mumukit::Login::Framework::Rails
|
|
23
23
|
#
|
24
24
|
def self.configure_login_routes!(rails_router)
|
25
25
|
rails_router.controller :login do
|
26
|
-
rails_router.match 'auth/:provider/callback' => :
|
27
|
-
rails_router.get 'auth/failure' => :
|
28
|
-
rails_router.get 'logout' => :
|
29
|
-
rails_router.get 'login' => :
|
26
|
+
rails_router.match 'auth/:provider/callback' => :callback_current_user, via: [:get, :post]
|
27
|
+
rails_router.get 'auth/failure' => :login_failure
|
28
|
+
rails_router.get 'logout' => :logout_current_user
|
29
|
+
rails_router.get 'login' => :login_current_user
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
33
|
def self.configure_login_controller!(controller_class)
|
34
34
|
controller_class.class_eval do
|
35
35
|
include Mumukit::Login::LoginControllerHelpers
|
36
|
+
|
37
|
+
%w(callback_current_user login_failure logout_current_user login_current_user).each do |method|
|
38
|
+
define_method method do
|
39
|
+
self.send "#{method}!"
|
40
|
+
end
|
41
|
+
end
|
36
42
|
end
|
37
43
|
end
|
38
44
|
|
@@ -44,6 +50,7 @@ module Mumukit::Login::Framework::Rails
|
|
44
50
|
Mumukit::Login.config.provider.configure_rails_forgery_protection!(controller_class)
|
45
51
|
controller_class.class_eval do
|
46
52
|
include Mumukit::Login::AuthenticationHelpers
|
53
|
+
include Mumukit::Login::AuthorizationHelpers
|
47
54
|
|
48
55
|
helper_method :current_user,
|
49
56
|
:current_user?,
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Mumukit::Login::Framework::Sinatra
|
2
|
+
|
3
|
+
def self.env(sinatra_handler)
|
4
|
+
sinatra_handler.request.env
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.redirect!(path, sinatra_handler)
|
8
|
+
sinatra_handler.redirect path
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.render_html!(content, sinatra_handler)
|
12
|
+
content
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.configure_login_routes!(sinatra_module)
|
16
|
+
sinatra_module.instance_eval do
|
17
|
+
auth_callback = proc { callback_current_user! }
|
18
|
+
get '/auth/:provider/callback', &auth_callback
|
19
|
+
post '/auth/:provider/callback', &auth_callback
|
20
|
+
get('/auth/failure') { login_failure! }
|
21
|
+
get('/logout') { logout_current_user! }
|
22
|
+
get('/login') { login_current_user! }
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
def self.configure_login_controller!(sinatra_helpers)
|
28
|
+
sinatra_helpers.instance_eval do
|
29
|
+
include Mumukit::Login::LoginControllerHelpers
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.configure_controller!(sinatra_helpers)
|
34
|
+
sinatra_helpers.instance_eval do
|
35
|
+
include Mumukit::Login::AuthenticationHelpers
|
36
|
+
include Mumukit::Login::AuthorizationHelpers
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -1,2 +1,4 @@
|
|
1
1
|
require_relative './helpers/authentication_helpers'
|
2
|
-
require_relative './helpers/
|
2
|
+
require_relative './helpers/authorization_helpers'
|
3
|
+
require_relative './helpers/login_controller_helpers'
|
4
|
+
require_relative './helpers/user_permissions_helpers'
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Mumukit::Login::AuthorizationHelpers
|
2
|
+
def authorize!(role)
|
3
|
+
if current_user?
|
4
|
+
current_user.protect! role, authorization_slug
|
5
|
+
else
|
6
|
+
authenticate!
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def has_permission?(role)
|
11
|
+
current_user.has_permission? role, authorization_slug
|
12
|
+
end
|
13
|
+
|
14
|
+
required :authorization_slug
|
15
|
+
end
|
@@ -1,31 +1,37 @@
|
|
1
1
|
module Mumukit::Login::LoginControllerHelpers
|
2
2
|
|
3
|
-
def
|
3
|
+
def login_current_user!
|
4
4
|
origin_redirector.save_location!
|
5
|
-
|
5
|
+
if current_user?
|
6
|
+
origin_redirector.redirect!
|
7
|
+
else
|
8
|
+
login_provider.request_authentication! mumukit_controller, login_settings
|
9
|
+
end
|
6
10
|
end
|
7
11
|
|
8
|
-
def
|
9
|
-
profile = Mumukit::Login::Profile.from_omniauth(env['omniauth.auth'])
|
12
|
+
def callback_current_user!
|
13
|
+
profile = Mumukit::Login::Profile.from_omniauth(mumukit_controller.env['omniauth.auth'])
|
10
14
|
user = Mumukit::Login.config.user_class.for_profile profile
|
11
|
-
|
15
|
+
save_current_user_session! user
|
12
16
|
origin_redirector.redirect!
|
13
17
|
end
|
14
18
|
|
15
|
-
def
|
16
|
-
|
19
|
+
def logout_current_user!
|
20
|
+
destroy_current_user_session!
|
17
21
|
mumukit_controller.redirect! login_provider.logout_redirection_path
|
18
22
|
end
|
19
23
|
|
20
24
|
private
|
21
25
|
|
22
26
|
# default
|
23
|
-
def
|
24
|
-
mumukit_controller.
|
27
|
+
def destroy_current_user_session!
|
28
|
+
mumukit_controller.current_user_store.clear!
|
25
29
|
end
|
26
30
|
|
27
31
|
# default
|
28
|
-
def
|
29
|
-
mumukit_controller.
|
32
|
+
def save_current_user_session!(user)
|
33
|
+
mumukit_controller.current_user_store.set! user.uid,
|
34
|
+
user_name: user.name,
|
35
|
+
user_image_url: user.image_url
|
30
36
|
end
|
31
|
-
end
|
37
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Mumukit::Login::UserPermissionsHelpers
|
2
|
+
delegate :has_role?,
|
3
|
+
:add_permission!,
|
4
|
+
:remove_permission!,
|
5
|
+
:has_permission?,
|
6
|
+
:has_permission_delegation?,
|
7
|
+
:protect!,
|
8
|
+
:protect_delegation!, to: :permissions
|
9
|
+
|
10
|
+
def merge_permissions!(new_permissions)
|
11
|
+
self.permissions = permissions.merge(new_permissions)
|
12
|
+
end
|
13
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mumukit-login
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Franco Leonardo Bulgarelli
|
@@ -173,12 +173,16 @@ extra_rdoc_files: []
|
|
173
173
|
files:
|
174
174
|
- lib/mumukit/login.rb
|
175
175
|
- lib/mumukit/login/controller.rb
|
176
|
+
- lib/mumukit/login/current_user_store.rb
|
176
177
|
- lib/mumukit/login/form.rb
|
177
178
|
- lib/mumukit/login/framework.rb
|
178
179
|
- lib/mumukit/login/framework/rails.rb
|
180
|
+
- lib/mumukit/login/framework/sinatra.rb
|
179
181
|
- lib/mumukit/login/helpers.rb
|
180
182
|
- lib/mumukit/login/helpers/authentication_helpers.rb
|
183
|
+
- lib/mumukit/login/helpers/authorization_helpers.rb
|
181
184
|
- lib/mumukit/login/helpers/login_controller_helpers.rb
|
185
|
+
- lib/mumukit/login/helpers/user_permissions_helpers.rb
|
182
186
|
- lib/mumukit/login/origin_redirector.rb
|
183
187
|
- lib/mumukit/login/profile.rb
|
184
188
|
- lib/mumukit/login/provider.rb
|