purr

password generation and secret sharing
Log | Files | Refs | README | LICENSE

Shared.hs (1311B)


      1 module Feature.Generation.Shared where
      2 
      3 import           Data.Char     (intToDigit, toLower, toUpper)
      4 import           System.Random (randomRIO)
      5 
      6 -- Take a list of anything and return a random element from it
      7 rIndex :: [a] -> IO a
      8 rIndex arr = randomRIO (0, length arr - 1)
      9   >>= (\i -> return $ arr !! i)
     10 
     11 -- Return the input Char randomly uppercased or lowercased
     12 rCap :: Char -> IO Char
     13 rCap c = rIndex [True,False] >>= (\r -> return $ rCap' r c)
     14   where
     15     rCap' :: Bool -> Char -> Char
     16     rCap' True  c = toUpper c
     17     rCap' False c = toLower c
     18 
     19 -- Return a random character from validChars with random capitalization applied
     20 rChar :: IO Char
     21 rChar = rIndex validChars >>= rCap
     22 
     23 -- Return a random character or symbol with random capitalization applied
     24 rCharSym :: IO Char
     25 rCharSym = rIndex (validChars <> validSymbols)>>= rCap
     26 
     27 -- Takes any string and returns it in Titlecase
     28 titleCase :: [Char] -> [Char]
     29 titleCase [] = []
     30 titleCase x  = toUpper (head x) : map toLower (tail x)
     31 
     32 -- List of valid characters consisting of latin alphabet and numbers
     33 validChars :: [Char]
     34 validChars = validLetters <> fmap intToDigit validNumbers
     35 
     36 validNumbers :: [Int]
     37 validNumbers = [1..9]
     38 
     39 validLetters :: [Char]
     40 validLetters = ['a'..'z']
     41 
     42 validSymbols :: [Char]
     43 validSymbols = ['!', '@', '#', '$', '%', '^', '&', '*']