nulogy_sso 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/spec/examples.txt CHANGED
@@ -1,19 +1,16 @@
1
1
  example_id | status | run_time |
2
2
  --------------------------------------------------------------------- | ------ | --------------- |
3
- ./spec/features/nulogy_sso/sso_login_spec.rb[1:1:1] | passed | 0.66665 seconds |
4
- ./spec/features/nulogy_sso/sso_login_spec.rb[1:1:2] | passed | 0.64953 seconds |
5
- ./spec/features/nulogy_sso/sso_login_spec.rb[1:1:3] | passed | 0.70779 seconds |
6
- ./spec/features/nulogy_sso/sso_login_spec.rb[1:1:4] | passed | 0.72176 seconds |
7
- ./spec/features/nulogy_sso/sso_login_spec.rb[1:2:1] | passed | 0.66774 seconds |
8
- ./spec/features/nulogy_sso/sso_login_spec.rb[1:2:2] | passed | 0.69963 seconds |
9
- ./spec/features/nulogy_sso/sso_login_spec.rb[1:2:3] | passed | 2.71 seconds |
10
- ./spec/features/nulogy_sso/sso_login_spec.rb[1:2:4] | passed | 1.55 seconds |
11
- ./spec/integration/services/nulogy_sso/authenticator_spec.rb[1:1:1] | passed | 0.00832 seconds |
12
- ./spec/integration/services/nulogy_sso/authenticator_spec.rb[1:1:2:1] | passed | 0.01484 seconds |
13
- ./spec/integration/services/nulogy_sso/authenticator_spec.rb[1:1:2:2] | passed | 0.01233 seconds |
14
- ./spec/integration/services/nulogy_sso/authenticator_spec.rb[1:1:2:3] | passed | 0.01968 seconds |
15
- ./spec/integration/services/nulogy_sso/authenticator_spec.rb[1:1:3:1] | passed | 0.01675 seconds |
16
- ./spec/integration/services/nulogy_sso/authenticator_spec.rb[1:2:1] | passed | 0.01394 seconds |
17
- ./spec/integration/services/nulogy_sso/authenticator_spec.rb[1:2:2] | passed | 0.01739 seconds |
18
- ./spec/integration/services/nulogy_sso/authenticator_spec.rb[1:2:3] | passed | 0.00679 seconds |
19
- ./spec/integration/services/nulogy_sso/authenticator_spec.rb[1:2:4] | passed | 0.0131 seconds |
3
+ ./spec/features/nulogy_sso/sso_login_spec.rb[1:1:1] | passed | 3.41 seconds |
4
+ ./spec/features/nulogy_sso/sso_login_spec.rb[1:1:2] | passed | 0.90831 seconds |
5
+ ./spec/features/nulogy_sso/sso_login_spec.rb[1:1:3] | passed | 0.66936 seconds |
6
+ ./spec/features/nulogy_sso/sso_login_spec.rb[1:2:1] | passed | 0.82161 seconds |
7
+ ./spec/features/nulogy_sso/sso_login_spec.rb[1:2:2] | passed | 0.72697 seconds |
8
+ ./spec/features/nulogy_sso/sso_login_spec.rb[1:2:3] | passed | 0.82277 seconds |
9
+ ./spec/integration/services/nulogy_sso/authenticator_spec.rb[1:1:1] | passed | 0.00927 seconds |
10
+ ./spec/integration/services/nulogy_sso/authenticator_spec.rb[1:1:2:1] | passed | 0.02476 seconds |
11
+ ./spec/integration/services/nulogy_sso/authenticator_spec.rb[1:1:2:2] | passed | 0.01496 seconds |
12
+ ./spec/integration/services/nulogy_sso/authenticator_spec.rb[1:1:3:1] | passed | 0.01599 seconds |
13
+ ./spec/integration/services/nulogy_sso/authenticator_spec.rb[1:2:1] | passed | 0.03698 seconds |
14
+ ./spec/integration/services/nulogy_sso/authenticator_spec.rb[1:2:2] | passed | 0.03118 seconds |
15
+ ./spec/integration/services/nulogy_sso/authenticator_spec.rb[1:2:3] | passed | 0.00426 seconds |
16
+ ./spec/integration/services/nulogy_sso/authenticator_spec.rb[1:2:4] | passed | 0.02018 seconds |
@@ -11,42 +11,33 @@ module NulogySSO
11
11
  describe "login flow" do
