session_timeout_prompter 0.1.1 → 0.1.2
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
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
|