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")
)Any object of any size, preferably a data set
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.
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.
Should the object be compressed/decompressed? At least allowed: "gzip" (or TRUE), "bzip2", "xz", see base::memCompress(). Use FALSE to not compress/decompress.
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.
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.
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":"ICbgxng9dKyImNiL"}