12
12
  it "can successfully login" do
13
13
  auth_mock.setup(email: email, redirect_path: "/hello_world")
14
- create_active_user
14
+ create_user
15
15
 
16
16
  visit "/hello_world"
17
17
 
18
18
  expect(page).to have_content("Hello World")
19
19
  end
20
20
 
21
- it "shows an error page when Auth0 authenticates the user but app validation fails" do
21
+ it "shows an error page when the user can authorize with Auth0 but not exist in the app" do
22
22
  auth_mock.setup(email: email)
23
- create_inactive_user
24
23
 
25
24
  visit "/hello_world"
26
25
 
27
- expect_error
28
- end
29
-
30
- it "shows an error page when the user can authorize with Auth0 but not the app itself" do
31
- auth_mock.setup(email: email)
32
-
33
- visit "/hello_world"
34
-
35
- expect_error
26
+ expect(page).to have_content("An SSO error has occurred :(")
36
27
  end
37
28
 
38
29
  it "shows an error page when Auth0 throws an error" do
39
30
  auth_mock.setup(email: email, status_code: 403)
40
- create_active_user
31
+ create_user
41
32
 
42
33
  visit "/hello_world"
43
34
 
44
- expect_error
35
+ expect(page).to have_content("An SSO error has occurred :(")
45
36
  end
46
37
  end
47
38
 
48
39
  describe "JWT authentication" do
49
- let!(:user) { create_active_user }
40
+ let!(:user) { create_user }
50
41
 
51
42
  before do
52
43
  auth_mock.mockserver_reset
@@ -78,35 +69,13 @@ module NulogySSO
78
69
  expect(current_path).to eq("/authorize")
79
70
  end
80
71
 
81
- it "shows the user an error page when they've been deactivated in CPI after they've logged in" do
82
- set_access_token_cookie(test_helper.jwt(email))
83
-
84
- visit "/hello_world"
85
-
86
- expect(page).to have_content("Hello World")
87
-
88
- user.update!(active: false)
89
-
90
- visit "/hello_world"
91
-
92
- expect_error
93
- end
94
-
95
72
  def set_access_token_cookie(token)
96
73
  page.driver.browser.manage.add_cookie(name: NulogySSO.auth_cookie_key, value: token)
97
74
  end
98
75
  end
99
76
 
100
- def create_active_user
101
- User.create!(email: email, active: true)
102
- end
103
-
104
- def create_inactive_user
105
- User.create!(email: email, active: false)
106
- end
107
-
108
- def expect_error
109
- expect(page).to have_content("You do not have permission to access Nulogy.")
77
+ def create_user
78
+ User.create!(email: email)
110
79
  end
111
80
  end
112
81
  end
@@ -11,7 +11,7 @@ module NulogySSO
11
11
  )
12
12
  end
13
13
  let(:default_authenticator) { Authenticator.new(verifier: verifier, find_user_by_email: find_a_user) }
14
- let(:user) { User.new(email: email, active: true) }
14
+ let(:user) { User.new(email: email) }
15
15
  let(:find_a_user) { proc { user } }
16
16
  let(:find_no_user) { proc { nil } }
17
17
  let(:on_success) { spy("on_success") }
@@ -45,14 +45,6 @@ module NulogySSO
45
45
 
46
46
  expect(on_invalid_token).to have_received(:call).once
47
47
  end
48
-
49
- it "calls the invalid token handler when there is an invalid user" do
50
- authenticator = Authenticator.new(verifier: verifier, find_user_by_email: find_a_user, validate_user: proc { false })
51
-
52
- validate_token(valid_signed_token, authenticator: authenticator)
53
-
54
- expect(on_invalid_token).to have_received(:call).once
55
- end
56
48
  end
57
49
 
58
50
  context "JWT fails verification" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nulogy_sso
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nulogy Corporation
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-09-18 00:00:00.000000000 Z
11
+ date: 2019-09-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: auth0
@@ -59,6 +59,9 @@ dependencies:
59
59
  - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '5.1'
62
+ - - "<"
63
+ - !ruby/object:Gem::Version
64
+ version: '6.1'
62
65
  type: :runtime
63
66
  prerelease: false
64
67
  version_requirements: !ruby/object:Gem::Requirement
