rails-automaticlogout 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 3746c6de9b1b0d8a3f5d5aa0ab9fd7f239a1aea3
4
+ data.tar.gz: e5159df8503aad1f9b4a44e93a60fc886b4d6206
5
+ SHA512:
6
+ metadata.gz: 086a52d6ba0b6f503aeb7926d943dcd90dbc363fc34669aeedb7026b42d4921678a6b1036fd5fde8e66e5ff59070ab20e97c4cd24ede4df5948a9feeab4c28de
7
+ data.tar.gz: b723d77f8d35cdfe778635572ee987e695606962bed92aa27de0e1c18b5e7ca6e5b3270ba276f7e8bd1a949562065ec0bfab202a9bf70fac3fc9f316634e7dce
data/.gitignore ADDED
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in automaticlogout.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,77 @@
1
+ # Rails Automatic Logout
2
+ By Thadeu Esteves Jr.
3
+
4
+ [![Gem Version](https://badge.fury.io/rb/rails-automaticlogout.svg)](https://badge.fury.io/rb/rails-automaticlogout)
5
+
6
+ Provides automatic session timeout in a Rails application. Very easy to install and configure. Have you ever wanted to force your users off your app if they go idle for a certain period of time? Many online banking sites use this technique. If your app is used on any kind of public computer system, this plugin is a necessity.
7
+
8
+ * Force your users power off session
9
+ * show for they the regressive time
10
+
11
+ ## Getting started
12
+
13
+ Rails Automatic Logout works only Rails 4. You can add it to your Gemfile with:
14
+
15
+ ```ruby
16
+ gem 'rails-automaticlogout'
17
+ ```
18
+
19
+ Then run bundle install
20
+
21
+ ## How to use?
22
+
23
+ ### Configure Controller
24
+
25
+ After installing, add in your application controller, _ex:_
26
+
27
+ ```ruby
28
+ class ApplicationController < ActionController::Base
29
+ before_action :authenticate_user!
30
+
31
+ # by default is time 1.hour
32
+ automatic_logout_at
33
+ end
34
+ ```
35
+
36
+ By default the time is _1.hour_
37
+
38
+ #### Change timeout value.
39
+
40
+ ```ruby
41
+ class ApplicationController < ActionController::Base
42
+ before_action :authenticate_user!
43
+
44
+ # by default is time 1.hour
45
+ automatic_logout_at time: 5.minutes
46
+ end
47
+ ```
48
+
49
+ #### Change message
50
+
51
+ ```ruby
52
+ class ApplicationController < ActionController::Base
53
+ before_action :authenticate_user!
54
+
55
+ # by default is time 1.hour
56
+ automatic_logout_at time: 12.hour,
57
+ message: 'Session expired! You will be redirect.'
58
+ end
59
+ ```
60
+
61
+ ### Configure View (OPTIONAL)
62
+
63
+ Use Helper in your view, for show regressive timer. Add this in your file application.html.erb
64
+
65
+ ```ruby
66
+ <%= regressive_timer %>
67
+ ```
68
+
69
+ ## TODO
70
+ * Add translations
71
+ * Add configurations for action_view
72
+ * Add Suport for Rails 5.x
73
+
74
+
75
+ ## Contributing
76
+
77
+ We have a long list of valued contributors. Check them all at: https://github.com/Thadeu/rails-automaticlogout.
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+ task :default => :spec
@@ -0,0 +1,22 @@
1
+ (function automaticLogoutJs(){
2
+ setTimeout(function () {
3
+ $.ajax({
4
+ url: '/status_automatic_logout',
5
+ success: function(data) {
6
+ if (data.timeout != "null" && data.live == true){
7
+ var response_timeout = (new Date(data.timeout).getTime());
8
+
9
+ setInterval(function(){
10
+ var now_time = (new Date().getTime());
11
+
12
+ if ((response_timeout < now_time) == true){
13
+ if (confirm(data.message)){
14
+ window.location.href = '/destroy_automatic_logout';
15
+ }
16
+ }
17
+ }, data.seconds * 1000) // utiliza o mesmo valor em seconds que a pessoa irá ficar logado
18
+ }
19
+ }
20
+ });
21
+ }, 1000); //1s
22
+ }());
@@ -0,0 +1,26 @@
1
+ module AutomaticLogout
2
+ class SessionsController < ApplicationController
3
+ skip_before_action :authenticate_user!, only: [:status, :destroy]
4
+
5
+ def status
6
+ response = {
7
+ live: !!current_user,
8
+ timeout: session[:auto_session_expires_at],
9
+ message: session[:message],
10
+ seconds: session[:seconds]
11
+ }
12
+
13
+ render json: response
14
+ end
15
+
16
+ def destroy
17
+ session[:auto_session_expires_at] = ''
18
+ session[:seconds] = ''
19
+ session[:live] = !!current_user
20
+
21
+ reset_session
22
+
23
+ redirect_to root_path, notice: session[:message]
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,60 @@
1
+ <script>
2
+ var timer = "<%= session[:auto_session_expires_at] %>";
3
+ var now_in_seconds = new Date().getTime() / 1000;
4
+ var timeout_in_seconds = new Date(timer).getTime() / 1000;
5
+
6
+ var target_date = new Date(timer).getTime();
7
+ var dias, horas, minutos, segundos;
8
+
9
+ var diff_in_seconds = new Number();
10
+ diff_in_seconds = (timeout_in_seconds - now_in_seconds).toFixed(0);
11
+
12
+ function regressive(){
13
+
14
+ if (diff_in_seconds <= 0){
15
+ if (confirm("<%= session[:message] %>")){
16
+ window.location.href = '/destroy_automatic_logout';
17
+ }
18
+ }else{
19
+ var current_date = new Date().getTime();
20
+ var segundos_f = (target_date - current_date) / 1000;
21
+
22
+ dias = parseInt(segundos_f / 86400);
23
+ segundos_f = segundos_f % 86400;
24
+
25
+ horas = parseInt(segundos_f / 3600);
26
+ segundos_f = segundos_f % 3600;
27
+
28
+ minutos = parseInt(segundos_f / 60);
29
+ segundos = parseInt(segundos_f % 60);
30
+
31
+ // Formata o número menor que dez, ex: 08, 07, ...
32
+ if(horas < 10){
33
+ horas = "0"+horas;
34
+ horas = horas.substr(0, 2);
35
+ }
36
+
37
+ if(minutos < 10){
38
+ minutos = "0"+minutos;
39
+ minutos = minutos.substr(0, 2);
40
+ }
41
+
42
+ if(segundos <=9){
43
+ segundos = "0"+segundos;
44
+ }
45
+
46
+ if (diff_in_seconds >= 0){
47
+ $('.regressive-timer').text(horas + ':' + minutos + ':' + segundos);
48
+ }
49
+
50
+ setTimeout('regressive()',1000);
51
+
52
+ diff_in_seconds--;
53
+ }
54
+ }
55
+
56
+ regressive();
57
+
58
+ </script>
59
+
60
+ <div class="regressive-timer"></div>
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "automaticlogout"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
data/config/routes.rb ADDED
@@ -0,0 +1,4 @@
1
+ Rails.application.routes.draw do
2
+ get 'status_automatic_logout' => 'automatic_logout/sessions#status'
3
+ get 'destroy_automatic_logout' => 'automatic_logout/sessions#destroy'
4
+ end
@@ -0,0 +1,25 @@
1
+ module Rails::AutomaticLogout
2
+ module Controllers
3
+ module Helpers
4
+ def self.included(base)
5
+ base.extend ClassMethods
6
+ end
7
+
8
+ module ClassMethods
9
+ def automatic_logout_at(time: 1.hour, message: "Session expired! You will be redirect.")
10
+ prepend_before_filter do |c|
11
+ if c.session[:auto_session_expires_at].present? && c.session[:auto_session_expires_at] < Time.now
12
+ c.send :reset_session
13
+ else
14
+ if current_user
15
+ c.session[:auto_session_expires_at] = Time.now + time
16
+ c.session[:message] = message
17
+ c.session[:seconds] = time.seconds
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,13 @@
1
+ module Rails
2
+ module AutomaticLogout
3
+ class Engine < ::Rails::Engine
4
+ ActiveSupport.on_load :action_controller do
5
+ include Rails::AutomaticLogout::Controllers::Helpers if defined?(Rails::AutomaticLogout::Controllers::Helpers)
6
+ end
7
+
8
+ ActiveSupport.on_load :action_view do
9
+ include Rails::AutomaticLogout::Views::Helpers if defined?(Rails::AutomaticLogout::Views::Helpers)
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,5 @@
1
+ module Rails
2
+ module AutomaticLogout
3
+ VERSION = "0.1.0"
4
+ end
5
+ end
@@ -0,0 +1,9 @@
1
+ module Rails::AutomaticLogout
2
+ module Views
3
+ module Helpers
4
+ def regressive_timer
5
+ render 'automatic_logout/timer.js'
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,4 @@
1
+ require 'rails'
2
+ require 'rails/automaticlogout/controllers/helpers'
3
+ require 'rails/automaticlogout/views/helpers'
4
+ require 'rails/automaticlogout/engine'
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'rails/automaticlogout/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "rails-automaticlogout"
8
+ spec.version = Rails::AutomaticLogout::VERSION
9
+ spec.authors = ["Thadeu Esteves Jr"]
10
+ spec.email = ["tadeuu@gmail.com"]
11
+
12
+ spec.summary = %q{Provides automatic session timeout in a Rails application.}
13
+ spec.description = %q{Provides automatic session timeout in a Rails application.}
14
+ spec.homepage = "http://github.com/thadeu/rails-automaticlogout"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
+ spec.bindir = "exe"
18
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.3"
22
+ spec.add_development_dependency "rake"
23
+ spec.add_development_dependency "actionpack", "~> 3.2"
24
+ end
metadata ADDED
@@ -0,0 +1,101 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rails-automaticlogout
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Thadeu Esteves Jr
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2016-12-09 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: actionpack
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.2'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.2'
55
+ description: Provides automatic session timeout in a Rails application.
56
+ email:
57
+ - tadeuu@gmail.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ".gitignore"
63
+ - Gemfile
64
+ - README.md
65
+ - Rakefile
66
+ - app/assets/javascripts/automatic_logout.js
67
+ - app/controllers/automatic_logout/sessions_controller.rb
68
+ - app/views/automatic_logout/_timer.js.erb
69
+ - bin/console
70
+ - bin/setup
71
+ - config/routes.rb
72
+ - lib/rails-automaticlogout.rb
73
+ - lib/rails/automaticlogout/controllers/helpers.rb
74
+ - lib/rails/automaticlogout/engine.rb
75
+ - lib/rails/automaticlogout/version.rb
76
+ - lib/rails/automaticlogout/views/helpers.rb
77
+ - rails-automaticlogout.gemspec
78
+ homepage: http://github.com/thadeu/rails-automaticlogout
79
+ licenses: []
80
+ metadata: {}
81
+ post_install_message:
82
+ rdoc_options: []
83
+ require_paths:
84
+ - lib
85
+ required_ruby_version: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ required_rubygems_version: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ requirements: []
96
+ rubyforge_project:
97
+ rubygems_version: 2.6.8
98
+ signing_key:
99
+ specification_version: 4
100
+ summary: Provides automatic session timeout in a Rails application.
101
+ test_files: []