hubssolib 2.1.0 → 3.0.1

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
  SHA256:
3
- metadata.gz: 5fafbf54747841c2d90eaa755481e8c1eecf9e060d64e62d7ff6a446acf2bbc4
4
- data.tar.gz: 2243d8561879026aedc904f6505e3a38e2193db7ed5d94540bc520976e15ef23
3
+ metadata.gz: 36b026e98baa7f70c200a5abe0ff7e5e3a874e9aaf5a1f88c33114e45cb1ab14
4
+ data.tar.gz: d19ff3d675d0b63286e06c03b6c3bce05be434a16f554533efde1152bb9c2641
5
5
  SHA512:
6
- metadata.gz: a3653217e5809704a69b20fcae5f94a3066ed26085fdced81c36c8f8bf99b9299212ddf51fde2af411790dd51ebcbd004fe4993c61c0a6588e39f8b080a6abce
7
- data.tar.gz: 437fa627ad45ae7baa8e9772a3c1157db324d7b62d889fb53eb81b395317b985b02a5d04ee1f4e7cd1111de3ca24ed16376913ad0b5328b4e630ff241167d793
6
+ metadata.gz: a8d0724e454ffab27e616a91b1aa9837d4aefa5dff6d871bb92671ddefda789626e7cf3ed2dc523b48d4a09bcb3210c81ff279c7e553d2d579c8b00d6af693dd
7
+ data.tar.gz: 36f17712168ba66f8de41193c41959dfa3ddb81e1ae5c683f4f747d177a6e4f5643aee2a8b387eaa244f0945608ee88f70552143f58f344e2a4078dabbf65ea4
data/CHANGELOG.md CHANGED
@@ -1,3 +1,58 @@
1
+ ## 3.0.0, 28-Jan-2025 and 3.0.1, 03-Feb-2025
2
+
3
+ * The Hub "login indication" URL approach is now dropped, so layout templates **should be updated.**
4
+
5
+ In Hub v1 and v2, login indication was done via an image that was served by the Hub application itself, wrapped in a link that visited a "conditional login" endpoint which stored the return-to URL, ensured HTTPS was in use and visited either the log in, or log out page as required. In client applications it looked a bit like this:
6
+
7
+ ```html
8
+ <a class="img" href="<%= ENV['HUB_PATH_PREFIX'] %>/account/login_conditional">
9
+ <img src="<%= ENV['HUB_PATH_PREFIX'] %>/account/login_indication" alt="Account" height="22" width="90" />
10
+ </a>
11
+ ```
12
+
13
+ This dates back to a time when CSS support was not that widespread and RISC OS Open needed the web site to work well on web browsers available at the time. Things have improved considerably since then, so now a cleaner, pure CSS solution is used. This requires no image fetch via the Hub application. Just use:
14
+
15
+ ```ruby
16
+ <%= hubssolib_account_link() %>
17
+ ```
18
+
19
+ ...in place of the markup above. You probably want to add some supporting CSS too; for example:
20
+
21
+ ```css
22
+ #hubssolib_login_indication a#hubssolib_logged_in_link,
23
+ #hubssolib_login_indication a#hubssolib_logged_out_link {
24
+ display: block;
25
+ text-align: center;
26
+ text-decoration: none;
27
+ font: sans-serif;
28
+ font-size: 10pt;
29
+ line-height: 20px;
30
+ height: 20px;
31
+ width: 88px;
32
+ border: 1px solid #ccc;
33
+ }
34
+
35
+ #hubssolib_login_indication a#hubssolib_logged_in_link {
36
+ color: #050;
37
+ border-color: #050;
38
+ background: #efe;
39
+ }
40
+
41
+ #hubssolib_login_indication a#hubssolib_logged_out_link {
42
+ color: #500;
43
+ border-color: #500;
44
+ background: #fee;
45
+ }
46
+
47
+ #hubssolib_login_indication a#hubssolib_login_noscript {
48
+ text-decoration: none;
49
+ }
50
+ ```
51
+
52
+ Version 3.0.1 patches the system to make sure that the correct current login state is shown even if a browser has a page cached. To achieve this, JavaScript is used to check cookie state and update the indication on-the-fly. There is a `noscript` fallback that uses the old, inefficient `login_indication` image mechanism - just in case. The CSS styles above are designed to match those images, though of course, they certainly don't have to!
53
+
54
+
55
+
1
56
  ## 2.1.0, 01-Jul-2022
