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":"WgflLwzdKki1syFmKPIe2HGNfYu8LjWHZs523TpYIF7X4pmo25EUigwOEDJsXnqR4GqozjWw\n7V18y7wYvgxDc+2KETZlTgpaM+kApyD/0Z8Jp6X3wnSPNf5U+lOmt+UQVdMO32Tfg/wUZIlj\nCncLLLh5giYC9uyHe4jTgGpwHRvdMtPxFGttzIUH5HbVMa224rxIP5BEPps3VLeFYSp8VBII\n4mQgwej34Uw/LE6qaqJiPuOmdeLAM+XsetQfeCo7lCymtkPh59hCmojD+52ctHTWKrTrN7i1\nUvrv26xZEbJYkuLvoubFQ/O8vQ4X5xxFiC5yO72UOUUez0x5o/v0Du5D9ct9YwLCsRJxnjSY\njczGThURdaL+EhNp+VyhyQ82+osgEpuHB+nc8vbndH5W54epyRkZWzymtcMjAXsGygD9KTs+\neFoyyrU5mhLi9CaxuODPByBZnL+yrMwg0421lSEZ47HN4BPrh3j5wcA2bIldWlSJN8ZcIwfi\nbAH6oczKdDmq7xaqR8st1EnyWbXEJzKDPLerg3fZH1fMtywC4GXQn9s3VsA2J01fOJTHQiAz\nlc75NuT3axIdYSVAZU+mXUy3aBw2/tkzpRP5Tv9m2uF+IaFrN7us8yCt01oEupLVTIvfe4SK\nfUUBO96Ud9xrvTOA0DRJ/2EnRrqeBhRm+TIgLHvyQLJ5PFX9Kdtt8B23Jf7gNCAgvjMb9DN/\nGa7LU28F0ug3AcSc5RO7tyGP2ZfcB2DzUCY2QofvcwvfW4jS+RPq3fNoAbtt4mjLYBFN/53x\n1uZ+PeLdsQhnvHSFsyWFXqLPwRf3Q2Zc8nzbNRtzsreiVpI0agli9FuAC7JwdLEfhqc1yLcf\nzzmSqgnaiOyk3EBeld/ok/nSgbK3PVinziguOptkv8TdZAhmDRq4AAyK1HfekJtDAIiD3IAu\nLXvHF1pekvc6D43ieNINS6L5x06Ow77lROssMUcM+1krDc68ImBPCYy6wiyOxxVw37kbnPUb\nceuYl6r73I1j0vexWoSaeKD7C2PO/aKx5KYPwYg2XEfrcIBWD8c67HX4INVK4iLLNb7qKKef\nRr31IpKoVjl7Q3JnTODGB8Mlsba95pzGJ4hA6E1BisKN3jVMTlFmcxMyGs13wfq6GAmJb+xG\ntcLZjDM4G7UR78WlKzzpDEPj22FUQ/74rP0XhLaMda7Zs5STa0U8HWprtFw10/crBTTBzrUx\nr/zAQ1YkFKhB4fxcMCXoS7Ic+9eyJWIYH9edhUEl0jU8tHobDPUUpRRVqFjHqCeEsllBkU4M\nGjmgECW9P8NYLA07cMbeRqp7y0Xe4hTMX7htur/MxPk/KRxObQq9eSV4mZhqr0JfooE1Zv4t\nluTshhLiIPQpsWGYCPDbIMyY6cb0en6UEOrMgaEJLsIZc+a+vca3w5UiaieL4mY0cSCl46Zp\nSO8TQqWRaNVVvOP+EpWMtooIZ1g5LeDM3IiMfMwJ7CtKE9taESDPVtpcHiYdyMs29vB32/oo\nLzKOg4EO6PjxQ78CgSN9Ifv4frWmL09a5WmltdV1QoaeuCNcJW8zQX9MM9vrVDsWUMXPdylr\nVMMSx0TSTkzKvV5KSuw7j1fy/IfEOjse3LJTPR0Enb12M/+2krJdzHPmQaTlchs5NqcXOYQz\nJSbR8TSLksft2n2eIAJhYGqqDDQOjhoiSDv6P3dm8InwG+SV40rkr7MqOtQjLbEv/VF194A+\nOYHZYhcsZK5MNtWsRfCtwk2V3E4NCDgt4Hlixf5H6czn7MhNDz8SYKCED7b8J5BrRDPNSV19\n0OkjEX9UqVssvOGSwsrAKZuSDBdqvdEnaCnV0Nzd8S5CwRHFml9SEI+CJ+oRAJaNqg6uZgEU\n5TKcB+S4g3v2Yga3xUApB1jEJX1alEs04u77Fcxe1YYK6dcQHwItZ0kuCUxx7ERb+qFhYsUl\n9NLhMyyRazBZPsVJfgj/ZEyqYsrVbjL38cNkR+7xZojf","iv":"xbqAoKCMI4gRxwF/"}