summaryrefslogtreecommitdiff
path: root/shopify.c
diff options
context:
space:
mode:
Diffstat (limited to 'shopify.c')
-rw-r--r--shopify.c28
1 files changed, 25 insertions, 3 deletions
diff --git a/shopify.c b/shopify.c
index b85217e..efe9aac 100644
--- a/shopify.c
+++ b/shopify.c
@@ -4,11 +4,11 @@
#include <microhttpd.h>
#include <gnutls/gnutls.h>
#include <toml.h>
+#include <json.h>
#include "shopify.h"
#include "crypt.h"
#include "regex.h"
#include "request.h"
-#include "accesstoken.h"
#include "sessiontoken.h"
#define AUTH_URL \
@@ -53,7 +53,6 @@ extern inline void request_gettoken(const char *, const char *, const char *,
extern inline void request_graphql(const char *, const struct shopify_session *,
char **);
extern inline void request_cleanup();
-extern inline void accesstoken_parse(const char *, struct shopify_session *);
extern inline bool sessiontoken_isvalid(const char *, const char *,
const char *, const char *);
@@ -347,8 +346,31 @@ static enum MHD_Result handle_request(void *cls, struct MHD_Connection *con,
char *access_token = NULL;
request_gettoken(dec_host, api_key, api_secret_key, code,
&access_token);
- accesstoken_parse(access_token, session);
+
+ json_tokener *tokener = json_tokener_new();
+ json_object *obj = json_tokener_parse_ex(tokener, access_token,
+ strlen(access_token));
+ struct json_object_iterator iter = json_object_iter_begin(obj);
+ struct json_object_iterator iter_end
+ = json_object_iter_end(obj);
+ while (!json_object_iter_equal(&iter, &iter_end)) {
+ json_object *val = json_object_iter_peek_value(&iter);
+ if (!strcmp(json_object_iter_peek_name(&iter),
+ "access_token")) {
+ const char *str = json_object_get_string(val);
+ session->access_token = malloc(strlen(str) + 1);
+ strcpy(session->access_token, str);
+ } else if (!strcmp(json_object_iter_peek_name(&iter),
+ "scope")) {
+ const char *str = json_object_get_string(val);
+ session->scopes = malloc(strlen(str) + 1);
+ strcpy(session->scopes, str);
+ }
+ json_object_iter_next(&iter);
+ }
+ json_tokener_free(tokener);
free(access_token);
+
ret = redirect(dec_host, app_id, con, &res);
} else if (session_token) {
free(session_token);