From f855d0e262c62f804c434ef490ca31da9e40d8b2 Mon Sep 17 00:00:00 2001 From: Aki Tuomi Date: Sat, 8 Feb 2020 19:51:06 +0200 Subject: [PATCH] lib-oauth2: Add helper for parsing json strings --- src/lib-oauth2/oauth2-private.h | 4 ++++ src/lib-oauth2/oauth2.c | 26 +++++++++++++++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/lib-oauth2/oauth2-private.h b/src/lib-oauth2/oauth2-private.h index b8ffe59879..9e0b0b9e61 100644 --- a/src/lib-oauth2/oauth2-private.h +++ b/src/lib-oauth2/oauth2-private.h @@ -2,6 +2,8 @@ #ifndef OAUTH2_PRIVATE_H #define OAUTH2_PRIVATE_H 1 +struct json_tree; + struct oauth2_request { pool_t pool; @@ -34,5 +36,7 @@ void oauth2_request_set_headers(struct oauth2_request *req, void oauth2_request_free_internal(struct oauth2_request *req); void oauth2_parse_json(struct oauth2_request *req); +int oauth2_json_tree_build(const buffer_t *json, struct json_tree **tree_r, + const char **error_r); #endif diff --git a/src/lib-oauth2/oauth2.c b/src/lib-oauth2/oauth2.c index 50d4392aa8..5cee85cbff 100644 --- a/src/lib-oauth2/oauth2.c +++ b/src/lib-oauth2/oauth2.c @@ -4,11 +4,35 @@ #include "ioloop.h" #include "istream.h" #include "http-client.h" -#include "json-parser.h" +#include "json-tree.h" #include "oauth2.h" #include "oauth2-private.h" #include "safe-memset.h" +int oauth2_json_tree_build(const buffer_t *json, struct json_tree **tree_r, + const char **error_r) +{ + struct istream *is = i_stream_create_from_buffer(json); + struct json_parser *parser = json_parser_init(is); + struct json_tree *tree = json_tree_init(); + enum json_type type; + const char *value; + int ret; + while ((ret = json_parse_next(parser, &type, &value)) > 0) { + /* this is safe to reuse here because it gets rewritten in while + loop */ + ret = json_tree_append(tree, type, value); + i_assert(ret == 0); + } + ret = json_parser_deinit(&parser, error_r); + i_stream_unref(&is); + if (ret != 0) + json_tree_deinit(&tree); + else + *tree_r = tree; + return ret; +} + void oauth2_parse_json(struct oauth2_request *req) { -- 2.47.3