Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • lib/oauth2.c

    r5535a47 r1a81c83  
    4242#include "oauth2.h"
    4343#include "oauth.h"
    44 #include "json.h"
    45 #include "json_util.h"
     44#include "parson.h"
    4645#include "url.h"
     46
     47#define JSON_O_FOREACH(o, k, v) \
     48    const char *k; const JSON_Value *v; int __i; \
     49    for (__i = 0; json_object_get_tuple(o, __i, &k, &v); __i++)
    4750
    4851char *oauth2_url(const struct oauth2_service *sp)
     
    113116}
    114117
    115 static char* oauth2_parse_error(json_value *e)
     118static char* oauth2_parse_error(const JSON_Value *e)
    116119{
    117120        /* This does a reasonable job with some of the flavours of error
    118121           responses I've seen. Because apparently it's not standardised. */
    119122
    120         if (e->type == json_object) {
     123        if (json_type(e) == JSONObject) {
    121124                /* Facebook style */
    122                 const char *msg = json_o_str(e, "message");
    123                 const char *type = json_o_str(e, "type");
    124                 json_value *code_o = json_o_get(e, "code");
    125                 int code = 0;
    126 
    127                 if (code_o && code_o->type == json_integer) {
    128                         code = code_o->u.integer;
    129                 }
    130 
     125                const char *msg = json_object_get_string(json_object(e), "message");
     126                const char *type = json_object_get_string(json_object(e), "type");
     127                JSON_Value *code_o = json_object_get_value(json_object(e), "code");
     128                int code = json_value_get_integer(code_o);
    131129                return g_strdup_printf("Error %d: %s", code, msg ? msg : type ? type : "Unknown error");
    132         } else if (e->type == json_string) {
    133                 return g_strdup(e->u.string.ptr);
     130        } else if (json_type(e) == JSONString) {
     131                return g_strdup(json_string(e));
    134132        }
    135133        return NULL;
     
    140138        struct oauth2_access_token_data *cb_data = req->data;
    141139        char *atoken = NULL, *rtoken = NULL, *error = NULL;
    142         char *content_type = NULL;
     140        char *content_type;
    143141
    144         if (req->status_code <= 0 && !req->reply_body) {
    145                 cb_data->func(cb_data->data, NULL, NULL, req->status_string);
    146                 g_free(cb_data);
    147                 return;
    148         }
    149 
    150         if (getenv("BITLBEE_DEBUG")) {
     142        if (getenv("BITLBEE_DEBUG") && req->reply_body) {
    151143                printf("%s\n", req->reply_body);
    152144        }
     
    156148        if (content_type && (strstr(content_type, "application/json") ||
    157149                             strstr(content_type, "text/javascript"))) {
    158                 json_value *js = json_parse(req->reply_body, req->body_size);
    159                 if (js && js->type == json_object) {
    160                         JSON_O_FOREACH(js, k, v){
     150                JSON_Value *js = json_parse_string(req->reply_body);
     151                if (js && json_type(js) == JSONObject) {
     152                        JSON_O_FOREACH(json_object(js), k, v){
    161153                                if (strcmp(k, "error") == 0) {
    162154                                        error = oauth2_parse_error(v);
    163155                                }
    164                                 if (v->type != json_string) {
     156                                if (json_type(v) != JSONString) {
    165157                                        continue;
    166158                                }
    167159                                if (strcmp(k, "access_token") == 0) {
    168                                         atoken = g_strdup(v->u.string.ptr);
     160                                        atoken = g_strdup(json_string(v));
    169161                                }
    170162                                if (strcmp(k, "refresh_token") == 0) {
    171                                         rtoken = g_strdup(v->u.string.ptr);
     163                                        rtoken = g_strdup(json_string(v));
    172164                                }
    173165                        }
Note: See TracChangeset for help on using the changeset viewer.