devise-automaticlogout 0.2.2 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 2008453655dc78f8394d6a44b70cbe62674dc346
4
- data.tar.gz: 0fefddc297a1c6cd6a2c771eee550c5ae2574bb2
2
+ SHA256:
3
+ metadata.gz: 7376a12b6138d60c5313dff7b3920fd377680f4158600517f73ae3697d7d08c9
4
+ data.tar.gz: 252322e067196b1ec2d6ed3d2972a51a510251ab9af83efa380fdf39524e25a8
5
5
  SHA512:
6
- metadata.gz: 997771f4b8c85f34bae60b6d5245ad3e61af19945ae91dfb4d2ee0072b2556628d29a51114bbcbc6eb33c499a3a1bff651321e7424b6081490ae106dc11de998
7
- data.tar.gz: 3b2227414fe9b8571d0197e0fda5124d39d156190a2c7c56bb42207e471d9c09033be751313e5260877a72186ae1422fa63ec4bd33256c079bf3fbd9a86fe415
6
+ metadata.gz: f291157a5b46de703a70cf80cd5c231a9c918bb8652f5c2ac77cd6c9a7bbbc13d0157361900946a74dbdf7da0d51bd14f5e67db21620d54e4101dc4ca7f44249
7
+ data.tar.gz: 6baba66024afd9be78928af7bcb99ffe7b7c8b7bf536b5d3b14c18cc37b85427096d290546166be2bb05a354bcb8f90b4954881dcde6304bf29a30e746130cdd
@@ -0,0 +1,9 @@
1
+ class AutomaticlogoutController < ::ApplicationController
2
+ def destroy
3
+ session[:devise_autl_seconds] = nil
4
+ session[:live] = !current_user.nil?
5
+ reset_session
6
+
7
+ redirect_to '/', notice: session[:devise_autl_message]
8
+ end
9
+ end
@@ -1,5 +1,7 @@
1
1
  <span class="regressive-timer"
2
+ style="<%= "display: #{visible ? 'block' : 'none'}" %>"
2
3
  data-visible="<%= visible %>"
3
- data-seconds="<%= session[:seconds] %>"
4
- data-message="<%= session[:message] %>">
4
+ data-alert="<%= alert.presence || false %>"
5
+ data-seconds="<%= session[:devise_autl_seconds] %>"
6
+ data-message="<%= session[:devise_autl_message] %>">
5
7
  </span>
@@ -1,4 +1,3 @@
1
1
  Rails.application.routes.draw do
2
- get 'devise/automatic_logout/status' => 'application#automatic_logout_status'
3
- get 'devise/automatic_logout/destroy' => 'application#automatic_logout_destroy'
2
+ get 'automatic_logout/destroy' => 'automaticlogout#destroy'
4
3
  end
@@ -2,98 +2,105 @@
2
2
  * Module AutomaticLogout for JS Files
3
3
  * @type {[type]}
4
4
  */
5
- var AutomaticLogout = AutomaticLogout || {};
5
+ window.AutomaticLogout = {};
6
6
 
