gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-anastasis] branch master updated: add cache control to /config en


From: gnunet
Subject: [taler-anastasis] branch master updated: add cache control to /config endpoint
Date: Sun, 21 Apr 2024 10:26:55 +0200

This is an automated email from the git hooks/post-receive script.

grothoff pushed a commit to branch master
in repository anastasis.

The following commit(s) were added to refs/heads/master by this push:
     new e008f0d  add cache control to /config endpoint
e008f0d is described below

commit e008f0d4887d07cbeb7b0046cd142e7db5d91873
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Sun Apr 21 10:26:52 2024 +0200

    add cache control to /config endpoint
---
 src/backend/anastasis-httpd_config.c | 113 +++++++++++++++++++++++------------
 1 file changed, 74 insertions(+), 39 deletions(-)

diff --git a/src/backend/anastasis-httpd_config.c 
b/src/backend/anastasis-httpd_config.c
index 677c5dc..315419e 100644
--- a/src/backend/anastasis-httpd_config.c
+++ b/src/backend/anastasis-httpd_config.c
@@ -1,6 +1,6 @@
 /*
   This file is part of Anastasis
-  Copyright (C) 2020, 2021 Anastasis SARL
+  Copyright (C) 2020, 2021, 2024 Anastasis SARL
 
   Anastasis is free software; you can redistribute it and/or modify it under 
the
   terms of the GNU Affero General Public License as published by the Free 
Software
@@ -78,48 +78,83 @@ MHD_RESULT
 AH_handler_config (struct AH_RequestHandler *rh,
                    struct MHD_Connection *connection)
 {
-  json_t *method_arr = json_array ();
+  static struct MHD_Response *response;
+  static struct GNUNET_TIME_Absolute a;
 
-  GNUNET_assert (NULL != method_arr);
+  if ( (GNUNET_TIME_absolute_is_past (a)) &&
+       (NULL != response) )
   {
-    json_t *method;
+    MHD_destroy_response (response);
+    response = NULL;
+  }
+  if (NULL == response)
+  {
+    json_t *method_arr = json_array ();
+    struct GNUNET_TIME_Timestamp km;
+    char dat[128];
+
+    GNUNET_assert (NULL != method_arr);
+    a = GNUNET_TIME_relative_to_absolute (GNUNET_TIME_UNIT_DAYS);
+    /* Round up to next full day to ensure the expiration
+       time does not become a fingerprint! */
+    a = GNUNET_TIME_absolute_round_down (a,
+                                         GNUNET_TIME_UNIT_DAYS);
+    a = GNUNET_TIME_absolute_add (a,
+                                  GNUNET_TIME_UNIT_DAYS);
+    /* => /config response stays at most 48h in caches! */
+    km = GNUNET_TIME_absolute_to_timestamp (a);
+    TALER_MHD_get_date_string (km.abs_time,
+                               dat);
+    {
+      json_t *method;
+
+      method = GNUNET_JSON_PACK (
+        GNUNET_JSON_pack_string ("type",
+                                 "question"),
+        TALER_JSON_pack_amount ("cost",
+                                &AH_question_cost));
+      GNUNET_assert (
+        0 ==
+        json_array_append_new (method_arr,
+                               method));
+    }
+    GNUNET_CONFIGURATION_iterate_sections (AH_cfg,
+                                           &add_methods,
+                                           method_arr);
 
-    method = GNUNET_JSON_PACK (
-      GNUNET_JSON_pack_string ("type",
-                               "question"),
-      TALER_JSON_pack_amount ("cost",
-                              &AH_question_cost));
-    GNUNET_assert (
-      0 ==
-      json_array_append_new (method_arr,
-                             method));
+    response = TALER_MHD_MAKE_JSON_PACK (
+      GNUNET_JSON_pack_string ("name",
+                               "anastasis"),
+      GNUNET_JSON_pack_string ("version",
+                               "0:2:0"),
+      GNUNET_JSON_pack_string ("implementation",
+                               "urn:net:taler:specs:anastasis:c-reference"),
+      GNUNET_JSON_pack_string ("business_name",
+                               AH_business_name),
+      GNUNET_JSON_pack_array_steal ("methods",
+                                    method_arr),
+      GNUNET_JSON_pack_uint64 ("storage_limit_in_megabytes",
+                               AH_upload_limit_mb),
+      TALER_JSON_pack_amount ("annual_fee",
+                              &AH_annual_fee),
+      TALER_JSON_pack_amount ("truth_upload_fee",
+                              &AH_truth_upload_fee),
+      TALER_JSON_pack_amount ("liability_limit",
+                              &AH_insurance),
+      GNUNET_JSON_pack_data_auto ("provider_salt",
+                                  &AH_provider_salt));
+    GNUNET_break (MHD_YES ==
+                  MHD_add_response_header (response,
+                                           MHD_HTTP_HEADER_EXPIRES,
+                                           dat));
+    GNUNET_break (MHD_YES ==
+                  MHD_add_response_header (response,
+                                           MHD_HTTP_HEADER_CACHE_CONTROL,
+                                           "public,max-age=21600")); /* 6h */
   }
-  GNUNET_CONFIGURATION_iterate_sections (AH_cfg,
-                                         &add_methods,
-                                         method_arr);
-  return TALER_MHD_REPLY_JSON_PACK (
-    connection,
-    MHD_HTTP_OK,
-    GNUNET_JSON_pack_string ("name",
-                             "anastasis"),
-    GNUNET_JSON_pack_string ("version",
-                             "0:1:0"),
-    GNUNET_JSON_pack_string ("implementation",
-                             "urn:net:taler:specs:anastasis:c-reference"),
-    GNUNET_JSON_pack_string ("business_name",
-                             AH_business_name),
-    GNUNET_JSON_pack_array_steal ("methods",
-                                  method_arr),
-    GNUNET_JSON_pack_uint64 ("storage_limit_in_megabytes",
-                             AH_upload_limit_mb),
-    TALER_JSON_pack_amount ("annual_fee",
-                            &AH_annual_fee),
-    TALER_JSON_pack_amount ("truth_upload_fee",
-                            &AH_truth_upload_fee),
-    TALER_JSON_pack_amount ("liability_limit",
-                            &AH_insurance),
-    GNUNET_JSON_pack_data_auto ("provider_salt",
-                                &AH_provider_salt));
+  return MHD_queue_response (connection,
+                             MHD_HTTP_OK,
+                             response);
 }
 
 

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]