@@ -705,7 +705,26 @@ slidesPost env fuid deckId slide = do
705705 pure $ Item slideId slide
706706
707707slidesPut :: Aws. Env -> Firebase. UserId -> DeckId -> SlideId -> Slide -> Servant. Handler (Item SlideId Slide )
708- slidesPut env _ _ slideId slide = do
708+ slidesPut env fuid deckId slideId slide = do
709+
710+ getDeck env deckId >>= \ case
711+ Nothing -> do
712+ liftIO $ putStrLn $ unwords
713+ [ " Trying to PUT slide" , show slideId, " of deck" , show deckId
714+ , " but deck doesn't exist." ]
715+ Servant. throwError Servant. err404
716+ Just deck@ Deck {deckOwnerId, deckSlides} -> do
717+ when (Firebase. unUserId fuid /= unFirebaseId (unUserId deckOwnerId)) $ do
718+ liftIO $ putStrLn $ unwords $
719+ [ " Trying to PUT slide" , show slideId, " of deck" , show deck
720+ , " but requester is not the owner" , show fuid ]
721+ Servant. throwError Servant. err404
722+
723+ unless (slideId `elem` deckSlides) $ do
724+ liftIO $ putStrLn $ unwords $
725+ [ " Trying to PUT slide" , show slideId, " of deck" , show deck
726+ , " but slide doesn't belong to deck owned by" , show fuid ]
727+ Servant. throwError Servant. err404
709728
710729 res <- runAWS env $ Aws. send $ DynamoDB. updateItem " Slides" &
711730 DynamoDB. uiUpdateExpression .~ Just
@@ -724,7 +743,26 @@ slidesPut env _ _ slideId slide = do
724743 pure $ Item slideId slide
725744
726745slidesDelete :: Aws. Env -> Firebase. UserId -> DeckId -> SlideId -> Servant. Handler ()
727- slidesDelete env _ _ slideId = do
746+ slidesDelete env fuid deckId slideId = do
747+
748+ getDeck env deckId >>= \ case
749+ Nothing -> do
750+ liftIO $ putStrLn $ unwords
751+ [ " Trying to DELETE slide" , show slideId, " of deck" , show deckId
752+ , " but deck doesn't exist." ]
753+ Servant. throwError Servant. err404
754+ Just deck@ Deck {deckOwnerId, deckSlides} -> do
755+ when (Firebase. unUserId fuid /= unFirebaseId (unUserId deckOwnerId)) $ do
756+ liftIO $ putStrLn $ unwords $
757+ [ " Trying to DELETE slide" , show slideId, " of deck" , show deck
758+ , " but requester is not the owner" , show fuid ]
759+ Servant. throwError Servant. err404
760+
761+ unless (slideId `elem` deckSlides) $ do
762+ liftIO $ putStrLn $ unwords $
763+ [ " Trying to DELETE slide" , show slideId, " of deck" , show deck
764+ , " but slide doesn't belong to deck owned by" , show fuid ]
765+ Servant. throwError Servant. err404
728766
729767 res <- runAWS env $ Aws. send $ DynamoDB. deleteItem " Slides" &
730768 DynamoDB. diKey .~ HMS. singleton " SlideId"
0 commit comments