summaryrefslogtreecommitdiff
path: root/src/templating/templating_api.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/templating/templating_api.c')
-rw-r--r--src/templating/templating_api.c85
1 files changed, 77 insertions, 8 deletions
diff --git a/src/templating/templating_api.c b/src/templating/templating_api.c
index 47ada208e..88a17c682 100644
--- a/src/templating/templating_api.c
+++ b/src/templating/templating_api.c
@@ -100,7 +100,7 @@ lookup_template (struct MHD_Connection *connection,
if (NULL == best)
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "No templates found in `%s'\n",
+ "No templates found for `%s'\n",
name);
return NULL;
}
@@ -171,6 +171,33 @@ make_static_url (struct MHD_Connection *con,
}
+int
+TALER_TEMPLATING_fill (const char *tmpl,
+ const json_t *root,
+ void **result,
+ size_t *result_size)
+{
+ int eno;
+
+ if (0 !=
+ (eno = mustach_jansson_mem (tmpl,
+ 0, /* length of tmpl */
+ (json_t *) root,
+ Mustach_With_AllExtensions,
+ (char **) result,
+ result_size)))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "mustach failed on template with error %d\n",
+ eno);
+ *result = NULL;
+ *result_size = 0;
+ return eno;
+ }
+ return eno;
+}
+
+
enum GNUNET_GenericReturnValue
TALER_TEMPLATING_build (struct MHD_Connection *connection,
unsigned int *http_status,
@@ -194,7 +221,7 @@ TALER_TEMPLATING_build (struct MHD_Connection *connection,
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"Failed to load template `%s'\n",
template);
- *http_status = MHD_HTTP_INTERNAL_SERVER_ERROR;
+ *http_status = MHD_HTTP_NOT_ACCEPTABLE;
*reply = TALER_MHD_make_error (TALER_EC_GENERIC_FAILED_TO_LOAD_TEMPLATE,
template);
return GNUNET_NO;
@@ -212,10 +239,12 @@ TALER_TEMPLATING_build (struct MHD_Connection *connection,
GNUNET_free (static_url);
}
if (0 !=
- (eno = mustach_jansson (tmpl,
- (json_t *) root,
- &body,
- &body_size)))
+ (eno = mustach_jansson_mem (tmpl,
+ 0,
+ (json_t *) root,
+ Mustach_With_NoExtensions,
+ &body,
+ &body_size)))
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"mustach failed on template `%s' with error %d\n",
@@ -331,7 +360,6 @@ load_template (void *cls,
(void) cls;
if ('.' == filename[0])
return GNUNET_OK;
-
name = strrchr (filename,
'/');
if (NULL == name)
@@ -366,7 +394,7 @@ load_template (void *cls,
&sb))
{
GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR,
- "open",
+ "fstat",
filename);
GNUNET_break (0 == close (fd));
return GNUNET_OK;
@@ -403,6 +431,47 @@ load_template (void *cls,
}
+MHD_RESULT
+TALER_TEMPLATING_reply_error (
+ struct MHD_Connection *connection,
+ const char *template_basename,
+ unsigned int http_status,
+ enum TALER_ErrorCode ec,
+ const char *detail)
+{
+ json_t *data;
+ enum GNUNET_GenericReturnValue ret;
+
+ data = GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_uint64 ("ec",
+ ec),
+ GNUNET_JSON_pack_string ("hint",
+ TALER_ErrorCode_get_hint (ec)),
+ GNUNET_JSON_pack_allow_null (
+ GNUNET_JSON_pack_string ("detail",
+ detail))
+ );
+ ret = TALER_TEMPLATING_reply (connection,
+ http_status,
+ template_basename,
+ NULL,
+ NULL,
+ data);
+ json_decref (data);
+ switch (ret)
+ {
+ case GNUNET_OK:
+ return MHD_YES;
+ case GNUNET_NO:
+ return MHD_YES;
+ case GNUNET_SYSERR:
+ return MHD_NO;
+ }
+ GNUNET_assert (0);
+ return MHD_NO;
+}
+
+
enum GNUNET_GenericReturnValue
TALER_TEMPLATING_init (const char *subsystem)
{