diff options
author | David Ostrovsky <david@ostrovsky.org> | 2018-09-23 20:28:18 +0200 |
---|---|---|
committer | David Ostrovsky <david@ostrovsky.org> | 2018-09-26 06:29:53 +0200 |
commit | e36486918697526cb08616154b4b93030cb616f5 (patch) | |
tree | b6600f6833119488474834a09c38c85807fb2702 | |
parent | 43e793eba70a71d73794743195800e5189fd214e (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
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> |