@@ -66,48 +69,51 @@ dependencies:
66
69
  - - ">="
67
70
  - !ruby/object:Gem::Version
68
71
  version: '5.1'
72
+ - - "<"
73
+ - !ruby/object:Gem::Version
74
+ version: '6.1'
69
75
  - !ruby/object:Gem::Dependency
70
76
  name: capybara
71
77
  requirement: !ruby/object:Gem::Requirement
72
78
  requirements:
73
- - - ">="
79
+ - - "~>"
74
80
  - !ruby/object:Gem::Version
75
- version: '0'
81
+ version: '3.29'
76
82
  type: :development
77
83
  prerelease: false
78
84
  version_requirements: !ruby/object:Gem::Requirement
79
85
  requirements:
80
- - - ">="
86
+ - - "~>"
81
87
  - !ruby/object:Gem::Version
82
- version: '0'
88
+ version: '3.29'
83
89
  - !ruby/object:Gem::Dependency
84
90
  name: curb
85
91
  requirement: !ruby/object:Gem::Requirement
86
92
  requirements:
87
- - - ">="
93
+ - - "~>"
88
94
  - !ruby/object:Gem::Version
89
- version: '0'
95
+ version: 0.9.10
90
96
  type: :development
91
97
  prerelease: false
92
98
  version_requirements: !ruby/object:Gem::Requirement
93
99
  requirements:
94
- - - ">="
100
+ - - "~>"
95
101
  - !ruby/object:Gem::Version
96
- version: '0'
102
+ version: 0.9.10
97
103
  - !ruby/object:Gem::Dependency
98
104
  name: dotenv-rails
99
105
  requirement: !ruby/object:Gem::Requirement
100
106
  requirements:
101
- - - ">="
107
+ - - "~>"
102
108
  - !ruby/object:Gem::Version
103
- version: '0'
109
+ version: '2.7'
104
110
  type: :development
105
111
  prerelease: false
106
112
  version_requirements: !ruby/object:Gem::Requirement
107
113
  requirements:
108
- - - ">="
114
+ - - "~>"
109
115
  - !ruby/object:Gem::Version
110
- version: '0'
116
+ version: '2.7'
111
117
  - !ruby/object:Gem::Dependency
112
118
  name: rspec-rails
113
119
  requirement: !ruby/object:Gem::Requirement
@@ -126,44 +132,44 @@ dependencies:
126
132
  name: selenium-webdriver
127
133
  requirement: !ruby/object:Gem::Requirement
128
134
  requirements:
129
- - - ">="
135
+ - - "~>"
130
136
  - !ruby/object:Gem::Version
131
- version: '0'
137
+ version: '3.142'
132
138
  type: :development
133
139
  prerelease: false
134
140
  version_requirements: !ruby/object:Gem::Requirement
135
141
  requirements:
136
- - - ">="
142
+ - - "~>"
137
143
  - !ruby/object:Gem::Version
138
- version: '0'
144
+ version: '3.142'
139
145
  - !ruby/object:Gem::Dependency
140
146
  name: sqlite3
141
147
  requirement: !ruby/object:Gem::Requirement
142
148
  requirements:
143
- - - ">="
149
+ - - "~>"
144
150
  - !ruby/object:Gem::Version
145
- version: '0'
151
+ version: '1.4'
146
152
  type: :development
147
153
  prerelease: false
148
154
  version_requirements: !ruby/object:Gem::Requirement
149
155
  requirements:
150
- - - ">="
156
+ - - "~>"
151
157
  - !ruby/object:Gem::Version
152
- version: '0'
158
+ version: '1.4'
153
159
  - !ruby/object:Gem::Dependency
154
160
  name: webmock
155
161
  requirement: !ruby/object:Gem::Requirement
156
162
  requirements:
157
- - - ">="
163
+ - - "~>"
158
164
  - !ruby/object:Gem::Version
159
- version: '0'
165
+ version: '3.7'
160
166
  type: :development
161
167
  prerelease: false
162
168
  version_requirements: !ruby/object:Gem::Requirement
163
169
  requirements:
164
- - - ">="
170
+ - - "~>"
165
171
  - !ruby/object:Gem::Version
166
- version: '0'
172
+ version: '3.7'
167
173
  description:
168
174
  email:
169
175
  - engineering@nulogy.com
