Skip to content

Commit

Permalink
clean up domain matching
Browse files Browse the repository at this point in the history
  • Loading branch information
jsbroks committed Sep 28, 2024
1 parent df77365 commit fdf98c0
Show file tree
Hide file tree
Showing 5 changed files with 201 additions and 496 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import type {
} from "@ctrlplane/db/schema";
import { useState } from "react";
import { useRouter } from "next/navigation";
import { useSession } from "next-auth/react";
import { TbAt, TbX } from "react-icons/tb";

import { Button } from "@ctrlplane/ui/button";
Expand All @@ -32,22 +33,19 @@ import {
import { api } from "~/trpc/react";

const CreateDomainMatchingDialog: React.FC<{
currentEmail: string;
workspaceId: string;
roles: Role[];
children: React.ReactNode;
}> = ({ workspaceId, roles, children }) => {
}> = ({ workspaceId, roles, children, currentEmail }) => {
const [isOpen, setIsOpen] = useState(false);
const [domain, setDomain] = useState("");
const [roleId, setRoleId] = useState("");

const create = api.workspace.emailDomainMatching.create.useMutation();
const router = useRouter();
const handleSubmit = async () => {
// Handle form submission logic here
console.log(`Adding domain: ${domain}`);
setIsOpen(false);
await create.mutateAsync({ workspaceId, roleId, domain });
setDomain("");
await create.mutateAsync({ workspaceId, roleId });
setRoleId("");
router.refresh();
};
Expand All @@ -73,9 +71,8 @@ const CreateDomainMatchingDialog: React.FC<{
<Input
id="domain"
placeholder="example.com"
className="col-span-3 pl-10"
value={domain}
onChange={(e) => setDomain(e.target.value)}
className="col-span-3 cursor-not-allowed pl-10"
value={currentEmail.split("@")[1]}
/>
</div>
</div>
Expand All @@ -101,7 +98,9 @@ const CreateDomainMatchingDialog: React.FC<{
<Button variant="secondary" onClick={() => setIsOpen(false)}>
Cancel
</Button>
<Button onClick={handleSubmit}>Add Domain</Button>
<Button onClick={handleSubmit} disabled={roleId === ""}>
Add Domain
</Button>
</DialogFooter>
</DialogContent>
</Dialog>
Expand All @@ -114,8 +113,10 @@ export const WorkspaceDomainMatching: React.FC<{
roles: Role[];
domainMatching: WorkspaceEmailDomainMatching[];
}> = ({ roles, domainMatching, workspace }) => {
const viewer = useSession();
const remove = api.workspace.emailDomainMatching.remove.useMutation();
const router = useRouter();
const currentEmail = viewer.data?.user.email;
return (
<div>
<div className="flex items-center">
Expand All @@ -125,9 +126,15 @@ export const WorkspaceDomainMatching: React.FC<{
Automatically invite members based on their email domain.
</p>
</div>
<CreateDomainMatchingDialog workspaceId={workspace.id} roles={roles}>
<Button variant="secondary">Add Domain</Button>
</CreateDomainMatchingDialog>
{currentEmail && (
<CreateDomainMatchingDialog
currentEmail={currentEmail}
workspaceId={workspace.id}
roles={roles}
>
<Button variant="secondary">Add Domain</Button>
</CreateDomainMatchingDialog>
)}
</div>

{domainMatching.length > 0 && (
Expand Down
23 changes: 17 additions & 6 deletions packages/api/src/router/workspace-security.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,12 +55,23 @@ export const workspaceEmailDomainMatchingRouter = createTRPCRouter({
const randomString = [...Array(10)]
.map(() => Math.random().toString(36)[2])
.join("");
const email = ctx.session.user.email;
if (email == null) return;

return ctx.db.insert(workspaceEmailDomainMatching).values({
...input,
verified: !env.REQUIRE_DOMAIN_MATCHING_VERIFICATION,
verificationCode: randomString,
});
const domain = email.split("@")[1];
if (domain == null) return;

return ctx.db
.insert(workspaceEmailDomainMatching)
.values({
...input,
domain,
verified: !env.REQUIRE_DOMAIN_MATCHING_VERIFICATION,
verificationCode: randomString,
verificationEmail: email,
})
.returning()
.then(takeFirst);
}),

remove: protectedProcedure
Expand All @@ -69,7 +80,7 @@ export const workspaceEmailDomainMatchingRouter = createTRPCRouter({
const workspaceRecord = await ctx.db
.select()
.from(workspaceEmailDomainMatching)
.where(eq(workspaceEmailDomainMatching.workspaceId, input))
.where(eq(workspaceEmailDomainMatching.id, input))
.then(takeFirstOrNull);
if (!workspaceRecord) throw new Error("Workspace not found");
return canUser
Expand Down
Loading

0 comments on commit fdf98c0

Please sign in to comment.