module Feature.Sharing.Couch where import Core.Types import Core.Couch (confDb, dbHost, dbPort, dbPassword, dbUser) import Feature.Sharing.Types import Control.Monad.Reader (MonadIO, lift, ask) import Data.Aeson import Data.Maybe (fromJust) import Data.Text.Encoding import Network.HTTP.Req as Req import qualified Data.Text as T import qualified Data.ByteString.Char8 as B import qualified Data.ByteString.Lazy.Char8 as LB findByLink :: String -> PurrAction FindResults findByLink link = do host <- dbHost dbName <- confDb dbPort <- dbPort user <- dbUser pw <- dbPassword res <- req POST (http host /: dbName /: "_find") (ReqBodyJson postBody) jsonResponse $ basicAuthUnsafe user pw <> Req.port dbPort return $ responseBody res where postBody :: Maybe Object postBody = decodeStrict $ encodeUtf8 $ "{\"selector\": {\"link\": {\"$eq\": \"" <> sanitizeQ link <> "\"}}}" {- createNewSecret :: String -> PurrAction () createNewSecret sec = do host <- dbHost dbName <- confDb dbPort <- dbPort user <- dbUser pw <- dbPassword res <- req POST (http host /: dbName) (ReqBodyJson postBody) jsonResponse $ basicAuthUnsafe user pw <> Req.port dbPort return $ responseBody res where postBody :: SecretEntry postBody = SecretEntry Nothing Nothing "notImplementedYet" "zedNotImplementedYet" sec -} findToSecret :: FindResults -> Maybe String findToSecret doc = lookupSecret $ docs doc where lookupSecret :: [SecretEntry] -> Maybe String lookupSecret [] = Nothing lookupSecret (x:xs) = Just (secret x) sanitizeQ :: String -> T.Text sanitizeQ s = T.pack $ map sanitizeQ' s where sanitizeQ' :: Char -> Char sanitizeQ' '"' = ' ' sanitizeQ' '\\' = ' ' sanitizeQ' c = c