module Network.AWS.Wolf.S3
( listArtifacts
, getArtifact
, putArtifact
) where
import Control.Monad.Trans.AWS
import Data.Conduit
import Data.Conduit.Combinators
import Network.AWS.Data
import Network.AWS.Data.Body
import Network.AWS.S3 hiding (cBucket)
import Network.AWS.Wolf.Ctx
import Network.AWS.Wolf.Prelude hiding (concatMap)
import Network.AWS.Wolf.Types
import System.FilePath
listArtifacts :: MonadAmazonStore c m => m [FilePath]
listArtifacts = do
b <- view cBucket <$> view ccConf
p <- view ascPrefix
runResourceT $ runAmazonCtx $
paginate (set loPrefix (pure p) $ listObjects (BucketName b))
=$= concatMap ((makeRelative (textToString p) . textToString . toText . view oKey <$>) . view lorsContents)
$$ sinkList
getArtifact :: MonadAmazonStore c m => FilePath -> FilePath -> m ()
getArtifact file key = do
b <- view cBucket <$> view ccConf
p <- view ascPrefix
runResourceT $ runAmazonCtx $ do
gors <- send $ getObject (BucketName b) (ObjectKey (p -/- textFromString key))
sinkBody (gors ^. gorsBody) (sinkFileBS file)
putArtifact :: MonadAmazonStore c m => FilePath -> FilePath -> m ()
putArtifact file key = do
b <- view cBucket <$> view ccConf
p <- view ascPrefix
runResourceT $ runAmazonCtx $ do
(sha, len) <- sourceFileBS file $$ getZipSink $ (,) <$> ZipSink sinkSHA256 <*> ZipSink lengthE
void $ send $ putObject (BucketName b) (ObjectKey (p -/- textFromString key)) $
Hashed $ HashedStream sha len $ sourceFileBS file