{-# LANGUAGE OverloadedStrings #-}

module Network.S3.URL
    ( putURL
    , getURL
    , s3URL
    ) where

import           Data.Monoid
import           Data.String

-- | S3 Upload URL Template
putURL :: (Monoid m, IsString m) => m -> m -> m -> m -> m
putURL bucket object expires mimetype =
    mconcat [ "PUT\n\n"
            , mimetype 
            ,"\n"
            , expires
            , "\nx-amz-acl:public-read\n/"
            , bucket
            , "/"
            , object
            ]

-- | S3 Download URL Template
getURL :: (Monoid m, IsString m) => m -> m -> m -> m
getURL bucket object expires =
    mconcat [ "GET\n\n\n"
            , expires
            , "\n/"
            , bucket
            , "/"
            , object
            ]

-- | Amazon S3 URL Template
baseUrl :: (Monoid m, IsString m) => m -> m -> m
baseUrl bucket object =
    mconcat [ "https://"
            , bucket
            , ".s3.amazonaws.com/"
            , object
            ]

s3URL :: (Monoid m, IsString m) =>
           m -> m -> m -> m -> m -> m
s3URL bucket object publicKey expires sig
    = mconcat [ baseUrl bucket object
              , "?AWSAccessKeyId="
              , publicKey
              , "&Expires="
              , expires
              , "&Signature="
              , sig
              ]