Adds a shared requireAuthenticated tRPC middleware (reads the server- resolved ctx.user from createTrpcContext) and applies it to every mutating feature procedure — blog.createArticle and media.deleteMedia were anonymous-callable (audit finding B7). Read-only queries stay public; features compose <x>ProtectedProcedure from their error-mapped base procedure. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
21 lines
795 B
TypeScript
21 lines
795 B
TypeScript
import { t } from "@repo/core-shared/trpc/init";
|
|
import { defineErrorMiddleware } from "@repo/core-shared/trpc/define-error-middleware";
|
|
import { requireAuthenticated } from "@repo/core-shared/trpc/require-authenticated";
|
|
|
|
import { ArticleNotFoundError } from "../../entities/errors/article";
|
|
import { InputParseError } from "../../entities/errors/common";
|
|
|
|
export const blogProcedure = t.procedure.use(
|
|
defineErrorMiddleware([
|
|
[InputParseError, "BAD_REQUEST"],
|
|
[ArticleNotFoundError, "NOT_FOUND"],
|
|
]),
|
|
);
|
|
|
|
/**
|
|
* Base procedure for MUTATING blog routes (audit finding B7): anonymous
|
|
* callers are rejected with UNAUTHORIZED before the controller runs.
|
|
* Read-only queries stay on `blogProcedure`.
|
|
*/
|
|
export const blogProtectedProcedure = blogProcedure.use(requireAuthenticated);
|