2
57
 
3
58
  * Use `HUB_QUIET_SERVER=yes ...` to quieten `$stdout` output from Hub server.
@@ -5,6 +60,8 @@
5
60
  * Maintenance `bundle update`.
6
61
  * A few minor tidy-ups in the implementation.
7
62
 
63
+
64
+
8
65
  ## Version 1.0.0 -> Version 2.0.0, 19-Apr-2020
9
66
 
10
67
  The public interface to applications is generally unchanged, but the cookie storage mechanism has been improved and is not compatible with v1 of Hub. You will need to use the newer Hub application, server and gem, but hopefully will find you don't need to change anything with your integrated applications.
data/Gemfile.lock CHANGED
@@ -1,46 +1,69 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- hubssolib (2.1.0)
4
+ hubssolib (3.0.1)
5
+ base64 (~> 0.2)
6
+ drb (~> 2.2)
5
7
 
6
8
  GEM
7
9
  remote: https://rubygems.org/
8
10
  specs:
9
- byebug (11.1.3)
10
- diff-lcs (1.5.0)
11
- docile (1.4.0)
12
- doggo (1.2.0)
13
- rspec-core (~> 3.10)
14
- rspec (3.11.0)
15
- rspec-core (~> 3.11.0)
16
- rspec-expectations (~> 3.11.0)
17
- rspec-mocks (~> 3.11.0)
18
- rspec-core (3.11.0)
19
- rspec-support (~> 3.11.0)
20
- rspec-expectations (3.11.0)
11
+ base64 (0.2.0)
12
+ date (3.4.1)
13
+ debug (1.10.0)
14
+ irb (~> 1.10)
15
+ reline (>= 0.3.8)
16
+ diff-lcs (1.5.1)
17
+ docile (1.4.1)
18
+ doggo (1.4.0)
19
+ rspec-core (~> 3.13)
20
+ drb (2.2.1)
21
+ io-console (0.8.0)
22
+ irb (1.15.1)
23
+ pp (>= 0.6.0)
24
+ rdoc (>= 4.0.0)
25
+ reline (>= 0.4.2)
26
+ pp (0.6.2)
27
+ prettyprint
28
+ prettyprint (0.2.0)
29
+ psych (5.2.3)
30
+ date
31
+ stringio
32
+ rdoc (6.11.0)
33
+ psych (>= 4.0.0)
34
+ reline (0.6.0)
35
+ io-console (~> 0.5)
36
+ rspec (3.13.0)
37
+ rspec-core (~> 3.13.0)
38
+ rspec-expectations (~> 3.13.0)
39
+ rspec-mocks (~> 3.13.0)
40
+ rspec-core (3.13.2)
41
+ rspec-support (~> 3.13.0)
42
+ rspec-expectations (3.13.3)
21
43
  diff-lcs (>= 1.2.0, < 2.0)
22
- rspec-support (~> 3.11.0)
23
- rspec-mocks (3.11.1)
44
+ rspec-support (~> 3.13.0)
45
+ rspec-mocks (3.13.2)
24
46
  diff-lcs (>= 1.2.0, < 2.0)
25
- rspec-support (~> 3.11.0)
26
- rspec-support (3.11.0)
27
- simplecov (0.21.2)
47
+ rspec-support (~> 3.13.0)
48
+ rspec-support (3.13.2)
49
+ simplecov (0.22.0)
28
50
  docile (~> 1.1)
29
51
  simplecov-html (~> 0.11)
30
52
  simplecov_json_formatter (~> 0.1)
