intra 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
  SHA256:
3
- metadata.gz: cf985d8472b139ca940b7bc455f3d375c7b9ca77ca89fac60eaee241819ed15f
4
- data.tar.gz: 415cd8474d33c5723929227b88276d5e38dc2db190f01932052d0bbd7fa8b57a
3
+ metadata.gz: 0f45d8079fd761223276219cedbbc2c601658aa791af0b911349c33281fe8e2a
4
+ data.tar.gz: 567436e5ef554627a46a80b8ceac8e1c7ae3bc9896dc8bca7a3028a227178ed1
5
5
  SHA512:
6
- metadata.gz: 9e4e394b9d3e97cdc2e51e320c4aecfb638029b4c854755f278e6e7aec9c6be3154d7541fc7ec79f5ce1650f4f2810d5da4fd997c49ec419ff826db5c4908f76
7
- data.tar.gz: 40446b8b4658eac5bdf101958224d87dccc74d9b76451fe5cd16aebb2e5347bd904d34d9dcc644c6fea761a5338b6d1082fedb3c9798b923d353d3144a5928e9
6
+ metadata.gz: eaa01a2d6d4f1968e518662211c6e910cb887563cc429fa92f1a451fd41f0d2a1663b007a78ddb673d66805ff1109da232144b3418ce2234fcfbe5167646f994
7
+ data.tar.gz: e430fb2159fa71d8f186532562a541aaf697598af19137c96f017f8cd527325cbaf044f165c43fe85fc62afcf3e6a8e8f080bff6ce202de88a1c11134de23936
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- intra (0.1.1)
4
+ intra (0.1.2)
5
5
  omniauth
6
6
  omniauth-google-oauth2
7
7
  rails
@@ -136,6 +136,7 @@ GEM
136
136
  sqlite3 (1.4.1)
137
137
  thor (0.20.3)
138
138
  thread_safe (0.3.6)
139
+ timecop (0.9.1)
139
140
  tzinfo (1.2.5)
140
141
  thread_safe (~> 0.1)
141
142
  websocket-driver (0.7.1)
@@ -152,6 +153,7 @@ DEPENDENCIES
152
153
  minitest (~> 5.0)
153
154
  rake (~> 10.0)
154
155
  sqlite3
156
+ timecop
155
157
 
156
158
  BUNDLED WITH
157
159
  2.0.1
data/intra.gemspec CHANGED
@@ -35,4 +35,5 @@ Gem::Specification.new do |spec|
35
35
  spec.add_development_dependency "minitest", "~> 5.0"
36
36
  spec.add_development_dependency "sqlite3"
37
37
  spec.add_development_dependency "byebug"
38
+ spec.add_development_dependency "timecop"
38
39
  end
data/lib/intra.rb CHANGED
@@ -1,8 +1,8 @@
1
- require 'logger' unless defined?(Logger)
2
- require 'rails/engine' unless defined?(Rails::Engine)
1
+ require 'logger'
2
+ require 'rails/engine'
3
+ require 'action_dispatch'
3
4
  require 'omniauth'
4
5
  require 'omniauth-google-oauth2'
5
- require 'action_dispatch'
6
6
 
7
7
  require 'intra/version'
8
8
  require 'intra/session'
@@ -13,30 +13,24 @@ require 'intra/request_forgery_protection'
13
13
  require 'intra/engine'
14
14
 
15
15
  module Intra
16
- # Configure the path to redirect unauthenticated session. Default '/sign_in'
17
- def self.sign_in_path(path)
18
- @@sign_in_path = path
19
- end
20
-
21
- def self.sign_in_path
22
- @@sign_in_path ||= '/sign_in'
23
- end
16
+ # Configure the path to redirect unauthenticated session. Default '/sign_in'.
17
+ mattr_accessor :sign_in_path
18
+ @@sign_in_path = '/sign_in'
24
19
 
25
20
  # Configure the user class. Default 'User'
26
- def self.user_class=(user_class)
27
- @@user_class = user_class
28
- end
21
+ mattr_accessor :user_class
22
+ @@user_class = 'User'
29
23
 