@@ -173,11 +179,8 @@ extra_rdoc_files: []
173
179
  files:
174
180
  - README.md
175
181
  - Rakefile
176
- - app/assets/images/nulogy_sso/favicon.png
177
- - app/assets/stylesheets/nulogy_sso/sso_error.css
178
- - app/controllers/nulogy_sso/auth_controller.rb
182
+ - app/controllers/nulogy_sso/authentication_controller.rb
179
183
  - app/services/nulogy_sso/authenticator.rb
180
- - app/views/sso_error.html.erb
181
184
  - config/initializers/inflections.rb
182
185
  - config/routes.rb
183
186
  - lib/nulogy_sso.rb
@@ -232,6 +235,7 @@ files:
232
235
  - spec/dummy/db/migrate/20190912211120_create_users.rb
233
236
  - spec/dummy/db/schema.rb
234
237
  - spec/dummy/db/test.sqlite3
238
+ - spec/dummy/log/development.log
235
239
  - spec/dummy/log/test.log
236
240
  - spec/dummy/package.json
237
241
  - spec/dummy/public/404.html
@@ -417,6 +421,7 @@ test_files:
417
421
  - spec/dummy/db/test.sqlite3
418
422
  - spec/dummy/db/migrate/20190912211120_create_users.rb
419
423
  - spec/dummy/log/test.log
424
+ - spec/dummy/log/development.log
420
425
  - spec/dummy/tmp/development_secret.txt