31
- simplecov-html (0.12.3)
53
+ simplecov-html (0.13.1)
32
54
  simplecov_json_formatter (0.1.4)
55
+ stringio (3.1.2)
33
56
 
34
57
  PLATFORMS
35
58
  ruby
36
59
 
37
60
  DEPENDENCIES
38
- byebug (~> 11.1)
39
- doggo (~> 1.2)
61
+ debug (~> 1.1)
62
+ doggo (~> 1.4)
40
63
  hubssolib!
41
- rspec (~> 3.8)
42
- rspec-mocks (~> 3.8)
43
- simplecov (~> 0.16)
64
+ rspec (~> 3.13)
65
+ rspec-mocks (~> 3.13)
66
+ simplecov (~> 0.22)
44
67
 
45
68
  BUNDLED WITH
46
- 2.3.17
69
+ 2.6.2
data/README.md CHANGED
@@ -24,28 +24,10 @@ The latest version of the Hub gem source code is available at:
24
24
 
25
25
  ### The Hub library gem
26
26
 
27
- First of all, download and unpack the Hub gem sources. Change into the source directory (usually, `rails/gems/hubssolib`) and build with:
28
-
29
- ```sh
30
- gem build hubssolib.gemspec
31
- ```
32
-
33
- Install the Hub gem using the `gem` command in the usual fashion. For example, for version 1.0.0 of the library, issue the following command:
34
-
35
- ```sh
36
- gem install hubssolib-1.0.0.gem
37
- ```
38
-
39
- If you run multiple gem repositories you can instruct `gem` to install into a specific location using the `--install-dir` command line switch:
40
-
41
- ```sh
42
- gem install hubssolib-1.0.0.gem --install-dir=/home/username/gems
43
- ```
44
-
45
27
  Include in a project by adding this to your `Gemfile`:
46
28
 
47
29
  ```ruby
48
- gem 'hubssolib', '~> 1.0.0', :require => 'hub_sso_lib'
30
+ gem 'hubssolib', '~> 3.0', require: 'hub_sso_lib'
49
31
  ```
50
32
 
51
33
  ### The DRb server
@@ -55,7 +37,7 @@ The Hub DRb server consists of a small wrapper Ruby script which does most of it
55
37
  ```sh
56
38
  HUB_CONNECTION_URI="drbunix:/home/username/sockets/.hub_drb"
57
39
  export HUB_CONNECTION_URI
58
- ruby /home/username/hub/hub_sso_server.rb &
40
+ ruby /home/username/hubssolib/hub_sso_server.rb &
59
41
  ```
60
42
 
61
43
  The default is to use a file `.hub_drb` in the root of the current user's home directory. If you specify a custom URI, note that it _MUST_ start with `drbunix:`; the hub server must not be run on an IP port for security reasons.
@@ -66,7 +48,7 @@ Finally you can install the Hub application using whatever mechanism you prefer
66
48
 
67
49
  Some configuration is needed using externally set environment variables. These are actually picked up by the Hub gem but you won't know what values to set until the application, DRb server and gem are all installed.
68
50
 
69
- * `HUB_CONNECTION_URI` — as already discussed, this must hold a DRb URI giving the connection socket on which the server listens and to which clients connect.
51
+ * `HUB_CONNECTION_URI` — as already discussed, this holds a DRb URI giving the connection socket on which the server listens and to which clients connect; it defaults to `~/.hub_drb`.
70
52
  * `HUB_PATH_PREFIX` — sometimes the Hub Gem redirects to various locations within the Hub application. If you have installed the application away from document root, specify the prefix to put onto redirection paths here (otherwise, provide an empty string). For example, when redirecting to the `account` controller's `login` method, the path used is `HUB_PATH_PREFIX + '/account/login'`.
71
53
  * `HUB_BYPASS_SSL` - normally Hub sets cookies as secure-only in Production mode, requiring `https` fetches. This isn't enforced in e.g. development mode. If you want to allow insecure transport in Production, set `HUB_BYPASS_SSL` to `true`.
72
54
 
