session_timeout_prompter 0.1.1 → 0.1.2
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
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8c7fbaf882ad6d1a5a7db7e458d261f10d99727a
|
4
|
+
data.tar.gz: 338e1df2e8fe1d5771e332bab2811aff96c08e06
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a9f5905795425218208f886f1351727dbd04144f3079858cb032f50adf35baecc919558caa38b677b1f9e5399a4b60531bb21cce02301dfe8f57550a0580091a
|
7
|
+
data.tar.gz: f9b973def95f829b61592cc3549fc5ba768fd8347dd0c89c9211f384cf065a2f88f1d9e338014bd05ea1796d2001a4fcd4a75d8ec1e3a68257f8831422d36e2b
|
data/README.md
CHANGED
@@ -10,10 +10,16 @@ Add the gem to your Gemfile:
|
|
10
10
|
gem 'session_timeout_prompter'
|
11
11
|
```
|
12
12
|
|
13
|
+
Run bundle install
|
14
|
+
|
15
|
+
```ruby
|
16
|
+
bundle install
|
17
|
+
```
|
18
|
+
|
13
19
|
Mount the engine in your routes:
|
14
20
|
|
15
21
|
```ruby
|
16
|
-
mount SessionTimeoutPrompter::Engine at: "/session_timeout_prompter"
|
22
|
+
mount SessionTimeoutPrompter::Engine, at: "/session_timeout_prompter"
|
17
23
|
```
|
18
24
|
|
19
25
|
Require the js:
|
@@ -35,7 +41,7 @@ Require the css:
|
|
35
41
|
Add the following after the body tag in your layout or on any page you wish to display the timeout prompt:
|
36
42
|
|
37
43
|
```ruby
|
38
|
-
=
|
44
|
+
= init_session_timeout_prompter(session_timeout_in_seconds: User.timeout_in.to_i, seconds_to_warn_before_timeout: 305, scope: :user)
|
39
45
|
```
|
40
46
|
(The example values assume you are using Devise timeoutable and are using a scope/model called User. The scope is purely so you can use multiple in the same application if necessary.)
|
41
47
|
|
@@ -41,6 +41,7 @@ var Bootstrap3PromptRenderer = (function () {
|
|
41
41
|
value: function hideAll() {
|
42
42
|
this.timeoutWarningModal.modal('hide');
|
43
43
|
this.timedOutModal.modal('hide');
|
44
|
+
this.currentlyShowingWarningPrompt = false;
|
44
45
|
}
|
45
46
|
}, {
|
46
47
|
key: 'updateRemainingTimeText',
|
@@ -104,6 +105,20 @@ var ServerPinger = (function () {
|
|
104
105
|
})();
|
105
106
|
'use strict';
|
106
107
|
|
108
|
+
var sessionTimeoutPrompter = undefined;
|
109
|
+
jQuery(function () {
|
110
|
+
|
111
|
+
var timeoutPrompterContainer = jQuery('#session-timeout-prompter-container');
|
112
|
+
|
113
|
+
// If the container cannot be found then assume we don't need timeout prompting on this page.
|
114
|
+
if (timeoutPrompterContainer.length) {
|
115
|
+
var configData = timeoutPrompterContainer.data();
|
116
|
+
sessionTimeoutPrompter = new SessionTimeoutPrompter(configData);
|
117
|
+
sessionTimeoutPrompter.start();
|
118
|
+
}
|
119
|
+
});
|
120
|
+
'use strict';
|
121
|
+
|
107
122
|
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
|
108
123
|
|
109
124
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
|
@@ -113,7 +128,7 @@ var SessionTimeoutPrompter = (function () {
|
|
113
128
|
_classCallCheck(this, SessionTimeoutPrompter);
|
114
129
|
|
115
130
|
var serverPingPath = configData.serverPingPath;
|
116
|
-
var
|
131
|
+
var secondsToWarnBeforeTimeout = configData.secondsToWarnBeforeTimeout;
|
117
132
|
var sessionTimeoutInSeconds = configData.sessionTimeoutInSeconds;
|
118
133
|
var sessionKey = configData.sessionKey;
|
119
134
|
|
@@ -123,7 +138,7 @@ var SessionTimeoutPrompter = (function () {
|
|
123
138
|
|
124
139
|
var promptRenderer = new Bootstrap3PromptRenderer(timeoutWarningModal, timedOutModal, remainingTimeContainer);
|
125
140
|
|
126
|
-
this.timeoutTimer = new TimeoutTimer(
|
141
|
+
this.timeoutTimer = new TimeoutTimer(secondsToWarnBeforeTimeout, sessionTimeoutInSeconds, sessionKey, promptRenderer);
|
127
142
|
this.serverPinger = new ServerPinger(serverPingPath);
|
128
143
|
this.remainLoggedInButton = jQuery('#session-timeout-prompter-remain-logged-in-btn');
|
129
144
|
}
|
@@ -167,20 +182,6 @@ var SessionTimeoutPrompter = (function () {
|
|
167
182
|
|
168
183
|
return SessionTimeoutPrompter;
|
169
184
|
})();
|
170
|
-
'use strict';
|
171
|
-
|
172
|
-
var sessionTimeoutPrompter = undefined;
|
173
|
-
jQuery(function () {
|
174
|
-
|
175
|
-
var timeoutPrompterContainer = jQuery('#session-timeout-prompter-container');
|
176
|
-
|
177
|
-
// If the container cannot be found then assume we don't need timeout prompting on this page.
|
178
|
-
if (timeoutPrompterContainer.length) {
|
179
|
-
var configData = timeoutPrompterContainer.data();
|
180
|
-
sessionTimeoutPrompter = new SessionTimeoutPrompter(configData);
|
181
|
-
sessionTimeoutPrompter.start();
|
182
|
-
}
|
183
|
-
});
|
184
185
|
"use strict";
|
185
186
|
|
186
187
|
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
|
@@ -189,18 +190,18 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons
|
|
189
190
|
|
190
191
|
var TimeoutTimer = (function () {
|
191
192
|
|
192
|
-
//
|
193
|
+
// secondsToWarnBeforeTimeout: Warning that their session is about to timeout
|
193
194
|
// when there are this many minutes left.
|
194
195
|
// sessionTimeoutInSeconds: Tell them their session has timed out when this
|
195
196
|
// many minutes have elapsed.
|
196
197
|
// sessionKey: Unique key for this session - used in local storage
|
197
198
|
// to make sure multiple browser tabs are synched.
|
198
199
|
|
199
|
-
function TimeoutTimer(
|
200
|
+
function TimeoutTimer(secondsToWarnBeforeTimeout, sessionTimeoutInSeconds, sessionKey, promptRenderer) {
|
200
201
|
_classCallCheck(this, TimeoutTimer);
|
201
202
|
|
202
203
|
this.sessionTimeoutInSeconds = sessionTimeoutInSeconds;
|
203
|
-
this.
|
204
|
+
this.secondsToWarnBeforeTimeout = secondsToWarnBeforeTimeout;
|
204
205
|
this.sessionKey = sessionKey;
|
205
206
|
this.promptRenderer = promptRenderer;
|
206
207
|
this.tickInterval = undefined;
|
@@ -248,7 +249,7 @@ var TimeoutTimer = (function () {
|
|
248
249
|
var timeLeftInSeconds = this.timeoutAt - this.currentTimestamp();
|
249
250
|
if (timeLeftInSeconds <= 0) {
|
250
251
|
this.showTimedOutPrompt();
|
251
|
-
} else if (timeLeftInSeconds <= this.
|
252
|
+
} else if (timeLeftInSeconds <= this.secondsToWarnBeforeTimeout) {
|
252
253
|
this.showTimeoutWarningPrompt(timeLeftInSeconds);
|
253
254
|
}
|
254
255
|
}
|
@@ -4,19 +4,19 @@ module SessionTimeoutPrompter
|
|
4
4
|
# session_timeout_in_seconds: The session timeout length set for your app
|
5
5
|
# (most often from User.timeout_in.to_i if using Devise)
|
6
6
|
#
|
7
|
-
#
|
7
|
+
# seconds_to_warn_before_timeout: Show a warning this many seconds before the session times out.
|
8
8
|
#
|
9
9
|
# scope: e.g. :user - most often the name of the Devise scope/model
|
10
10
|
#
|
11
11
|
# session_key: Unique key for this app and scope - used to enable multi-tab support
|
12
|
-
def init_session_timeout_prompter(session_timeout_in_seconds:,
|
12
|
+
def init_session_timeout_prompter(session_timeout_in_seconds:, seconds_to_warn_before_timeout:, scope:)
|
13
13
|
render(
|
14
14
|
partial: "session_timeout_prompter/modal_dialogs",
|
15
15
|
locals: {
|
16
16
|
container_data_attributes: {
|
17
17
|
server_ping_path: session_timeout_prompter.server_pings_path,
|
18
18
|
session_timeout_in_seconds: session_timeout_in_seconds,
|
19
|
-
|
19
|
+
seconds_to_warn_before_timeout: seconds_to_warn_before_timeout,
|
20
20
|
session_key: "#{::Rails.application.class.parent_name.downcase}-#{scope}"
|
21
21
|
}
|
22
22
|
}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: session_timeout_prompter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ant Nettleship
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-09-
|
11
|
+
date: 2017-09-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -248,6 +248,20 @@ dependencies:
|
|
248
248
|
- - ">="
|
249
249
|
- !ruby/object:Gem::Version
|
250
250
|
version: '0'
|
251
|
+
- !ruby/object:Gem::Dependency
|
252
|
+
name: phantomjs
|
253
|
+
requirement: !ruby/object:Gem::Requirement
|
254
|
+
requirements:
|
255
|
+
- - ">="
|
256
|
+
- !ruby/object:Gem::Version
|
257
|
+
version: '0'
|
258
|
+
type: :development
|
259
|
+
prerelease: false
|
260
|
+
version_requirements: !ruby/object:Gem::Requirement
|
261
|
+
requirements:
|
262
|
+
- - ">="
|
263
|
+
- !ruby/object:Gem::Version
|
264
|
+
version: '0'
|
251
265
|
description:
|
252
266
|
email:
|
253
267
|
- anthony.nettleship@epigenesys.org.uk
|