diff options
| author | ꦌꦫꦶꦏ꧀ꦦꦿꦧꦮꦑꦩꦭ꧀ <erik@darapsa.co.id> | 2022-09-22 15:03:31 +0800 | 
|---|---|---|
| committer | ꦌꦫꦶꦏ꧀ꦦꦿꦧꦮꦑꦩꦭ꧀ <erik@darapsa.co.id> | 2022-09-22 15:03:31 +0800 | 
| commit | 898bf7baeaa8cba73893efe3cfd11ad6f7cea69b (patch) | |
| tree | 7f19f7d8fc8ee9122d67ce1d7ca1f9a899e9ef05 | |
| parent | 3cdd73a26962359742748b4048bdb842fe0e82ca (diff) | |
cURL calls are spread among files
| -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();  } |