@@ -87,11 +69,22 @@ bundle exec rails s -b 127.0.0.1 --port 3000
87
69
  ...and then launch integrating applications with:
88
70
 
89
71
  ```
90
- HUB_PATH_PREFIX="http://127.0.0.1:3000" be rails s -b 127.0.0.1 --port <other-port>
72
+ HUB_BYPASS_SSL="true" HUB_PATH_PREFIX="http://127.0.0.1:3000" be rails s -b 127.0.0.1 --port <other-port>
91
73
  ```
92
74
 
93
75
  ...and fetch `http://127.0.0.1:<other-port>` in your web browser.
94
76
 
77
+ ## Your application's session cookies
78
+
79
+ It is often a good idea to clear application cookies when Hub users log in or out, so that there is no stale session data hanging around. **The Hub application auto-clears *all* cookies *ending with* the name `app_session`** for this purpose. Therefore, your application might include a `config/initializers/session_store.rb` file that says something like this:
80
+
81
+ ```ruby
82
+ # Be sure to restart your server when you modify this file.
83
+ Rails.application.config.session_store :cookie_store, key: 'yourappname_app_session'
84
+ ```
85
+
86
+ This of course only applies if you're using cookies for your session data.
87
+
95
88
  ## Testing the installation
96
89
 
97
90
  Visit your application in a Web browser and follow the links to sign up for a new account. To sign up, provide a name that will be displayed to users and a valid e-mail address. A confirmation message is sent to the address, containing a link that must be followed to activate the account. One created, users can log in and out of their accounts (with the possibility of sending a password reset request to their e-mail address in case they forget how to log in) and change their screen names. Users cannot change their recorded e-mail address — instead, they must create a new account under the new address.
data/hubssolib.gemspec CHANGED
@@ -4,10 +4,10 @@ spec = Gem::Specification.new do |s|
4
4
  s.platform = Gem::Platform::RUBY
5
5
  s.name = 'hubssolib'
6
6
 
7
- s.version = '2.1.0'
7
+ s.version = '3.0.1'
8
8
  s.author = 'Andrew Hodgkinson and others'
9
9
  s.email = 'ahodgkin@rowing.org.uk'
10
- s.homepage = 'http://hub.pond.org.uk/'
10
+ s.homepage = 'http://pond.org.uk/'
11
11
  s.summary = 'Cross-application single sign-on support library.'
12
12
  s.license = 'MIT'
13
13
 
@@ -22,11 +22,14 @@ spec = Gem::Specification.new do |s|
22
22
  EOF
23
23
 
24
24
  s.files = FileList['lib/**/*.rb', '[A-Z]*'].to_a
25
- s.required_ruby_version = '>= 2.5.9' # Not tested on earlier versions
25
+ s.required_ruby_version = '>= 3.0.0' # Not tested on earlier versions
26
26
 
27
- s.add_development_dependency 'byebug', '~> 11.1'
28
- s.add_development_dependency 'simplecov', '~> 0.16'
29
- s.add_development_dependency 'doggo', '~> 1.2'
30
- s.add_development_dependency 'rspec', '~> 3.8'
31
- s.add_development_dependency 'rspec-mocks', '~> 3.8'
27
+ s.add_dependency 'drb', '~> 2.2'
28
+ s.add_dependency 'base64', '~> 0.2'
29
+
30
+ s.add_development_dependency 'debug', '~> 1.1'
31
+ s.add_development_dependency 'simplecov', '~> 0.22'
32
+ s.add_development_dependency 'doggo', '~> 1.4'
33
+ s.add_development_dependency 'rspec', '~> 3.13'
34
+ s.add_development_dependency 'rspec-mocks', '~> 3.13'
32
35
  end
data/lib/hub_sso_lib.rb CHANGED
@@ -44,6 +44,10 @@ module HubSsoLib
44
44
  # Shared cookie name.
45
45
  HUB_COOKIE_NAME = 'hubapp_shared_id'
46
46
 
