aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2015-01-20 17:12:51 +0100
committerChristian Grothoff <christian@grothoff.org>2015-01-20 17:12:51 +0100
commitf70814fbb521e9d7c3a0db81fd483ecc926e9018 (patch)
tree47c993c0cbdc1708cca177cd01ff218f0fd0ee0e
parent93a98f8091329d44fe63c092da5f4eaf3bcb983d (diff)
downloadexchange-f70814fbb521e9d7c3a0db81fd483ecc926e9018.tar.gz
exchange-f70814fbb521e9d7c3a0db81fd483ecc926e9018.tar.bz2
exchange-f70814fbb521e9d7c3a0db81fd483ecc926e9018.zip
more work on splitting refresh logic
-rw-r--r--src/mint/taler-mint-httpd_refresh.c88
-rw-r--r--src/mint/taler-mint-httpd_responses.c43
-rw-r--r--src/mint/taler-mint-httpd_responses.h13
3 files changed, 82 insertions, 62 deletions
diff --git a/src/mint/taler-mint-httpd_refresh.c b/src/mint/taler-mint-httpd_refresh.c
index 8f4f13105..8b18e9a66 100644
--- a/src/mint/taler-mint-httpd_refresh.c
+++ b/src/mint/taler-mint-httpd_refresh.c
@@ -409,61 +409,6 @@ refresh_accept_melts (struct MHD_Connection *connection,
}
-/**
- * Send a response for "/refresh/melt".
- *
- * @param connection the connection to send the response to
- * @param db_conn the database connection to fetch values from
- * @param session_pub the refresh session public key.
- * @return a MHD result code
- */
-static int
-helper_refresh_send_melt_response (struct MHD_Connection *connection,
- PGconn *db_conn,
- const struct GNUNET_CRYPTO_EddsaPublicKey *session_pub)
-{
- struct RefreshSession session;
- int res;
- json_t *root;
- json_t *list;
- struct GNUNET_HashContext *hash_context;
-
- if (GNUNET_OK !=
- (res = TALER_MINT_DB_get_refresh_session (db_conn,
- session_pub,
- &session)))
- {
- // FIXME: send internal error
- GNUNET_break (0);
- return MHD_NO;
- }
-
- root = json_object ();
- list = json_array ();
- json_object_set_new (root, "blind_session_pubs", list);
-
- hash_context = GNUNET_CRYPTO_hash_context_start ();
-
- {
- struct RefreshMeltResponseSignatureBody body;
- struct GNUNET_CRYPTO_EddsaSignature sig;
- json_t *sig_json;
-
- body.purpose.size = htonl (sizeof (struct RefreshMeltResponseSignatureBody));
- body.purpose.purpose = htonl (TALER_SIGNATURE_REFRESH_MELT_RESPONSE);
- GNUNET_CRYPTO_hash_context_finish (hash_context, &body.melt_response_hash);
- TALER_MINT_keys_sign (&body.purpose,
- &sig);
- sig_json = TALER_JSON_from_sig (&body.purpose, &sig);
- GNUNET_assert (NULL != sig_json);
- json_object_set (root, "signature", sig_json);
- }
-
- return TALER_MINT_reply_json (connection,
- root,
- MHD_HTTP_OK);
-}
-
/**
* Verify a signature that is encoded in a JSON object
@@ -581,6 +526,7 @@ TALER_MINT_handler_refresh_melt (struct RequestHandler *rh,
struct TALER_Amount melt_balance;
struct GNUNET_HashContext *hash_context;
struct GNUNET_HashCode melt_hash;
+ struct RefreshSession session;
res = TALER_MINT_parse_post_json (connection,
connection_cls,
@@ -620,9 +566,20 @@ TALER_MINT_handler_refresh_melt (struct RequestHandler *rh,
&refresh_session_pub,
NULL);
if (GNUNET_YES == res)
- return helper_refresh_send_melt_response (connection,
- db_conn,
- &refresh_session_pub);
+ {
+ if (GNUNET_OK !=
+ (res = TALER_MINT_DB_get_refresh_session (db_conn,
+ &refresh_session_pub,
+ &session)))
+ {
+ // FIXME: send internal error
+ GNUNET_break (0);
+ return MHD_NO;
+ }
+ return TALER_MINT_reply_refresh_melt_success (connection,
+ &session,
+ &refresh_session_pub);
+ }
if (GNUNET_SYSERR == res)
{
// FIXME: return 'internal error'?
@@ -738,9 +695,18 @@ TALER_MINT_handler_refresh_melt (struct RequestHandler *rh,
GNUNET_break (0);
return MHD_NO;
}
- return helper_refresh_send_melt_response (connection,
- db_conn,
- &refresh_session_pub);
+ if (GNUNET_OK !=
+ (res = TALER_MINT_DB_get_refresh_session (db_conn,
+ &refresh_session_pub,
+ &session)))
+ {
+ // FIXME: send internal error
+ GNUNET_break (0);
+ return MHD_NO;
+ }
+ return TALER_MINT_reply_refresh_melt_success (connection,
+ &session,
+ &refresh_session_pub);
}
diff --git a/src/mint/taler-mint-httpd_responses.c b/src/mint/taler-mint-httpd_responses.c
index 7aedec1d3..eca10344a 100644
--- a/src/mint/taler-mint-httpd_responses.c
+++ b/src/mint/taler-mint-httpd_responses.c
@@ -291,6 +291,49 @@ TALER_MINT_reply_withdraw_sign_success (struct MHD_Connection *connection,
/**
+ * Send a response for "/refresh/melt".
+ *
+ * @param connection the connection to send the response to
+ * @param db_conn the database connection to fetch values from
+ * @param session_pub the refresh session public key.
+ * @return a MHD result code
+ */
+int
+TALER_MINT_reply_refresh_melt_success (struct MHD_Connection *connection,
+ const struct RefreshSession *session,
+ const struct GNUNET_CRYPTO_EddsaPublicKey *session_pub)
+{
+ json_t *root;
+ json_t *list;
+ struct GNUNET_HashContext *hash_context;
+
+ root = json_object ();
+ list = json_array ();
+ json_object_set_new (root, "blind_session_pubs", list);
+ hash_context = GNUNET_CRYPTO_hash_context_start ();
+
+ {
+ struct RefreshMeltResponseSignatureBody body;
+ struct GNUNET_CRYPTO_EddsaSignature sig;
+ json_t *sig_json;
+
+ body.purpose.size = htonl (sizeof (struct RefreshMeltResponseSignatureBody));
+ body.purpose.purpose = htonl (TALER_SIGNATURE_REFRESH_MELT_RESPONSE);
+ GNUNET_CRYPTO_hash_context_finish (hash_context, &body.melt_response_hash);
+ TALER_MINT_keys_sign (&body.purpose,
+ &sig);
+ sig_json = TALER_JSON_from_sig (&body.purpose, &sig);
+ GNUNET_assert (NULL != sig_json);
+ json_object_set (root, "signature", sig_json);
+ }
+
+ return TALER_MINT_reply_json (connection,
+ root,
+ MHD_HTTP_OK);
+}
+
+
+/**
* Send a response to a "/refresh/commit" request.
*
* FIXME: maybe not the ideal argument type for @a refresh_session here.
diff --git a/src/mint/taler-mint-httpd_responses.h b/src/mint/taler-mint-httpd_responses.h
index ca6b68d50..ab771cb31 100644
--- a/src/mint/taler-mint-httpd_responses.h
+++ b/src/mint/taler-mint-httpd_responses.h
@@ -173,7 +173,18 @@ TALER_MINT_reply_refresh_commit_success (struct MHD_Connection *connection,
struct RefreshSession *refresh_session);
-
+/**
+ * Send a response for "/refresh/melt".
+ *
+ * @param connection the connection to send the response to
+ * @param db_conn the database connection to fetch values from
+ * @param session_pub the refresh session public key.
+ * @return a MHD result code
+ */
+int
+TALER_MINT_reply_refresh_melt_success (struct MHD_Connection *connection,
+ const struct RefreshSession *session,
+ const struct GNUNET_CRYPTO_EddsaPublicKey *session_pub);