123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- import {RouteComponentProps} from 'react-router';
- import ExternalLink from 'sentry/components/links/externalLink';
- import Panel from 'sentry/components/panels/panel';
- import PanelBody from 'sentry/components/panels/panelBody';
- import PanelHeader from 'sentry/components/panels/panelHeader';
- import PreviewFeature from 'sentry/components/previewFeature';
- import {t, tct} from 'sentry/locale';
- import {Organization, ProjectKey} from 'sentry/types';
- import routeTitleGen from 'sentry/utils/routeTitle';
- import withOrganization from 'sentry/utils/withOrganization';
- import DeprecatedAsyncView from 'sentry/views/deprecatedAsyncView';
- import SettingsPageHeader from 'sentry/views/settings/components/settingsPageHeader';
- import ReportUri, {
- getSecurityDsn,
- } from 'sentry/views/settings/projectSecurityHeaders/reportUri';
- type Props = RouteComponentProps<{projectId: string}, {}> & {
- organization: Organization;
- };
- type State = {
- keyList: null | ProjectKey[];
- } & DeprecatedAsyncView['state'];
- class ProjectExpectCtReports extends DeprecatedAsyncView<Props, State> {
- getEndpoints(): ReturnType<DeprecatedAsyncView['getEndpoints']> {
- const {organization} = this.props;
- const {projectId} = this.props.params;
- return [['keyList', `/projects/${organization.slug}/${projectId}/keys/`]];
- }
- getTitle() {
- const {projectId} = this.props.params;
- return routeTitleGen(t('Certificate Transparency (Expect-CT)'), projectId, false);
- }
- getInstructions(keyList: ProjectKey[]) {
- return `Expect-CT: report-uri="${getSecurityDsn(keyList)}"`;
- }
- renderBody() {
- const {organization, params} = this.props;
- const {keyList} = this.state;
- if (!keyList) {
- return null;
- }
- return (
- <div>
- <SettingsPageHeader title={t('Certificate Transparency')} />
- <PreviewFeature />
- <ReportUri
- keyList={keyList}
- orgId={organization.slug}
- projectId={params.projectId}
- />
- <Panel>
- <PanelHeader>{t('About')}</PanelHeader>
- <PanelBody withPadding>
- <p>
- {tct(
- `[link:Certificate Transparency]
- (CT) is a security standard which helps track and identify valid certificates, allowing identification of maliciously issued certificates`,
- {
- link: (
- <ExternalLink href="https://en.wikipedia.org/wiki/Certificate_Transparency" />
- ),
- }
- )}
- </p>
- <p>
- {tct(
- "To configure reports in Sentry, you'll need to configure the [header] a header from your server:",
- {
- header: <code>Expect-CT</code>,
- }
- )}
- </p>
- <pre>{this.getInstructions(keyList)}</pre>
- <p>
- {tct('For more information, see [link:the article on MDN].', {
- link: (
- <ExternalLink href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Expect-CT" />
- ),
- })}
- </p>
- </PanelBody>
- </Panel>
- </div>
- );
- }
- }
- export default withOrganization(ProjectExpectCtReports);
|