mirror of
https://github.com/commercialhaskell/stackage-server.git
synced 2026-01-25 02:11:55 +01:00
Don't show spam packages
This commit is contained in:
parent
6263bcd666
commit
1dbbde2abf
@ -11,6 +11,7 @@ import Data.GhcLinks
|
|||||||
import Data.Aeson (withObject)
|
import Data.Aeson (withObject)
|
||||||
import Data.Yaml
|
import Data.Yaml
|
||||||
import System.FilePath (takeFileName)
|
import System.FilePath (takeFileName)
|
||||||
|
import Types
|
||||||
|
|
||||||
data WebsiteContent = WebsiteContent
|
data WebsiteContent = WebsiteContent
|
||||||
{ wcHomepage :: !Html
|
{ wcHomepage :: !Html
|
||||||
@ -19,6 +20,8 @@ data WebsiteContent = WebsiteContent
|
|||||||
, wcGhcLinks :: !GhcLinks
|
, wcGhcLinks :: !GhcLinks
|
||||||
, wcStackReleases :: ![StackRelease]
|
, wcStackReleases :: ![StackRelease]
|
||||||
, wcPosts :: !(Vector Post)
|
, wcPosts :: !(Vector Post)
|
||||||
|
, wcSpamPackages :: !(Set PackageName)
|
||||||
|
-- ^ Packages considered spam which should not be displayed.
|
||||||
}
|
}
|
||||||
|
|
||||||
data Post = Post
|
data Post = Post
|
||||||
@ -42,6 +45,8 @@ loadWebsiteContent dir = do
|
|||||||
wcPosts <- loadPosts (dir </> "posts") `catchAny` \e -> do
|
wcPosts <- loadPosts (dir </> "posts") `catchAny` \e -> do
|
||||||
putStrLn $ "Error loading posts: " ++ tshow e
|
putStrLn $ "Error loading posts: " ++ tshow e
|
||||||
return mempty
|
return mempty
|
||||||
|
wcSpamPackages <- decodeFileEither (dir </> "spam-packages.yaml")
|
||||||
|
>>= either throwIO (return . setFromList . map PackageName)
|
||||||
return WebsiteContent {..}
|
return WebsiteContent {..}
|
||||||
where
|
where
|
||||||
readHtml fp = fmap (preEscapedToMarkup . decodeUtf8 :: ByteString -> Html)
|
readHtml fp = fmap (preEscapedToMarkup . decodeUtf8 :: ByteString -> Html)
|
||||||
|
|||||||
@ -21,6 +21,7 @@ import Import
|
|||||||
import qualified Text.Blaze.Html.Renderer.Text as LT
|
import qualified Text.Blaze.Html.Renderer.Text as LT
|
||||||
import Text.Email.Validate
|
import Text.Email.Validate
|
||||||
import Stackage.Database
|
import Stackage.Database
|
||||||
|
import Yesod.GitRepo
|
||||||
|
|
||||||
-- | Page metadata package.
|
-- | Page metadata package.
|
||||||
getPackageR :: PackageName -> Handler Html
|
getPackageR :: PackageName -> Handler Html
|
||||||
@ -57,10 +58,19 @@ renderStackageBadge style mLabel snapName = \case
|
|||||||
badgeSnapName (SNNightly _) = "nightly"
|
badgeSnapName (SNNightly _) = "nightly"
|
||||||
badgeSnapName (SNLts x _) = "lts-" <> tshow x
|
badgeSnapName (SNLts x _) = "lts-" <> tshow x
|
||||||
|
|
||||||
|
checkSpam :: PackageName -> Handler Html -> Handler Html
|
||||||
|
checkSpam name inner = do
|
||||||
|
wc <- getYesod >>= liftIO . grContent . appWebsiteContent
|
||||||
|
if name `member` wcSpamPackages wc
|
||||||
|
then defaultLayout $ do
|
||||||
|
setTitle $ "Spam package detected: " <> toHtml name
|
||||||
|
$(widgetFile "spam-package")
|
||||||
|
else inner
|
||||||
|
|
||||||
packagePage :: Maybe (SnapName, Version)
|
packagePage :: Maybe (SnapName, Version)
|
||||||
-> PackageName
|
-> PackageName
|
||||||
-> Handler Html
|
-> Handler Html
|
||||||
packagePage mversion pname = track "Handler.Package.packagePage" $ do
|
packagePage mversion pname = track "Handler.Package.packagePage" $ checkSpam pname $ do
|
||||||
let pname' = toPathPiece pname
|
let pname' = toPathPiece pname
|
||||||
(deprecated, inFavourOf) <- getDeprecated pname'
|
(deprecated, inFavourOf) <- getDeprecated pname'
|
||||||
latests <- getLatests pname'
|
latests <- getLatests pname'
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user