[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-anastasis] 01/04: worked on splitter....
From: |
gnunet |
Subject: |
[taler-anastasis] 01/04: worked on splitter.... |
Date: |
Tue, 26 May 2020 13:10:16 +0200 |
This is an automated email from the git hooks/post-receive script.
dennis-neufeld pushed a commit to branch master
in repository anastasis.
commit bd667550714179bce0c167c1e7d3220d66400663
Author: Dennis Neufeld <address@hidden>
AuthorDate: Sat May 23 07:17:17 2020 +0000
worked on splitter....
---
src/backend/anastasis.conf | 51 +++++++-
src/cli/anastasis-cli-splitter.c | 236 +++++++++++++++++++++++--------------
src/include/anastasis.h | 2 +
src/lib/anastasis.c | 1 +
src/lib/testing_cmd_secret_share.c | 2 +
5 files changed, 201 insertions(+), 91 deletions(-)
diff --git a/src/backend/anastasis.conf b/src/backend/anastasis.conf
index 6346e60..3bb226e 100644
--- a/src/backend/anastasis.conf
+++ b/src/backend/anastasis.conf
@@ -26,10 +26,13 @@ UNIXPATH_MODE = 660
# Which database backend do we use?
DB = postgres
+# Annual fee for an account
+ANNUAL_FEE = TESTKUDOS:0.1
+
# Upload limit per backup, in megabytes
UPLOAD_LIMIT_MB = 16
-# Fulfillment URL of the SYNC service itself.
+# Fulfillment URL of the ANASTASIS service itself.
FULFILLMENT_URL = taler://fulfillment-success
# Base URL of our payment backend
@@ -41,6 +44,52 @@ TRUTH_EXPIRATION = 63115200000000
# Server salt 256 bits
SERVER_SALT =
gUfO1KGOKYIFlFQgBv9NeYqiSgS16Y0dcgj74YewVnSEsEkXaG5duaGphWXgQGI84OOezaS9tlffQ0J27u6iAcvWMMdR8oANz5GeoWZFAAQDW65qMrUoTfDK170hY7krj6GZ04PFgBzBRtNAyGqPTkRbOFQ04lu6pa0bYF9JAwmwrFD0csVliuvapL33ukOwHdKDyg81FQuRW1bNbj9D0GMPoVcacJUrOXk0mIWhyG3Q2OoVOfW1LiIaXwfitLGd
+# Supported methods
+SUPPORTED_METHODS = question
+
# Configuration for postgres database.
[anastasisdb-postgres]
CONFIG = postgres:///anastasis
+
+[taler]
+# Currency
+CURRENCY = KUDOS
+
+[exchange]
+# Our public key
+MASTER_PUBLIC_KEY = WEC7J41PBGDN24JTNRVBFXK5JRV6CK9B8YRTWW7QGFH2GERBGH1G
+
+[PATHS]
+# The PATHS section is special, as filenames including $-expression are
+# expanded using the values from PATHS or the system environment (PATHS
+# is checked first). libgnunetutil supports expanding $-expressions using
+# defaults with the syntax "${VAR:-default}". Here, "default" can again
+# be a $-expression.
+#
+# We usually want $HOME for $ANASTASIS_HOME
+#
+ANASTASIS_HOME = ${HOME:-${USERPROFILE}}
+
+# see XDG Base Directory Specification at
+# http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
+# for how these should be used.
+
+# Persistent data storage
+ANASTASIS_DATA_HOME = ${XDG_DATA_HOME:-$ANASTASIS_HOME/.local/share}/ANASTASIS/
+
+# Configuration files
+ANASTASIS_CONFIG_HOME = ${XDG_CONFIG_HOME:-$ANASTASIS_HOME/.config}/ANASTASIS/
+
+# Cached data, no big deal if lost
+ANASTASIS_CACHE_HOME = ${XDG_CACHE_HOME:-$ANASTASIS_HOME/.cache}/ANASTASIS/
+
+# Runtime data (i.e UNIX domain sockets, locks, always lost on system boot)
+ANASTASIS_RUNTIME_DIR = ${TMPDIR:-${TMP:-/tmp}}/ANASTASIS-runtime/
+
+# Directory to use for temporary files.
+ANASTASIS_TMP = ${TMPDIR:-${TMP:-/tmp}}/ANASTASIS/
+
+# DEFAULTCONFIG = /etc/ANASTASIS.conf
+# If 'DEFAULTCONFIG' is not defined, the current
+# configuration file is assumed to be the default,
+# which is what we want by default...
diff --git a/src/cli/anastasis-cli-splitter.c b/src/cli/anastasis-cli-splitter.c
index 370df4c..776dd51 100644
--- a/src/cli/anastasis-cli-splitter.c
+++ b/src/cli/anastasis-cli-splitter.c
@@ -111,7 +111,7 @@ struct TruthUploadState
/**
* Truth object
*/
- const struct ANASTASIS_Truth *truth;
+ struct ANASTASIS_Truth *truth;
};
/**
@@ -132,7 +132,7 @@ struct ServerInfo
/**
* supported methods of the anastasis backend.
*/
- const char *backend_methods;
+ char *backend_methods;
/**
* server salt of the anastasis backend.
@@ -243,18 +243,13 @@ struct SecretShareState
/**
* The core secret to backup/recover.
*/
- const void *core_secret;
+ void *core_secret;
/**
* Size of core_secret.
*/
size_t core_secret_size;
- /**
- * URL of the anastasis backend.
- */
- const char *anastasis_url;
-
/**
* Expected status code.
*/
@@ -283,7 +278,12 @@ struct SecretShareState
/**
* Details of a past payment
*/
- struct ANASTASIS_PaymentDetails *pd;
+ const struct ANASTASIS_PaymentDetails *pds;
+
+ /**
+ * Length of pds.
+ */
+ unsigned int pds_len;
};
@@ -342,6 +342,16 @@ static struct PolicyCreateState *pc_states;
*/
static unsigned int pc_states_length = 0;
+/**
+ * PaymentDetails.
+ */
+static struct ANASTASIS_PaymentDetails *pds;
+
+/**
+ * Amount of pds.
+ */
+static unsigned int pds_length = 0;
+
static void
start_read_keyboard (void);
@@ -352,11 +362,13 @@ start_read_keyboard (void);
*
* @param cls closure
* @param taler_pay_url url for the payment (taler://pay/Foo)
+ * @param server_url url of the server to pay for
* @param ec status of the request
*/
static void
secret_share_payment_cb (void *cls,
const char *taler_pay_url,
+ const char *server_url,
enum TALER_ErrorCode ec)
{
const char *m;
@@ -375,6 +387,8 @@ secret_share_payment_cb (void *cls,
__FILE__,
__LINE__);
GNUNET_break (0);
+ keyboard_task = NULL;
+ start_read_keyboard ();
return;
}
@@ -387,6 +401,8 @@ secret_share_payment_cb (void *cls,
"/-/-/",
taler_pay_url);
GNUNET_break (0);
+ keyboard_task = NULL;
+ start_read_keyboard ();
return;
}
m = strstr (taler_pay_url, "/-/-/");
@@ -410,7 +426,17 @@ secret_share_payment_cb (void *cls,
"At %s:%d Order ID from Anastasis service is %s\n",
__FILE__, __LINE__,
sss->payment_order_id);
-
+ for (unsigned int i = 0; i < sss->pds_len; i++)
+ {
+ if (0 == strcmp (sss->pds[i].provider_url,
+ server_url))
+ {
+ printf ("Server#%u failure: 402 payment required: %s %s\n",
+ i,
+ taler_pay_url,
+ TALER_amount_to_string (servers[i].backend_cost));
+ }
+ }
keyboard_task = NULL;
start_read_keyboard ();
}
@@ -457,13 +483,15 @@ secret_share_result_cb (void *cls,
__FILE__,
__LINE__);
GNUNET_break (0);
+ keyboard_task = NULL;
+ start_read_keyboard ();
return;
}
- keyboard_task = NULL;
- start_read_keyboard ();
- return;
}
+ printf ("Thank you for using Anastasis");
GNUNET_break (0);
+ keyboard_task = NULL;
+ start_read_keyboard ();
return;
}
@@ -507,6 +535,8 @@ truth_upload_cb (void *cls,
if (NULL == t)
{
GNUNET_break (0);
+ keyboard_task = NULL;
+ start_read_keyboard ();
return;
}
tus->truth = t;
@@ -531,6 +561,8 @@ config_cb (void *cls,
const struct TALER_Amount *cost)
{
struct ConfigState *cs = cls;
+ struct ANASTASIS_PaymentDetails *pd = GNUNET_new (struct
+ ANASTASIS_PaymentDetails);
cs->co = NULL;
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
@@ -549,22 +581,7 @@ config_cb (void *cls,
start_read_keyboard ();
return;
}
- if (NULL == cost)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Cost is NULL in %s:%u\n",
- __FILE__,
- __LINE__);
- return;
- }
- if (NULL == methods)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Methods is NULL in %s:%u\n",
- __FILE__,
- __LINE__);
- return;
- }
+
cs->cost = *cost;
cs->methods = GNUNET_malloc (strlen (methods) + 1);
GNUNET_strlcpy (cs->methods,
@@ -575,6 +592,10 @@ config_cb (void *cls,
cs->server->backend_methods = cs->methods;
cs->server->backend_cost = &cs->cost;
+ pd->provider_url = cs->server->backend_url;
+ GNUNET_array_append (pds,
+ pds_length,
+ *pd);
// FIXME add config max insurance amount
GNUNET_array_append (servers,
@@ -629,6 +650,7 @@ salt_cb (void *cls,
if (NULL == cs->co)
{
GNUNET_break (0);
+ keyboard_task = NULL;
return;
}
}
@@ -643,6 +665,7 @@ static void
read_keyboard_command (void *cls)
{
(void) cls;
+
char *buffer = readline ("anastasis-splitter> ");
size_t characters = strlen (buffer);
@@ -664,7 +687,6 @@ read_keyboard_command (void *cls)
GNUNET_SCHEDULER_shutdown ();
free (buffer);
buffer = NULL;
- keyboard_task = NULL;
return;
case 'o':
printf (
@@ -683,18 +705,14 @@ read_keyboard_command (void *cls)
"\n"
);
free (buffer);
- buffer = NULL;
break;
default:
fprintf (stderr,
"Unknown command '%c'\n",
buffer[0]);
- GNUNET_free (buffer);
- buffer = NULL;
- keyboard_task = NULL;
+ free (buffer);
break;
}
- keyboard_task = NULL;
start_read_keyboard ();
return;
}
@@ -724,7 +742,6 @@ read_keyboard_command (void *cls)
free (buffer);
buffer = NULL;
- keyboard_task = NULL;
start_read_keyboard ();
return;
}
@@ -756,12 +773,11 @@ read_keyboard_command (void *cls)
if (NULL == ss->so)
{
GNUNET_break (0);
+ free (buffer);
+ keyboard_task = NULL;
return;
}
- GNUNET_free (buffer);
- buffer = NULL;
- keyboard_task = NULL;
- start_read_keyboard ();
+ free (buffer);
return;
}
@@ -794,7 +810,7 @@ read_keyboard_command (void *cls)
else
printf ("Please add a truth before!\n");
- GNUNET_free (buffer);
+ free (buffer);
buffer = NULL;
keyboard_task = NULL;
start_read_keyboard ();
@@ -889,6 +905,8 @@ read_keyboard_command (void *cls)
error.line,
error.column,
error.position);
+ free (buffer);
+ GNUNET_SCHEDULER_shutdown ();
return;
}
tus->index = (tu_states_length > 0) ? tu_states_length - 1 : 0;
@@ -909,6 +927,7 @@ read_keyboard_command (void *cls)
if (NULL == tus->tuo)
{
GNUNET_break (0);
+ free (buffer);
return;
}
GNUNET_array_append (tu_states,
@@ -917,6 +936,8 @@ read_keyboard_command (void *cls)
printf ("Truth #%u added for server #%u\n",
tus->index,
server_num);
+ free (buffer);
+ return;
}
else
printf ("Sorry, server#%u does not support '%s'\n",
@@ -927,27 +948,7 @@ read_keyboard_command (void *cls)
else
printf ("Please add a server before!\n");
- GNUNET_free (buffer);
- buffer = NULL;
- keyboard_task = NULL;
- start_read_keyboard ();
- return;
- }
- if ((0 == strncmp ("truth add question",
- buffer,
- strlen ("truth add question")))
- && (characters == strlen ("truth add question") + sizeof (char)))
- {
- // FIXME "truth add question" logic here
- if (NULL != tu_states)
- {
-
- }
- else
- printf ("Please add a server before!\n");
-
- GNUNET_free (buffer);
- buffer = NULL;
+ free (buffer);
keyboard_task = NULL;
start_read_keyboard ();
return;
@@ -981,9 +982,7 @@ read_keyboard_command (void *cls)
else
printf ("Please add a truth before!\n");
- GNUNET_free (buffer);
- buffer = NULL;
- keyboard_task = NULL;
+ free (buffer);
start_read_keyboard ();
return;
}
@@ -996,7 +995,7 @@ read_keyboard_command (void *cls)
// FIXME "policy" logic here
if (NULL != pc_states)
{
- for (unsigned int i = 0; i < servers_length; i++)
+ for (unsigned int i = 0; i < pc_states_length; i++)
{
if (NULL != pc_states[i].tu_states)
{
@@ -1011,9 +1010,7 @@ read_keyboard_command (void *cls)
}
else
printf ("Please add a policy before!\n");
- GNUNET_free (buffer);
- buffer = NULL;
- keyboard_task = NULL;
+ free (buffer);
start_read_keyboard ();
return;
}
@@ -1033,9 +1030,7 @@ read_keyboard_command (void *cls)
strlen ("truth#")))
{
printf ("Wrong argument: %s!\n", token);
- GNUNET_free (buffer);
- buffer = NULL;
- keyboard_task = NULL;
+ free (buffer);
start_read_keyboard ();
return;
}
@@ -1052,18 +1047,14 @@ read_keyboard_command (void *cls)
*pcs);
printf ("Policy #%u defined\n",
(pc_states_length > 0) ? pc_states_length - 1 : 0);
-
- GNUNET_free (buffer);
- buffer = NULL;
- keyboard_task = NULL;
+ free (buffer);
start_read_keyboard ();
return;
}
- if ((0 == strncmp ("publish",
- buffer,
- strlen ("publish")))
- && (characters == strlen ("publish")))
+ if (0 == strncmp ("publish",
+ buffer,
+ strlen ("publish")))
{
// FIXME "publish" logic here
if (NULL != pc_states)
@@ -1098,18 +1089,55 @@ read_keyboard_command (void *cls)
error.line,
error.column,
error.position);
+ free (buffer);
+ GNUNET_SCHEDULER_shutdown ();
return;
}
// core secret here is just for testing, if payment is needed
- sss->core_secret = "test_payment";
- sss->core_secret_size = strlen ("test_payment");
+ if (characters > strlen ("publish"))
+ {
+ char *token_start = &buffer[strlen ("publish ")];
+ char *token = strtok (token_start, "\"");
+ sss->core_secret = GNUNET_malloc (strlen (token) + 1);
+ sss->core_secret_size = strlen (token) + 1;
+ GNUNET_strlcpy (sss->core_secret,
+ token,
+ sss->core_secret_size);
+ sss->http_status = MHD_HTTP_NO_CONTENT;
+ }
+ if (characters == strlen ("publish"))
+ {
+ sss->core_secret = "test_payment";
+ sss->core_secret_size = strlen ("test_payment");
+ sss->http_status = MHD_HTTP_PAYMENT_REQUIRED;
+ }
+
+ for (unsigned int i = 0; i < servers_length; i++)
+ {
+ printf ("To skip following press enter\n");
+ printf ("Please type in PaymentSecret for Server#%u: ", i);
+ buffer = readline ((char *) NULL);
+ characters = strlen (buffer);
+ if (characters > 1)
+ {
+ add_history (buffer);
+ pds[i].payment_order_id = GNUNET_malloc (characters + 1);
+ GNUNET_strlcpy (pds[i].payment_order_id,
+ buffer,
+ characters);
+ free (buffer);
+ }
+ printf ("\n");
+ }
+ sss->pds = pds;
+ sss->pds_len = pds_length;
sss->sso = ANASTASIS_secret_share (ctx,
sss->id_data,
NULL,
policies,
pc_states_length,
- NULL,
- NULL,
+ &sss->pds,
+ sss->pds_len,
&secret_share_payment_cb,
sss,
&secret_share_result_cb,
@@ -1119,22 +1147,20 @@ read_keyboard_command (void *cls)
if (NULL == sss->sso)
{
GNUNET_break (0);
+ free (buffer);
return;
}
+ free (buffer);
return;
}
- GNUNET_free (buffer);
- buffer = NULL;
- keyboard_task = NULL;
- start_read_keyboard ();
+ free (buffer);
return;
}
fprintf (stderr,
"Unknown command '%s'\n",
(char*) buffer);
- GNUNET_free (buffer);
- buffer = NULL;
+ free (buffer);
keyboard_task = NULL;
start_read_keyboard ();
}
@@ -1180,11 +1206,41 @@ shutdown_task (void *cls)
"Shutdown initiated\n");
// FIXME shutdown routine here
+ if (NULL != keyboard_task)
+ {
+ GNUNET_SCHEDULER_cancel (keyboard_task);
+ keyboard_task = NULL;
+ }
if (NULL != ctx)
{
GNUNET_CURL_fini (ctx);
ctx = NULL;
}
+ if (NULL != rc)
+ {
+ GNUNET_CURL_gnunet_rc_destroy (rc);
+ rc = NULL;
+ }
+
+ if (NULL != tu_states)
+ {
+ for (unsigned int i = 0; i < tu_states_length; i++)
+ {
+ GNUNET_free (tu_states[i].truth);
+ GNUNET_free (tu_states[i].method);
+ GNUNET_free_non_null (tu_states[i].secret_question);
+ GNUNET_free_non_null (tu_states[i].secret_answer);
+ }
+ }
+
+ if (NULL != servers)
+ {
+ for (unsigned int i = 0; i < servers_length; i++)
+ {
+ GNUNET_free (servers[i].backend_url);
+ GNUNET_free (servers[i].backend_methods);
+ }
+ }
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Shutdown complete\n");
diff --git a/src/include/anastasis.h b/src/include/anastasis.h
index 5037575..2fe1e35 100644
--- a/src/include/anastasis.h
+++ b/src/include/anastasis.h
@@ -379,11 +379,13 @@ typedef void
*
* @param cls closure for the callback
* @param taler_pay_url url for the payment (taler://pay/Foo)
+* @param server_url url of the server to pay for
* @param ec status of the request
*/
typedef void
(*ANASTASIS_SharePaymentCallback)(void *cls,
const char *taler_pay_url,
+ const char *server_url,
enum TALER_ErrorCode ec);
/**
diff --git a/src/lib/anastasis.c b/src/lib/anastasis.c
index 30c880c..a686c34 100644
--- a/src/lib/anastasis.c
+++ b/src/lib/anastasis.c
@@ -1483,6 +1483,7 @@ policy_store_cb (void *cls,
{
pss->ss->spc (pss->ss->spc_cls,
ud->details.payment_request,
+ pss->anastasis_url,
ec);
pss->ss->spc = NULL;
}
diff --git a/src/lib/testing_cmd_secret_share.c
b/src/lib/testing_cmd_secret_share.c
index d9cd8dc..4b8068c 100644
--- a/src/lib/testing_cmd_secret_share.c
+++ b/src/lib/testing_cmd_secret_share.c
@@ -119,11 +119,13 @@ struct SecretShareState
*
* @param cls closure
* @param taler_pay_url url for the payment (taler://pay/Foo)
+ * @param server_url url of the server to pay for
* @param ec status of the request
*/
static void
secret_share_payment_cb (void *cls,
const char *taler_pay_url,
+ const char *server_url,
enum TALER_ErrorCode ec)
{
const char *m;
--
To stop receiving notification emails like this one, please contact
address@hidden.