diff --git a/Data/Tag.hs b/Data/Tag.hs new file mode 100644 index 0000000..8b0862f --- /dev/null +++ b/Data/Tag.hs @@ -0,0 +1,11 @@ +-- | A wrapper around the 'Slug' interface. + +module Data.Tag where + +import Control.Monad.Catch +import Data.Slug +import Data.Text + +-- | Make a tag. +mkTag :: MonadThrow m => Text -> m Slug +mkTag = mkSlugLen 1 20 diff --git a/Handler/BannedTags.hs b/Handler/BannedTags.hs index fe39d83..3139e1d 100644 --- a/Handler/BannedTags.hs +++ b/Handler/BannedTags.hs @@ -1,11 +1,12 @@ module Handler.BannedTags where +import Data.Slug (unSlug, Slug) +import Data.Tag import Import -import Data.Slug (unSlug, mkSlug, Slug) checkSlugs :: Monad m => Textarea -> m (Either Text [Slug]) checkSlugs (Textarea t) = - return $ first tshow $ (mapM mkSlug $ filter (not . null) $ lines $ filter (/= '\r') t) + return $ first tshow $ (mapM mkTag $ filter (not . null) $ lines $ filter (/= '\r') t) fromSlugs :: [Slug] -> Textarea fromSlugs = Textarea . unlines . map unSlug diff --git a/Handler/Package.hs b/Handler/Package.hs index 68c6f02..5ac73c6 100644 --- a/Handler/Package.hs +++ b/Handler/Package.hs @@ -5,7 +5,7 @@ module Handler.Package where import Data.Char -import Data.Slug +import Data.Tag import qualified Data.Text as T import qualified Data.Text.Encoding as T import Data.Time (addUTCTime) @@ -200,7 +200,7 @@ postPackageTagR packageName = do mtag <- lookupPostParam "slug" case mtag of Just tag -> - do slug <- mkSlugLen 1 20 tag + do slug <- mkTag tag void (runDB (P.insert (Tag packageName slug uid))) Nothing -> error "Need a slug" @@ -214,7 +214,7 @@ postPackageUntagR packageName = do mtag <- lookupPostParam "slug" case mtag of Just tag -> - do slug <- mkSlugLen 1 20 tag + do slug <- mkTag tag void (runDB (P.deleteWhere [TagPackage ==. packageName ,TagTag ==. slug diff --git a/stackage-server.cabal b/stackage-server.cabal index 2d38994..e72bb9e 100644 --- a/stackage-server.cabal +++ b/stackage-server.cabal @@ -22,6 +22,7 @@ library Settings.StaticFiles Settings.Development Data.Slug + Data.Tag Data.BlobStore Data.Hackage Data.Hackage.Views