]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
res_ari: Add http prefix to generated docs 87/3587/2
authorTorrey Searle <torrey@voxbone.com>
Wed, 17 Aug 2016 13:10:54 +0000 (15:10 +0200)
committerJoshua Colp <jcolp@digium.com>
Wed, 17 Aug 2016 15:33:05 +0000 (15:33 +0000)
updated the uri handler to include the url prefix of the http server
this enables res_ari to add it to the uris when generating docs

Change-Id: I279335a2625261a8492206c37219698f42591c2e

include/asterisk/ari.h
include/asterisk/http.h
main/http.c
res/res_ari.c
tests/test_ari.c

index c3df46a2b421cedab0adf1fc01f0432712ec2fde..1c54a694b538af1ad513a19c5f472f50a21afe1e 100644 (file)
@@ -144,10 +144,11 @@ void ast_ari_invoke(struct ast_tcptls_session_instance *ser,
  * for unit testing.
  *
  * \param uri Requested URI, relative to the docs path.
+ * \param prefix prefix that prefixes all http requests
  * \param headers HTTP headers.
  * \param[out] response RESTful HTTP response.
  */
-void ast_ari_get_docs(const char *uri, struct ast_variable *headers, struct ast_ari_response *response);
+void ast_ari_get_docs(const char *uri, const char *prefix, struct ast_variable *headers, struct ast_ari_response *response);
 
 /*! \brief Abstraction for reading/writing JSON to a WebSocket */
 struct ast_ari_websocket_session;
index bb8973dce4f6fd47a5b38e19823c7024a1c09348..d5f54cc657384348d3dbcbaad499ed37822da19b 100644 (file)
@@ -101,6 +101,7 @@ struct ast_http_uri {
        AST_LIST_ENTRY(ast_http_uri) entry;
        const char *description;
        const char *uri;
+       const char *prefix;
        ast_http_callback callback;
        unsigned int has_subtree:1;
        /*! Structure is malloc'd */
index b2b35ff59913f8a33b6d13ab855ca908d206c3a0..ac5aae1501689566e7f9033953111a3e6d352fdf 100644 (file)
@@ -671,6 +671,8 @@ int ast_http_uri_link(struct ast_http_uri *urih)
 
        AST_RWLIST_WRLOCK(&uris);
 
+       urih->prefix = prefix;
+
        if ( AST_RWLIST_EMPTY(&uris) || strlen(AST_RWLIST_FIRST(&uris)->uri) <= len ) {
                AST_RWLIST_INSERT_HEAD(&uris, urih, entry);
                AST_RWLIST_UNLOCK(&uris);
index 4a0a22d79a95a286973d99c02ddb4416dc200515..4ff98ce962a04252a37fa09917ba44ff762530ac 100644 (file)
@@ -579,7 +579,7 @@ void ast_ari_invoke(struct ast_tcptls_session_instance *ser,
        }
 }
 
-void ast_ari_get_docs(const char *uri, struct ast_variable *headers,
+void ast_ari_get_docs(const char *uri, const char *prefix, struct ast_variable *headers,
                          struct ast_ari_response *response)
 {
        RAII_VAR(struct ast_str *, absolute_path_builder, NULL, ast_free);
@@ -685,9 +685,15 @@ void ast_ari_get_docs(const char *uri, struct ast_variable *headers,
                        }
                }
                if (host != NULL) {
-                       ast_json_object_set(
-                               obj, "basePath",
-                               ast_json_stringf("http://%s/ari", host->value));
+                       if (prefix != NULL && strlen(prefix) > 0) {
+                               ast_json_object_set(
+                                       obj, "basePath",
+                                       ast_json_stringf("http://%s%s/ari", host->value,prefix));
+                       } else {
+                               ast_json_object_set(
+                                       obj, "basePath",
+                                       ast_json_stringf("http://%s/ari", host->value));
+                       }
                } else {
                        /* Without the host, we don't have the basePath */
                        ast_json_object_del(obj, "basePath");
@@ -969,7 +975,7 @@ static int ast_ari_callback(struct ast_tcptls_session_instance *ser,
                        ast_ari_response_error(&response, 405, "Method Not Allowed", "Unsupported method");
                } else {
                        /* Skip the api-docs prefix */
-                       ast_ari_get_docs(strchr(uri, '/') + 1, headers, &response);
+                       ast_ari_get_docs(strchr(uri, '/') + 1, urih->prefix, headers, &response);
                }
        } else {
                /* Other RESTful resources */
index fc74544af57e7821621b1c12975c4621356e48f3..a61a1182d7063ec30387669d39063b0980e911c4 100644 (file)
@@ -217,7 +217,7 @@ AST_TEST_DEFINE(get_docs)
 
        response = response_alloc();
        headers = ast_variable_new("Host", "stasis.asterisk.org", __FILE__);
-       ast_ari_get_docs("resources.json", headers, response);
+       ast_ari_get_docs("resources.json", "", headers, response);
        ast_test_validate(test, 200 == response->response_code);
 
        /* basePath should be relative to the Host header */
@@ -247,7 +247,7 @@ AST_TEST_DEFINE(get_docs_nohost)
        }
 
        response = response_alloc();
-       ast_ari_get_docs("resources.json", headers, response);
+       ast_ari_get_docs("resources.json",  "", headers, response);
        ast_test_validate(test, 200 == response->response_code);
 
        /* basePath should be relative to the Host header */
@@ -274,7 +274,7 @@ AST_TEST_DEFINE(get_docs_notfound)
        }
 
        response = response_alloc();
-       ast_ari_get_docs("i-am-not-a-resource.json", headers, response);
+       ast_ari_get_docs("i-am-not-a-resource.json", "", headers, response);
        ast_test_validate(test, 404 == response->response_code);
 
        return AST_TEST_PASS;
@@ -297,7 +297,7 @@ AST_TEST_DEFINE(get_docs_hackerz)
        }
 
        response = response_alloc();
-       ast_ari_get_docs("../../../../sbin/asterisk", headers, response);
+       ast_ari_get_docs("../../../../sbin/asterisk", "", headers, response);
        ast_test_validate(test, 404 == response->response_code);
 
        return AST_TEST_PASS;