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":"BCpAgEa0h6Hdy/He"}