1 HttpRequest <- R6::R6Class(
7 validContentTypes = NULL,
9 initialize = function()
11 self$validContentTypes <- c("text", "raw")
14 GET = function(url, headers = NULL, queryFilters = NULL, limit = NULL, offset = NULL)
16 headers <- httr::add_headers(unlist(headers))
17 query <- private$createQuery(queryFilters, limit, offset)
18 url <- paste0(url, query)
20 serverResponse <- httr::GET(url = url, config = headers)
23 PUT = function(url, headers = NULL, body = NULL,
24 queryFilters = NULL, limit = NULL, offset = NULL)
26 headers <- httr::add_headers(unlist(headers))
27 query <- private$createQuery(queryFilters, limit, offset)
28 url <- paste0(url, query)
31 serverResponse <- httr::PUT(url = url, config = headers, body = body)
34 POST = function(url, headers = NULL, body = NULL,
35 queryFilters = NULL, limit = NULL, offset = NULL)
37 headers <- httr::add_headers(unlist(headers))
38 query <- private$createQuery(queryFilters, limit, offset)
39 url <- paste0(url, query)
41 serverResponse <- httr::POST(url = url, config = headers, body = body)
44 DELETE = function(url, headers = NULL, body = NULL,
45 queryFilters = NULL, limit = NULL, offset = NULL)
47 headers <- httr::add_headers(unlist(headers))
48 query <- private$createQuery(queryFilters, limit, offset)
49 url <- paste0(url, query)
51 serverResponse <- httr::DELETE(url = url, config = headers)
54 PROPFIND = function(url, headers = NULL)
56 h <- curl::new_handle()
57 curl::handle_setopt(h, customrequest = "PROPFIND")
58 curl::handle_setheaders(h, .list = headers)
60 propfindResponse <- curl::curl_fetch_memory(url, h)
63 MOVE = function(url, headers = NULL)
65 h <- curl::new_handle()
66 curl::handle_setopt(h, customrequest = "MOVE")
67 curl::handle_setheaders(h, .list = headers)
69 propfindResponse <- curl::curl_fetch_memory(url, h)
75 createQuery = function(filters, limit, offset)
81 filters <- sapply(filters, function(filter)
83 if(length(filter) != 3)
84 stop("Filter list must have exactly 3 elements.")
86 attributeAndOperator = filter[c(1, 2)]
87 filterList = filter[[3]]
88 filterListIsPrimitive = TRUE
89 if(length(filterList) > 1)
90 filterListIsPrimitive = FALSE
92 attributeAndOperator <- sapply(attributeAndOperator, function(component) {
93 component <- paste0("\"", component, "\"")
96 filterList <- sapply(unlist(filterList), function(filter) {
97 filter <- paste0("\"", filter, "\"")
100 filterList <- paste(filterList, collapse = ",+")
102 if(!filterListIsPrimitive)
103 filterList <- paste0("[", filterList, "]")
105 filter <- c(attributeAndOperator, filterList)
107 queryParameter <- paste(filter, collapse = ",+")
108 queryParameter <- paste0("[", queryParameter, "]")
112 filters <- paste(filters, collapse = ",+")
113 filters <- paste0("[", filters, "]")
115 encodedQuery <- URLencode(filters, reserved = T, repeated = T)
117 encodedQuery <- stringr::str_replace_all(encodedQuery, "%2B", "+")
119 finalQuery <- c(finalQuery, paste0("filters=", encodedQuery))
126 if(!is.numeric(limit))
127 stop("Limit must be a numeric type.")
129 finalQuery <- c(finalQuery, paste0("limit=", limit))
134 if(!is.numeric(offset))
135 stop("Offset must be a numeric type.")
137 finalQuery <- c(finalQuery, paste0("offset=", offset))
140 if(length(finalQuery) > 1)
142 finalQuery <- paste0(finalQuery, collapse = "&")
145 if(!is.null(finalQuery))
146 finalQuery <- paste0("/?", finalQuery)