aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-web
diff options
context:
space:
mode:
authorguillaume-peoch-sonarsource <guillaume.peoch@sonarsource.com>2023-05-03 10:45:29 +0200
committersonartech <sonartech@sonarsource.com>2023-05-11 20:03:14 +0000
commit19015abd9133202a4ae05eaf6f508b0c803bce92 (patch)
tree8e5a39ee75ca69ef7ff373f910be8b56a63e5f4c /server/sonar-web
parent965d66bb3385fc196ba867e5ccabbe23a574ca39 (diff)
downloadsonarqube-19015abd9133202a4ae05eaf6f508b0c803bce92.tar.gz
sonarqube-19015abd9133202a4ae05eaf6f508b0c803bce92.zip
SONAR-19084 Disable Github Provisioning for community edition
Diffstat (limited to 'server/sonar-web')
-rw-r--r--server/sonar-web/src/main/js/apps/settings/components/authentication/GithubAutheticationTab.tsx232
-rw-r--r--server/sonar-web/src/main/js/apps/settings/components/authentication/__tests__/Authentication-it.tsx28
2 files changed, 146 insertions, 114 deletions
diff --git a/server/sonar-web/src/main/js/apps/settings/components/authentication/GithubAutheticationTab.tsx b/server/sonar-web/src/main/js/apps/settings/components/authentication/GithubAutheticationTab.tsx
index 70b7e03a676..da6fb4043ae 100644
--- a/server/sonar-web/src/main/js/apps/settings/components/authentication/GithubAutheticationTab.tsx
+++ b/server/sonar-web/src/main/js/apps/settings/components/authentication/GithubAutheticationTab.tsx
@@ -172,128 +172,148 @@ export default function GithubAithentication(props: GithubAuthenticationProps) {
</Button>
</div>
</div>
- {hasGithubProvisioning && (
- <div className="spacer-bottom big-padded bordered display-flex-space-between">
- <form
- onSubmit={async (e) => {
- e.preventDefault();
- if (newGithubProvisioningStatus !== githubProvisioningStatus) {
- setShowConfirmProvisioningModal(true);
- } else {
- await handleSaveGroup();
- }
- }}
- >
- <fieldset className="display-flex-column big-spacer-bottom">
- <label className="h5">
- {translate('settings.authentication.form.provisioning')}
- </label>
+ <div className="spacer-bottom big-padded bordered display-flex-space-between">
+ <form
+ onSubmit={async (e) => {
+ e.preventDefault();
+ if (newGithubProvisioningStatus !== githubProvisioningStatus) {
+ setShowConfirmProvisioningModal(true);
+ } else {
+ await handleSaveGroup();
+ }
+ }}
+ >
+ <fieldset className="display-flex-column big-spacer-bottom">
+ <label className="h5">
+ {translate('settings.authentication.form.provisioning')}
+ </label>
- {enabled ? (
- <div className="display-flex-row spacer-top">
- <RadioCard
- label={translate(
- 'settings.authentication.github.form.provisioning_with_github'
- )}
- title={translate(
- 'settings.authentication.github.form.provisioning_with_github'
- )}
- selected={newGithubProvisioningStatus ?? githubProvisioningStatus}
- onClick={() => setNewGithubProvisioningStatus(true)}
- >
- <p className="spacer-bottom">
- {translate(
- 'settings.authentication.github.form.provisioning_with_github.description'
- )}
- </p>
+ {enabled ? (
+ <div className="display-flex-row spacer-top">
+ <RadioCard
+ label={translate(
+ 'settings.authentication.github.form.provisioning_with_github'
+ )}
+ title={translate(
+ 'settings.authentication.github.form.provisioning_with_github'
+ )}
+ selected={newGithubProvisioningStatus ?? githubProvisioningStatus}
+ onClick={() => setNewGithubProvisioningStatus(true)}
+ disabled={!hasGithubProvisioning}
+ >
+ {hasGithubProvisioning ? (
+ <>
+ <p className="spacer-bottom">
+ {translate(
+ 'settings.authentication.github.form.provisioning_with_github.description'
+ )}
+ </p>
+ <p>
+ <FormattedMessage
+ id="settings.authentication.github.form.provisioning_with_github.description.doc"
+ defaultMessage={translate(
+ 'settings.authentication.github.form.provisioning_with_github.description.doc'
+ )}
+ values={{
+ documentation: (
+ <DocLink
+ to={`/instance-administration/authentication/${
+ DOCUMENTATION_LINK_SUFFIXES[AlmKeys.GitHub]
+ }/`}
+ >
+ {translate('documentation')}
+ </DocLink>
+ ),
+ }}
+ />
+ </p>
+ </>
+ ) : (
<p>
<FormattedMessage
- id="settings.authentication.github.form.provisioning_with_github.description.doc"
+ id="settings.authentication.github.form.provisioning.disabled"
defaultMessage={translate(
- 'settings.authentication.github.form.provisioning_with_github.description.doc'
+ 'settings.authentication.github.form.provisioning.disabled'
)}
values={{
documentation: (
- <DocLink
- to={`/instance-administration/authentication/${
- DOCUMENTATION_LINK_SUFFIXES[AlmKeys.GitHub]
- }/`}
- >
+ // Documentation page not ready yet.
+ <DocLink to="/instance-administration/authentication/github">
{translate('documentation')}
</DocLink>
),
}}
/>
</p>
- </RadioCard>
- <RadioCard
- label={translate('settings.authentication.form.provisioning_at_login')}
- title={translate('settings.authentication.form.provisioning_at_login')}
- selected={!(newGithubProvisioningStatus ?? githubProvisioningStatus)}
- onClick={() => setNewGithubProvisioningStatus(false)}
- >
- {Object.values(values).map((val) => {
- if (!GITHUB_JIT_FIELDS.includes(val.key)) {
- return null;
- }
- return (
- <div key={val.key}>
- <AuthenticationFormField
- settingValue={values[val.key]?.newValue ?? values[val.key]?.value}
- definition={val.definition}
- mandatory={val.mandatory}
- onFieldChange={setNewValue}
- isNotSet={val.isNotSet}
- />
- </div>
- );
- })}
- </RadioCard>
- </div>
- ) : (
- <Alert className="big-spacer-top" variant="info">
- {translate('settings.authentication.github.enable_first')}
- </Alert>
- )}
- </fieldset>
- {enabled && (
- <>
- <SubmitButton disabled={!hasGithubProvisioningConfigChange}>
- {translate('save')}
- </SubmitButton>
- <ResetButtonLink
- className="spacer-left"
- onClick={() => {
- setNewGithubProvisioningStatus(undefined);
- resetJitSetting();
- }}
- disabled={!hasGithubProvisioningConfigChange}
+ )}
+ </RadioCard>
+ <RadioCard
+ label={translate('settings.authentication.form.provisioning_at_login')}
+ title={translate('settings.authentication.form.provisioning_at_login')}
+ selected={!(newGithubProvisioningStatus ?? githubProvisioningStatus)}
+ onClick={() => setNewGithubProvisioningStatus(false)}
>
- {translate('cancel')}
- </ResetButtonLink>
- </>
+ {Object.values(values).map((val) => {
+ if (!GITHUB_JIT_FIELDS.includes(val.key)) {
+ return null;
+ }
+ return (
+ <div key={val.key}>
+ <AuthenticationFormField
+ settingValue={values[val.key]?.newValue ?? values[val.key]?.value}
+ definition={val.definition}
+ mandatory={val.mandatory}
+ onFieldChange={setNewValue}
+ isNotSet={val.isNotSet}
+ />
+ </div>
+ );
+ })}
+ </RadioCard>
+ </div>
+ ) : (
+ <Alert className="big-spacer-top" variant="info">
+ {translate('settings.authentication.github.enable_first')}
+ </Alert>
)}
- {showConfirmProvisioningModal && (
- <ConfirmModal
- onConfirm={() => handleConfirmChangeProvisioning()}
- header={translate(
- 'settings.authentication.github.confirm',
- newGithubProvisioningStatus ? 'auto' : 'jit'
- )}
- onClose={() => setShowConfirmProvisioningModal(false)}
- isDestructive={!newGithubProvisioningStatus}
- confirmButtonText={translate('yes')}
+ </fieldset>
+ {enabled && (
+ <>
+ <SubmitButton disabled={!hasGithubProvisioningConfigChange}>
+ {translate('save')}
+ </SubmitButton>
+ <ResetButtonLink
+ className="spacer-left"
+ onClick={() => {
+ setNewGithubProvisioningStatus(undefined);
+ resetJitSetting();
+ }}
+ disabled={!hasGithubProvisioningConfigChange}
>
- {translate(
- 'settings.authentication.github.confirm',
- newGithubProvisioningStatus ? 'auto' : 'jit',
- 'description'
- )}
- </ConfirmModal>
- )}
- </form>
- </div>
- )}
+ {translate('cancel')}
+ </ResetButtonLink>
+ </>
+ )}
+ {showConfirmProvisioningModal && (
+ <ConfirmModal
+ onConfirm={() => handleConfirmChangeProvisioning()}
+ header={translate(
+ 'settings.authentication.github.confirm',
+ newGithubProvisioningStatus ? 'auto' : 'jit'
+ )}
+ onClose={() => setShowConfirmProvisioningModal(false)}
+ isDestructive={!newGithubProvisioningStatus}
+ confirmButtonText={translate('yes')}
+ >
+ {translate(
+ 'settings.authentication.github.confirm',
+ newGithubProvisioningStatus ? 'auto' : 'jit',
+ 'description'
+ )}
+ </ConfirmModal>
+ )}
+ </form>
+ </div>
</>
)}
diff --git a/server/sonar-web/src/main/js/apps/settings/components/authentication/__tests__/Authentication-it.tsx b/server/sonar-web/src/main/js/apps/settings/components/authentication/__tests__/Authentication-it.tsx
index dc5235e8cd5..d3a55581d5f 100644
--- a/server/sonar-web/src/main/js/apps/settings/components/authentication/__tests__/Authentication-it.tsx
+++ b/server/sonar-web/src/main/js/apps/settings/components/authentication/__tests__/Authentication-it.tsx
@@ -112,6 +112,7 @@ const ui = {
saveGithubProvisioning: byRole('button', { name: 'save' }),
groupAttribute: byRole('textbox', { name: 'property.sonar.auth.github.group.name.name' }),
enableConfigButton: byRole('button', { name: 'settings.authentication.form.enable' }),
+ disableConfigButton: byRole('button', { name: 'settings.authentication.form.disable' }),
editConfigButton: byRole('button', { name: 'settings.authentication.form.edit' }),
enableFirstMessage: byText('settings.authentication.github.enable_first'),
jitProvisioningButton: byRole('radio', {
@@ -125,8 +126,6 @@ const ui = {
await act(async () => {
await user.type(await github.clientId.find(), 'Awsome GITHUB config');
await user.type(github.clientSecret.get(), 'Client shut');
- // await user.type(github.githubAppId.get(), 'http://test.org');
- // await user.type(github.privateKey.get(), '-secret-');
await user.type(github.githubApiUrl.get(), 'API Url');
await user.type(github.githubWebUrl.get(), 'WEb Url');
});
@@ -284,20 +283,33 @@ describe('Github tab', () => {
});
it('should be able to enable/disable configuration', async () => {
- const { github, saml } = ui;
+ const { github } = ui;
const user = userEvent.setup();
renderAuthentication();
await user.click(await github.tab.find());
await github.createConfiguration(user);
- await user.click(await saml.enableConfigButton.find());
+ await user.click(await github.enableConfigButton.find());
- expect(await saml.disableConfigButton.find()).toBeInTheDocument();
- await user.click(saml.disableConfigButton.get());
- expect(saml.disableConfigButton.query()).not.toBeInTheDocument();
+ expect(await github.disableConfigButton.find()).toBeInTheDocument();
+ await user.click(github.disableConfigButton.get());
+ expect(github.disableConfigButton.query()).not.toBeInTheDocument();
- expect(await saml.enableConfigButton.find()).toBeInTheDocument();
+ expect(await github.enableConfigButton.find()).toBeInTheDocument();
+ });
+
+ it('should not allow edtion below Enterprise to select Github provisioning', async () => {
+ const { github } = ui;
+ const user = userEvent.setup();
+
+ renderAuthentication();
+
+ await github.createConfiguration(user);
+ await user.click(await github.enableConfigButton.find());
+
+ expect(await github.jitProvisioningButton.find()).toBeChecked();
+ expect(github.githubProvisioningButton.get()).toHaveAttribute('aria-disabled', 'true');
});
it('should be able to choose provisioning', async () => {