47
+ # Principally for #hubssolib_account_link.
48
+ HUB_LOGIN_INDICATOR_COOKIE = 'hubapp_shared_id_alive'
49
+ HUB_LOGIN_INDICATOR_COOKIE_VALUE = 'Y'
50
+
47
51
  # Bypass SSL, for testing purposes? Rails 'production' mode will
48
52
  # insist on SSL otherwise. Development & test environments do not,
49
53
  # so do not need this variable setting.
@@ -427,7 +431,7 @@ module HubSsoLib
427
431
  # The returned object is proxied via DRb - it is shared between processes.
428
432
  #
429
433
  # +key+:: Session key; lazy-initialises a new session under this key
430
- # if none is found, then immeediately rotates it.
434
+ # if none is found, then immediately rotates it.
431
435
  #
432
436
  # +remote_ip+:: Request's remote IP address. If there is an existing
433
437
  # session which matches this, it's returned. If there is an
@@ -518,6 +522,67 @@ module HubSsoLib
518
522
  !!self.hubssolib_current_user
519
523
  end
520
524
 
525
+ # Returns markup for a link that leads to Hub's conditional login endpoint,
526
+ # inline-styled as a red "Log in" or green "Account" button. This can be
527
+ # used in page templates to avoid needing any additional images or other
528
+ # such resources and using pure HTML + CSS for the login indication.
529
+ #
530
+ # JavaScript is used so that e.g. "back" button fully-cached displays by a
531
+ # browser will get updated with the correct login state, where needed (so
532
+ # long as the 'pageshow' event is supported). NOSCRIPT browsers use the old
533
+ # no-cache image fallback, which is much less efficient, but works.
534
+ #
535
+ def hubssolib_account_link
536
+ logged_in = self.hubssolib_logged_in?()
537
+
538
+ ui_href = "#{HUB_PATH_PREFIX}/account/login_conditional"
539
+ noscript_img_src = "#{HUB_PATH_PREFIX}/account/login_indication.png"
540
+ noscript_img_tag = helpers.image_tag(noscript_img_src, size: '90x22', border: '0', alt: 'Log in or out')
541
+
542
+ logged_in_link = helpers.link_to('Account', ui_href, id: 'hubssolib_logged_in_link')
543
+ logged_out_link = helpers.link_to('Log in', ui_href, id: 'hubssolib_logged_out_link')
544
+ noscript_link = helpers.link_to(noscript_img_tag, ui_href, id: 'hubssolib_login_noscript')
545
+
546
+ # Yes, it's ugly, but yes, it works and it's a lot better for the server
547
+ # to avoid the repeated image fetches. It probably works out as overall
548
+ # more efficient for clients too - despite all the JS etc. work, there's
549
+ # no network fetch overhead or image rendering. On mobile in particular,
550
+ # the JS solution is likely to use less battery power.
551
+ #
552
+ safe_markup = <<~HTML
553
+ <div id="hubssolib_login_indication">
554
+ <noscript>
555
+ #{noscript_link}
556
+ </noscript>
557
+ </div>
558
+ <script type="text/javascript">
559
+ const logged_in_html = "#{helpers.j(logged_in_link)}";
560
+ const logged_out_html = "#{helpers.j(logged_out_link)}";
561
+ const container = document.getElementById('hubssolib_login_indication')
562
+
563
+ function hubSsoLibLoginStateWriteLink() {
564
+ const regexp = '#{helpers.j(HUB_LOGIN_INDICATOR_COOKIE)}\\s*=\\s*([^;]+)';
565
+ const flag = document.cookie.match(regexp)?.pop() || '';
566
+
567
+ if (flag === '#{HUB_LOGIN_INDICATOR_COOKIE_VALUE}') {
568
+ container.innerHTML = logged_in_html;
569
+ } else {
570
+ container.innerHTML = logged_out_html;
571
+ }
572
+ }
573
+ #{
574
+ # Immediate update, plus on-load update - including fully cached
575
+ # loads in the browser when the "Back" button is used. No stale
576
+ # login indications should thus arise from cached data.
577
+ }
578
+ hubSsoLibLoginStateWriteLink();
579
+ window.addEventListener('pageshow', hubSsoLibLoginStateWriteLink);
580
+ </script>
581
+ HTML
582
+
583
+ return safe_markup.html_safe()
584
+ end
585
+
521
586
  # Check if the user is authorized to perform the current action. If calling
