Skip to content

Commit 231a70c

Browse files
committed
Restrict pageSize for recent packages and revisions
1 parent 6cb18b2 commit 231a70c

File tree

1 file changed

+17
-10
lines changed
  • src/Distribution/Server/Features

1 file changed

+17
-10
lines changed

src/Distribution/Server/Features/Html.hs

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -556,21 +556,28 @@ mkHtmlCore ServerEnv{serverBaseURI, serverBlobStore}
556556
}
557557
]
558558

559-
readParamWithDefaultAnyValid :: (Read a, HasRqData m, Monad m, Functor m, Alternative m) =>
559+
readParamWithDefaultAndValid :: (Read a, HasRqData m, Monad m, Functor m, Alternative m) =>
560560
a -> (a -> Bool) -> String -> m a
561-
readParamWithDefaultAnyValid n f queryParam = do
561+
readParamWithDefaultAndValid n f queryParam = do
562562
m <- optional (look queryParam)
563563
let parsed = m >>= readMaybe >>= (\x -> if f x then Just x else Nothing)
564564

565565
return $ fromMaybe n parsed
566566

567+
lookupPageSize :: (HasRqData m, Monad m, Functor m, Alternative m) => Int -> m Int
568+
lookupPageSize def = readParamWithDefaultAndValid def validPageSize "pageSize"
569+
where validPageSize x = x > 1 && x <= 200
570+
571+
lookupPage :: (HasRqData m, Monad m, Functor m, Alternative m) => Int -> m Int
572+
lookupPage def = readParamWithDefaultAndValid def validPage "page"
573+
where validPage = (>= 1)
567574

568575
serveRecentPage :: DynamicPath -> ServerPartE Response
569576
serveRecentPage _ = do
570577
recentPackages <- getRecentPackages
571578
users <- queryGetUserDb
572-
page <- readParamWithDefaultAnyValid 1 (>= 1) "page"
573-
pageSize <- readParamWithDefaultAnyValid 20 (>= 1) "pageSize"
579+
page <- lookupPage 1
580+
pageSize <- lookupPageSize 20
574581

575582
let conf = Paging.createConf page pageSize recentPackages
576583

@@ -580,8 +587,8 @@ mkHtmlCore ServerEnv{serverBaseURI, serverBlobStore}
580587
serveRecentRSS _ = do
581588
recentPackages <- getRecentPackages
582589
users <- queryGetUserDb
583-
page <- readParamWithDefaultAnyValid 1 (>= 1) "page"
584-
pageSize <- readParamWithDefaultAnyValid 20 (>= 1) "pageSize"
590+
page <- lookupPage 1
591+
pageSize <- lookupPageSize 20
585592
now <- liftIO getCurrentTime
586593

587594
let conf = Paging.createConf page pageSize recentPackages
@@ -592,8 +599,8 @@ mkHtmlCore ServerEnv{serverBaseURI, serverBlobStore}
592599
serveRevisionPage _ = do
593600
revisions <- getRecentRevisions
594601
users <- queryGetUserDb
595-
page <- readParamWithDefaultAnyValid 1 (>= 1) "page"
596-
pageSize <- readParamWithDefaultAnyValid 40 (>= 1) "pageSize"
602+
page <- lookupPage 1
603+
pageSize <- lookupPageSize 40
597604

598605
let conf = Paging.createConf page pageSize revisions
599606

@@ -603,8 +610,8 @@ mkHtmlCore ServerEnv{serverBaseURI, serverBlobStore}
603610
serveRevisionRSS _ = do
604611
revisions <- getRecentRevisions
605612
users <- queryGetUserDb
606-
page <- readParamWithDefaultAnyValid 1 (>= 1) "page"
607-
pageSize <- readParamWithDefaultAnyValid 40 (>= 1) "pageSize"
613+
page <- lookupPage 1
614+
pageSize <- lookupPageSize 40
608615
now <- liftIO getCurrentTime
609616

610617
let conf = Paging.createConf page pageSize revisions

0 commit comments

Comments
 (0)