diff options
-rw-r--r-- | Makefile.am | 2 | ||||
-rw-r--r-- | request.c | 29 | ||||
-rw-r--r-- | request.h | 44 | ||||
-rw-r--r-- | shopify.c | 16 |
4 files changed, 38 insertions, 53 deletions
diff --git a/Makefile.am b/Makefile.am index a185925..5222786 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,5 +1,5 @@ lib_LTLIBRARIES = libshopify.la -libshopify_la_SOURCES = shopify.c +libshopify_la_SOURCES = shopify.c request.c libshopify_la_CPPFLAGS = $(DEPS_CFLAGS) include_HEADERS = shopify.h pkgconfigdir = $(libdir)/pkgconfig diff --git a/request.c b/request.c new file mode 100644 index 0000000..8b97c7d --- /dev/null +++ b/request.c @@ -0,0 +1,29 @@ +#include "request.h" +#include "shopify.h" + +#define GRAPHQL_URL "https://%s/admin/api/2022-07/graphql.json" +#define GRAPHQL_URL_LEN strlen(GRAPHQL_URL) - strlen("%s") + +extern inline void request_gettoken(const char *, const char *, const char *, + const char *, char **); + +void shopify_graphql(const char *query, const struct shopify_session *session, + char **json) +{ + CURL *curl = curl_easy_init(); + char url[GRAPHQL_URL_LEN + strlen(session->shop) + 1]; + sprintf(url, GRAPHQL_URL, session->shop); + curl_easy_setopt(curl, CURLOPT_URL, url); + curl_easy_setopt(curl, CURLOPT_POSTFIELDS, query); + struct curl_slist *list = NULL; + char header[TOKEN_HEADER_LEN + strlen(session->access_token) + 1]; + sprintf(header, TOKEN_HEADER, session->access_token); + list = curl_slist_append(list, header); + list = curl_slist_append(list, "Content-Type: application/graphql"); + curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list); + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, append); + curl_easy_setopt(curl, CURLOPT_WRITEDATA, json); + curl_easy_perform(curl); + curl_slist_free_all(list); + curl_easy_cleanup(curl); +} @@ -1,3 +1,5 @@ +#include <stdlib.h> +#include <string.h> #include <curl/curl.h> #define TOKEN_URL "https://%s/oauth/access_token" @@ -9,20 +11,12 @@ #define TOKEN_HEADER "X-Shopify-Access-Token: %s" #define TOKEN_HEADER_LEN strlen(TOKEN_HEADER) - strlen("%s") -#define GRAPHQL_URL "https://%s/admin/api/2022-07/graphql.json" -#define GRAPHQL_URL_LEN strlen(GRAPHQL_URL) - strlen("%s") - -static inline void request_init() -{ - curl_global_init(CURL_GLOBAL_DEFAULT); -} - -static size_t append(char *data, size_t size, size_t nmemb, char **json) +static size_t append(char *data, size_t size, size_t nmemb, char **res) { size_t realsize = size * nmemb; - size_t json_len = *json ? strlen(*json) : 0; - *json = realloc(*json, json_len + realsize + 1); - strlcpy(&(*json)[json_len], data, realsize + 1); + size_t res_len = *res ? strlen(*res) : 0; + *res = realloc(*res, res_len + realsize + 1); + strlcpy(&(*res)[res_len], data, realsize + 1); return realsize; } @@ -42,29 +36,3 @@ static inline void request_gettoken(const char *host, const char *key, curl_easy_perform(curl); curl_easy_cleanup(curl); } - -static inline void request_graphql(const char *query, - const struct shopify_session *session, char **json) -{ - CURL *curl = curl_easy_init(); - char url[GRAPHQL_URL_LEN + strlen(session->shop) + 1]; - sprintf(url, GRAPHQL_URL, session->shop); - curl_easy_setopt(curl, CURLOPT_URL, url); - curl_easy_setopt(curl, CURLOPT_POSTFIELDS, query); - struct curl_slist *list = NULL; - char header[TOKEN_HEADER_LEN + strlen(session->access_token) + 1]; - sprintf(header, TOKEN_HEADER, session->access_token); - list = curl_slist_append(list, header); - list = curl_slist_append(list, "Content-Type: application/graphql"); - curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list); - curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, append); - curl_easy_setopt(curl, CURLOPT_WRITEDATA, json); - curl_easy_perform(curl); - curl_slist_free_all(list); - curl_easy_cleanup(curl); -} - -static inline void request_cleanup() -{ - curl_global_cleanup(); -} @@ -44,12 +44,6 @@ #define EMBEDDED_URL_LEN strlen(EMBEDDED_URL) - strlen("%s") * 2 extern inline bool regex_match(const char *); -extern inline void request_init(); -extern inline void request_gettoken(const char *, const char *, const char *, - const char *, char **); -extern inline void request_graphql(const char *, const struct shopify_session *, - char **); -extern inline void request_cleanup(); extern inline bool sessiontoken_isvalid(const char *, const char *, const char *, const char *); @@ -491,7 +485,7 @@ void shopify_app(const char *api_key, const char *api_secret_key, const char *js_dir, const struct shopify_api apis[]) { gcry_check_version("1.9.4"); - request_init(); + curl_global_init(CURL_GLOBAL_DEFAULT); struct shopify_session *sessions = malloc(sizeof(struct shopify_session)); sessions[0].shop = NULL; @@ -521,11 +515,5 @@ void shopify_app(const char *api_key, const char *api_secret_key, free(sessions[i++].shop); } free(sessions); - request_cleanup(); -} - -void shopify_graphql(const char *query, const struct shopify_session *session, - char **json) -{ - request_graphql(query, session, json); + curl_global_cleanup(); } |