diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 00000000..c4406f48 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,15 @@ +# These are supported funding model platforms + +github: UnicisTech # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] +patreon: # Replace with a single Patreon username +open_collective: unicis-platform-ce # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry +polar: # Replace with a single Polar username +buy_me_a_coffee: # Replace with a single Buy Me a Coffee username +thanks_dev: # Replace with a single thanks.dev username +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 32f8b795..e81ccabd 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -15,7 +15,7 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - run: npm install - run: npm run check-lint - run: npm run check-format diff --git a/README.md b/README.md index 8d2be061..34605ba5 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,15 @@ Please star ⭐ the repo if you want us to continue developing and improving the Unicis SOC2 Type II

+- [General Data Protection Regulation - GDPR](https://www.unicis.tech/frameworks/gdpr?mtm_campaign=GitHub%20readme) +- [Minimum Viable Secure Product - MVSP](https://www.unicis.tech/frameworks/mvsp?mtm_campaign=GitHub%20readme) +- [ISO 27001:2013 & ISO 27001:2022](https://www.unicis.tech/frameworks/iso27k?mtm_campaign=GitHub%20readme) +- [NIST Cybersecurity Framework 2.0](https://www.unicis.tech/frameworks/nist-csf2?mtm_campaign=GitHub%20readme) +- [Directive (EU) 2022/2555 NIS 2](https://www.unicis.tech/frameworks/eu-nis2?mtm_campaign=GitHub%20readme) +- [CIS Critical Security Controls Version 8.1](https://www.unicis.tech/frameworks/cis?mtm_campaign=GitHub%20readme) +- [Criteria Catalogue C5:2020](https://www.unicis.tech/frameworks/c5?mtm_campaign=GitHub%20readme) +- [SOC2 Type II - System and Organization Controls](https://www.unicis.tech/frameworks/soc?mtm_campaign=GitHub%20readme) + ### Coming Next - EU Cyber Resilience Act (CRA) @@ -45,7 +54,7 @@ Please star ⭐ the repo if you want us to continue developing and improving the - Cloud Controls Matrix and CAIQ v4 (CSA CCM v4) - ISO/IEC 42001:2023 - AI management systems - Trusted Information Security Assessment Exchange (TISAX) -- EU IA Act +- EU AI Act - Custom ... ## 📖 Additional Resources diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 00000000..a890a55e --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,9 @@ +# Security Policy + +## Reporting a Vulnerability + +Contact: mailto:security@unicis.tech +Expires: 2027-09-09T06:30:00.000Z +Preferred-Languages: en +Policy: https://www.unicis.tech/security +OpenBugBounty: https://openbugbounty.org/bugbounty/UnicisTech/ diff --git a/components/shared/shell/Brand.tsx b/components/shared/shell/Brand.tsx index 4bf8df2d..f144ba1b 100644 --- a/components/shared/shell/Brand.tsx +++ b/components/shared/shell/Brand.tsx @@ -3,12 +3,7 @@ import app from '@/lib/app'; const Brand = () => { return (
- {app.name} - {/* {app.name} */} + {app.name}
); }; diff --git a/pages/api/teams/[slug]/invitations.ts b/pages/api/teams/[slug]/invitations.ts index 075d8984..03fe46ed 100644 --- a/pages/api/teams/[slug]/invitations.ts +++ b/pages/api/teams/[slug]/invitations.ts @@ -4,7 +4,6 @@ import { prisma } from '@/lib/prisma'; import { sendAudit } from '@/lib/retraced'; import { getSession } from '@/lib/session'; import { sendEvent } from '@/lib/svix'; -import { getCurrentPlan, subscriptions } from '@/lib/subscriptions'; import { createInvitation, deleteInvitation, @@ -12,15 +11,10 @@ import { getInvitations, isInvitationExpired, } from 'models/invitation'; -import { - addTeamMember, - getTeamMembers, - throwIfNoTeamAccess, -} from 'models/team'; +import { addTeamMember, throwIfNoTeamAccess } from 'models/team'; import { throwIfNotAllowed } from 'models/user'; import type { NextApiRequest, NextApiResponse } from 'next'; import { recordMetric } from '@/lib/metrics'; -import { Role } from '@prisma/client'; export default async function handler( req: NextApiRequest, @@ -62,56 +56,6 @@ const handlePOST = async (req: NextApiRequest, res: NextApiResponse) => { throwIfNotAllowed(teamMember, 'team_invitation', 'create'); const { email, role } = req.body; - const { slug } = req.query as { slug: string }; - - const currentPlan = getCurrentPlan(teamMember.team.subscription); - const { maxAdmins, maxUsers } = subscriptions[currentPlan]; - - const teamInvitations = await getInvitations(teamMember.teamId); - const invitationsAmount = teamInvitations.length; - const adminInitationAmout = teamInvitations.filter( - ({ role }) => role === Role.ADMIN || Role.OWNER - ).length; - - const members = await getTeamMembers(slug); - - if (members.length >= maxUsers) { - return res.status(400).json({ - error: { - message: 'You have reached the maximum number of members per team.', - }, - }); - } - - if (invitationsAmount + members.length >= maxUsers) { - return res.status(400).json({ - error: { - message: - 'You have reached the maximum number of invitations per team, reject them to invite new members.', - }, - }); - } - - if (role === Role.ADMIN || role === Role.OWNER) { - const adminsAmount = members.filter( - ({ role }) => role === Role.ADMIN - ).length; - if (adminsAmount >= maxAdmins) { - return res.status(400).json({ - error: { - message: 'You have reached the maximum number of admins per team.', - }, - }); - } - if (adminsAmount + adminInitationAmout >= maxAdmins) { - return res.status(400).json({ - error: { - message: - 'You have reached the maximum number of admin invitations per team, reject them to invite new admins.', - }, - }); - } - } const invitationExists = await prisma.invitation.findFirst({ where: { diff --git a/types/base.ts b/types/base.ts index b8747a3e..243069ec 100644 --- a/types/base.ts +++ b/types/base.ts @@ -161,6 +161,7 @@ export type ChatbotResponse = { content: string; role: string; }; + export type ChatbotResponseReturned = { response: ChatbotResponse; };