summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Ostrovsky <david@ostrovsky.org>2018-09-23 20:28:18 +0200
committerDavid Ostrovsky <david@ostrovsky.org>2018-09-26 06:29:53 +0200
commite36486918697526cb08616154b4b93030cb616f5 (patch)
treeb6600f6833119488474834a09c38c85807fb2702
parent43e793eba70a71d73794743195800e5189fd214e (diff)
PolyGerrit: Respect register URL when provided by auth scheme
For some authentication schemes, most notably LDAP, self service registration URL can be provided. Retrieve the URL from already fetched config endpoint and render the name of the registration link left to the "Sign In" button. Bug: Issue 7949 Change-Id: I2c3e4cfb2ff21089f0486dc3c473a25aaa1ac220
-rw-r--r--polygerrit-ui/app/elements/core/gr-main-header/gr-main-header.html13
-rw-r--r--polygerrit-ui/app/elements/core/gr-main-header/gr-main-header.js33
-rw-r--r--polygerrit-ui/app/elements/core/gr-main-header/gr-main-header_test.html33
3 files changed, 76 insertions, 3 deletions
diff --git a/polygerrit-ui/app/elements/core/gr-main-header/gr-main-header.html b/polygerrit-ui/app/elements/core/gr-main-header/gr-main-header.html
index 89b354842e..9822860669 100644
--- a/polygerrit-ui/app/elements/core/gr-main-header/gr-main-header.html
+++ b/polygerrit-ui/app/elements/core/gr-main-header/gr-main-header.html
@@ -112,12 +112,14 @@ limitations under the License.
margin: 5px 4px;
text-decoration: none;
}
+ .invisible,
.settingsButton,
gr-account-dropdown {
display: none;
}
:host([loading]) .accountContainer,
- :host([logged-in]) .loginButton {
+ :host([logged-in]) .loginButton,
+ :host([logged-in]) .registerButton {
display: none;
}
:host([logged-in]) .settingsButton,
@@ -135,7 +137,7 @@ limitations under the License.
text-overflow: ellipsis;
white-space: nowrap;
}
- .loginButton {
+ .loginButton, .registerButton {
color: var(--header-text-color);
padding: .5em 1em;
}
@@ -194,6 +196,13 @@ limitations under the License.
class="hideOnMobile"
name="header-browse-source"></gr-endpoint-decorator>
<div class="accountContainer" id="accountContainer">
+ <div class$="[[_computeIsInvisible(_registerURL)]]">
+ <a
+ class="registerButton"
+ href$="[[_registerURL]]">
+ [[_registerText]]
+ </a>
+ </div>
<a class="loginButton" href$="[[_loginURL]]">Sign in</a>
<a
class="settingsButton"
diff --git a/polygerrit-ui/app/elements/core/gr-main-header/gr-main-header.js b/polygerrit-ui/app/elements/core/gr-main-header/gr-main-header.js
index 2b5c17c096..3978c658b5 100644
--- a/polygerrit-ui/app/elements/core/gr-main-header/gr-main-header.js
+++ b/polygerrit-ui/app/elements/core/gr-main-header/gr-main-header.js
@@ -62,6 +62,13 @@
},
];
+ // Set of authentication methods that can provide custom registration page.
+ const AUTH_TYPES_WITH_REGISTER_URL = new Set([
+ 'LDAP',
+ 'LDAP_BIND',
+ 'CUSTOM_EXTENSION',
+ ]);
+
Polymer({
is: 'gr-main-header',
@@ -116,6 +123,14 @@
type: Array,
value() { return []; },
},
+ _registerText: {
+ type: String,
+ value: 'Sign up',
+ },
+ _registerURL: {
+ type: String,
+ value: null,
+ },
},
behaviors: [
@@ -235,7 +250,10 @@
_loadConfig() {
this.$.restAPI.getConfig()
- .then(config => this.getDocsBaseUrl(config, this.$.restAPI))
+ .then(config => {
+ this._retrieveRegisterURL(config);
+ this.getDocsBaseUrl(config, this.$.restAPI);
+ })
.then(docBaseUrl => { this._docBaseUrl = docBaseUrl; });
},
@@ -248,6 +266,19 @@
});
},
+ _retrieveRegisterURL(config) {
+ if (AUTH_TYPES_WITH_REGISTER_URL.has(config.auth.auth_type)) {
+ this._registerURL = config.auth.register_url;
+ if (config.auth.register_text) {
+ this._registerText = config.auth.register_text;
+ }
+ }
+ },
+
+ _computeIsInvisible(registerURL) {
+ return registerURL ? '' : 'invisible';
+ },
+
_fixCustomMenuItem(linkObj) {
// Normalize all urls to PolyGerrit style.
if (linkObj.url.startsWith('#')) {
diff --git a/polygerrit-ui/app/elements/core/gr-main-header/gr-main-header_test.html b/polygerrit-ui/app/elements/core/gr-main-header/gr-main-header_test.html
index 459daa3489..b6e64ec51a 100644
--- a/polygerrit-ui/app/elements/core/gr-main-header/gr-main-header_test.html
+++ b/polygerrit-ui/app/elements/core/gr-main-header/gr-main-header_test.html
@@ -63,6 +63,8 @@ limitations under the License.
'none');
assert.notEqual(getComputedStyle(element.$$('.loginButton')).display,
'none');
+ assert.notEqual(getComputedStyle(element.$$('.registerButton')).display,
+ 'none');
assert.equal(getComputedStyle(element.$$('gr-account-dropdown')).display,
'none');
assert.equal(getComputedStyle(element.$$('.settingsButton')).display,
@@ -70,6 +72,8 @@ limitations under the License.
element.loggedIn = true;
assert.equal(getComputedStyle(element.$$('.loginButton')).display,
'none');
+ assert.equal(getComputedStyle(element.$$('.registerButton')).display,
+ 'none');
assert.notEqual(getComputedStyle(element.$$('gr-account-dropdown'))
.display,
'none');
@@ -186,5 +190,34 @@ limitations under the License.
}],
}]);
});
+
+ test('register URL', () => {
+ const config = {
+ auth: {
+ auth_type: 'LDAP',
+ register_url: 'https//gerrit.example.com/register',
+ },
+ };
+ element._retrieveRegisterURL(config);
+ assert.equal(element._registerURL, config.auth.register_url);
+ assert.equal(element._registerText, 'Sign up');
+
+ config.auth.register_text = 'Create account';
+ element._retrieveRegisterURL(config);
+ assert.equal(element._registerURL, config.auth.register_url);
+ assert.equal(element._registerText, config.auth.register_text);
+ });
+
+ test('register URL ignored for wrong auth type', () => {
+ const config = {
+ auth: {
+ auth_type: 'OPENID',
+ register_url: 'https//gerrit.example.com/register',
+ },
+ };
+ element._retrieveRegisterURL(config);
+ assert.equal(element._registerURL, null);
+ assert.equal(element._registerText, 'Sign up');
+ });
});
</script>