3 #include <unordered_map>
13 using std::unordered_map;
23 void NetworkMethods::registerConstants(
MinitScript* minitScript) {
91 void NetworkMethods::registerMethods(
MinitScript* minitScript) {
99 MethodNetworkHTTPClientHEAD(
MinitScript* minitScript):
102 { .type = MinitScript::TYPE_STRING, .name =
"url", .optional =
false, .reference =
false, .nullable =
false },
103 { .type = MinitScript::TYPE_MAP, .name =
"queryParameters", .optional =
true, .reference =
false, .nullable =
true },
104 { .type = MinitScript::TYPE_MAP, .name =
"headers", .optional =
true, .reference =
false, .nullable =
true },
106 MinitScript::TYPE_MAP,
109 minitScript(minitScript) {}
110 const string getMethodName()
override {
111 return "network.httpclient.head";
115 if (arguments.size() <= 3 &&
116 MinitScript::getStringValue(arguments, 0, url,
false) ==
true &&
117 (arguments.size() <= 1 || arguments[1].getType() == MinitScript::TYPE_MAP) &&
118 (arguments.size() <= 2 || arguments[2].getType() == MinitScript::TYPE_MAP)) {
120 unordered_map<string, string> getParameters;
121 if (arguments.size() >= 2) {
122 auto getParameterMapPtr = arguments[1].getMapPointer();
123 if (getParameterMapPtr !=
nullptr) {
124 for (
const auto& [key, value]: *getParameterMapPtr) {
125 getParameters[key] = value->getValueAsString();
130 unordered_map<string, string> headers;
131 if (arguments.size() >= 3) {
132 auto headersMapPtr = arguments[2].getMapPointer();
133 if (headersMapPtr !=
nullptr) {
134 for (
const auto& [key, value]: *headersMapPtr) {
135 headers[key] = value->getValueAsString();
148 returnValue.
setType(MinitScript::TYPE_MAP);
152 responseHeaders.
setType(MinitScript::TYPE_MAP);
154 responseHeaders.
setMapEntry(headerName, headerValue);
156 returnValue.
setMapEntry(
"headers", responseHeaders);
165 minitScript->
registerMethod(
new MethodNetworkHTTPClientHEAD(minitScript));
173 MethodNetworkHTTPClientGET(
MinitScript* minitScript):
176 { .type = MinitScript::TYPE_STRING, .name =
"url", .optional =
false, .reference =
false, .nullable =
false },
177 { .type = MinitScript::TYPE_MAP, .name =
"queryParameters", .optional =
true, .reference =
false, .nullable =
true },
178 { .type = MinitScript::TYPE_MAP, .name =
"headers", .optional =
true, .reference =
false, .nullable =
true },
180 MinitScript::TYPE_MAP,
183 minitScript(minitScript) {}
184 const string getMethodName()
override {
185 return "network.httpclient.get";
189 if (arguments.size() <= 3 &&
190 MinitScript::getStringValue(arguments, 0, url,
false) ==
true &&
191 (arguments.size() <= 1 || arguments[1].getType() == MinitScript::TYPE_MAP) &&
192 (arguments.size() <= 2 || arguments[2].getType() == MinitScript::TYPE_MAP)) {
194 unordered_map<string, string> getParameters;
195 if (arguments.size() >= 2) {
196 auto getParameterMapPtr = arguments[1].getMapPointer();
197 if (getParameterMapPtr !=
nullptr) {
198 for (
const auto& [key, value]: *getParameterMapPtr) {
199 getParameters[key] = value->getValueAsString();
205 unordered_map<string, string> headers;
206 if (arguments.size() >= 3) {
207 auto headersMapPtr = arguments[2].getMapPointer();
208 if (headersMapPtr !=
nullptr) {
209 for (
const auto& [key, value]: *headersMapPtr) {
210 headers[key] = value->getValueAsString();
229 returnValue.
setType(MinitScript::TYPE_MAP);
234 responseHeaders.
setType(MinitScript::TYPE_MAP);
236 responseHeaders.
setMapEntry(headerName, headerValue);
238 returnValue.
setMapEntry(
"headers", responseHeaders);
247 minitScript->
registerMethod(
new MethodNetworkHTTPClientGET(minitScript));
255 MethodNetworkHTTPClientPOST(
MinitScript* minitScript):
258 { .type = MinitScript::TYPE_STRING, .name =
"url", .optional =
false, .reference =
false, .nullable =
false },
259 { .type = MinitScript::TYPE_PSEUDO_MIXED, .name =
"data", .optional =
false, .reference =
false, .nullable =
false },
260 { .type = MinitScript::TYPE_MAP, .name =
"queryParameters", .optional =
true, .reference =
false, .nullable =
true },
261 { .type = MinitScript::TYPE_MAP, .name =
"headers", .optional =
true, .reference =
false, .nullable =
true },
263 MinitScript::TYPE_MAP,
266 minitScript(minitScript) {}
267 const string getMethodName()
override {
268 return "network.httpclient.post";
273 if (arguments.size() >= 2 && arguments.size() <= 4 &&
274 MinitScript::getStringValue(arguments, 0, url,
false) ==
true &&
275 (MinitScript::getStringValue(arguments, 1, dataString,
true) ==
true || arguments[2].getType() == MinitScript::TYPE_MAP) &&
276 (arguments.size() <= 2 || arguments[2].getType() == MinitScript::TYPE_MAP) &&
277 (arguments.size() <= 3 || arguments[3].getType() == MinitScript::TYPE_MAP)) {
279 unordered_map<string, string> postParameters;
280 if (arguments.size() >= 2) {
281 if (arguments[1].getType() == MinitScript::TYPE_MAP) {
282 auto postParameterMapPtr = arguments[1].getMapPointer();
283 if (postParameterMapPtr !=
nullptr) {
284 for (
const auto& [key, value]: *postParameterMapPtr) {
285 postParameters[key] = value->getValueAsString();
291 unordered_map<string, string> getParameters;
292 if (arguments.size() >= 3) {
293 auto getParameterMapPtr = arguments[2].getMapPointer();
294 if (getParameterMapPtr !=
nullptr) {
295 for (
const auto& [key, value]: *getParameterMapPtr) {
296 getParameters[key] = value->getValueAsString();
301 unordered_map<string, string> headers;
302 if (arguments.size() >= 4) {
303 auto headersMapPtr = arguments[3].getMapPointer();
304 if (headersMapPtr !=
nullptr) {
305 for (
const auto& [key, value]: *headersMapPtr) {
306 headers[key] = value->getValueAsString();
316 if (postParameters.empty() ==
false) {
319 httpClient.
setBody(
"text/text", dataString);
330 returnValue.
setType(MinitScript::TYPE_MAP);
335 responseHeaders.
setType(MinitScript::TYPE_MAP);
337 responseHeaders.
setMapEntry(headerName, headerValue);
339 returnValue.
setMapEntry(
"headers", responseHeaders);
348 minitScript->
registerMethod(
new MethodNetworkHTTPClientPOST(minitScript));
356 MethodNetworkHTTPClientPUT(
MinitScript* minitScript):
359 { .type = MinitScript::TYPE_STRING, .name =
"url", .optional =
false, .reference =
false, .nullable =
false },
360 { .type = MinitScript::TYPE_PSEUDO_MIXED, .name =
"data", .optional =
false, .reference =
false, .nullable =
false },
361 { .type = MinitScript::TYPE_MAP, .name =
"queryParameters", .optional =
true, .reference =
false, .nullable =
true },
362 { .type = MinitScript::TYPE_MAP, .name =
"headers", .optional =
true, .reference =
false, .nullable =
true },
364 MinitScript::TYPE_MAP,
367 minitScript(minitScript) {}
368 const string getMethodName()
override {
369 return "network.httpclient.put";
374 if (arguments.size() >= 2 && arguments.size() <= 4 &&
375 MinitScript::getStringValue(arguments, 0, url,
false) ==
true &&
376 (MinitScript::getStringValue(arguments, 1, dataString,
true) ==
true || arguments[2].getType() == MinitScript::TYPE_MAP) &&
377 (arguments.size() <= 2 || arguments[2].getType() == MinitScript::TYPE_MAP) &&
378 (arguments.size() <= 3 || arguments[3].getType() == MinitScript::TYPE_MAP)) {
380 unordered_map<string, string> postParameters;
381 if (arguments.size() >= 2) {
382 if (arguments[1].getType() == MinitScript::TYPE_MAP) {
383 auto postParameterMapPtr = arguments[1].getMapPointer();
384 if (postParameterMapPtr !=
nullptr) {
385 for (
const auto& [key, value]: *postParameterMapPtr) {
386 postParameters[key] = value->getValueAsString();
392 unordered_map<string, string> getParameters;
393 if (arguments.size() >= 3) {
394 auto getParameterMapPtr = arguments[2].getMapPointer();
395 if (getParameterMapPtr !=
nullptr) {
396 for (
const auto& [key, value]: *getParameterMapPtr) {
397 getParameters[key] = value->getValueAsString();
402 unordered_map<string, string> headers;
403 if (arguments.size() >= 4) {
404 auto headersMapPtr = arguments[3].getMapPointer();
405 if (headersMapPtr !=
nullptr) {
406 for (
const auto& [key, value]: *headersMapPtr) {
407 headers[key] = value->getValueAsString();
417 if (postParameters.empty() ==
false) {
420 httpClient.
setBody(
"text/text", dataString);
431 returnValue.
setType(MinitScript::TYPE_MAP);
436 responseHeaders.
setType(MinitScript::TYPE_MAP);
438 responseHeaders.
setMapEntry(headerName, headerValue);
440 returnValue.
setMapEntry(
"headers", responseHeaders);
449 minitScript->
registerMethod(
new MethodNetworkHTTPClientPUT(minitScript));
457 MethodNetworkHTTPClientDELETE(
MinitScript* minitScript):
460 { .type = MinitScript::TYPE_STRING, .name =
"url", .optional =
false, .reference =
false, .nullable =
false },
461 { .type = MinitScript::TYPE_MAP, .name =
"queryParameters", .optional =
true, .reference =
false, .nullable =
true },
462 { .type = MinitScript::TYPE_MAP, .name =
"headers", .optional =
true, .reference =
false, .nullable =
true },
464 MinitScript::TYPE_MAP,
467 minitScript(minitScript) {}
468 const string getMethodName()
override {
469 return "network.httpclient.delete";
473 if (arguments.size() <= 3 &&
474 MinitScript::getStringValue(arguments, 0, url,
false) ==
true &&
475 (arguments.size() <= 1 || arguments[1].getType() == MinitScript::TYPE_MAP) &&
476 (arguments.size() <= 2 || arguments[2].getType() == MinitScript::TYPE_MAP)) {
478 unordered_map<string, string> getParameters;
479 if (arguments.size() >= 2) {
480 auto getParameterMapPtr = arguments[1].getMapPointer();
481 if (getParameterMapPtr !=
nullptr) {
482 for (
const auto& [key, value]: *getParameterMapPtr) {
483 getParameters[key] = value->getValueAsString();
488 unordered_map<string, string> headers;
489 if (arguments.size() >= 3) {
490 auto headersMapPtr = arguments[2].getMapPointer();
491 if (headersMapPtr !=
nullptr) {
492 for (
const auto& [key, value]: *headersMapPtr) {
493 headers[key] = value->getValueAsString();
506 returnValue.
setType(MinitScript::TYPE_MAP);
510 responseHeaders.
setType(MinitScript::TYPE_MAP);
512 responseHeaders.
setMapEntry(headerName, headerValue);
514 returnValue.
setMapEntry(
"headers", responseHeaders);
523 minitScript->
registerMethod(
new MethodNetworkHTTPClientDELETE(minitScript));
minitscript::utilities::Exception _Exception
#define MINITSCRIPT_METHODUSAGE_COMPLAIN(methodName)
void setMapEntry(const string &key, const Variable &value, bool _private=false)
Set entry in map with given key.
void setType(VariableType newType)
Set type.
void registerMethod(Method *method)
Register method.
static void setConstant(Variable &variable)
Set variable recursively to be a constant.
MinitScript script network methods.
void setBody(const string &contentType, const string &body)
Set body.
static MINITSCRIPT_STATIC_DLL_IMPEXT const string HTTP_METHOD_GET
static MINITSCRIPT_STATIC_DLL_IMPEXT const string HTTP_METHOD_DELETE
void setPOSTParameters(const unordered_map< string, string > ¶meters)
Set POST parameter.
const unordered_map< string, string > & getResponseHeaders()
stringstream & getResponse()
void execute()
Execute HTTP request.
static MINITSCRIPT_STATIC_DLL_IMPEXT const string HTTP_METHOD_POST
static MINITSCRIPT_STATIC_DLL_IMPEXT const string HTTP_METHOD_PUT
void setGETParameters(const unordered_map< string, string > ¶meters)
Set GET parameter.
static MINITSCRIPT_STATIC_DLL_IMPEXT const string HTTP_METHOD_HEAD
void setMethod(const string &method)
Set method.
@ HTTP_STATUS_VARIANTALSONEGOTIATES
@ HTTP_STATUS_NOTEXTENDED
@ HTTP_STATUS_UNPROCESSABLEENTITY
@ HTTP_STATUS_NONAUTHORITATIVEINFORMATION
@ HTTP_STATUS_MISDIRECTEDREQUEST
@ HTTP_STATUS_SWITCHINGPROTOCOLS
@ HTTP_STATUS_GATEWAYTIMEOUT
@ HTTP_STATUS_PAYLOADTOOLARGE
@ HTTP_STATUS_RANGENOTSATISFIABLE
@ HTTP_STATUS_MULTIPLECHOICES
@ HTTP_STATUS_HTTPVERSIONNOTSUPPORTED
@ HTTP_STATUS_LENGTHREQUIRED
@ HTTP_STATUS_NOTACCEPTABLE
@ HTTP_STATUS_PARTIALCONTENT
@ HTTP_STATUS_NOTMODIFIED
@ HTTP_STATUS_LOOPDETECTED
@ HTTP_STATUS_PRECONDITIONREQUIRED
@ HTTP_STATUS_NOTIMPLEMENTED
@ HTTP_STATUS_INSUFFICIENTSTORAGE
@ HTTP_STATUS_TEMPORARYREDIRECT
@ HTTP_STATUS_UNAVAILABLEFORLEGALREASONS
@ HTTP_STATUS_REQUESTTIMEOUT
@ HTTP_STATUS_ALREADYREPORTED
@ HTTP_STATUS_CONTENTTOOLARGE
@ HTTP_STATUS_REQUESTHEADERFIELDSTOOLARGE
@ HTTP_STATUS_UPGRADEREQUIRED
@ HTTP_STATUS_UNPROCESSABLECONTENT
@ HTTP_STATUS_RESETCONTENT
@ HTTP_STATUS_PERMANENTREDIRECT
@ HTTP_STATUS_FAILEDDEPENDENCY
@ HTTP_STATUS_INTERNALSERVERERROR
@ HTTP_STATUS_EXPECTATIONFAILED
@ HTTP_STATUS_MULTISTATUS
@ HTTP_STATUS_TOOMANYREQUESTS
@ HTTP_STATUS_UNAUTHORIZED
@ HTTP_STATUS_PROXYAUTHENTICATIONREQUIRED
@ HTTP_STATUS_UNSUPPORTEDMEDIATYPE
@ HTTP_STATUS_SERVICEUNAVAILABLE
@ HTTP_STATUS_NETWORKAUTHENTICATIONREQUIRED
@ HTTP_STATUS_MOVEDPERMANENTLY
@ HTTP_STATUS_PRECONDITIONFAILED
@ HTTP_STATUS_METHODNOTALLOWED
@ HTTP_STATUS_PAYMENTREQUIRED
void setHeaders(const unordered_map< string, string > &headers)
Set request headers.
void setURL(const string &url)
Set URL.
static void printLine()
Print newline to console.
std::exception Exception
Exception base class.