7
- AutomaticLogout.load = function(){
8
- var $regressiveTimer = document.querySelectorAll('.regressive-timer')[0];
9
-
10
- if((!!$regressiveTimer) && ($regressiveTimer.dataset.seconds != '')){
7
+ AutomaticLogout.load = function () {
8
+ var $regressiveTimer = document.querySelectorAll(".regressive-timer")[0];
9
+
10
+ if (!!$regressiveTimer && $regressiveTimer.dataset.seconds != "") {
11
+ console.log("[AutomaticLogout] regressiveTimer started");
11
12
  AutomaticLogout.regressiveTimer();
12
13
  }
13
- }
14
+ };
14
15
 
15
16
  /**
16
17
  * Send request for destroy session current_user
17
18
  * @return {[type]} [description]
18
19
  */
19
- AutomaticLogout.destroySession = function(message){
20
+ AutomaticLogout.destroySession = function (message) {
20
21
  var xhr = new XMLHttpRequest();
21
- xhr.open('GET','/devise/automatic_logout/destroy', true);
22
- xhr.onload = function(){
23
- if(xhr.status == 200){
24
- if(message) alert(message)
25
- return window.location.href = '/';
22
+ xhr.open("GET", "/automatic_logout/destroy", true);
23
+
24
+ xhr.onload = function () {
25
+ if (xhr.status == 200) {
26
+ var $wrapper = document.querySelectorAll(".regressive-timer")[0];
27
+
28
+ if ($wrapper && eval($wrapper.dataset.alert) && message) {
29
+ window.alert(message);
30
+ }
31
+
32
+ return (window.location.href = "/");
26
33
  }
27
- }
34
+ };
28
35
  xhr.send();
29
- }
36
+ };
30
37
 
31
38
  /**
32
39
  * Method regressive time based in session auto expired at.
33
40
  * @param {[type]} date_session [description]
34
41
  * @return {[type]} [description]
35
42
  */
36
- AutomaticLogout.regressiveTimer = function(){
37
-
43
+ AutomaticLogout.regressiveTimer = function () {
38
44
  /**
39
45
  * Define o que vai ser impresso no DOM.
40
- * @param {DOM Object} container
41
- * @param {Boolean} visible
42
- * @param {String} textContent
46
+ * @param {DOM Object} container
47
+ * @param {Boolean} visible
48
+ * @param {String} textContent
43
49
  */
44
- var visibleTimer = function(container, visible, textContent){
45
- if (!visible) visible = 'false';
46
- if (!textContent) textContent = '00:00:00';
50
+ var visibleTimer = function (container, visible, textContent) {
51
+ if (!visible) visible = "false";
52
+ if (!textContent) textContent = "00:00:00";
47
53
 
48
- if (visible == 'true'){
49
- return container.textContent = textContent;
54
+ if (visible == "true") {
55
+ return (container.textContent = textContent);
50
56
  }
51
- }
52
-
57
+ };
58
+
53
59
  /**
54
60
  * Variables used
55
61
  * @param {[type]} '.regressive-timer' [description]
56
62
  * @return {[type]} [description]
57
63
  */
58
- var $regressiveTimer = document.querySelector('.regressive-timer'),
59
- data_message = String($regressiveTimer.dataset.message),
60
- data_seconds = Number($regressiveTimer.dataset.seconds),
61
- current_time = new Date().getTime();
62
-
63
- visibleTimer(
64
- $regressiveTimer,
65
- $regressiveTimer.dataset.visible
66
- );
64
+ var $regressiveTimer = document.querySelector(".regressive-timer"),
65
+ data_message = String($regressiveTimer.dataset.message),
66
+ data_seconds = Number($regressiveTimer.dataset.seconds),
67
+ current_time = new Date().getTime();
68
+
69
+ visibleTimer($regressiveTimer, $regressiveTimer.dataset.visible);
67
70
 
68
71
  var time_expired = new Date();
69
72
  time_expired.setSeconds(time_expired.getSeconds() + data_seconds);
70
73
 
71
- if (data_seconds != 0 && data_seconds != ''){
72
- var timerDecrement = setInterval(function(){
73
-
74
- if (data_seconds == 0) {
75
- clearInterval(timerDecrement);
74
+ if (data_seconds != 0 && data_seconds != "") {
75
+ var timerDecrement = setInterval(function () {
76
+ if (data_seconds == 0) {
77
+ clearInterval(timerDecrement);
76
78
  // limpa a sessão após o ok
77
79
  AutomaticLogout.destroySession(data_message);
78
- }else{
80
+ } else {
79
81
  //tempo descrecente
80
82
  time_expired.setSeconds(time_expired.getSeconds() - 1);
81
-
83
+
82
84
  var seconds_integer = (time_expired.getTime() - current_time) / 1000,
83
- date_format = AutomaticLogout.parseDate(seconds_integer),
84
- output_date_format = date_format.hours + ':' + date_format.minutes + ':' + date_format.seconds;
85
+ date_format = AutomaticLogout.parseDate(seconds_integer),
86
+ output_date_format =
87
+ date_format.hours +
88
+ ":" +
89
+ date_format.minutes +
90
+ ":" +
91
+ date_format.seconds;
85
92
 
86
93
  visibleTimer(
87
- $regressiveTimer,
88
- $regressiveTimer.dataset.visible,
94
+ $regressiveTimer,
95
+ $regressiveTimer.dataset.visible,
89
96
  output_date_format
90
97
  );
91
98
  }
92
-
99
+
93
100
  data_seconds -= 1;
94
- }, 1000)
101
+ }, 1000);
95
102
  }
96
- }
103
+ };
97
104
 
98
105
  /**
99
106
  * Parse Date
@@ -105,12 +112,8 @@ AutomaticLogout.regressiveTimer = function(){
105
112
  * seconds: seconds
106
113
  * }
107
114
  */
108
- AutomaticLogout.parseDate = function(seconds_float){
109
-
110
- var days,
111
- hours,
112
- minutes,
113
- seconds;
115
+ AutomaticLogout.parseDate = function (seconds_float) {
116
+ var days, hours, minutes, seconds;
114
117
 
115
118
  days = parseInt(seconds_float / 86400);
116
119
  seconds_float = seconds_float % 86400;
@@ -121,24 +124,24 @@ AutomaticLogout.parseDate = function(seconds_float){
121
124
  minutes = parseInt(seconds_float / 60);
122
125
  seconds = parseInt(seconds_float % 60);
123
126
 
124
- if(hours < 10){
125
- hours = "0"+hours;
127
+ if (hours < 10) {
128
+ hours = "0" + hours;
126
129
  hours = hours.substr(0, 2);
127
130
  }
128
131
 
129
- if(minutes < 10){
130
- minutes = "0"+minutes;
132
+ if (minutes < 10) {
133
+ minutes = "0" + minutes;
131
134
  minutes = minutes.substr(0, 2);
132
135
  }
133
136
 
134
- if(seconds <=9){
135
- seconds = "0"+seconds;
137
+ if (seconds <= 9) {
138
+ seconds = "0" + seconds;
136
139
  }
137
140
 
138
141
  return {
139
142
  days: days,
140
143
  hours: hours,
141
144
  minutes: minutes,
142
- seconds: seconds
143
- }
144
- }
145
+ seconds: seconds,
146
+ };
147
+ };
@@ -1,34 +1,30 @@
1
1
  module Devise
2
- module AutomaticLogout
2
+ module Automaticlogout
3
3
  module Controllers
4
4
  extend ActiveSupport::Concern
5
5
 
6
- included do
7
- ::ApplicationController.before_action do |c|
8
- if current_user.present?
9
- key_classify = Devise.mappings.keys.first
10
- resource_name = Devise.mappings[key_classify].class_name.to_s
11
- # get instance for class using devise
12
- c.session[:seconds] = resource_name.classify.constantize.timeout_in.seconds.to_i
13
- # I18n.t devise.automaticlogout.message
14
- c.session[:message] = I18n.t 'devise.automaticlogout.message' || 'Session expired!'
15
- end
6
+ DEFAULT_MESSAGE = 'Session expired! You will be redirect.'.freeze
16
7
 
17
- ::ApplicationController.send :define_method, :automatic_logout_status do
18
- Rails.logger.info 'Sessão atualizada'
19
- render json: {
20
- live: !current_user.nil?,
21
- message: session[:message],
22
- seconds: session[:seconds]
23
- }, status: :ok
24
- end
8
+ module ClassMethods
9
+ def devise_automatic_logout(options = {})
10
+ prepend_before_action do |c|
11
+ time = options.fetch(:time, nil)
12
+ message = options.fetch(:message, DEFAULT_MESSAGE)
13
+ scope = options.fetch(:scope, 'user')
14
+
15
+ seconds = if time&.positive?
16
+ time
17
+ else
18
+ mapping = Devise.mappings[scope.to_sym]
19
+ return unless mapping
20
+
21
+ mapping.to.timeout_in.seconds.to_i
22
+ end
25
23
 
26
- ::ApplicationController.send :define_method, :automatic_logout_destroy do
27
- Rails.logger.info 'Sessão destruída'
28
- session[:seconds] = ''
29
- session[:live] = !current_user.nil?
30
- reset_session
31
- redirect_to '/', notice: session[:message]
24
+ if seconds
25
+ c.session[:devise_autl_message] = message
26
+ c.session[:devise_autl_seconds] = seconds
27
+ end
32
28
  end
33
29
  end
34
30
  end
@@ -1,14 +1,14 @@
1
1
  module Devise
2
- module AutomaticLogout
2
+ module Automaticlogout
3
3
  class Engine < ::Rails::Engine
4
- require 'jquery-rails'
4
+ engine_name 'devise_automaticlogout'
5
5
 
6
6
  ActiveSupport.on_load :action_controller do
7
- include Devise::AutomaticLogout::Controllers
7
+ include Devise::Automaticlogout::Controllers
8
8
  end
9
9
 
10
10
  ActiveSupport.on_load :action_view do
11
- include Devise::AutomaticLogout::Helpers
11
+ include Devise::Automaticlogout::Helpers
12
12
  end
13
13
  end
14
14
  end
@@ -1,8 +1,8 @@
1
1
  module Devise
2
- module AutomaticLogout
2
+ module Automaticlogout
3
3
  module Helpers
4
- def regressive_timer(visible: false)
5
- render 'automatic_logout/timer', visible: visible
4
+ def regressive_timer(visible: false, alert: false)
5
+ render 'automatic_logout/timer', visible: visible, alert: alert
6
6
  end
7
7
  end
8
8
  end
@@ -1,5 +1,5 @@
1
1
  module Devise
2
2
  module Automaticlogout
3
- VERSION = '0.2.2'.freeze
3
+ VERSION = '1.0.0'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,69 +1,69 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: devise-automaticlogout
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thadeu Esteves Jr
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-04-29 00:00:00.000000000 Z
11
+ date: 2020-10-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '4'
19
+ version: '5'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '4'
26
+ version: '5'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: devise
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: '4'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: '4'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rubocop
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: sqlite3
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  description: Provides automatic session timeout in a Rails Devise application.
@@ -76,6 +76,7 @@ files:
76
76
  - MIT-LICENSE
77
77
  - README.md
78
78
  - Rakefile
79
+ - app/controllers/automaticlogout_controller.rb
79
80
  - app/views/automatic_logout/_timer.html.erb
80
81
  - config/routes.rb
81
82
  - lib/assets/javascripts/automatic_logout.js
@@ -88,11 +89,11 @@ files:
88
89
  - lib/devise/automaticlogout/engine.rb
89
90
  - lib/devise/automaticlogout/helpers.rb
90
91
  - lib/devise/automaticlogout/version.rb
91
- homepage: https://github.com/Thadeu/devise-automaticlogout
92
+ homepage: https://github.com/thadeu/devise-automaticlogout
92
93
  licenses:
93
94
  - MIT
94
95
  metadata: {}
95
- post_install_message:
96
+ post_install_message:
96
97
  rdoc_options: []
97
98
  require_paths:
98
99
  - lib
@@ -107,9 +108,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
107
108
  - !ruby/object:Gem::Version
108
109
  version: '0'
109
110
  requirements: []
110
- rubyforge_project:
111
- rubygems_version: 2.5.1
112
- signing_key:
111
+ rubyforge_project:
112
+ rubygems_version: 2.7.6
113
+ signing_key:
113
114
  specification_version: 4
114
115
  summary: Provides automatic session timeout in a Rails Devise application.
115
116
  test_files: []