mumukit-auth 1.0.2 → 2.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/auth.rb +4 -2
- data/lib/mumukit/auth/array.rb +6 -0
- data/lib/mumukit/auth/exceptions.rb +0 -3
- data/lib/mumukit/auth/grant.rb +27 -31
- data/lib/mumukit/auth/permissions.rb +39 -43
- data/lib/mumukit/auth/roles.rb +12 -0
- data/lib/mumukit/auth/scope.rb +52 -0
- data/lib/mumukit/auth/slug.rb +71 -0
- data/lib/mumukit/auth/token.rb +11 -33
- data/lib/mumukit/auth/version.rb +1 -1
- metadata +6 -18
- data/lib/mumukit/auth/metadata.rb +0 -70
- data/lib/mumukit/auth/user.rb +0 -78
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c6c6bdaf752ff0631203b9b75b9f6355e8221072
|
4
|
+
data.tar.gz: 39560f938b75e9cf21bf68332e84f7414c9d31c7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bfeede5ef70098672b9d5e0b9c9ea143bec35b238e4ebbdd783832d7c6adee6b487d986fd4453cb45e219c5117b35ed9f968ee85fd44f534286fa4648511876e
|
7
|
+
data.tar.gz: 1b8e40683bf497d548b6a3b1bb906a46092a0e30aa479906eda25e33c850947860e324c426ec56552965716d029590b1632bae8be789ff56c558c7d185a747db
|
data/lib/mumukit/auth.rb
CHANGED
@@ -1,13 +1,15 @@
|
|
1
1
|
require 'active_support/all'
|
2
2
|
require 'mumukit/core'
|
3
3
|
|
4
|
+
require_relative './auth/array'
|
5
|
+
require_relative './auth/roles'
|
6
|
+
require_relative './auth/slug'
|
4
7
|
require_relative './auth/version'
|
5
8
|
require_relative './auth/exceptions'
|
6
9
|
require_relative './auth/grant'
|
7
|
-
require_relative './auth/metadata'
|
8
10
|
require_relative './auth/token'
|
11
|
+
require_relative './auth/scope'
|
9
12
|
require_relative './auth/permissions'
|
10
|
-
require_relative './auth/user'
|
11
13
|
|
12
14
|
require 'ostruct'
|
13
15
|
|
data/lib/mumukit/auth/grant.rb
CHANGED
@@ -1,15 +1,22 @@
|
|
1
|
+
class String
|
2
|
+
def to_mumukit_grant
|
3
|
+
Mumukit::Auth::Grant.parse self
|
4
|
+
end
|
5
|
+
end
|
6
|
+
|
7
|
+
|
1
8
|
module Mumukit::Auth
|
2
9
|
class Grant
|
3
10
|
def as_json(options={})
|
4
11
|
to_s
|
5
12
|
end
|
6
13
|
|
7
|
-
def
|
8
|
-
|
14
|
+
def to_mumukit_grant
|
15
|
+
self
|
9
16
|
end
|
10
17
|
|
11
|
-
def
|
12
|
-
|
18
|
+
def ==(other)
|
19
|
+
other.class == self.class && to_s == other.to_s
|
13
20
|
end
|
14
21
|
|
15
22
|
def self.parse(pattern)
|
@@ -17,19 +24,15 @@ module Mumukit::Auth
|
|
17
24
|
when '*' then
|
18
25
|
AllGrant.new
|
19
26
|
when /(.*)\/\*/
|
20
|
-
|
27
|
+
FirstPartGrant.new($1)
|
21
28
|
else
|
22
|
-
SingleGrant.new(pattern)
|
29
|
+
SingleGrant.new(Slug.parse pattern)
|
23
30
|
end
|
24
31
|
end
|
25
32
|
end
|
26
33
|
|
27
34
|
class AllGrant < Grant
|
28
|
-
def allows?(
|
29
|
-
true
|
30
|
-
end
|
31
|
-
|
32
|
-
def access?(organization)
|
35
|
+
def allows?(_resource_slug)
|
33
36
|
true
|
34
37
|
end
|
35
38
|
|
@@ -38,39 +41,32 @@ module Mumukit::Auth
|
|
38
41
|
end
|
39
42
|
end
|
40
43
|
|
41
|
-
class
|
42
|
-
def initialize(
|
43
|
-
@
|
44
|
-
end
|
45
|
-
|
46
|
-
def allows?(slug)
|
47
|
-
@slug == slug
|
44
|
+
class FirstPartGrant < Grant
|
45
|
+
def initialize(first)
|
46
|
+
@first = first
|
48
47
|
end
|
49
48
|
|
50
|
-
def
|
51
|
-
|
49
|
+
def allows?(resource_slug)
|
50
|
+
resource_slug.to_mumukit_slug.match_first @first
|
52
51
|
end
|
53
52
|
|
54
53
|
def to_s
|
55
|
-
@
|
54
|
+
"#{@first}/*"
|
56
55
|
end
|
57
56
|
end
|
58
57
|
|
59
|
-
class
|
60
|
-
def initialize(
|
61
|
-
@
|
62
|
-
end
|
63
|
-
|
64
|
-
def allows?(slug)
|
65
|
-
/^#{@org}\/.*/.matches? slug
|
58
|
+
class SingleGrant < Grant
|
59
|
+
def initialize(slug)
|
60
|
+
@slug = slug
|
66
61
|
end
|
67
62
|
|
68
|
-
def
|
69
|
-
|
63
|
+
def allows?(resource_slug)
|
64
|
+
resource_slug = resource_slug.to_mumukit_slug
|
65
|
+
resource_slug.match_first(@slug.first) && resource_slug.match_second(@slug.second)
|
70
66
|
end
|
71
67
|
|
72
68
|
def to_s
|
73
|
-
|
69
|
+
@slug.to_s
|
74
70
|
end
|
75
71
|
end
|
76
72
|
end
|
@@ -1,58 +1,54 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
class Mumukit::Auth::Permissions
|
2
|
+
include Mumukit::Auth::Roles
|
3
3
|
|
4
|
-
|
5
|
-
@grants = grants
|
6
|
-
end
|
4
|
+
attr_accessor :scopes
|
7
5
|
|
8
|
-
|
9
|
-
|
10
|
-
end
|
6
|
+
def initialize(scopes={})
|
7
|
+
raise 'invalid scopes' if scopes.any? { |key, value| value.class != Mumukit::Auth::Scope }
|
11
8
|
|
12
|
-
|
13
|
-
|
14
|
-
end
|
15
|
-
|
16
|
-
def access?(organization)
|
17
|
-
any_grant? { |grant| grant.access? organization }
|
18
|
-
end
|
9
|
+
@scopes = scopes
|
10
|
+
end
|
19
11
|
|
20
|
-
|
21
|
-
|
22
|
-
|
12
|
+
def has_permission?(role, resource_slug)
|
13
|
+
!!scope_for(role)&.allows?(resource_slug)
|
14
|
+
end
|
23
15
|
|
24
|
-
|
25
|
-
|
26
|
-
|
16
|
+
def has_role?(role)
|
17
|
+
scopes[role].present?
|
18
|
+
end
|
27
19
|
|
28
|
-
|
29
|
-
|
30
|
-
|
20
|
+
def scope_for(role)
|
21
|
+
self.scopes[role]
|
22
|
+
end
|
31
23
|
|
32
|
-
|
33
|
-
|
34
|
-
|
24
|
+
def add_permission!(role, *grants)
|
25
|
+
self.scopes[role] ||= Mumukit::Auth::Scope.new
|
26
|
+
scope_for(role)&.add_grant! *grants
|
27
|
+
end
|
35
28
|
|
36
|
-
|
37
|
-
|
38
|
-
|
29
|
+
def remove_permission!(role, grant)
|
30
|
+
scope_for(role)&.remove_grant!(grant)
|
31
|
+
end
|
39
32
|
|
40
|
-
|
41
|
-
|
42
|
-
|
33
|
+
def update_permission!(role, old_grant, new_grant)
|
34
|
+
remove_permission! role, old_grant
|
35
|
+
add_permission! role, new_grant
|
36
|
+
end
|
43
37
|
|
44
|
-
|
45
|
-
|
46
|
-
|
38
|
+
def as_json(options={})
|
39
|
+
scopes.as_json(options)
|
40
|
+
end
|
47
41
|
|
48
|
-
|
42
|
+
def self.parse(hash)
|
43
|
+
new(Hash[hash.map { |role, grants| [role, Mumukit::Auth::Scope.parse(grants)] }])
|
44
|
+
end
|
49
45
|
|
50
|
-
|
51
|
-
|
52
|
-
|
46
|
+
def self.load(json)
|
47
|
+
parse(JSON.parse(json))
|
48
|
+
end
|
53
49
|
|
54
|
-
|
55
|
-
|
56
|
-
end
|
50
|
+
def self.dump(user)
|
51
|
+
user.to_json
|
57
52
|
end
|
53
|
+
|
58
54
|
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module Mumukit::Auth
|
2
|
+
class Scope
|
3
|
+
attr_accessor :grants
|
4
|
+
|
5
|
+
def initialize(grants=[])
|
6
|
+
@grants = grants
|
7
|
+
end
|
8
|
+
|
9
|
+
def protect!(resource_slug)
|
10
|
+
raise Mumukit::Auth::UnauthorizedAccessError.new(unauthorized_message(resource_slug)) unless allows?(resource_slug)
|
11
|
+
end
|
12
|
+
|
13
|
+
def allows?(resource_slug)
|
14
|
+
any_grant? { |grant| grant.allows? resource_slug }
|
15
|
+
end
|
16
|
+
|
17
|
+
def add_grant!(*grants)
|
18
|
+
self.grants.push *grants.map(&:to_mumukit_grant)
|
19
|
+
end
|
20
|
+
|
21
|
+
def remove_grant!(grant)
|
22
|
+
grant = grant.to_mumukit_grant
|
23
|
+
self.grants.delete(grant)
|
24
|
+
end
|
25
|
+
|
26
|
+
def to_s
|
27
|
+
grants.map(&:to_s).join(':')
|
28
|
+
end
|
29
|
+
|
30
|
+
def present?
|
31
|
+
to_s.present?
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.parse(string)
|
35
|
+
new(string.split(':').map(&:to_mumukit_grant))
|
36
|
+
end
|
37
|
+
|
38
|
+
def as_json(_options={})
|
39
|
+
to_s
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def any_grant?(&block)
|
45
|
+
@grants.any?(&block)
|
46
|
+
end
|
47
|
+
|
48
|
+
def unauthorized_message(slug)
|
49
|
+
"Unauthorized access to #{slug}. Permissions are #{to_s}"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
class String
|
2
|
+
def to_mumukit_slug
|
3
|
+
Mumukit::Auth::Slug.parse self
|
4
|
+
end
|
5
|
+
end
|
6
|
+
|
7
|
+
module Mumukit::Auth
|
8
|
+
class Slug
|
9
|
+
attr_accessor :first, :second
|
10
|
+
|
11
|
+
alias_method :organization, :first
|
12
|
+
|
13
|
+
alias_method :repository, :second
|
14
|
+
alias_method :course, :second
|
15
|
+
alias_method :content, :second
|
16
|
+
|
17
|
+
def initialize(first, second)
|
18
|
+
@first = first
|
19
|
+
@second = second
|
20
|
+
end
|
21
|
+
|
22
|
+
def match_first(first)
|
23
|
+
match self.first, first
|
24
|
+
end
|
25
|
+
|
26
|
+
def match_second(second)
|
27
|
+
match self.second, second
|
28
|
+
end
|
29
|
+
|
30
|
+
def ==(o)
|
31
|
+
self.class == o.class && to_s == o.to_s
|
32
|
+
end
|
33
|
+
|
34
|
+
def to_s
|
35
|
+
"#{first}/#{second}"
|
36
|
+
end
|
37
|
+
|
38
|
+
def to_mumukit_slug
|
39
|
+
self
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.join(*parts)
|
43
|
+
raise 'Slugs must have up to two parts' if parts.length > 2
|
44
|
+
new(*parts.pad_with('_', 2))
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.parse(slug)
|
48
|
+
validate_slug! slug
|
49
|
+
|
50
|
+
self.new *slug.split('/')
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def match(pattern, part)
|
56
|
+
pattern == '_' || pattern == part
|
57
|
+
end
|
58
|
+
|
59
|
+
def self.validate_slug!(slug)
|
60
|
+
unless slug =~ /.*\/.*/
|
61
|
+
raise Mumukit::Auth::InvalidSlugFormatError, "Invalid slug: #{slug}. It must be in first/second format"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
class InvalidSlugFormatError < StandardError
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
|
71
|
+
|
data/lib/mumukit/auth/token.rb
CHANGED
@@ -9,24 +9,23 @@ module Mumukit::Auth
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def metadata
|
12
|
-
@metadata ||=
|
13
|
-
end
|
14
|
-
|
15
|
-
def permissions(app)
|
16
|
-
metadata.permissions(app)
|
12
|
+
@metadata ||= jwt['metadata'] || {}
|
17
13
|
end
|
18
14
|
|
19
15
|
def verify_client!
|
20
16
|
raise Mumukit::Auth::InvalidTokenError.new('aud mismatch') if Mumukit::Auth.config.client_id != jwt['aud']
|
21
17
|
end
|
22
18
|
|
23
|
-
def self.
|
19
|
+
def self.from_rack_env(env)
|
24
20
|
new(env.dig('omniauth.auth', 'extra', 'raw_info') || {})
|
25
21
|
end
|
26
22
|
|
27
|
-
def self.
|
28
|
-
|
29
|
-
|
23
|
+
def self.encode_dummy_auth_header(metadata)
|
24
|
+
'dummy token ' + encode(metadata)
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.encode(metadata)
|
28
|
+
JWT.encode({aud: Mumukit::Auth.config.client_id, metadata: metadata}, decoded_secret)
|
30
29
|
end
|
31
30
|
|
32
31
|
def self.decode(encoded)
|
@@ -35,35 +34,14 @@ module Mumukit::Auth
|
|
35
34
|
raise Mumukit::Auth::InvalidTokenError.new(e)
|
36
35
|
end
|
37
36
|
|
38
|
-
def self.
|
39
|
-
|
40
|
-
|
41
|
-
app_metadata: metadata},
|
42
|
-
decoded_secret)
|
43
|
-
'dummy token ' + encoded_token
|
37
|
+
def self.decode_header(header)
|
38
|
+
raise Mumukit::Auth::InvalidTokenError.new('missing authorization header') if header.nil?
|
39
|
+
decode header.split(' ').last
|
44
40
|
end
|
45
41
|
|
46
42
|
def self.decoded_secret
|
47
43
|
JWT.base64url_decode(Mumukit::Auth.config.client_secret)
|
48
44
|
end
|
49
45
|
end
|
50
|
-
|
51
|
-
|
52
|
-
class Permissions
|
53
|
-
def to_mumukit_auth_permissions
|
54
|
-
self
|
55
|
-
end
|
56
|
-
end
|
57
46
|
end
|
58
47
|
|
59
|
-
class String
|
60
|
-
def to_mumukit_auth_permissions
|
61
|
-
Mumukit::Auth::Permissions.parse(self)
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
class NilClass
|
66
|
-
def to_mumukit_auth_permissions
|
67
|
-
Mumukit::Auth::Permissions.new([])
|
68
|
-
end
|
69
|
-
end
|
data/lib/mumukit/auth/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mumukit-auth
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Franco Leonardo Bulgarelli
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-12-
|
11
|
+
date: 2016-12-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -66,20 +66,6 @@ dependencies:
|
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: auth0
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - ">="
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
76
|
-
type: :runtime
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - ">="
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
83
69
|
- !ruby/object:Gem::Dependency
|
84
70
|
name: mumukit-core
|
85
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -102,12 +88,14 @@ extensions: []
|
|
102
88
|
extra_rdoc_files: []
|
103
89
|
files:
|
104
90
|
- lib/mumukit/auth.rb
|
91
|
+
- lib/mumukit/auth/array.rb
|
105
92
|
- lib/mumukit/auth/exceptions.rb
|
106
93
|
- lib/mumukit/auth/grant.rb
|
107
|
-
- lib/mumukit/auth/metadata.rb
|
108
94
|
- lib/mumukit/auth/permissions.rb
|
95
|
+
- lib/mumukit/auth/roles.rb
|
96
|
+
- lib/mumukit/auth/scope.rb
|
97
|
+
- lib/mumukit/auth/slug.rb
|
109
98
|
- lib/mumukit/auth/token.rb
|
110
|
-
- lib/mumukit/auth/user.rb
|
111
99
|
- lib/mumukit/auth/version.rb
|
112
100
|
homepage: http://github.com/mumuki/mumukit-auth
|
113
101
|
licenses:
|
@@ -1,70 +0,0 @@
|
|
1
|
-
class Mumukit::Auth::Metadata
|
2
|
-
def initialize(json)
|
3
|
-
@json = json
|
4
|
-
end
|
5
|
-
|
6
|
-
def as_json(_options={})
|
7
|
-
@json
|
8
|
-
end
|
9
|
-
|
10
|
-
def permissions(app)
|
11
|
-
@json.dig(app, 'permissions').to_mumukit_auth_permissions
|
12
|
-
end
|
13
|
-
|
14
|
-
def add_permission!(app, permission)
|
15
|
-
if permissions(app).present?
|
16
|
-
@json[app] = process_add_permission(app, permission)
|
17
|
-
else
|
18
|
-
@json.merge!("#{app}" => {'permissions' => permission})
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
def remove_permission!(app, permission)
|
23
|
-
if permissions(app).present?
|
24
|
-
@json[app] = process_remove_permission(app, permission)
|
25
|
-
end
|
26
|
-
@json.delete(app) if @json.dig(app, 'permissions').blank?
|
27
|
-
end
|
28
|
-
|
29
|
-
def process_permission(new_permissions)
|
30
|
-
{'permissions' => Mumukit::Auth::Permissions.load(new_permissions).to_s}
|
31
|
-
end
|
32
|
-
|
33
|
-
def process_remove_permission(app, permission)
|
34
|
-
process_permission(permissions(app).as_json.split(':').reject { |it| it == permission }.join(':'))
|
35
|
-
end
|
36
|
-
|
37
|
-
def process_add_permission(app, permission)
|
38
|
-
process_permission(permissions(app).as_json + ":#{permission}")
|
39
|
-
end
|
40
|
-
|
41
|
-
def librarian?(slug)
|
42
|
-
has_role? 'bibliotheca', slug
|
43
|
-
end
|
44
|
-
|
45
|
-
def admin?(slug)
|
46
|
-
has_role? 'admin', slug
|
47
|
-
end
|
48
|
-
|
49
|
-
def teacher?(slug)
|
50
|
-
has_role? 'classroom', slug
|
51
|
-
end
|
52
|
-
|
53
|
-
def student?(slug)
|
54
|
-
has_role? 'atheneum', slug
|
55
|
-
end
|
56
|
-
|
57
|
-
def self.load(json)
|
58
|
-
new(JSON.parse(json))
|
59
|
-
end
|
60
|
-
|
61
|
-
def self.dump(metadata)
|
62
|
-
metadata.to_json
|
63
|
-
end
|
64
|
-
|
65
|
-
private
|
66
|
-
|
67
|
-
def has_role?(app, slug)
|
68
|
-
permissions(app)[slug]
|
69
|
-
end
|
70
|
-
end
|
data/lib/mumukit/auth/user.rb
DELETED
@@ -1,78 +0,0 @@
|
|
1
|
-
require 'auth0'
|
2
|
-
|
3
|
-
class Mumukit::Auth::User
|
4
|
-
|
5
|
-
attr_accessor :social_id, :user
|
6
|
-
|
7
|
-
def initialize(social_id, user=nil)
|
8
|
-
@social_id = social_id
|
9
|
-
@user = user || client.user(@social_id)
|
10
|
-
end
|
11
|
-
|
12
|
-
def add_permission!(key, permission)
|
13
|
-
metadata.add_permission!(key, permission)
|
14
|
-
update_user_metadata!
|
15
|
-
end
|
16
|
-
|
17
|
-
def remove_permission!(key, permission)
|
18
|
-
metadata.remove_permission!(key, permission)
|
19
|
-
update_user_metadata!
|
20
|
-
end
|
21
|
-
|
22
|
-
def permissions_string
|
23
|
-
apps.select { |app| @user[app].present? }.map { |app| {app.to_s => @user[app]} }.reduce({}, :merge).to_json
|
24
|
-
end
|
25
|
-
|
26
|
-
def metadata
|
27
|
-
@metadata ||= Mumukit::Auth::Metadata.load(permissions_string)
|
28
|
-
end
|
29
|
-
|
30
|
-
def permissions_for(app)
|
31
|
-
metadata[app]['permissions']
|
32
|
-
end
|
33
|
-
|
34
|
-
def apps
|
35
|
-
['bibliotheca', 'classroom', 'admin', 'atheneum']
|
36
|
-
end
|
37
|
-
|
38
|
-
def client
|
39
|
-
self.class.client
|
40
|
-
end
|
41
|
-
|
42
|
-
def librarian?(slug)
|
43
|
-
metadata.librarian? slug
|
44
|
-
end
|
45
|
-
|
46
|
-
def admin?(slug)
|
47
|
-
metadata.admin? slug
|
48
|
-
end
|
49
|
-
|
50
|
-
def teacher?(slug)
|
51
|
-
metadata.teacher? slug
|
52
|
-
end
|
53
|
-
|
54
|
-
def student?(slug)
|
55
|
-
metadata.student? slug
|
56
|
-
end
|
57
|
-
|
58
|
-
def self.from_email(email)
|
59
|
-
user = client.users("email:#{email}").first
|
60
|
-
raise Mumukit::Auth::EmailNotRegistered.new('There is no user registered with that email.') unless user.present?
|
61
|
-
new(user['user_id'])
|
62
|
-
end
|
63
|
-
|
64
|
-
def self.client
|
65
|
-
Auth0Client.new(
|
66
|
-
:client_id => ENV['MUMUKI_AUTH0_CLIENT_ID'],
|
67
|
-
:client_secret => ENV['MUMUKI_AUTH0_CLIENT_SECRET'],
|
68
|
-
:domain => "mumuki.auth0.com"
|
69
|
-
)
|
70
|
-
end
|
71
|
-
|
72
|
-
private
|
73
|
-
|
74
|
-
def update_user_metadata!
|
75
|
-
client.update_user_metadata social_id, metadata.as_json
|
76
|
-
end
|
77
|
-
|
78
|
-
end
|