30
- def self.user_class
31
- @@user_class ||= 'User'
32
- end
24
+ # Configure the logger Intra will use. Defaults to Logger.new($STDOUT).
25
+ mattr_accessor :logger
26
+ @@logger = Logger.new($STDOUT)
33
27
 
34
- # Configure the logger Intra will use. Defaults to Logger.new($STDOUT)
35
- def self.logger=(logger)
36
- @@logger = logger
37
- end
28
+ # The session cookie expiration.
29
+ mattr_accessor :remember_for
30
+ @@remember_for = 2.weeks
38
31
 
39
- def self.logger
40
- @@logger ||= Logger.new($STDOUT)
41
- end
32
+ # Time interval to timeout the user sesion without activity.
33
+ # Set this to nil if you do not want to timeout the user serssion.
34
+ mattr_accessor :timeout_in
35
+ @@timeout_in = 30.minutes
42
36
  end
data/lib/intra/session.rb CHANGED
@@ -4,12 +4,15 @@ module Intra
4
4
  @env = env
5
5
  @current_user = nil
6
6
  @cookies = nil
7
+ check_timeout
7
8
  end
8
9
 
9
10
  def add_cookie_to_headers(headers)
10
11
  if current_user&.remember_token
11
- options = cookie_options.merge value: current_user.remember_token
12
- Rack::Utils.set_cookie_header! headers, COOKIE_NAME, options
12
+ value = cookie_value
13
+ value['remember_token'] = current_user.remember_token
14
+ options = cookie_options.merge value: value.to_json
15
+ Rack::Utils.set_cookie_header! headers, INTRA_COOKIE, options
13
16
  end
14
17
  end
15
18
 
@@ -28,7 +31,7 @@ module Intra
28
31
  current_user.reset_remember_token! if signed_in?
29
32
 
30
33
  @current_user = nil
31
- cookies.delete COOKIE_NAME
34
+ cookies.delete INTRA_COOKIE
32
35
  end
33
36
 
34
37
  def signed_in?
@@ -39,29 +42,55 @@ module Intra
39
42
  !signed_in?
40
43
  end
41
44
 
45
+ def check_timeout
46
+ sign_out if timed_out?
47
+ end
48
+
42
49
  private
43
50
 
44
- def user_model
45
- Intra.user_class.constantize
51
+ def timed_out?
52
+ return false unless Intra.timeout_in.present?
53
+ return false unless last_activity_at.present?
54
+
55
+ Time.current - Intra.timeout_in > last_activity_at
56
+ end
57
+
58
+ def cookie
59
+ @cookie ||= JSON.parse cookies[INTRA_COOKIE] rescue {}
60
+ end
61
+
62
+ def remember_token
63
+ cookie['remember_token']
64
+ end
65
+
66
+ def last_activity_at
67
+ cookie['last_activity_at']
46
68
  end
47
69
 
48
70
  def cookies
49
71
  @cookies ||= ActionDispatch::Request.new(@env).cookie_jar
50
72
  end
51
73
 
52
- def remember_token
53
- cookies[COOKIE_NAME]
74
+ def user_model
75
+ Intra.user_class.constantize
54
76
  end
55
77
 
56
78
  def cookie_options
57
79
  {
58
- expires: 1.week.from_now,
80
+ expires: Intra.remember_for.from_now,
59
81
  path: '/',
60
82
  secure: Rails.env.production?,
61
- value: remember_token
83
+ value: cookie_value.to_json
84
+ }
85
+ end
86
+
87
+ def cookie_value
88
+ {
89
+ remember_token: remember_token,
90
+ last_activity_at: Time.current
62
91
  }
63
92
  end
64
93
 
65
- COOKIE_NAME = 'remember_token'.freeze
94
+ INTRA_COOKIE = '_intra_cookie'.freeze
66
95
  end
67
96
  end
data/lib/intra/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Intra
2
- VERSION = "0.1.1"
2
+ VERSION = '0.1.2'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: intra
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Scott Serok
@@ -122,6 +122,20 @@ dependencies:
122
122
  - - ">="
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: timecop
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
125
139
  description: Many companies have internal apps to support their day to day operations.
126
140
  This library is a drop-in Google OAuth authentication and session management library
127
141
  so you don't have to install Devise.