diff --git a/addons/core/translations/en-us.yaml b/addons/core/translations/en-us.yaml
index 903253cde..4b5017cab 100644
--- a/addons/core/translations/en-us.yaml
+++ b/addons/core/translations/en-us.yaml
@@ -1,10 +1,14 @@
auth:
titles:
no-scopes: No Scopes Available
+ flow-success: Successful authentication
+ flow-error: Could not authenticate
descriptions:
no-scopes: No scopes were found. To authenticate, ask your administrator to create an scope and grant you access.
choose-org: Choose a scope to authenticate.
authenticating-with-org: "You are authenticating with {name}."
+ flow-success: You've successfully authenticated. You may now close this window and return to the client.
+ flow-error: Something went wrong while authenticating. Please close this window and try again. If the problem persists, notify your administrator.
origin:
connected-to: Connected to
titles:
diff --git a/ui/admin/app/router.js b/ui/admin/app/router.js
index ddfe7f488..97294b7ac 100644
--- a/ui/admin/app/router.js
+++ b/ui/admin/app/router.js
@@ -7,6 +7,9 @@ export default class Router extends EmberRouter {
}
Router.map(function () {
+ this.route('authentication-complete');
+ this.route('authentication-error');
+
this.route('scopes', function () {
this.route('scope', { path: ':scope_id' }, function () {
this.route('authenticate', function () {
diff --git a/ui/admin/app/routes/authentication-complete.js b/ui/admin/app/routes/authentication-complete.js
new file mode 100644
index 000000000..33e15de1e
--- /dev/null
+++ b/ui/admin/app/routes/authentication-complete.js
@@ -0,0 +1,3 @@
+import Route from '@ember/routing/route';
+
+export default class AuthenticationCompleteRoute extends Route {}
diff --git a/ui/admin/app/routes/authentication-error.js b/ui/admin/app/routes/authentication-error.js
new file mode 100644
index 000000000..e7eba2739
--- /dev/null
+++ b/ui/admin/app/routes/authentication-error.js
@@ -0,0 +1,3 @@
+import Route from '@ember/routing/route';
+
+export default class AuthenticationErrorRoute extends Route {}
diff --git a/ui/admin/app/styles/app.scss b/ui/admin/app/styles/app.scss
index 134df4cd9..b41ac52d3 100644
--- a/ui/admin/app/styles/app.scss
+++ b/ui/admin/app/styles/app.scss
@@ -4,6 +4,12 @@
@import 'rose';
@import 'notify';
+.rose-layout-global {
+ .rose-layout-global-body {
+ justify-content: center;
+ }
+}
+
.rose-layout-centered {
> .rose-layout-page {
width: sizing.rems(l) * 18;
diff --git a/ui/admin/app/templates/authentication-complete.hbs b/ui/admin/app/templates/authentication-complete.hbs
new file mode 100644
index 000000000..cb1fb8eb3
--- /dev/null
+++ b/ui/admin/app/templates/authentication-complete.hbs
@@ -0,0 +1,12 @@
+{{page-title (t 'auth.titles.flow-success')}}
+
+
+
+
+ {{t "auth.descriptions.flow-success"}}
+
+
+
diff --git a/ui/admin/app/templates/authentication-error.hbs b/ui/admin/app/templates/authentication-error.hbs
new file mode 100644
index 000000000..477f35d3f
--- /dev/null
+++ b/ui/admin/app/templates/authentication-error.hbs
@@ -0,0 +1,12 @@
+{{page-title (t "auth.titles.flow-error")}}
+
+
+
+
+ {{t "auth.descriptions.flow-error"}}
+
+
+
diff --git a/ui/admin/tests/unit/routes/authentication-complete-test.js b/ui/admin/tests/unit/routes/authentication-complete-test.js
new file mode 100644
index 000000000..6005fe0b4
--- /dev/null
+++ b/ui/admin/tests/unit/routes/authentication-complete-test.js
@@ -0,0 +1,11 @@
+import { module, test } from 'qunit';
+import { setupTest } from 'ember-qunit';
+
+module('Unit | Route | authentication-complete', function (hooks) {
+ setupTest(hooks);
+
+ test('it exists', function (assert) {
+ let route = this.owner.lookup('route:authentication-complete');
+ assert.ok(route);
+ });
+});
diff --git a/ui/admin/tests/unit/routes/authentication-error-test.js b/ui/admin/tests/unit/routes/authentication-error-test.js
new file mode 100644
index 000000000..2cda681a6
--- /dev/null
+++ b/ui/admin/tests/unit/routes/authentication-error-test.js
@@ -0,0 +1,11 @@
+import { module, test } from 'qunit';
+import { setupTest } from 'ember-qunit';
+
+module('Unit | Route | authentication-error', function (hooks) {
+ setupTest(hooks);
+
+ test('it exists', function (assert) {
+ let route = this.owner.lookup('route:authentication-error');
+ assert.ok(route);
+ });
+});