522
587
  # from a helper, pass the action name and class name; otherwise by default,
523
588
  # the current action name and 'self.class' will be used.
@@ -644,7 +709,7 @@ module HubSsoLib
644
709
  def hubssolib_beforehand
645
710
 
646
711
  # Does this action require a logged in user?
647
-
712
+ #
648
713
  if (self.class.respond_to? :hubssolib_permissions)
649
714
  login_is_required = !self.class.hubssolib_permissions.permitted?('', action_name)
650
715
  else
@@ -652,19 +717,30 @@ module HubSsoLib
652
717
  end
653
718
 
654
719
  # If we require login but we're logged out, redirect to Hub login.
655
-
720
+ # NOTE EARLY EXIT
721
+ #
656
722
  logged_in = hubssolib_logged_in?
657
723
 
658
- if (login_is_required and logged_in == false)
659
- hubssolib_store_location
660
- return hubssolib_must_login
661
- end
724
+ if logged_in == false
725
+ cookies.delete(HUB_LOGIN_INDICATOR_COOKIE)
662
726
 
663
- # If we reach here the user is either logged, or the method does
664
- # not require them to be. In the latter case, if we're not logged
665
- # in there is no more work to do - exit early.
727
+ if login_is_required
728
+ hubssolib_store_location
729
+ return hubssolib_must_login
730
+ else
731
+ return true
732
+ end
733
+ end
666
734
 
667
- return true unless logged_in # true -> let action processing continue
735
+ # Definitely logged in.
736
+ #
737
+ cookies[HUB_LOGIN_INDICATOR_COOKIE] = {
738
+ value: HUB_LOGIN_INDICATOR_COOKIE_VALUE,
739
+ domain: :all,
740
+ path: '/',
741
+ secure: ! hub_bypass_ssl?,
742
+ httponly: false
743
+ }
668
744
 
669
745
  # So we reach here knowing we're logged in, but the action may or
670
746
  # may not require authorisation.
@@ -855,6 +931,7 @@ module HubSsoLib
855
931
  :hubssolib_current_user,
856
932
  :hubssolib_unique_name,
857
933
  :hubssolib_logged_in?,
934
+ :hubssolib_account_link,
858
935
  :hubssolib_authorized?,
859
936
  :hubssolib_privileged?,
860
937
  :hubssolib_flash_data
@@ -961,11 +1038,11 @@ module HubSsoLib
961
1038
  key = hub_session.session_key_rotation unless hub_session.nil?
962
1039
 
963
1040
  cookies[HUB_COOKIE_NAME] = {
964
- :value => key,
965
- :domain => :all,
966
- :path => '/',
967
- :secure => ! hub_bypass_ssl?,
968
- :httponly => true
1041
+ value: key,
1042
+ domain: :all,
1043
+ path: '/',
1044
+ secure: ! hub_bypass_ssl?,
1045
+ httponly: true
969
1046
  }
970
1047
 
971
1048
  return hub_session
metadata CHANGED
@@ -1,85 +1,112 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hubssolib
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 3.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Hodgkinson and others
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2022-07-01 00:00:00.000000000 Z
10
+ date: 2025-02-03 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
- name: byebug
13
+ name: drb
15
14
  requirement: !ruby/object:Gem::Requirement
16
15
  requirements:
17
16
  - - "~>"
18
17
  - !ruby/object:Gem::Version
19
- version: '11.1'
18
+ version: '2.2'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '2.2'
26
+ - !ruby/object:Gem::Dependency
27
+ name: base64
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '0.2'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '0.2'
40
+ - !ruby/object:Gem::Dependency
41
+ name: debug
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '1.1'
20
47
  type: :development
