devise-automaticlogout 0.2.2 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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: []