beyond_canvas 0.16.2.pre → 0.17.0.pre
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/config/beyond_canvas_manifest.js +1 -0
- data/app/assets/images/icons/arrow_right.svg +1 -0
- data/app/assets/images/icons/close.svg +1 -0
- data/app/assets/images/icons/home.svg +1 -0
- data/app/assets/javascripts/beyond_canvas/base.js +120 -246
- data/app/assets/stylesheets/beyond_canvas/base.scss +8 -1
- data/app/assets/stylesheets/beyond_canvas/components/_action_bar.scss +28 -0
- data/app/assets/stylesheets/beyond_canvas/components/_breadcrumbs.scss +29 -0
- data/app/assets/stylesheets/beyond_canvas/components/_buttons.scss +1 -1
- data/app/assets/stylesheets/beyond_canvas/components/_debug.scss +10 -0
- data/app/assets/stylesheets/beyond_canvas/components/_forms.scss +11 -14
- data/app/assets/stylesheets/beyond_canvas/components/_main.scss +12 -13
- data/app/assets/stylesheets/beyond_canvas/components/_margins.scss +8 -0
- data/app/assets/stylesheets/beyond_canvas/components/_menu.scss +40 -0
- data/app/assets/stylesheets/beyond_canvas/components/_modals.scss +27 -0
- data/app/assets/stylesheets/beyond_canvas/components/_sidebar.scss +53 -0
- data/app/assets/stylesheets/beyond_canvas/components/_titles.scss +7 -0
- data/app/assets/stylesheets/beyond_canvas/settings/_variables.scss +64 -9
- data/app/controllers/beyond_canvas/application_controller.rb +2 -0
- data/app/controllers/beyond_canvas/authentications_controller.rb +37 -30
- data/app/controllers/concerns/beyond_canvas/authentication.rb +1 -12
- data/app/controllers/concerns/beyond_canvas/locale_management.rb +5 -4
- data/app/helpers/beyond_canvas/authentications_helper.rb +28 -0
- data/app/helpers/beyond_canvas/cockpit_app_helper.rb +17 -0
- data/app/helpers/beyond_canvas/debug_helper.rb +9 -0
- data/app/helpers/beyond_canvas/locale_switch_helper.rb +5 -1
- data/app/javascript/beyond_canvas/base.js +3 -0
- data/app/javascript/beyond_canvas/initializers/buttons.js +65 -19
- data/app/javascript/beyond_canvas/initializers/flash.js +9 -2
- data/app/javascript/beyond_canvas/initializers/inputs.js +4 -1
- data/app/javascript/beyond_canvas/initializers/modals.js +14 -0
- data/app/views/beyond_canvas/authentications/new.html.erb +19 -10
- data/app/views/beyond_canvas/shared/_action_bar.html.erb +15 -0
- data/app/views/beyond_canvas/shared/_breadcrumbs.html.erb +14 -0
- data/app/views/beyond_canvas/shared/_flash.html.erb +22 -12
- data/app/views/beyond_canvas/shared/_locales.html.erb +8 -0
- data/app/views/beyond_canvas/shared/_menu.html.erb +31 -0
- data/app/views/beyond_canvas/shared/_modal.html.erb +6 -0
- data/app/views/beyond_canvas/shared/_sidebar.html.erb +16 -0
- data/app/views/layouts/beyond_canvas/application.html.erb +31 -0
- data/app/views/layouts/beyond_canvas/public.html.erb +11 -4
- data/config/locales/en.yml +5 -0
- data/config/routes.rb +5 -4
- data/lib/beyond_canvas.rb +12 -12
- data/lib/beyond_canvas/configuration.rb +11 -6
- data/lib/beyond_canvas/engine.rb +4 -2
- data/lib/beyond_canvas/menu_item_registration.rb +19 -0
- data/lib/beyond_canvas/parameter_sanitizer.rb +1 -1
- data/lib/beyond_canvas/rails/routes.rb +8 -7
- data/lib/beyond_canvas/version.rb +1 -1
- data/lib/generators/beyond_canvas/controller/controller_generator.rb +1 -2
- data/lib/generators/beyond_canvas/controller/templates/controller.erb +2 -19
- data/lib/generators/beyond_canvas/custom_menu/custom_menu_generator.rb +13 -0
- data/lib/generators/beyond_canvas/custom_menu/templates/beyond_canvas_custom_menu.html.erb +32 -0
- data/lib/generators/beyond_canvas/custom_styles/custom_styles_generator.rb +1 -1
- data/lib/generators/beyond_canvas/custom_styles/templates/beyond_canvas_custom_styles.scss +55 -9
- data/lib/generators/beyond_canvas/install/install_generator.rb +3 -5
- data/lib/generators/beyond_canvas/install/templates/beyond_canvas.rb.erb +51 -13
- data/lib/generators/beyond_canvas/{auth_model/auth_model_generator.rb → model/model_generator.rb} +4 -5
- data/lib/generators/beyond_canvas/{auth_model → model}/templates/migration.erb +2 -4
- data/lib/generators/beyond_canvas/{auth_model → model}/templates/model.erb +0 -0
- data/lib/generators/beyond_canvas/views/views_generator.rb +4 -6
- data/lib/models/concerns/authentication.rb +57 -0
- data/lib/models/concerns/utils.rb +79 -0
- data/lib/models/shop.rb +12 -0
- metadata +69 -30
- data/app/controllers/concerns/beyond_canvas/resource_management.rb +0 -33
- data/app/javascript/beyond_canvas/initializers/functions.js +0 -41
- data/app/views/beyond_canvas/locales/_edit.html.erb +0 -8
- data/lib/beyond_canvas/models/authentication.rb +0 -66
- data/lib/beyond_canvas/models/shop.rb +0 -28
- data/lib/beyond_canvas/models/utils.rb +0 -55
@@ -1,33 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module BeyondCanvas
|
4
|
-
module ResourceManagement # :nodoc:
|
5
|
-
extend ActiveSupport::Concern
|
6
|
-
|
7
|
-
included do
|
8
|
-
# Share some methods defined in the controller to make them available for the view
|
9
|
-
if respond_to?(:helper_method)
|
10
|
-
helpers = %w[resource resource_name resource_class]
|
11
|
-
helper_method(*helpers)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
protected
|
16
|
-
|
17
|
-
def resource_name
|
18
|
-
BeyondCanvas.auth_model
|
19
|
-
end
|
20
|
-
|
21
|
-
def resource
|
22
|
-
instance_variable_get(:"@#{resource_name}")
|
23
|
-
end
|
24
|
-
|
25
|
-
def resource=(new_resource)
|
26
|
-
instance_variable_set(:"@#{resource_name}", new_resource)
|
27
|
-
end
|
28
|
-
|
29
|
-
def resource_class
|
30
|
-
resource_name.classify.constantize
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
const SPINNER_ANIMATION_TIMEOUT = 125;
|
2
|
-
|
3
|
-
export function showSpinner(button) {
|
4
|
-
// Adjust the width of the button
|
5
|
-
button.width(button.width() + $('.spinner').outerWidth(true));
|
6
|
-
// Show the spinner
|
7
|
-
setTimeout(function () {
|
8
|
-
button.find('.spinner').css('display', 'flex');
|
9
|
-
}, SPINNER_ANIMATION_TIMEOUT);
|
10
|
-
}
|
11
|
-
|
12
|
-
export function hideSpinner() {
|
13
|
-
$('button[class^="button"]').each(function (_, button) {
|
14
|
-
setTimeout(function () {
|
15
|
-
// Hide the spinner
|
16
|
-
$(button).find('.spinner').hide();
|
17
|
-
// Adjust the width of the button
|
18
|
-
$(button).width($(button).data('oldWidth'));
|
19
|
-
}, SPINNER_ANIMATION_TIMEOUT);
|
20
|
-
});
|
21
|
-
}
|
22
|
-
|
23
|
-
export function disableActionElements() {
|
24
|
-
$('a, input[type="submit"], input[type="button"], input[type="reset"], button').each(function (_, button) {
|
25
|
-
$(button).addClass('actions--disabled');
|
26
|
-
});
|
27
|
-
}
|
28
|
-
export function enableActionElements() {
|
29
|
-
$('a, input[type="submit"], input[type="button"], input[type="reset"], button').each(function (_, button) {
|
30
|
-
$(button).removeClass('actions--disabled');
|
31
|
-
});
|
32
|
-
}
|
33
|
-
|
34
|
-
export function closeAlert() {
|
35
|
-
$('.flash')
|
36
|
-
.removeClass('flash--shown')
|
37
|
-
.delay(700)
|
38
|
-
.queue(function () {
|
39
|
-
$(this).remove();
|
40
|
-
});
|
41
|
-
}
|
@@ -1,8 +0,0 @@
|
|
1
|
-
<% if defined?(I18n) && I18n.available_locales.count > 1 %>
|
2
|
-
<%= form_for :system, url: beyond_canvas.update_locale_path, method: :put do |f| %>
|
3
|
-
<%= f.select :locale, I18n.available_locales.collect { |l| [translate_locale(l), l] },
|
4
|
-
{ selected: cookies[:locale] },
|
5
|
-
class: 'select--locale',
|
6
|
-
onchange: 'this.form.submit()' %>
|
7
|
-
<% end %>
|
8
|
-
<% end %>
|
@@ -1,66 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module BeyondCanvas
|
4
|
-
module Models
|
5
|
-
module Authentication # :nodoc:
|
6
|
-
extend ActiveSupport::Concern
|
7
|
-
|
8
|
-
included do
|
9
|
-
attr_accessor :code, :signature, :access_token_url
|
10
|
-
|
11
|
-
##############################################################################
|
12
|
-
# Encrypted attribute configuration
|
13
|
-
##############################################################################
|
14
|
-
|
15
|
-
attr_encrypted :beyond_api_url, key: [BeyondCanvas.configuration.encryption_key].pack('H*')
|
16
|
-
attr_encrypted :beyond_access_token, key: [BeyondCanvas.configuration.encryption_key].pack('H*')
|
17
|
-
attr_encrypted :beyond_refresh_token, key: [BeyondCanvas.configuration.encryption_key].pack('H*')
|
18
|
-
|
19
|
-
blind_index :beyond_api_url, key: [BeyondCanvas.configuration.blind_index_key].pack('H*')
|
20
|
-
|
21
|
-
##############################################################################
|
22
|
-
# Validations
|
23
|
-
##############################################################################
|
24
|
-
|
25
|
-
# Callback url params
|
26
|
-
|
27
|
-
validates :code,
|
28
|
-
presence: true,
|
29
|
-
on: :create
|
30
|
-
validates :signature,
|
31
|
-
presence: true,
|
32
|
-
on: :create
|
33
|
-
validates :access_token_url,
|
34
|
-
presence: true,
|
35
|
-
on: :create
|
36
|
-
|
37
|
-
# Database fields
|
38
|
-
|
39
|
-
validates :beyond_api_url,
|
40
|
-
presence: true
|
41
|
-
validates :beyond_access_token,
|
42
|
-
presence: true,
|
43
|
-
unless: -> { encrypted_beyond_access_token_was.blank? }
|
44
|
-
validates :beyond_refresh_token,
|
45
|
-
presence: true,
|
46
|
-
unless: -> { encrypted_beyond_refresh_token_was.blank? }
|
47
|
-
|
48
|
-
##############################################################################
|
49
|
-
# Instance methods
|
50
|
-
##############################################################################
|
51
|
-
|
52
|
-
#
|
53
|
-
# Get and save access_token and refresh_token using the authentication code
|
54
|
-
# NOTE: This method is used during the shop creation, as it is the only point
|
55
|
-
# we know about the authentication code
|
56
|
-
#
|
57
|
-
def authenticate
|
58
|
-
session = BeyondApi::Session.new(api_url: beyond_api_url)
|
59
|
-
session.token.create(code)
|
60
|
-
update(beyond_access_token: session.access_token,
|
61
|
-
beyond_refresh_token: session.refresh_token)
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module BeyondCanvas
|
4
|
-
module Models
|
5
|
-
module Shop # :nodoc:
|
6
|
-
extend ActiveSupport::Concern
|
7
|
-
include BeyondCanvas::Models::Authentication
|
8
|
-
include BeyondCanvas::Models::Utils
|
9
|
-
|
10
|
-
included do
|
11
|
-
attr_accessor :api_url, :return_url
|
12
|
-
|
13
|
-
##############################################################################
|
14
|
-
# Validations
|
15
|
-
##############################################################################
|
16
|
-
|
17
|
-
# Callback url params
|
18
|
-
|
19
|
-
validates :api_url,
|
20
|
-
presence: true,
|
21
|
-
on: :create
|
22
|
-
validates :return_url,
|
23
|
-
presence: true,
|
24
|
-
on: :create
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
@@ -1,55 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module BeyondCanvas
|
4
|
-
module Models
|
5
|
-
module Utils # :nodoc:
|
6
|
-
extend ActiveSupport::Concern
|
7
|
-
|
8
|
-
included do
|
9
|
-
##############################################################################
|
10
|
-
# Instance methods
|
11
|
-
##############################################################################
|
12
|
-
|
13
|
-
#
|
14
|
-
# Generates a new access_token and refresh_token
|
15
|
-
#
|
16
|
-
def refresh_token
|
17
|
-
beyond_session = BeyondApi::Session.new(api_url: beyond_api_url, refresh_token: beyond_refresh_token)
|
18
|
-
beyond_session.token.refresh
|
19
|
-
|
20
|
-
update(beyond_access_token: beyond_session.access_token,
|
21
|
-
beyond_refresh_token: beyond_session.refresh_token)
|
22
|
-
end
|
23
|
-
|
24
|
-
#
|
25
|
-
# Generates a new access_token and refresh_token if they have expired
|
26
|
-
#
|
27
|
-
def refresh_token_if_needed
|
28
|
-
token_timestamp = JWT.decode(beyond_access_token, nil, false).first['exp']
|
29
|
-
current_timestamp = DateTime.now.to_i
|
30
|
-
return unless token_timestamp - current_timestamp <= 3600
|
31
|
-
|
32
|
-
refresh_token
|
33
|
-
end
|
34
|
-
|
35
|
-
#
|
36
|
-
# Returns a BeyondApi::Session object with api_url, access_token and refresh_token attributes
|
37
|
-
#
|
38
|
-
def to_session
|
39
|
-
BeyondApi::Session.new(api_url: beyond_api_url,
|
40
|
-
access_token: beyond_access_token,
|
41
|
-
refresh_token: beyond_refresh_token)
|
42
|
-
end
|
43
|
-
|
44
|
-
##############################################################################
|
45
|
-
# Class methods
|
46
|
-
##############################################################################
|
47
|
-
|
48
|
-
def self.find_session(id)
|
49
|
-
shop = find(id)
|
50
|
-
shop.to_session
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|