Skip to content

ExternalProject: Add HTTP_HEADER

Ruslan Baratov requested to merge ruslo/cmake:pr.ep.http.header into master

Example from !105 (merged) can be rewritten as:

cmake_minimum_required(VERSION 3.0)
project(foo)

set(S3_KEY "...")
set(S3_SECRET "...")

set(S3_BUCKET_NAME "...")
set(FILENAME "...")
set(SHA1 "...")

set(S3_RESOURCE "/${S3_BUCKET_NAME}/${FILENAME}")

set(content_type "application/x-compressed-tar")

string(TIMESTAMP now "%a, %d %b %Y %H:%M:%S +0000" UTC)

set(string_to_sign "GET\n\n${content_type}\n${now}\n${S3_RESOURCE}")

# FIXME: workaround, tested on Linux
execute_process(
    COMMAND echo -n "${string_to_sign}"
    COMMAND openssl sha1 -hmac "${S3_SECRET}" -binary
    COMMAND base64
    RESULT_VARIABLE result
    OUTPUT_VARIABLE signature
    ERROR_VARIABLE error
    OUTPUT_STRIP_TRAILING_WHITESPACE
    ERROR_STRIP_TRAILING_WHITESPACE
)

# TODO: check ${result}, print ${error}

include(ExternalProject) # ExternalProject_Add

ExternalProject_Add(
    foo
    URL "https://${S3_BUCKET_NAME}.s3.amazonaws.com/${FILENAME}"
    URL_HASH SHA1=${SHA1}
    CONFIGURE_COMMAND ""
    BUILD_COMMAND ""
    INSTALL_COMMAND ""
    HTTP_HEADER "Host: ${S3_BUCKET_NAME}.s3.amazonaws.com"
    HTTP_HEADER "Date: ${now}"
    HTTP_HEADER "Content-Type: ${content_type}"
    HTTP_HEADER "Authorization: AWS ${S3_KEY}:${signature}"
)

Merge request reports