421
426
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/zq/zqVwwFUvXqTxyX57DFJh5CY88HR0PEznhr-rLP6A5BQ.cache
422
427
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/5u/5uuIL6SiWAHDNxQ63Bb-mEptuzUArLXyoTBDHJ5RTM4.cache
@@ -1,214 +0,0 @@
1
- /**
2
- * Do not edit directly
3
- * Generated on Fri, 21 Jun 2019 19:45:11 GMT
4
- */
5
- /* -----------------------------------------
6
- ## Default styles
7
- ----------------------------------------- */
8
- html,
9
- body {
10
- margin: 0;
11
- }
12
-
13
- * {
14
- box-sizing: border-box;
15
- }
16
-
17
- body {
18
- color: #011e38;
19
- font-family: "IBM Plex Sans", sans-serif;
20
- line-height: 1.5;
21
- }
22
-
23
- code {
24
- font-family: "IBM Plex Mono", monospace;
25
- }
26
-
27
- img {
28
- max-width: 100%;
29
- height: auto;
30
- display: block;
31
- }
32
-
33
- /* -----------------------------------------
34
- ## Alerts
35
- ----------------------------------------- */
36
- .Alert {
37
- border-radius: 4px;
38
- border-left: 4px solid #216beb;
39
- padding: 16px;
40
- background: #e1ebfa;
41
- display: flex;
42
- max-width: 432px;
43
- }
44
- .Alert__icon {
45
- fill: #216beb;
46
- }
47
- .Alert a {
48
- color: #011e38;
49
- }
50
-
51
- .Alert__title {
52
- margin: 0;
53
- font-weight: 600;
54
- }
55
-
56
- .Alert__message {
57
- margin-top: 0;
58
- }
59
- .Alert__message:last-child {
60
- margin-bottom: 0;
61
- }
62
-
63
- .Alert--danger__icon,
64
- .Alert--success__icon {
65
- margin-right: 8px;
66
- }
67
-
68
- .Alert--danger {
69
- border-radius: 4px;
70
- border-left: 4px solid #cc1439;
71
- padding: 16px;
72
- background: #fae6ea;
73
- }
74
- .Alert--danger__icon {
75
- fill: #cc1439;
76
- }
77
- .Alert--danger a {
78
- color: #011e38;
79
- }
80
-
81
- .Alert--success {
82
- border-radius: 4px;
83
- border-left: 4px solid #008059;
84
- padding: 16px;
85
- background: #e9f7f2;
86
- }
87
- .Alert--success__icon {
88
- fill: #008059;
89
- }
90
- .Alert--success a {
91
- color: #011e38;
92
- }
93
-
94
- .Alert--warning {
95
- border-radius: 4px;
96
- border-left: 4px solid #ffbb00;
97
- padding: 16px;
98
- background: #fcf5e3;
99
- }
100
- .Alert--warning__icon {
101
- fill: #ffbb00;
102
- }
103
- .Alert--warning a {
104
- color: #011e38;
105
- }
106
-
107
- /* -----------------------------------------
108
- ## Link
109
- ----------------------------------------- */
110
- .Link {
111
- color: #216beb;
112
- }
113
- .Link:hover {
114
- cursor: pointer;
115
- color: #1254c7;
116
- }
117
- .Link:focus {
118
- outline: none;
119
- box-shadow: 0px 0px 5px 0px rgba(33, 107, 235, 0.9);
120
- }
121
-
122
- /* -----------------------------------------
123
- ## Error page
124
- ----------------------------------------- */
125
- .ErrorPage {
126
- height: 100vh;
127
- display: flex;
128
- flex-direction: column;
129
- padding: 16px;
130
- padding-top: 24px;
131
- }
132
-
133
- .ErrorPage__body {
134
- display: flex;
135
- flex-direction: column;
136
- flex-grow: 1;
137
- }
138
-
139
- .ErrorPage__container {
140
- max-width: 432px;
141
- margin: 0 auto;
142
- }
143
-
144
- .ErrorPage__header {
145
- text-align: center;
146
- margin-top: 16px;
147
- margin-bottom: 40px;
148
- }
149
-
150
- .ErrorPage__logout {
151
- margin-right: auto;
152
- margin-left: auto;
153
- margin-top: 30px;
154
- }
155
- @media screen and (min-width: 768px) {
156
- .ErrorPage__header {
157
- margin-top: 80px;
158
- }
159
- }
160
- @media screen and (min-width: 1360px) {
161
- .ErrorPage__header {
162
- margin: 0;
163
- }
164
- }
165
-
166
- .ErrorPage__logo {
167
- display: block;
168
- margin: 0 auto;
169
- }
170
- @media screen and (min-width: 1360px) {
171
- .ErrorPage__logo--with-homepage-link {
172
- margin-top: -32px;
173
- }
174
- }
175
-
176
- .ErrorPage__main {
177
- max-width: 432px;
178
- margin: 0 auto;
179
- text-align: center;
180
- }
181
- @media screen and (min-width: 1360px) {
182
- .ErrorPage__main {
183
- text-align: left;
184
- }
185
- }
186
- .ErrorPage__main .Alert {
187
- text-align: left;
188
- }
189
-
190
- .ErrorPage__footer {
191
- border-top: 1px solid #e4e7eb;
192
- padding-top: 16px;
193
- text-align: center;
194
- font-size: 14px;
195
- color: #434d59;
196
- }
197
-
198
- .Link--ErrorPage {
199
- color: #00438f;
200
- display: inline-block;
201
- margin-top: 16px;
202
- }
203
-
204
- @media screen and (min-width: 1360px) {
205
- .ErrorPage__body {
206
- justify-content: center;
207
- }
208
- .ErrorPage__contents {
209
- display: flex;
210
- width: 672px;
211
- margin: 0 auto;
212
- align-items: center;
213
- }
214
- }
@@ -1,45 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <meta http-equiv="X-UA-Compatible" content="ie=edge">
7
- <title>Error</title>
8
- <%= favicon_link_tag "nulogy_sso/favicon.png" %>
9
- <%= stylesheet_link_tag "nulogy_sso/sso_error" %>
10
- <link href="https://fonts.googleapis.com/css?family=IBM+Plex+Sans:300,400,500,600&display=swap" rel="stylesheet">
11
- </head>
12
-
13
- <body>
14
- <div class="ErrorPage">
15
- <div class="ErrorPage__body">
16
- <div class="ErrorPage__contents">
17
- <header class="ErrorPage__header">
18
- <svg class="ErrorPage__logo" height="48px" width="200px" viewBox="0 0 133 32"><path fill="#F0B41C" d="M30.6967273,1.13648485 L36.3810909,3.40945455 L36.3810909,23.8758788 C36.3810909,28.2705455 30.9507879,29.0424242 27.2853333,29.5602424 C29.3818182,29.0424242 30.7083636,28.4606061 30.6967273,23.8758788 L30.6967273,5.68436364 L25.0123636,3.40945455 L30.6967273,1.13648485 Z M6.82084848,28.4237576 L6.82084848,15.9204848 C6.82084848,14.6618182 7.76533333,13.238303 8.91151515,12.7476364 L14.7801212,10.2264242 L14.7801212,18.1779394 L20.4644848,21.6048485 C21.6106667,22.1866667 23.8758788,22.2002424 23.8758788,20.4664242 L23.8758788,17.0550303 L21.5990303,15.9166061 L21.5990303,1.56319402e-13 L4.26666667,6.38642424 C1.91030303,7.25333333 3.55271368e-15,9.98593939 3.55271368e-15,12.5071515 L3.55271368e-15,31.2669091 L6.82084848,28.4237576 Z"></path><g transform="translate(43.000000, 0.000000)" fill="#1C68A5"><path d="M5.14521212,24.2224981 L1.33226763e-14,24.2224981 L1.33226763e-14,9.41134654 L4.75151515,9.41134654 L4.75151515,11.8937708 C5.43733518,11.0060378 6.29475204,10.2653615 7.27272727,9.71583139 C8.16188898,9.23817548 9.15699751,8.9920662 10.166303,9.00019502 C11.7333333,9.00019502 12.9221818,9.44948795 13.7328485,10.3480738 C14.5435152,11.2466597 14.9488485,12.5615688 14.9488485,14.2928011 L14.9488485,24.2224981 L9.83078788,24.2224981 L9.83078788,15.7376496 C9.83078788,14.961892 9.67175758,14.3755486 9.35369697,13.9786193 C9.03563636,13.58169 8.56436364,13.3877506 7.93987879,13.3968011 C7.04258586,13.3968011 6.35216162,13.6980536 5.86860606,14.3005587 C5.38505051,14.9030637 5.14391919,15.7803162 5.14521212,16.9323162 L5.14521212,24.2224981 Z"></path><path d="M27.8366061,9 L32.9507879,9 L32.9507879,22.6203636 L28.1992727,24.5190303 L28.1992727,21.6254545 C27.5124636,22.5143219 26.6553593,23.2573653 25.6780606,23.8111515 C24.7938668,24.2845189 23.8048332,24.5279425 22.8019394,24.5190303 C21.2323232,24.5190303 20.0402424,24.0665051 19.225697,23.1614545 C18.4111515,22.256404 18.0025859,20.9408485 18,19.2147879 L18,9 L23.1452121,9 L23.1452121,17.7796364 C23.1452121,18.5553939 23.3042424,19.1443232 23.622303,19.5464242 C23.9403636,19.9485253 24.4116364,20.1482828 25.0361212,20.145697 C25.9411717,20.145697 26.631596,19.8418586 27.1073939,19.2341818 C27.5831919,18.6265051 27.8243232,17.7524848 27.8307879,16.6121212 L27.8366061,9 Z"></path><polygon id="Path" points="38.7151515 24.5546667 36 24.5546667 36 1.088 38.7151515 1.15463195e-13"></polygon><path d="M41,17.0717576 C41,14.7263838 41.7453737,12.7947475 43.2361212,11.2768485 C44.7268687,9.75894949 46.6171313,9 48.9069091,9 C51.1966869,9 53.0869495,9.75894949 54.577697,11.2768485 C56.0684444,12.7947475 56.8138182,14.7263838 56.8138182,17.0717576 C56.8138182,19.4274747 56.0684444,21.3668687 54.577697,22.8899394 C53.0869495,24.4130101 51.1966869,25.1719596 48.9069091,25.1667879 C46.6261818,25.1667879 44.7385051,24.4078384 43.2438788,22.8899394 C41.7492525,21.3720404 41.0012929,19.4326465 41,17.0717576 Z M43.6957576,17.0717576 C43.6957576,18.9141818 44.172202,20.3965253 45.1250909,21.5187879 C46.0779798,22.6410505 47.327596,23.2028283 48.8739394,23.2041212 C50.4254545,23.2041212 51.6802424,22.6423434 52.638303,21.5187879 C53.5963636,20.3952323 54.0786263,18.9128889 54.0850909,17.0717576 C54.0850909,15.2422626 53.6028283,13.7657374 52.638303,12.6421818 C51.6737778,11.5186263 50.4189899,10.9574949 48.8739394,10.9587879 C47.3224242,10.9587879 46.0728081,11.5205657 45.1250909,12.6441212 C44.1773737,13.7676768 43.7009293,15.2435556 43.6957576,17.0717576 Z"></path><path d="M70.0824261,23.582303 C69.3285884,24.0285568 68.5220417,24.3790594 67.6814564,24.625697 C66.9065592,24.8487063 66.1042899,24.9622904 65.2979413,24.9631515 C63.1180625,24.9631515 61.3564463,24.2397576 60.0130928,22.7929697 C58.6697392,21.3461818 57.9987089,19.4449293 58.0000019,17.0892121 C58.0000019,14.6882424 58.7175776,12.739798 60.1527291,11.2438788 C61.5878807,9.7479596 63.4626281,9 65.7769716,9 C66.5067857,9.0106757 67.2345208,9.08072506 67.9529716,9.20945455 C68.7804463,9.34650505 69.737214,9.55725253 70.8232746,9.84169697 L72.745214,9.06593939 L72.745214,22.4283636 C72.745214,24.213899 72.6605271,25.520404 72.4911534,26.3478788 C72.3424597,27.1215145 72.0497022,27.860316 71.6281231,28.5258182 C70.9908577,29.4891385 70.0844202,30.2438287 69.0215776,30.696 C67.7834618,31.2231176 66.4474127,31.48094 65.1020625,31.4523636 C64.1335045,31.4523045 63.1689244,31.3284732 62.2317594,31.0838788 C61.252533,30.8239772 60.3068642,30.4510466 59.41382,29.9726061 L58.9696988,26.7512727 L60.9575776,28.0506667 C61.5573127,28.4240193 62.2116549,28.7014604 62.8969716,28.8729697 C63.6457641,29.0836796 64.4192481,29.1938978 65.1970928,29.2007273 C66.7486079,29.2007273 67.9516786,28.8128485 68.8063049,28.0370909 C69.6609312,27.2613333 70.0863049,26.1571717 70.0824261,24.7246061 L70.0824261,23.582303 Z M70.0824261,21.5595152 L70.0824261,12.0739394 C69.4432737,11.7542576 68.7741844,11.4983147 68.0848503,11.3098182 C67.4816476,11.1457578 66.859767,11.0603633 66.2346685,11.0557576 C64.581012,11.0557576 63.2499413,11.6117172 62.2414564,12.7236364 C61.2329716,13.8355556 60.7280827,15.3146667 60.7267897,17.1609697 C60.7267897,18.9348687 61.179315,20.3428687 62.0843655,21.3849697 C62.989416,22.4270707 64.2086483,22.9474747 65.7420625,22.9461818 C66.3845516,22.9385817 67.0221469,22.8332967 67.6329716,22.6339394 C68.4792669,22.3480186 69.2988853,21.9885027 70.0824261,21.5595152 L70.0824261,21.5595152 Z"></path><path d="M75,9 L77.8276364,9 L82.2649697,20.6363636 L87.1483636,9 L89.4504242,9 L82.3813333,25.3238788 L82.2649697,25.5546667 C81.1478788,28.0965657 80.2874343,29.9066667 79.6836364,30.9849697 L76.7415758,30.9849697 C77.3683498,30.3346009 77.9302011,29.6246546 78.4191515,28.8652121 C79.0313917,27.8817808 79.5750659,26.8572886 80.046303,25.7990303 L81.0004848,23.7452121 L75,9 Z"></path></g></svg>
19
- </header>
20
- <main class="ErrorPage__main">
21
- <div class="Alert Alert--danger">
22
- <div class="Alert--danger__icon">
23
- <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0V0z"/><path d="M11 15h2v2h-2zm0-8h2v6h-2zm.99-5C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"/></svg>
24
- </div>
25
- <div class="Alert__content">
26
- <p class="Alert__title">Not authorized.</p>
27
- <%
28
- # TODO: Parameterize the below message to be app specific, via NulogySSO engine config.
29
- %>
30
- <p class="Alert__message">You do not have permission to access Nulogy.</p>
31
- </div>
32
- </div>
33
-
34
- </main>
35
- </div>
36
- <div class="ErrorPage__logout" >
37
- <%= link_to("Logout", nulogy_sso.logout_path, class: "Link") %>
38
- </div>
39
- </div>
40
- <footer class="ErrorPage__footer">
41
- © 2007-<%= Date.today.year %> Nulogy Corporation
42
- </footer>
43
- </div>
44
- </body>
45
- </html>