Securely transfer any R object with full attribute preservation and cross-platform JSON compatibility. This uses the same approach as the mmbi.epi package of the UMCG.

post_data(
  object,
  url,
  authorization_header = NULL,
  compress = TRUE,
  encrypt = TRUE,
  key = read_secret("tools.encryption_password")
)

create_json_body(
  object,
  compress = TRUE,
  encrypt = TRUE,
  key = read_secret("tools.encryption_password")
)

Arguments

object

Any object of any size, preferably a data set

url

A character string specifying the target URL for the HTTP POST request. Must include the full scheme (e.g., "https://" or "http://"), hostname, and path.

authorization_header

A character string specifying the value of the Authorization header to include in the POST request, e.g. "Bearer <token>". Use NULL to omit the header.

compress

Should the object be compressed/decompressed? At least allowed: "gzip" (or TRUE), "bzip2", "xz", see base::memCompress(). Use FALSE to not compress/decompress.

encrypt

Should the object be encrypted/decrypted? This applies AES-GCM via openssl::aes_gcm_encrypt(), providing authenticated encryption. This guarantees both confidentiality and integrity: the file cannot be read without the correct key, and any tampering will be detected automatically during decryption. The initialization vector (iv) will be a length-12 random raw vector.

key

A character to be used as the encryption key. Internally, this is converted using openssl::sha256() to ensure a raw high-entropy key of length 32, suitable for AES-GCM encryption. The default is the system environment variable: mmbi_epi_encryption_key.

Examples

if (FALSE) { # \dontrun{

post_data(iris,
          url = "https://some-server:8000/post",
          compress = TRUE,
          encrypt = TRUE)
} # }

# MANUAL WAY -----------------------------------------------------------

# use create_json_body() to make a(n encrypted) JSON of an object

iris_json <- iris |> create_json_body(compress = TRUE, encrypt = TRUE)
#> Warning: In read_secret(): environmental variable 'secrets_file' not set

# curl -X POST https://some-server:8000/post
#      -H "Content-Type: application/json"
#      -d '...'

# replace the "..." with the outcome of create_json_body():
iris_json
#> {"data":"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","iv":"/uyXNl7iKcEifOZr"}