| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- // @ts-nocheck
- import { PermissionAction } from '@supabase/shared-types/out/constants'
- import { Download } from 'lucide-react'
- import { useState } from 'react'
- import { toast } from 'sonner'
- import { Button } from 'ui'
- import ConfirmationModal from 'ui-patterns/Dialogs/ConfirmationModal'
- import { ShimmeringLoader } from 'ui-patterns/ShimmeringLoader'
- import {
- ScaffoldSection,
- ScaffoldSectionContent,
- ScaffoldSectionDetail,
- } from '@/components/layouts/Scaffold'
- import NoPermission from '@/components/ui/NoPermission'
- import { UpgradePlanButton } from '@/components/ui/UpgradePlanButton'
- import { getDocument } from '@/data/documents/document-query'
- import { useSendEventMutation } from '@/data/telemetry/send-event-mutation'
- import { useCheckEntitlements } from '@/hooks/misc/useCheckEntitlements'
- import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions'
- import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization'
- export const SOC2 = () => {
- const { data: organization } = useSelectedOrganizationQuery()
- const slug = organization?.slug
- const { mutate: sendEvent } = useSendEventMutation()
- const { can: canReadSubscriptions, isLoading: isLoadingPermissions } = useAsyncCheckPermissions(
- PermissionAction.BILLING_READ,
- 'stripe.subscriptions'
- )
- const { hasAccess: hasAccessToSoc2Report, isLoading: isLoadingEntitlement } =
- useCheckEntitlements('security.soc2_report')
- const [isOpen, setIsOpen] = useState(false)
- const fetchSOC2 = async (orgSlug: string) => {
- try {
- const soc2Link = await getDocument({ orgSlug, docType: 'soc2-type-2-report' })
- if (soc2Link?.fileUrl) window.open(soc2Link.fileUrl, '_blank')
- setIsOpen(false)
- } catch (error: unknown) {
- const message = error instanceof Error ? error.message : 'Unknown error occurred'
- toast.error(`Failed to download SOC2 report: ${message}`)
- }
- }
- const handleDownloadClick = () => {
- if (!slug) return
- sendEvent({
- action: 'document_view_button_clicked',
- properties: { documentName: 'SOC2' },
- groups: { organization: slug },
- })
- setIsOpen(true)
- }
- return (
- <ScaffoldSection className="py-12">
- <ScaffoldSectionDetail>
- <h4 className="mb-5">SOC2 Type 2</h4>
- <div className="space-y-2 text-sm text-foreground-light [&_p]:m-0">
- <p>
- Organizations on Team Plan or above have access to our most recent SOC2 Type 2 report.
- </p>
- </div>
- </ScaffoldSectionDetail>
- <ScaffoldSectionContent>
- {isLoadingPermissions || isLoadingEntitlement ? (
- <div className="@lg:flex items-center justify-center h-full">
- <ShimmeringLoader className="w-24" />
- </div>
- ) : !canReadSubscriptions ? (
- <NoPermission resourceText="access our SOC2 Type 2 report" />
- ) : !hasAccessToSoc2Report ? (
- <div className="@lg:flex items-center justify-center h-full">
- <UpgradePlanButton
- variant="default"
- plan="Team"
- source="org-documents-soc2"
- featureProposition="download the SOC2 Type 2report"
- />
- </div>
- ) : (
- <div className="@lg:flex items-center justify-center h-full">
- <Button
- type="default"
- icon={<Download />}
- onClick={handleDownloadClick}
- disabled={!slug}
- >
- Download SOC2 Type 2 Report
- </Button>
- </div>
- )}
- <ConfirmationModal
- visible={isOpen}
- size="large"
- title="Non-Disclosure Agreement to access Briven's SOC2 Report"
- confirmLabel="I agree"
- confirmLabelLoading="Downloading"
- onCancel={() => setIsOpen(false)}
- onConfirm={() => {
- if (slug) fetchSOC2(slug)
- }}
- >
- <ol className="list-decimal list-inside text-sm text-foreground-light pl-30">
- <li>The information that you are about to access is confidential.</li>
- <li>
- Your access to our SOC 2 materials is governed by confidentiality obligations
- contained in the agreement between Briven, Inc ("Briven", "we", "our" or "us") and
- the Briven customer that has authorized you to access our platform to obtain this
- information (our "Customer").
- </li>
- <li>
- You must ensure that you treat the information in our SOC 2 materials in accordance
- with those confidentiality obligations, as communicated to you by the Customer.
- </li>
- <li>
- By clicking "I agree" below or otherwise accessing our SOC 2 materials, you:
- <ol className="list-[lower-roman] list-inside pl-4">
- <li>acknowledge that you have read and understood this Confidentiality Notice;</li>
- <li>
- confirm that you have been authorized by the Customer to access this information,
- and your use of our SOC 2 materials is subject to the confidentiality obligations
- owed by the Customer to us.
- </li>
- </ol>
- </li>
- <li>
- This Confidentiality Notice does not substitute or supersede any agreement between us
- and the Customer, or any internal rules or policies that the Customer requires you to
- comply with in your access to and use of confidential information. However, your
- failure to comply with this Confidentiality Notice may be used to determine whether
- the Customer has complied with its confidentiality obligations to us.
- </li>
- </ol>
- </ConfirmationModal>
- </ScaffoldSectionContent>
- </ScaffoldSection>
- )
- }
|