123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- import {t} from 'sentry/locale';
- import type {AuthProvider, Organization} from 'sentry/types';
- import routeTitleGen from 'sentry/utils/routeTitle';
- import withOrganization from 'sentry/utils/withOrganization';
- import DeprecatedAsyncView from 'sentry/views/deprecatedAsyncView';
- import OrganizationAuthList from './organizationAuthList';
- type Props = DeprecatedAsyncView['props'] & {
- organization: Organization;
- };
- type State = DeprecatedAsyncView['state'] & {
- provider: AuthProvider | null;
- providerList: AuthProvider[] | null;
- };
- class OrganizationAuth extends DeprecatedAsyncView<Props, State> {
- componentDidUpdate() {
- const {organization} = this.props;
- const access = organization.access;
- if (this.state.provider && access.includes('org:write')) {
- // If SSO provider is configured, keep showing loading while we redirect
- // to django configuration view
- // XXX: This does not need to be normalized for customer-domains because we're going
- // to a django rendered view.
- const path = `/organizations/${organization.slug}/auth/configure/`;
- // Use replace so we don't go back to the /settings/auth and hit this path again.
- window.location.replace(path);
- }
- }
- getEndpoints(): ReturnType<DeprecatedAsyncView['getEndpoints']> {
- const {organization} = this.props;
- return [
- ['providerList', `/organizations/${organization.slug}/auth-providers/`],
- ['provider', `/organizations/${organization.slug}/auth-provider/`],
- ];
- }
- getTitle() {
- return routeTitleGen(t('Auth Settings'), this.props.organization.slug, false);
- }
- /**
- * TODO(epurkhiser): This does not work right now as we still fallback to the
- * old SSO auth configuration page
- */
- handleConfigure = (provider: AuthProvider) => {
- const {organization} = this.props;
- this.setState({busy: true});
- this.api.request(`/organizations/${organization.slug}/auth-provider/`, {
- method: 'POST',
- data: {provider, init: true},
- success: data => {
- // Redirect to auth provider URL
- if (data?.auth_url) {
- window.location.href = data.auth_url;
- }
- },
- error: () => {
- this.setState({busy: false});
- },
- });
- };
- /**
- * TODO(epurkhiser): This does not work right now as we still fallback to the
- * old SSO auth configuration page
- */
- handleDisableProvider = (provider: AuthProvider) => {
- const {organization} = this.props;
- this.setState({busy: true});
- this.api.request(`/organizations/${organization.slug}/auth-provider/`, {
- method: 'DELETE',
- data: {provider},
- success: () => {
- this.setState({provider: null, busy: false});
- },
- error: () => {
- this.setState({busy: false});
- },
- });
- };
- renderBody() {
- const {providerList, provider} = this.state;
- if (providerList === null) {
- return null;
- }
- if (this.props.organization.access.includes('org:write') && provider) {
- // If SSO provider is configured, keep showing loading while we redirect
- // to django configuration view
- return this.renderLoading();
- }
- const activeProvider = providerList?.find(p => p.key === provider?.key);
- return (
- <OrganizationAuthList activeProvider={activeProvider} providerList={providerList} />
- );
- }
- }
- export default withOrganization(OrganizationAuth);
|