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":"P/RAH/gv75aO7Razvom/Kl4QD9IFZDcfl4r+p2s8eo757wVpQ3XQioPnhMdQNYuxzO6/XZLe\nG+PXqDJI0PrzaYtN9BOYQT+ruhb9wP3ErYrQ8nYtlLSNbhNJHJUYJVHkfH9cXQzVYOHNOeLE\nEmDhBGrQCYn6cmZraihFZKvFm0wONR6cjllAM0bAuwGYblQxyNnGhMF9hdCbPCVRQE9OCCrE\n5iaqe1i9hPD+o9E3zyiRYOO0DawepHuZrnyPl9k5kG5A5CLHBwvUw0yYzPJLrwLCSNrhkqgK\nNweNMRoEsK76BEIuez3zlffTyMxTBlOMmFDBQBfEW4qfVKTbyfn9SaXYvtlRvoGEN9JjHHq1\nbO79AoT3OZ3lPMBFguXpUFum8i6TkcAy4++HGIgn3Zun41k+AGKtfXg4m0iy89vNe7kJc5Vn\nqaQmYIF/D92nZ3r08JrEdfpMHPrcnsmmD6O+NEL41PURK8ik/fsVY+/1utFtiaW2K+zSw8bZ\nxV279HulAOBKWyPXGtX4zOSbtGy0F9q2r0UO1wybi16Jl4CZP1jhxi65ENuvu+7SxgePoySB\nq8K+vA7qZUNb7bMePHu6r+IWLt72AwAgQk1ZUk7k4iQQyk9oJgf/ZCkY5jpgZITbZpek8s9c\n5UDPwjme+8JYQZWD6mbnZH7tfa0Kto+/V5avYSBPF2UKUXv/y6aqz1X/m0TXgvEQ78Bz7nJB\nC/ChRPQFQDlLSNxAZbaE7jZl/HG7h5vNyzjWmy2KWPLNhWa4lMSUOp1Amz7o862JUYSXVxsE\nKfwWMJqB3k6wgjtn4ma6xJmWdDRi1WVQsWdLyWgAT508QOjSEPdFIe2tX+iJl7VPg/i+aZED\nJcld1CIhh/ME2XI2Oxuj1HyLOBKIIzkZc9oc7MSKiD0D4jmcVhE+8HWk0h0AVQfmZHfJkcbj\npu2AMvmH4iLExYMQeRUOe2m1aTpZhFaB9AhtPM5u7GfL9hhAXytfrfKt6wa5PLWwZtpquKUc\nRXBD2i4CxGA8YIoRRAO1p1/dtLRIzealc8FsKpvMc7Ybfk3o268IM83UHDKfiCMsGbcjFmFE\n6m+DDu253Vuuir9M4t6AQAdE5fcllLJi1abrAjSgZCOiGEhsGdN2SYH7c/iQGCMsM3cnBT8b\nxIoALgjk8065NcXmlmXWS3fRJlmUh0zEEkYVZFggvgPy7J4TT0eLU1ASS9364MdoVJfhBZg1\nDe6BZyPMSdEl3LqRBuTjHG0OH9e37s1qQX83Mgtez9sOLJXr9o9S8P2mU9za173UPBgfb3aJ\nlotiGUWL9CcIEdkP2beoN6IJJlzbybBTVL4IhQGfc3TJF3uX26RK++4iJfNJm5Tjx2lbd0VX\nsQ1tz8GmyLLWa37O1I9ZrBxlhyL6NVCe9Hv4e5BfVBo5XghpsDf4kHq6+K7btvBegHiajX5m\nvuVP6QGoubsESjGE1FOGs/KRGTadEZiOnaaTU1crhWXCPrsRoawiIWuqH6mVEzoFeSCOqz7q\nAACVrC1IC8JyNS4J1y0ucyh+Vo22TguBCFTD2PTvlv1SPOUwnCYhXQS6IxeUisOfA+K8LeOq\ntDxCx4sqkl7vRPuwdMVaEcTyJoPPglJeJ4f3IzmEUHFlEKU1eu6CQBuuz58BmBY3jr7GrEMn\nyTcPT5Qv64BhesjfHRV8JB32Tunwlh0UxqxFQFICwUTgfPj7L1xmPvIce8eUzrA/8362ZyWC\nfU/s3y2USPeSq7ziCFzbwSbNAvjFR++GAASZvspR2t2iVfcdc5NE+xLJGsdwShDGHg7Ip0dO\nnrF+tr8N3PzSGXMzN71m2lkOIJ0FieHMqTiDa/JW4z+jDdQZP0ge+8HcdfXX98PPmjdg3auO\n1bPArpK4N0blqrj0QSr2NoDgrb7w0yikGs1266tZA8cW6LT5hwELr7+2P3goAj93SfGdAnzV\nCOEaMvlVoRav1eOfAnU0Ug2l5qX2CI70BjR8upZsloPw","iv":"7DlGwrZnx6t0Nkww"}