zxcvbn-hs-0.2.0.0: src/Text/Password/Strength/Internal/Dictionary.hs
{-|
Copyright:
This file is part of the package zxcvbn-hs. It is subject to the
license terms in the LICENSE file found in the top-level directory
of this distribution and at:
https://code.devalot.com/sthenauth/zxcvbn-hs
No part of this package, including this file, may be copied,
modified, propagated, or distributed except according to the terms
contained in the LICENSE file.
License: MIT
-}
module Text.Password.Strength.Internal.Dictionary (
-- * Frequency Dictionary Matching
Dictionary,
Rank,
rank
) where
--------------------------------------------------------------------------------
-- Library Imports:
import qualified Data.HashMap.Strict as HashMap
import Data.Maybe (mapMaybe)
import Data.Text (Text)
--------------------------------------------------------------------------------
-- Project Imports:
import Text.Password.Strength.Internal.Config
--------------------------------------------------------------------------------
-- | Type to represent a ranking.
type Rank = Int
--------------------------------------------------------------------------------
-- | Look up the given value in all configured dictionaries,
-- transforming each input with the given function. The lowest ranked
-- score is return if it is found.
rank :: Config -> (a -> Text) -> a -> Maybe Rank
rank c f a =
case check (dictionaries c) of
[] -> Nothing
xs -> Just (minimum xs)
where
check :: [Dictionary] -> [Rank]
check = mapMaybe (HashMap.lookup key)
key :: Text
key = f a