only allow owner to modify sharing setting
This commit is contained in:
parent
c089fb7d47
commit
665369c43c
1 changed files with 13 additions and 7 deletions
|
|
@ -1,6 +1,10 @@
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
|
|
||||||
import { createTRPCRouter, protectedProcedure } from "~/server/api/trpc";
|
import {
|
||||||
|
createTRPCRouter,
|
||||||
|
protectedProcedure,
|
||||||
|
publicProcedure,
|
||||||
|
} from "~/server/api/trpc";
|
||||||
import { GetObjectCommand, PutObjectCommand } from "@aws-sdk/client-s3";
|
import { GetObjectCommand, PutObjectCommand } from "@aws-sdk/client-s3";
|
||||||
import { env } from "~/env.mjs";
|
import { env } from "~/env.mjs";
|
||||||
import { getSignedUrl } from "@aws-sdk/s3-request-presigner";
|
import { getSignedUrl } from "@aws-sdk/s3-request-presigner";
|
||||||
|
|
@ -16,7 +20,7 @@ export const videoRouter = createTRPCRouter({
|
||||||
|
|
||||||
return videos;
|
return videos;
|
||||||
}),
|
}),
|
||||||
get: protectedProcedure
|
get: publicProcedure
|
||||||
.input(z.object({ videoId: z.string() }))
|
.input(z.object({ videoId: z.string() }))
|
||||||
.query(async ({ ctx, input }) => {
|
.query(async ({ ctx, input }) => {
|
||||||
const { s3 } = ctx;
|
const { s3 } = ctx;
|
||||||
|
|
@ -28,14 +32,17 @@ export const videoRouter = createTRPCRouter({
|
||||||
user: true,
|
user: true,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
if (!video) {
|
||||||
|
throw new TRPCError({ code: "NOT_FOUND" });
|
||||||
|
}
|
||||||
|
|
||||||
if (video?.userId !== ctx.session.user.id) {
|
if (video.userId !== ctx?.session?.user.id && !video.sharing) {
|
||||||
throw new TRPCError({ code: "FORBIDDEN" });
|
throw new TRPCError({ code: "FORBIDDEN" });
|
||||||
}
|
}
|
||||||
|
|
||||||
const getObjectCommand = new GetObjectCommand({
|
const getObjectCommand = new GetObjectCommand({
|
||||||
Bucket: env.AWS_BUCKET_NAME,
|
Bucket: env.AWS_BUCKET_NAME,
|
||||||
Key: ctx.session.user.id + "/" + video.id,
|
Key: video.userId + "/" + video.id,
|
||||||
});
|
});
|
||||||
|
|
||||||
const signedUrl = await getSignedUrl(s3, getObjectCommand);
|
const signedUrl = await getSignedUrl(s3, getObjectCommand);
|
||||||
|
|
@ -58,8 +65,6 @@ export const videoRouter = createTRPCRouter({
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log(video.id);
|
|
||||||
|
|
||||||
const putObjectCommand = new PutObjectCommand({
|
const putObjectCommand = new PutObjectCommand({
|
||||||
Bucket: env.AWS_BUCKET_NAME,
|
Bucket: env.AWS_BUCKET_NAME,
|
||||||
Key: ctx.session.user.id + "/" + video.id,
|
Key: ctx.session.user.id + "/" + video.id,
|
||||||
|
|
@ -76,9 +81,10 @@ export const videoRouter = createTRPCRouter({
|
||||||
setSharing: protectedProcedure
|
setSharing: protectedProcedure
|
||||||
.input(z.object({ videoId: z.string(), sharing: z.boolean() }))
|
.input(z.object({ videoId: z.string(), sharing: z.boolean() }))
|
||||||
.mutation(async ({ ctx, input }) => {
|
.mutation(async ({ ctx, input }) => {
|
||||||
const updateVideo = await ctx.prisma.video.update({
|
const updateVideo = await ctx.prisma.video.updateMany({
|
||||||
where: {
|
where: {
|
||||||
id: input.videoId,
|
id: input.videoId,
|
||||||
|
userId: ctx.session.user.id,
|
||||||
},
|
},
|
||||||
data: {
|
data: {
|
||||||
sharing: input.sharing,
|
sharing: input.sharing,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue