Merge branch 'main' of https://dev.tildefriends.net/cory/tildefriends
This commit is contained in:
commit
46e711f0a5
23
src/ssb.db.c
23
src/ssb.db.c
@ -737,12 +737,11 @@ bool tf_ssb_db_blob_store(tf_ssb_t* ssb, const uint8_t* blob, size_t size, char*
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool tf_ssb_db_get_message_by_author_and_sequence(tf_ssb_t* ssb, const char* author, int64_t sequence, char* out_message_id, size_t out_message_id_size, char* out_previous,
|
bool tf_ssb_db_get_message_by_author_and_sequence(tf_ssb_t* ssb, const char* author, int64_t sequence, char* out_message_id, size_t out_message_id_size, char* out_previous,
|
||||||
size_t out_previous_size, char* out_author, size_t out_author_size, double* out_timestamp, char** out_content, char* out_hash, size_t out_hash_size, char* out_signature,
|
size_t out_previous_size, double* out_timestamp, char** out_content, char* out_hash, size_t out_hash_size, char* out_signature, size_t out_signature_size, int* out_flags)
|
||||||
size_t out_signature_size, int* out_flags)
|
|
||||||
{
|
{
|
||||||
bool found = false;
|
bool found = false;
|
||||||
sqlite3_stmt* statement;
|
sqlite3_stmt* statement;
|
||||||
const char* query = "SELECT id, previous, author, timestamp, json(content), hash, signature, flags FROM messages WHERE author = ?1 AND sequence = ?2";
|
const char* query = "SELECT id, previous, timestamp, json(content), hash, signature, flags FROM messages WHERE author = ?1 AND sequence = ?2";
|
||||||
sqlite3* db = tf_ssb_acquire_db_reader(ssb);
|
sqlite3* db = tf_ssb_acquire_db_reader(ssb);
|
||||||
if (sqlite3_prepare(db, query, -1, &statement, NULL) == SQLITE_OK)
|
if (sqlite3_prepare(db, query, -1, &statement, NULL) == SQLITE_OK)
|
||||||
{
|
{
|
||||||
@ -766,29 +765,25 @@ bool tf_ssb_db_get_message_by_author_and_sequence(tf_ssb_t* ssb, const char* aut
|
|||||||
snprintf(out_previous, out_previous_size, "%s", (const char*)sqlite3_column_text(statement, 1));
|
snprintf(out_previous, out_previous_size, "%s", (const char*)sqlite3_column_text(statement, 1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (out_author)
|
|
||||||
{
|
|
||||||
snprintf(out_author, out_author_size, "%s", (const char*)sqlite3_column_text(statement, 2));
|
|
||||||
}
|
|
||||||
if (out_timestamp)
|
if (out_timestamp)
|
||||||
{
|
{
|
||||||
*out_timestamp = sqlite3_column_double(statement, 3);
|
*out_timestamp = sqlite3_column_double(statement, 2);
|
||||||
}
|
}
|
||||||
if (out_content)
|
if (out_content)
|
||||||
{
|
{
|
||||||
*out_content = tf_strdup((const char*)sqlite3_column_text(statement, 4));
|
*out_content = tf_strdup((const char*)sqlite3_column_text(statement, 3));
|
||||||
}
|
}
|
||||||
if (out_hash)
|
if (out_hash)
|
||||||
{
|
{
|
||||||
snprintf(out_hash, out_hash_size, "%s", (const char*)sqlite3_column_text(statement, 5));
|
snprintf(out_hash, out_hash_size, "%s", (const char*)sqlite3_column_text(statement, 4));
|
||||||
}
|
}
|
||||||
if (out_signature)
|
if (out_signature)
|
||||||
{
|
{
|
||||||
snprintf(out_signature, out_signature_size, "%s", (const char*)sqlite3_column_text(statement, 6));
|
snprintf(out_signature, out_signature_size, "%s", (const char*)sqlite3_column_text(statement, 5));
|
||||||
}
|
}
|
||||||
if (out_flags)
|
if (out_flags)
|
||||||
{
|
{
|
||||||
*out_flags = sqlite3_column_int(statement, 7);
|
*out_flags = sqlite3_column_int(statement, 6);
|
||||||
}
|
}
|
||||||
found = true;
|
found = true;
|
||||||
}
|
}
|
||||||
@ -1834,8 +1829,8 @@ bool tf_ssb_db_verify(tf_ssb_t* ssb, const char* id)
|
|||||||
char hash[32];
|
char hash[32];
|
||||||
char signature[256];
|
char signature[256];
|
||||||
int flags = 0;
|
int flags = 0;
|
||||||
if (tf_ssb_db_get_message_by_author_and_sequence(ssb, id, i, message_id, sizeof(message_id), previous, sizeof(previous), NULL, 0, ×tamp, &content, hash,
|
if (tf_ssb_db_get_message_by_author_and_sequence(
|
||||||
sizeof(hash), signature, sizeof(signature), &flags))
|
ssb, id, i, message_id, sizeof(message_id), previous, sizeof(previous), ×tamp, &content, hash, sizeof(hash), signature, sizeof(signature), &flags))
|
||||||
{
|
{
|
||||||
JSValue message = tf_ssb_format_message(context, previous, id, i, timestamp, hash, content, signature, flags);
|
JSValue message = tf_ssb_format_message(context, previous, id, i, timestamp, hash, content, signature, flags);
|
||||||
char calculated_id[k_id_base64_len];
|
char calculated_id[k_id_base64_len];
|
||||||
|
16
src/ssb.db.h
16
src/ssb.db.h
@ -122,13 +122,19 @@ JSValue tf_ssb_db_get_message_by_id(tf_ssb_t* ssb, const char* id, bool is_keys)
|
|||||||
** @param sequence The message sequence number.
|
** @param sequence The message sequence number.
|
||||||
** @param[out] out_message_id Populated with the message identifier.
|
** @param[out] out_message_id Populated with the message identifier.
|
||||||
** @param out_message_id_size The size of the out_message_id buffer.
|
** @param out_message_id_size The size of the out_message_id buffer.
|
||||||
|
** @param[out] out_previous Populated with the previous message identifier.
|
||||||
|
** @param out_previous_size The size of the out_previous buffer.
|
||||||
** @param[out] out_timestamp Populated with the timestamp.
|
** @param[out] out_timestamp Populated with the timestamp.
|
||||||
** @param[out] out_content Populated with the message content. Free with tf_free().
|
** @param[out] out_content Populated with the message content. Free with tf_free().
|
||||||
|
** @param[out] out_hash Populated with the message hash format.
|
||||||
|
** @param out_hash_size The size of the out_hash buffer.
|
||||||
|
** @param[out] out_signature Populated with the message signature.
|
||||||
|
** @param out_signature_size The size of the out_signature buffer.
|
||||||
|
** @param[out] out_flags Populated with flags describing the format of the message.
|
||||||
** @return True if the message was found and retrieved.
|
** @return True if the message was found and retrieved.
|
||||||
*/
|
*/
|
||||||
bool tf_ssb_db_get_message_by_author_and_sequence(tf_ssb_t* ssb, const char* author, int64_t sequence, char* out_message_id, size_t out_message_id_size, char* out_previous,
|
bool tf_ssb_db_get_message_by_author_and_sequence(tf_ssb_t* ssb, const char* author, int64_t sequence, char* out_message_id, size_t out_message_id_size, char* out_previous,
|
||||||
size_t out_previous_size, char* out_author, size_t out_author_size, double* out_timestamp, char** out_content, char* out_hash, size_t out_hash_size, char* out_signature,
|
size_t out_previous_size, double* out_timestamp, char** out_content, char* out_hash, size_t out_hash_size, char* out_signature, size_t out_signature_size, int* out_flags);
|
||||||
size_t out_signature_size, int* out_flags);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
** Get information about the last message from an author.
|
** Get information about the last message from an author.
|
||||||
@ -380,6 +386,12 @@ bool tf_ssb_db_set_property(tf_ssb_t* ssb, const char* id, const char* key, cons
|
|||||||
*/
|
*/
|
||||||
void tf_ssb_db_resolve_index_async(tf_ssb_t* ssb, const char* host, void (*callback)(const char* path, void* user_data), void* user_data);
|
void tf_ssb_db_resolve_index_async(tf_ssb_t* ssb, const char* host, void (*callback)(const char* path, void* user_data), void* user_data);
|
||||||
|
|
||||||
|
/**
|
||||||
|
** Verify an author's feed.
|
||||||
|
** @param ssb The SSB instance.
|
||||||
|
** @param id The author'd identity.
|
||||||
|
** @return true If the feed verified successfully.
|
||||||
|
*/
|
||||||
bool tf_ssb_db_verify(tf_ssb_t* ssb, const char* id);
|
bool tf_ssb_db_verify(tf_ssb_t* ssb, const char* id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user