Changes in lib/oauth2.c [5535a47:1a81c83]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
lib/oauth2.c
r5535a47 r1a81c83 42 42 #include "oauth2.h" 43 43 #include "oauth.h" 44 #include "json.h" 45 #include "json_util.h" 44 #include "parson.h" 46 45 #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++) 47 50 48 51 char *oauth2_url(const struct oauth2_service *sp) … … 113 116 } 114 117 115 static char* oauth2_parse_error( json_value *e)118 static char* oauth2_parse_error(const JSON_Value *e) 116 119 { 117 120 /* This does a reasonable job with some of the flavours of error 118 121 responses I've seen. Because apparently it's not standardised. */ 119 122 120 if ( e->type == json_object) {123 if (json_type(e) == JSONObject) { 121 124 /* 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); 131 129 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)); 134 132 } 135 133 return NULL; … … 140 138 struct oauth2_access_token_data *cb_data = req->data; 141 139 char *atoken = NULL, *rtoken = NULL, *error = NULL; 142 char *content_type = NULL;140 char *content_type; 143 141 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) { 151 143 printf("%s\n", req->reply_body); 152 144 } … … 156 148 if (content_type && (strstr(content_type, "application/json") || 157 149 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){ 161 153 if (strcmp(k, "error") == 0) { 162 154 error = oauth2_parse_error(v); 163 155 } 164 if ( v->type != json_string) {156 if (json_type(v) != JSONString) { 165 157 continue; 166 158 } 167 159 if (strcmp(k, "access_token") == 0) { 168 atoken = g_strdup( v->u.string.ptr);160 atoken = g_strdup(json_string(v)); 169 161 } 170 162 if (strcmp(k, "refresh_token") == 0) { 171 rtoken = g_strdup( v->u.string.ptr);163 rtoken = g_strdup(json_string(v)); 172 164 } 173 165 }
Note: See TracChangeset
for help on using the changeset viewer.