X-Git-Url: https://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=Rakka%2FAuthorization.hs;h=0f865c3dee08b7be0baf710c5a6216d23d41a879;hb=df6079ca32f808d76c595e7953bff7a1dd46b10b;hp=04beabae3cb676cd138d1a0b447c818ba1ee5d0c;hpb=8c0fd38bb52a7b7cc69431df81c7736ddbb0faa6;p=Rakka.git diff --git a/Rakka/Authorization.hs b/Rakka/Authorization.hs index 04beaba..0f865c3 100644 --- a/Rakka/Authorization.hs +++ b/Rakka/Authorization.hs @@ -5,15 +5,15 @@ module Rakka.Authorization ) where -import qualified Codec.Binary.Base64 as B64 import qualified Codec.Binary.UTF8.String as UTF8 import Control.Concurrent.STM import Control.Monad.Trans -import Data.Digest.SHA2 +import qualified Data.ByteString as B import Data.Map (Map) import qualified Data.Map as M hiding (Map) import Data.Maybe -import Data.Word +import OpenSSL.EVP.Base64 +import OpenSSL.EVP.Digest import Rakka.SystemConfig import System.Directory import System.FilePath @@ -28,7 +28,7 @@ data AuthDB } -type UserMap = Map String [Word8] +type UserMap = Map String String mkAuthDB :: FilePath -> IO AuthDB @@ -45,10 +45,10 @@ mkAuthDB lsdir isValidPair :: MonadIO m => AuthDB -> String -> String -> m Bool isValidPair adb name pass - = let hash = toOctets $ sha256 $ UTF8.encode pass - in - liftIO $ atomically $ do m <- readTVar (adbUserMap adb) - return (M.lookup name m == Just hash) + = liftIO $ do sha1 <- return . fromJust =<< getDigestByName "SHA1" + let hash = digestBS sha1 $ B.pack $ UTF8.encode pass + atomically $ do m <- readTVar (adbUserMap adb) + return (M.lookup name m == Just hash) loadUserMap :: FilePath -> IO UserMap @@ -60,16 +60,17 @@ loadUserMap path return . M.fromList . map decodePair . fromJust . deserializeStringPairs else return M.empty - return (initMap m) + sha1 <- return . fromJust =<< getDigestByName "SHA1" + return (initMap sha1 m) where - decodePair :: (String, String) -> (String, [Word8]) + decodePair :: (String, String) -> (String, String) decodePair (name, b64Hash) - = (UTF8.decodeString name, fromJust $ B64.decode b64Hash) + = (UTF8.decodeString name, decodeBase64 b64Hash) - initMap :: UserMap -> UserMap - initMap m + initMap :: Digest -> UserMap -> UserMap + initMap sha1 m | M.null m = let name = "root" - hash = toOctets $ sha256 ([] :: [Word8]) + hash = digest sha1 "" in M.singleton name hash | otherwise = m