mumukit-login 0.1.0 → 1.0.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 +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
|