j1_template_mde 2018.4.15 → 2018.4.16

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/_includes/themes/j1/layouts/content_generator_blog_archive.html +3 -3
  3. data/_includes/themes/j1/layouts/layout_shim_generator.html +4 -0
  4. data/_includes/themes/j1/modules/navigator/generator.html +4 -4
  5. data/_includes/themes/j1/modules/navigator/procedures/sidebar.proc +174 -127
  6. data/lib/j1/version.rb +1 -1
  7. data/lib/j1_app.rb +4 -1
  8. data/lib/j1_app/j1_auth_manager/auth_manager.previous.rb +939 -0
  9. data/lib/j1_app/j1_auth_manager/auth_manager.rb +386 -214
  10. data/lib/j1_app/j1_auth_manager/config.rb +103 -66
  11. data/lib/j1_app/j1_auth_manager/helpers.rb +22 -14
  12. data/lib/j1_app/j1_auth_manager/views/auth_manager_ui.erb +7 -2
  13. data/lib/j1_app/omniauth/strategies/_unused/doumart_patreon.rb +75 -0
  14. data/lib/j1_app/omniauth/strategies/_unused/my_patreon.rb +78 -0
  15. data/lib/j1_app/omniauth/strategies/_unused/patreon.v1.rb +50 -0
  16. data/lib/j1_app/omniauth/strategies/_unused/patreon.v2-v1.rb +82 -0
  17. data/lib/j1_app/omniauth/strategies/_unused/patreon.v2.rb +79 -0
  18. data/lib/starter_web/Gemfile +185 -168
  19. data/lib/starter_web/_config.yml +85 -69
  20. data/lib/starter_web/_data/j1_resources.yml +15 -0
  21. data/lib/starter_web/_data/modules/j1_navigator.yml +79 -12
  22. data/lib/starter_web/_rack/Guardfile +75 -0
  23. data/lib/starter_web/assets/data/authclient.html +10 -7
  24. data/lib/starter_web/assets/data/banner.html +127 -127
  25. data/lib/starter_web/assets/images/patreon/premium-content-460x200.png +0 -0
  26. data/lib/starter_web/assets/images/patreon/scalable/{Premium-content.psd → premium-content.psd} +0 -0
  27. data/lib/starter_web/assets/images/patreon/scalable/value-content.psd +0 -0
  28. data/lib/starter_web/assets/images/patreon/value-content-460x200.png +0 -0
  29. data/lib/starter_web/assets/themes/j1/core/css/theme_extensions.css +2 -2
  30. data/lib/starter_web/assets/themes/j1/core/css/theme_extensions.min.css +1 -1
  31. data/lib/starter_web/assets/themes/j1/core/css/uno.css +2 -2
  32. data/lib/starter_web/assets/themes/j1/core/css/uno.min.css +1 -1
  33. data/lib/starter_web/assets/themes/j1/core/js/adapter/navigator.js +66 -11
  34. data/lib/starter_web/assets/themes/j1/core/js/adapter/navigator.js.failed +797 -0
  35. data/lib/starter_web/assets/themes/j1/core/js/adapter/template.js +26 -7
  36. data/lib/starter_web/assets/themes/j1/extensions/livereload/LICENSE +20 -0
  37. data/lib/starter_web/assets/themes/j1/extensions/livereload/README.md +249 -0
  38. data/lib/starter_web/assets/themes/j1/extensions/livereload/js/livereload.js +1951 -0
  39. data/lib/starter_web/assets/themes/j1/extensions/livereload/js/livereload.min.js +1 -0
  40. data/lib/starter_web/assets/themes/j1/extensions/patreon/patreon.widget.button.html +21 -0
  41. data/lib/starter_web/package.json +14 -5
  42. data/lib/starter_web/pages/public/about/become_a_patron.adoc +1 -1
  43. data/lib/starter_web/pages/public/blog/navigator/archive.html +0 -1
  44. metadata +19 -4
  45. data/lib/starter_web/assets/images/patreon/premium-content-420x200.png +0 -0
@@ -37,88 +37,39 @@ module J1App
37
37
  !!config['ssl']
38
38
  end
39
39
 
40
- def self.provider
41
- auth_config['provider']['activated']
40
+ def self.active_providers
41
+ auth_config['providers']['activated']
42
42
  end
43
43
 