21
48
  prerelease: false
22
49
  version_requirements: !ruby/object:Gem::Requirement
23
50
  requirements:
24
51
  - - "~>"
25
52
  - !ruby/object:Gem::Version
26
- version: '11.1'
53
+ version: '1.1'
27
54
  - !ruby/object:Gem::Dependency
28
55
  name: simplecov
29
56
  requirement: !ruby/object:Gem::Requirement
30
57
  requirements:
31
58
  - - "~>"
32
59
  - !ruby/object:Gem::Version
33
- version: '0.16'
60
+ version: '0.22'
34
61
  type: :development
35
62
  prerelease: false
36
63
  version_requirements: !ruby/object:Gem::Requirement
37
64
  requirements:
38
65
  - - "~>"
39
66
  - !ruby/object:Gem::Version
40
- version: '0.16'
67
+ version: '0.22'
41
68
  - !ruby/object:Gem::Dependency
42
69
  name: doggo
43
70
  requirement: !ruby/object:Gem::Requirement
44
71
  requirements:
45
72
  - - "~>"
46
73
  - !ruby/object:Gem::Version
47
- version: '1.2'
74
+ version: '1.4'
48
75
  type: :development
49
76
  prerelease: false
50
77
  version_requirements: !ruby/object:Gem::Requirement
51
78
  requirements:
52
79
  - - "~>"
53
80
  - !ruby/object:Gem::Version
54
- version: '1.2'
81
+ version: '1.4'
55
82
  - !ruby/object:Gem::Dependency
56
83
  name: rspec
57
84
  requirement: !ruby/object:Gem::Requirement
58
85
  requirements:
59
86
  - - "~>"
60
87
  - !ruby/object:Gem::Version
61
- version: '3.8'
88
+ version: '3.13'
62
89
  type: :development
63
90
  prerelease: false
64
91
  version_requirements: !ruby/object:Gem::Requirement
65
92
  requirements:
66
93
  - - "~>"
67
94
  - !ruby/object:Gem::Version
68
- version: '3.8'
95
+ version: '3.13'
69
96
  - !ruby/object:Gem::Dependency
70
97
  name: rspec-mocks
71
98
  requirement: !ruby/object:Gem::Requirement
72
99
  requirements:
73
100
  - - "~>"
74
101
  - !ruby/object:Gem::Version
75
- version: '3.8'
102
+ version: '3.13'
76
103
  type: :development
77
104
  prerelease: false
78
105
  version_requirements: !ruby/object:Gem::Requirement
79
106
  requirements:
80
107
  - - "~>"
81
108
  - !ruby/object:Gem::Version
82
- version: '3.8'
109
+ version: '3.13'
83
110
  description: |2
84
111
  The Hub SSO Library supports single sign-on across multiple Rails
85
112
  applications on the same host. The Hub application provides account
@@ -99,11 +126,10 @@ files:
99
126
  - README.md
100
127
  - hubssolib.gemspec
101
128
  - lib/hub_sso_lib.rb
102
- homepage: http://hub.pond.org.uk/
129
+ homepage: http://pond.org.uk/
103
130
  licenses:
104
131
  - MIT
105
132
  metadata: {}
106
- post_install_message:
107
133
  rdoc_options: []
108
134
  require_paths:
109
135
  - lib
@@ -111,15 +137,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
111
137
  requirements:
112
138
  - - ">="
113
139
  - !ruby/object:Gem::Version
114
- version: 2.5.9
140
+ version: 3.0.0
115
141
  required_rubygems_version: !ruby/object:Gem::Requirement
116
142
  requirements:
117
143
  - - ">="
118
144
  - !ruby/object:Gem::Version
119
145
  version: '0'
120
146
  requirements: []
121
- rubygems_version: 3.2.3
122
- signing_key:
147
+ rubygems_version: 3.6.2
123
148
  specification_version: 4
124
149
  summary: Cross-application single sign-on support library.
125
150
  test_files: []