30 lines
885 B
TypeScript
30 lines
885 B
TypeScript
import type { H3Event, EventHandlerRequest } from "h3";
|
|
import type { Document } from "mongoose";
|
|
import { isFicmasHidden } from "~/lib/functions";
|
|
import { IStory } from "~/models/stories";
|
|
import { messages } from "../constants";
|
|
export default async function (
|
|
event: H3Event<EventHandlerRequest>,
|
|
story: IStory,
|
|
) {
|
|
let ret: any = {};
|
|
let num: number = event.context.chapterIndex;
|
|
if (story.ficmas != null) {
|
|
if (isFicmasHidden(story)) {
|
|
ret = {
|
|
statusCode: 423,
|
|
message: `TOP SECRET! This story is part of an ongoing challenge. You'll be able to read it after the challenge's reveal date.`,
|
|
};
|
|
}
|
|
}
|
|
if (
|
|
story.chapters[num]?.hidden ||
|
|
(event.context.currentUser?._id !== story.author._id &&
|
|
!event.context.currentUser?.profile.isAdmin)
|
|
) {
|
|
ret.statusCode = 403;
|
|
ret.message = messages[403];
|
|
}
|
|
return !!Object.keys(ret).length ? ret : null;
|
|
}
|