44
44
  def self.default_provider
45
- auth_config['provider']['activated'][0]
46
- end
47
-
48
- def self.provider_url(arg)
49
- provider_url = {
50
- 'patreon' => auth_config['provider']['home_url']['patreon'],
51
- 'disqus' => auth_config['provider']['home_url']['disqus'],
52
- 'facebook' => auth_config['provider']['home_url']['facebook'],
53
- 'github' => auth_config['provider']['home_url']['github'],
54
- 'twitter' => auth_config['provider']['home_url']['twitter']
55
- }
56
- provider_url[arg]
57
- end
58
-
59
- def self.provider_scope(arg)
60
- provider_scope = {
61
- 'patreon' => auth_config['provider']['scope']['patreon'],
62
- 'disqus' => auth_config['provider']['scope']['disqus'],
63
- 'facebook' => auth_config['provider']['scope']['facebook'],
64
- 'github' => auth_config['provider']['scope']['github'],
65
- 'twitter' => auth_config['provider']['scope']['twitter']
66
- }
67
- provider_scope[arg].join(',')
68
- end
69
-
70
- def self.provider_data(arg)
71
- provider_data = {
72
- 'patreon' => auth_config['provider']['data']['patreon'],
73
- 'disqus' => auth_config['provider']['data']['disqus'],
74
- 'facebook' => auth_config['provider']['data']['facebook'],
75
- 'github' => auth_config['provider']['data']['github'],
76
- 'twitter' => auth_config['provider']['data']['twitter']
77
- }
78
- provider_data[arg].join(',')
45
+ auth_config['providers']['activated'][0]
79
46
  end
80
47
 
81
48
  def self.permissions
82
49
  permission_profile = {
83
- 'private' => [],
84
- 'premium' => []
50
+ :private => [],
51
+ :premium => []
85
52
  }
86
53
 
87
- provider_permissions = auth_config['provider']['permission']
88
- provider_permissions.each do |key, value|
89
- value.each { |perm| permission_profile["#{perm}"] << key }
90
- end
91
- permission_profile
92
- end
93
-
94
- def self.get_provider_permissions (arg)
95
- auth_config['provider']['permission']["#{arg}"].join(',')
96
- end
97
-
98
- def self.users
99
- user_profile = {}
54
+ active_providers = auth_config['providers']['activated']
100
55
 
101
- provider_users = auth_config['provider']['user']
102
- provider_users.each do |key, value|
103
- user_profile[key] = value
56
+ for p in active_providers do
57
+ provider_permissions = auth_config['providers']["#{p}"]['permissions']
58
+ provider_permissions.each do |perm|
59
+ permission_profile[:"#{perm}"] << "#{p}"
60
+ end
104
61
  end
105
- user_profile
62
+ permission_profile
106
63
  end
107
64
 
108
- def self.strategies
109
- strategy_profile = {}
110
-
111
- provider_strategies = auth_config['provider']['strategy']
112
- provider_strategies.each do |key, value|
113
- strategy_profile[key] = :"#{value}"
114
- end
115
- strategy_profile
65
+ def self.get_condition(arg)
66
+ auth_config['provider']['condition']["#{arg}"]
116
67
  end
117
68
 
118
- def self.conditions
69
+ def self.conditions (arg)
119
70
  condition_profile = {}
120
-
121
- provider_conditions = auth_config['provider']['condition']
71
+ provider = arg
72
+ provider_conditions = auth_config['providers']["#{provider}"]['conditions']
122
73
  provider_conditions.each do |key, value|
123
74
  condition_profile[key] = value
124
75
  end
@@ -131,4 +82,90 @@ module J1App
131
82
  end
132
83
  end
133
84
 
85
+
86
+
87
+
88
+
89
+ # def self.provider_url(arg)
90
+ # provider_url = {
91
+ # 'patreon' => auth_config['provider']['home_url']['patreon'],
92
+ # 'disqus' => auth_config['provider']['home_url']['disqus'],
93
+ # 'facebook' => auth_config['provider']['home_url']['facebook'],
94
+ # 'github' => auth_config['provider']['home_url']['github'],
95
+ # 'twitter' => auth_config['provider']['home_url']['twitter']
96
+ # }
97
+ # provider_url[arg]
98
+ # end
99
+
100
+ # def self.provider_scope(arg)
101
+ # provider_scope = {
102
+ # 'patreon' => auth_config['provider']['scope']['patreon'],
103
+ # 'disqus' => auth_config['provider']['scope']['disqus'],
104
+ # 'facebook' => auth_config['provider']['scope']['facebook'],
105
+ # 'github' => auth_config['provider']['scope']['github'],
106
+ # 'twitter' => auth_config['provider']['scope']['twitter']
107
+ # }
108
+ # provider_scope[arg].join(',')
109
+ # end
110
+
111
+ # def self.provider_data(arg)
112
+ # provider_data = {
113
+ # 'patreon' => auth_config['provider']['data']['patreon'],
114
+ # 'disqus' => auth_config['provider']['data']['disqus'],
115
+ # 'facebook' => auth_config['provider']['data']['facebook'],
116
+ # 'github' => auth_config['provider']['data']['github'],
117
+ # 'twitter' => auth_config['provider']['data']['twitter']
118
+ # }
119
+ # provider_data[arg].join(',')
120
+ # end
121
+
122
+ # def self.provider_condition(arg)
123
+ # provider_condition = {
124
+ # 'patreon' => auth_config['provider']['condition']['patreon'],
125
+ # 'disqus' => auth_config['provider']['condition']['disqus'],
126
+ # 'facebook' => auth_config['provider']['condition']['facebook'],
127
+ # 'github' => auth_config['provider']['condition']['github'],
128
+ # 'twitter' => auth_config['provider']['condition']['twitter']
129
+ # }
130
+ # provider_condition[arg]
131
+ # end
132
+
133
+ # def self.permissions_old
134
+ # permission_profile = {
135
+ # :private => [],
136
+ # :premium => []
137
+ # }
138
+ #
139
+ # provider_permissions = auth_config['provider']['permission']
140
+ # provider_permissions.each do |key, value|
141
+ # my_key = key
142
+ # value.each { |perm| permission_profile[:"#{perm}"] << key }
143
+ # end
144
+ # permission_profile
145
+ # end
146
+
147
+ # def self.get_provider_permissions (arg)
148
+ # auth_config['provider']['permission']["#{arg}"].join(',')
149
+ # end
150
+
151
+ # def self.users
152
+ # user_profile = {}
153
+ #
154
+ # provider_users = auth_config['provider']['user']
155
+ # provider_users.each do |key, value|
156
+ # user_profile[key] = value
157
+ # end
158
+ # user_profile
159
+ # end
160
+
161
+ # def self.strategies
162
+ # strategy_profile = {}
163
+ #
164
+ # provider_strategies = auth_config['provider']['strategy']
165
+ # provider_strategies.each do |key, value|
166
+ # strategy_profile[key] = :"#{value}"
167
+ # end
168
+ # strategy_profile
169
+ # end
170
+
134
171
  end
@@ -19,18 +19,6 @@ module J1App
19
19
  return J1App.auth_enabled
20
20
  end
21
21
 
22
- # def authentication_strategy
23
- # if !ENV["GITHUB_TEAM_ID"].to_s.blank?
24
- # :team
25
- # elsif !ENV["GITHUB_TEAM_IDS"].to_s.blank?
26
- # :teams
27
- # elsif !ENV["GITHUB_ORG_NAME"].to_s.blank?
28
- # :org
29
- # elsif !ENV['GITHUB_MEMBERS'].to_s.blank?
30
- # :member
31
- # end
32
- # end
33
-
34
22
  def warden
35
23
  env['warden']
36
24
  end
@@ -51,8 +39,28 @@ module J1App
51
39
  !!(str =~ /[öäüÖÄÜß]/)
52
40
  end
53
41
 
54
- # def _relative_url_for(path)
55
- # request.script_name + path
42
+ def log_info! (*args)
43
+ scope, func, text, details = *args
44
+
45
+ if details.nil?
46
+ message = sprintf( "[%-15s] [%-15s] %s", "#{scope} ", "#{func}", "#{text}" )
47
+ else
48
+ message = sprintf( "[%-15s] [%-15s] %s : %s", "#{scope} ", "#{func}", "#{text}", "#{details}" )
49
+ end
50
+ logger.info "#{message}"
51
+ end
52
+
53
+
54
+ # def authentication_strategy
55
+ # if !ENV["GITHUB_TEAM_ID"].to_s.blank?
56
+ # :team
57
+ # elsif !ENV["GITHUB_TEAM_IDS"].to_s.blank?
58
+ # :teams
59
+ # elsif !ENV["GITHUB_ORG_NAME"].to_s.blank?
60
+ # :org
61
+ # elsif !ENV['GITHUB_MEMBERS'].to_s.blank?
62
+ # :member
63
+ # end
56
64
  # end
