diff --git a/src/plugins/api/apps.ts b/src/plugins/api/apps.ts index 570dea3..0550b1e 100644 --- a/src/plugins/api/apps.ts +++ b/src/plugins/api/apps.ts @@ -15,7 +15,7 @@ import { appSchema, errorSchema } from '../../schemas' import { getUsers, userIdIsValid, userIsValid } from '../../lib/collections' import { generateString } from '../../lib/crypto' import { containerFor, getItem, normalize, queryItems, createQuerySpec } from '../../lib/database' -import { unauthorizedError, serverError, badRequestError, notFoundError } from '../../lib/errors' +import { unauthorizedError, serverError, badRequestError, notFoundError, forbiddenError } from '../../lib/errors' import { attachMedia, deleteMedia } from '../../lib/media' import { createInstallationId } from '../../lib/utils' @@ -466,7 +466,7 @@ function getRoute(server: FastifyInstance() - if (!userIsValid(viewer)) return unauthorizedError(reply) + if (!userIsValid(viewer)) return forbiddenError(reply) const installations = await queryItems({ container: appContainer, @@ -635,7 +635,7 @@ function uninstallRoute(server: FastifyInstance() - if (!userIsValid(viewer)) return unauthorizedError(reply) + if (!userIsValid(viewer)) return forbiddenError(reply) const installations = await queryItems({ container: appContainer, @@ -716,7 +716,7 @@ function installationsRoute(server: FastifyInstance({ container: appContainer, - query: 'SELECT * FROM Apps a WHERE a.active = true AND a.preinstall = true', + query: `SELECT * FROM Apps a WHERE a.pk = '${APP_PARTITION_KEY}' AND a.active = true AND a.preinstall = true`, logger: request.log, }) diff --git a/src/plugins/api/groups.ts b/src/plugins/api/groups.ts index b95e803..f303b2e 100644 --- a/src/plugins/api/groups.ts +++ b/src/plugins/api/groups.ts @@ -783,7 +783,7 @@ function createInvitationRoute(server: FastifyInstance('/v1/group/:id/invitation', options, async (request, reply) => { + server.post('/v1/group/invitation', options, async (request, reply) => { if (!server.database) return serverError(reply) if (!request.viewer) return unauthorizedError(reply) @@ -792,7 +792,7 @@ function createInvitationRoute(server: FastifyInstance({ container, id: request.params.id }) + const group = await getItem({ container, id: membership.pk }) if (!group) return notFoundError(reply) const code = createInvitationCode() @@ -867,7 +867,7 @@ function invitationsRoute(server: FastifyInstance('/v1/group/:id/invitations', options, async (request, reply) => { + server.get('/v1/group/invitations', options, async (request, reply) => { if (!server.database) return serverError(reply) if (!request.viewer) return unauthorizedError(reply) @@ -876,7 +876,7 @@ function invitationsRoute(server: FastifyInstance({ container, id: request.params.id }) + const group = await getItem({ container, id: membership.pk }) if (!group) return notFoundError(reply) const { continuation } = request.query @@ -948,7 +948,7 @@ function logsRoute(server: FastifyInstance('/v1/group/:id/logs', options, async (request, reply) => { + server.get('/v1/group/logs', options, async (request, reply) => { if (!server.database) return serverError(reply) if (!request.viewer) return unauthorizedError(reply) @@ -957,7 +957,7 @@ function logsRoute(server: FastifyInstance({ container, id: request.params.id }) + const group = await getItem({ container, id: membership.pk }) if (!group) return notFoundError(reply) const { continuation } = request.query diff --git a/src/plugins/api/media.ts b/src/plugins/api/media.ts index 6f26497..da5f748 100644 --- a/src/plugins/api/media.ts +++ b/src/plugins/api/media.ts @@ -106,7 +106,7 @@ function addRoute(server: FastifyInstance) { - interface Body { + interface Params { name: string } @@ -114,7 +114,7 @@ function deleteRoute(server: FastifyInstance('/v1/media/delete', options, async (request, reply) => { + server.delete('/v1/media', options, async (request, reply) => { if (!server.database) return serverError(reply) - const mediaItem = containerFor(server.database.client, 'Media').item(request.body.name, MEDIA_PARTITION_KEY) + const mediaItem = containerFor(server.database.client, 'Media').item(request.query.name, MEDIA_PARTITION_KEY) const { resource: media } = await mediaItem.read() if (!media) return badRequestError(reply) diff --git a/src/plugins/api/posts.ts b/src/plugins/api/posts.ts index 6403453..dc62ace 100644 --- a/src/plugins/api/posts.ts +++ b/src/plugins/api/posts.ts @@ -375,7 +375,7 @@ function postsByUserRoute(server: FastifyInstance({ container: userContainer, id: request.viewer.id }) if (!viewer) return serverError(reply) - if (!viewer.groupId) return unauthorizedError(reply) + if (!userIsValid(viewer)) return forbiddenError(reply) const subscriptions = await getApprovedSubscriptions(server.database.client, user.id, request.viewer.id, request.log) if (viewer.groupId !== user.groupId && subscriptions.length === 0) return unauthorizedError(reply) @@ -387,9 +387,9 @@ function postsByUserRoute(server: FastifyInstance({ container: userContainer, id: request.viewer.id }) if (!viewer) return serverError(reply) - if (!viewer.groupId) return unauthorizedError(reply) + if (!userIsValid(viewer)) return forbiddenError(reply) - const blocks = await getUserBlocks(server.database.client, user.id, [viewer.id, viewer.groupId], request.log) + const blocks = await getUserBlocks(server.database.client, user.id, [viewer.id, viewer.groupId!], request.log) if (blocks.length > 0) return unauthorizedError(reply) } @@ -575,7 +575,7 @@ function postRoute(server: FastifyInstance({ container: containerFor(server.database.client, 'Users'), id: request.viewer.id }) if (!viewer) return serverError(reply) - if (!viewer.groupId) return unauthorizedError(reply) + if (!userIsValid(viewer)) return forbiddenError(reply) const blockQuery = createQuerySpec(` SELECT g.userId FROM Groups g WHERE @@ -585,7 +585,7 @@ function postRoute(server: FastifyInstance() if (!viewer) return serverError(reply) + if (!userIsValid(viewer)) return forbiddenError(reply) const { name, @@ -253,9 +254,9 @@ function getRoute(server: FastifyInstance({ container: userContainer, id: request.viewer.id }) if (!viewer) return serverError(reply) - if (!viewer.groupId) return unauthorizedError(reply) + if (!userIsValid(viewer)) return forbiddenError(reply) - const blocks = await getUserBlocks(server.database.client, user.id, [viewer.id, viewer.groupId], request.log) + const blocks = await getUserBlocks(server.database.client, user.id, [viewer.id, viewer.groupId!], request.log) if (blocks.length > 0) return unauthorizedError(reply) const subscription = (await queryItems({ @@ -331,7 +332,7 @@ function subscribeRoute(server: FastifyInstance({ container: userContainer, id: request.params.id }) @@ -339,7 +340,7 @@ function subscribeRoute(server: FastifyInstance({ container: containerFor(server.database.client, 'Groups'), query: blockQuery, - logger: request.log + logger: request.log, }) if (blocks.length > 0) return badRequestError(reply, 'Invalid operation') @@ -563,7 +564,7 @@ function unblockRoute(server: FastifyInstance({ container: userContainer, id: request.params.id }) if (!user) return notFoundError(reply) - if (!user.groupId) return badRequestError(reply, 'Invalid operation') + if (!user.groupId) return badRequestError(reply) const userBlockQuery = createQuerySpec(`SELECT u.id FROM Users u WHERE u.pk = @pk AND u.blockedId = @blocked AND u.t = @type`, { pk: request.viewer.id, @@ -574,7 +575,7 @@ function unblockRoute(server: FastifyInstance({ container: userContainer, query: userBlockQuery, - logger: request.log + logger: request.log, }) for (const userBlock of userBlocks) {