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":"LZ2JBTfBqQC3wn7W"}