57
65
 
58
66
  end
@@ -90,8 +90,13 @@
90
90
  </div>
91
91
  <!-- Footer -->
92
92
  <div class="modal-footer">
93
- <a type="button" id="signInButton" class="btn btn-primary-modal mr-2" data-dismiss="modal"><%= @modal_agreed_text %></a>
94
- <a type="button" id="exitButton" class="btn btn-outline-secondary-modal" data-dismiss="modal"><%= @modal_disagreed_text %></a>
93
+ <a type="button" id="signInButton" class="btn btn-primary-modal mr-2" data-dismiss="modal">
94
+ <i class="mdi mdi-18px mdi-dark mdi-login"></i>
95
+ <%= @modal_agreed_text %>
96
+ </a>
97
+ <a type="button" id="exitButton" class="btn btn-outline-secondary-modal" data-dismiss="modal">
98
+ <%= @modal_disagreed_text %>
99
+ </a>
95
100
  </div>
96
101
  </div>
97
102
  <!-- END Content -->
@@ -0,0 +1,75 @@
1
+ require 'omniauth/strategies/oauth2'
2
+ require 'json'
3
+
4
+ module OmniAuth
5
+ module Strategies
6
+ class Patreon < OmniAuth::Strategies::OAuth2
7
+
8
+ DEFAULT_SCOPE = 'identity identity[email]'
9
+
10
+ option :name, 'patreon'
11
+ option :client_options, {
12
+ :authorize_url => '/oauth2/authorize',
13
+ :site => 'https://www.patreon.com',
14
+ :token_url => '/api/oauth2/token'
15
+ }
16
+
17
+ uid { raw_info["data"]["id"] }
18
+
19
+ info do
20
+ prune!({
21
+ :first_name => raw_info["data"]["attributes"]['first_name'],
22
+ :last_name => raw_info["data"]["attributes"]['last_name'],
23
+ :full_name => raw_info["data"]["attributes"]['full_name'],
24
+ :image_url => raw_info["data"]["attributes"]['image_url'],
25
+ :email => raw_info["data"]["attributes"]['email']
26
+ })
27
+ end
28
+
29
+ def authorize_params
30
+ super.tap do |params|
31
+ options[:authorize_options].each do |k|
32
+ params[k] = request.params[k.to_s] unless [nil, ''].include?(request.params[k.to_s])
33
+ end
34
+ params[:scope] = get_scope(params)
35
+ session['omniauth.state'] = params[:state] if params[:state]
36
+ end
37
+ end
38
+
39
+ extra do
40
+ hash = {}
41
+ hash['raw_info'] = raw_info unless skip_info?
42
+ prune! hash
43
+ end
44
+
45
+ def raw_info
46
+ @raw_info = MultiJson.decode(access_token.get('/api/oauth2/v2/identity', info_options).body)
47
+ end
48
+
49
+ def info_options
50
+ params = {}
51
+ params.merge!({fields: {user: (options[:info_fields] || 'full_name,email')}})
52
+ params.merge!({locale: options[:locale]}) if options[:locale]
53
+
54
+ { params: params }
55
+ end
56
+
57
+
58
+ def callback_url
59
+ options[:redirect_uri] || full_host + script_name + callback_path
60
+ end
61
+
62
+ def get_scope(params)
63
+ raw_scope = params[:scope] || DEFAULT_SCOPE
64
+ scope_list = raw_scope.split(' ').map { |item| item.split(',') }.flatten
65
+ scope_list.join(' ')
66
+ end
67
+ def prune!(hash)
68
+ hash.delete_if do |_, value|
69
+ prune!(value) if value.is_a?(Hash)
70
+ value.nil? || (value.respond_to?(:empty?) && value.empty?)
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,78 @@
1
+ # require 'omniauth/strategies/oauth2'
2
+ # require 'json'
3
+
4
+ module OmniAuth
5
+ module Strategies
6
+ class Patreon < OmniAuth::Strategies::OAuth2
7
+
8
+ DEFAULT_SCOPE = 'users'
9
+
10
+ option :name, 'patreon'
11
+ option :client_options, {
12
+ :authorize_url => '/oauth2/authorize',
13
+ :site => 'https://www.patreon.com',
14
+ :token_url => '/api/oauth2/token'
15
+ }
16
+
17
+ uid { raw_info["data"]["id"] }
18
+
19
+ info do
20
+ prune!({
21
+ :first_name => raw_info["data"]["attributes"]['first_name'],
22
+ :last_name => raw_info["data"]["attributes"]['last_name'],
23
+ :full_name => raw_info["data"]["attributes"]['full_name'],
24
+ :image_url => raw_info["data"]["attributes"]['image_url'],
25
+ :email => raw_info["data"]["attributes"]['email']
26
+ })
27
+ end
28
+
29
+ def authorize_params
30
+ super.tap do |params|
31
+ options[:authorize_options].each do |k|
32
+ params[k] = request.params[k.to_s] unless [nil, ''].include?(request.params[k.to_s])
33
+ end
34
+ params[:scope] = get_scope(params)
35
+ session['omniauth.state'] = params[:state] if params[:state]
36
+ end
37
+ end
38
+
39
+ extra do
40
+ hash = {}
41
+ hash['raw_info'] = raw_info unless skip_info?
42
+ prune! hash
43
+ end
44
+
45
+ def raw_info
46
+ @raw_info = MultiJson.decode(access_token.get('/api/oauth2/v2/identity', info_options).body)
47
+ end
48
+
49
+ def info_options
50
+ params = {}
51
+ params.merge!({fields: {user: (options[:info_fields] || 'full_name,email')}})
52
+ params.merge!({locale: options[:locale]}) if options[:locale]
53
+ {
54
+ params: params
55
+ }
56
+ end
57
+
58
+ def callback_url
59
+ options[:redirect_uri] || full_host + script_name + callback_path
60
+ # options[:redirect_uri]
61
+ end
62
+
63
+ def get_scope(params)
64
+ raw_scope = params[:scope] || DEFAULT_SCOPE
65
+ scope_list = raw_scope.split(' ').map { |item| item.split(',') }.flatten
66
+ scope_list.join(' ')
67
+ end
68
+
69
+ def prune!(hash)
70
+ hash.delete_if do |_, value|
71
+ prune!(value) if value.is_a?(Hash)
72
+ value.nil? || (value.respond_to?(:empty?) && value.empty?)
73
+ end
74
+ end
75
+
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,50 @@
1
+ # https://github.com/signalnerve/omniauth-patreon
2
+
3
+ require 'omniauth-oauth2'
4
+
5
+ module OmniAuth
6
+ module Strategies
7
+ class Patreon < OmniAuth::Strategies::OAuth2
8
+
9
+ option :name, 'patreon'
10
+ option :client_options,
11
+ site: 'https://www.patreon.com',
12
+ authorize_url: 'https://www.patreon.com/oauth2/authorize',
13
+ token_url: 'https://api.patreon.com/oauth2/token'
14
+
15
+ uid { raw_info['data']['id'].to_s }
16
+
17
+ info do
18
+ {
19
+ :email => raw_info['data']['attributes']['email'],
20
+ :name => raw_info['data']['attributes']['full_name'],
21
+ :nickname => raw_info['data']['attributes']['full_name'].gsub('ä','ae').gsub('ö','oe').gsub('ü','ue').gsub(' ','_').downcase,
22
+ :access_token => access_token.token,
23
+ :refresh_token => access_token.refresh_token
24
+ }
25
+ end
26
+
27
+ extra do
28
+ { raw_info: raw_info }
29
+ end
30
+
31
+ def raw_info
32
+ @raw_info ||= begin
33
+ response = client.request(
34
+ :get, 'https://api.patreon.com/oauth2/api/current_user',
35
+ headers: {
36
+ 'Authorization' => "Bearer #{access_token.token}"
37
+ },
38
+ parse: :json
39
+ )
40
+ response.parsed
41
+ end
42
+ end
43
+
44
+ def callback_url
45
+ full_host + script_name + callback_path
46
+ end
47
+
48
+ end
49
+ end
50
+ end