diff options
author | guillaume-peoch-sonarsource <guillaume.peoch@sonarsource.com> | 2023-05-03 10:45:29 +0200 |
---|---|---|
committer | sonartech <sonartech@sonarsource.com> | 2023-05-11 20:03:14 +0000 |
commit | 19015abd9133202a4ae05eaf6f508b0c803bce92 (patch) | |
tree | 8e5a39ee75ca69ef7ff373f910be8b56a63e5f4c /server/sonar-web | |
parent | 965d66bb3385fc196ba867e5ccabbe23a574ca39 (diff) | |
download | sonarqube-19015abd9133202a4ae05eaf6f508b0c803bce92.tar.gz sonarqube-19015abd9133202a4ae05eaf6f508b0c803bce92.zip |
SONAR-19084 Disable Github Provisioning for community edition
Diffstat (limited to 'server/sonar-web')
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 () => { |