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":"9cwJ4P9GOPrcvMwZ"}