mirror of
https://forge.fsky.io/lda/Parsee.git
synced 2026-03-13 21:25:11 +00:00
[MOD] Read the config file for tool DB access
This commit is contained in:
parent
5d268a71a5
commit
9775bd8d4e
6 changed files with 157 additions and 115 deletions
|
|
@ -17,8 +17,8 @@ allows you to see/add admins to it, using simplified globrules.
|
||||||
|
|
||||||
.SH OPTIONS
|
.SH OPTIONS
|
||||||
.TP
|
.TP
|
||||||
.B [DB path]
|
.B [config]
|
||||||
The DB directory this tool will use to manage administrators.
|
The configuration file used by the Parsee daemon.
|
||||||
.TP
|
.TP
|
||||||
.B [user]
|
.B [user]
|
||||||
If set, adds the glob
|
If set, adds the glob
|
||||||
|
|
@ -28,7 +28,8 @@ the Parsee instance.
|
||||||
|
|
||||||
.SH BUGS
|
.SH BUGS
|
||||||
.PP
|
.PP
|
||||||
Currently not available with flat-based backends.
|
None as I know of. If anyone notices any issues with this, please
|
||||||
|
let me know.
|
||||||
|
|
||||||
.SH LICENSE
|
.SH LICENSE
|
||||||
Unlike Parsee,
|
Unlike Parsee,
|
||||||
|
|
|
||||||
|
|
@ -230,34 +230,31 @@ end_error:
|
||||||
char *res = ParseeGetResource(from);
|
char *res = ParseeGetResource(from);
|
||||||
char *encoded = ParseeGetBridgedUser(args, stanza);
|
char *encoded = ParseeGetBridgedUser(args, stanza);
|
||||||
char *event_id = NULL;
|
char *event_id = NULL;
|
||||||
|
char *parsee = ParseeJID(args);
|
||||||
|
char *trim = ParseeTrimJID(from);
|
||||||
|
XMLElement *ps;
|
||||||
|
|
||||||
{
|
/* Subscribe to the sender's metadata node. */
|
||||||
char *parsee = ParseeJID(args);
|
ps = CreatePubsubRequest(
|
||||||
char *trim = ParseeTrimJID(from);
|
parsee, decode_from, "urn:xmpp:avatar:metadata"
|
||||||
XMLElement *ps;
|
);
|
||||||
|
pthread_mutex_lock(&jabber->write_lock);
|
||||||
|
XMLEncode(jabber->stream, ps);
|
||||||
|
StreamFlush(jabber->stream);
|
||||||
|
pthread_mutex_unlock(&jabber->write_lock);
|
||||||
|
XMLFreeElement(ps);
|
||||||
|
|
||||||
/* Subscribe to the sender's metadata node. */
|
ps = CreatePubsubRequest(
|
||||||
ps = CreatePubsubRequest(
|
parsee, trim, "urn:xmpp:avatar:metadata"
|
||||||
parsee, decode_from, "urn:xmpp:avatar:metadata"
|
);
|
||||||
);
|
pthread_mutex_lock(&jabber->write_lock);
|
||||||
pthread_mutex_lock(&jabber->write_lock);
|
XMLEncode(jabber->stream, ps);
|
||||||
XMLEncode(jabber->stream, ps);
|
StreamFlush(jabber->stream);
|
||||||
StreamFlush(jabber->stream);
|
pthread_mutex_unlock(&jabber->write_lock);
|
||||||
pthread_mutex_unlock(&jabber->write_lock);
|
XMLFreeElement(ps);
|
||||||
XMLFreeElement(ps);
|
|
||||||
|
|
||||||
ps = CreatePubsubRequest(
|
Free(parsee);
|
||||||
parsee, trim, "urn:xmpp:avatar:metadata"
|
Free(trim);
|
||||||
);
|
|
||||||
pthread_mutex_lock(&jabber->write_lock);
|
|
||||||
XMLEncode(jabber->stream, ps);
|
|
||||||
StreamFlush(jabber->stream);
|
|
||||||
pthread_mutex_unlock(&jabber->write_lock);
|
|
||||||
XMLFreeElement(ps);
|
|
||||||
|
|
||||||
Free(parsee);
|
|
||||||
Free(trim);
|
|
||||||
}
|
|
||||||
|
|
||||||
pthread_mutex_lock(&thr->info->chk_lock);
|
pthread_mutex_lock(&thr->info->chk_lock);
|
||||||
if (ParseeVerifyAllStanza(args, stanza) && !replaced)
|
if (ParseeVerifyAllStanza(args, stanza) && !replaced)
|
||||||
|
|
@ -317,6 +314,7 @@ end_error:
|
||||||
size_t reacts = ArraySize(react_child);
|
size_t reacts = ArraySize(react_child);
|
||||||
event_id = ParseeGetReactedEvent(args, stanza);
|
event_id = ParseeGetReactedEvent(args, stanza);
|
||||||
|
|
||||||
|
/* Redact the last few reactions. */
|
||||||
to_redact = ASGetRelations(
|
to_redact = ASGetRelations(
|
||||||
args->config, 30, mroom_id, event_id,
|
args->config, 30, mroom_id, event_id,
|
||||||
"m.reaction"
|
"m.reaction"
|
||||||
|
|
@ -335,6 +333,7 @@ end_error:
|
||||||
}
|
}
|
||||||
ASFreeRelations(to_redact);
|
ASFreeRelations(to_redact);
|
||||||
|
|
||||||
|
/* ... and push out the new ones. */
|
||||||
for (i = 0; i < reacts; i++)
|
for (i = 0; i < reacts; i++)
|
||||||
{
|
{
|
||||||
XMLElement *reaction, *react_data;
|
XMLElement *reaction, *react_data;
|
||||||
|
|
@ -365,9 +364,9 @@ end_error:
|
||||||
}
|
}
|
||||||
else if (data)
|
else if (data)
|
||||||
{
|
{
|
||||||
/* TODO: Use HTML-formatted bodies, and respect the fallback
|
/* TODO: Respect the fallback trims the stanza provides us
|
||||||
* trims the stanza provides us if possible. Element does not
|
* if possible. Element does not like raw bodies on replies
|
||||||
* like raw bodies on replies too. Go figure. */
|
* too. Go figure. */
|
||||||
size_t off =
|
size_t off =
|
||||||
reply_to ? ParseeFindDatastart(data->data) : 0;
|
reply_to ? ParseeFindDatastart(data->data) : 0;
|
||||||
HashMap *ev = MatrixCreateMessage(data->data + off);
|
HashMap *ev = MatrixCreateMessage(data->data + off);
|
||||||
|
|
|
||||||
|
|
@ -13,12 +13,7 @@
|
||||||
* Under CC0, as its a rather useful example of a Parsee tool.
|
* Under CC0, as its a rather useful example of a Parsee tool.
|
||||||
* See LICENSE for more information about Parsee's licensing. */
|
* See LICENSE for more information about Parsee's licensing. */
|
||||||
|
|
||||||
#include <Cytoplasm/Memory.h>
|
#include "common.h"
|
||||||
#include <Cytoplasm/Json.h>
|
|
||||||
#include <Cytoplasm/Log.h>
|
|
||||||
#include <Cytoplasm/Db.h>
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
AddAdmin(Db *parsee, char *glob)
|
AddAdmin(Db *parsee, char *glob)
|
||||||
|
|
@ -86,14 +81,14 @@ Main(Array *args, HashMap *env)
|
||||||
|
|
||||||
if (ArraySize(args) < 2)
|
if (ArraySize(args) < 2)
|
||||||
{
|
{
|
||||||
Log(LOG_ERR, "Usage: %s [DB path] [glob]", exec);
|
Log(LOG_ERR, "Usage: %s [config] <glob>", exec);
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
db_path = ArrayGet(args, 1);
|
db_path = ArrayGet(args, 1);
|
||||||
glob = ArrayGet(args, 2);
|
glob = ArrayGet(args, 2);
|
||||||
|
|
||||||
parsee = DbOpenLMDB(db_path, 8 * 1024 * 1024);
|
parsee = GetDB(db_path);
|
||||||
if (parsee)
|
if (parsee)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
||||||
118
tools/common.h
Normal file
118
tools/common.h
Normal file
|
|
@ -0,0 +1,118 @@
|
||||||
|
/* Single-header tools for Parsee tools. */
|
||||||
|
|
||||||
|
#include <Cytoplasm/HttpClient.h>
|
||||||
|
#include <Cytoplasm/Memory.h>
|
||||||
|
#include <Cytoplasm/Json.h>
|
||||||
|
#include <Cytoplasm/Args.h>
|
||||||
|
#include <Cytoplasm/Util.h>
|
||||||
|
#include <Cytoplasm/Log.h>
|
||||||
|
#include <Cytoplasm/Uri.h>
|
||||||
|
#include <Cytoplasm/Str.h>
|
||||||
|
#include <Cytoplasm/Db.h>
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#define GrabString(obj, ...) JsonValueAsString(JsonGet(obj, __VA_ARGS__))
|
||||||
|
#define GrabInteger(obj, ...) JsonValueAsInteger(JsonGet(obj, __VA_ARGS__))
|
||||||
|
#define GrabBoolean(obj, ...) JsonValueAsBoolean(JsonGet(obj, __VA_ARGS__))
|
||||||
|
#define GrabObject(obj, ...) JsonValueAsObject(JsonGet(obj, __VA_ARGS__))
|
||||||
|
#define GrabArray(obj, ...) JsonValueAsArray(JsonGet(obj, __VA_ARGS__))
|
||||||
|
|
||||||
|
Uri *
|
||||||
|
DelegateServer(char *raw)
|
||||||
|
{
|
||||||
|
HttpClientContext *ctx = NULL;
|
||||||
|
Stream *stream = NULL;
|
||||||
|
HashMap *reply = NULL;
|
||||||
|
Uri *ret = NULL;
|
||||||
|
|
||||||
|
if (!raw)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx = HttpRequest(
|
||||||
|
HTTP_GET,
|
||||||
|
HTTP_FLAG_TLS, 443,
|
||||||
|
raw, "/.well-known/matrix/client"
|
||||||
|
);
|
||||||
|
HttpRequestSendHeaders(ctx);
|
||||||
|
|
||||||
|
switch (HttpRequestSend(ctx))
|
||||||
|
{
|
||||||
|
case HTTP_OK:
|
||||||
|
stream = HttpClientStream(ctx);
|
||||||
|
reply = JsonDecode(stream);
|
||||||
|
if (!reply)
|
||||||
|
{
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = UriParse(JsonValueAsString(JsonGet(
|
||||||
|
reply, 2,
|
||||||
|
"m.homeserver", "base_url"
|
||||||
|
)));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
/* TODO */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ret && !ret->port && StrEquals(ret->proto, "https"))
|
||||||
|
{
|
||||||
|
ret->port = 443;
|
||||||
|
}
|
||||||
|
if (ret && !ret->port)
|
||||||
|
{
|
||||||
|
ret->port = 80;
|
||||||
|
}
|
||||||
|
|
||||||
|
end:
|
||||||
|
HttpClientContextFree(ctx);
|
||||||
|
JsonFree(reply);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
Db *
|
||||||
|
GetDB(char *config)
|
||||||
|
{
|
||||||
|
size_t lmdb_size;
|
||||||
|
Db *ret = NULL;
|
||||||
|
char *db_path;
|
||||||
|
HashMap *json;
|
||||||
|
Stream *file;
|
||||||
|
if (!config)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
file = StreamOpen(config, "r");
|
||||||
|
json = JsonDecode(file);
|
||||||
|
StreamClose(file);
|
||||||
|
if (!json)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
lmdb_size = GrabInteger(json, 1, "db_size");
|
||||||
|
db_path = GrabString(json, 1, "db");
|
||||||
|
|
||||||
|
if (!db_path)
|
||||||
|
{
|
||||||
|
JsonFree(json);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lmdb_size)
|
||||||
|
{
|
||||||
|
ret = DbOpenLMDB(db_path, lmdb_size);
|
||||||
|
}
|
||||||
|
if (!ret)
|
||||||
|
{
|
||||||
|
ret = DbOpen(db_path, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
JsonFree(json);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
@ -10,73 +10,7 @@
|
||||||
* Under CC0, as its a rather useful example of a Parsee tool.
|
* Under CC0, as its a rather useful example of a Parsee tool.
|
||||||
* See LICENSE for more information about Parsee's licensing. */
|
* See LICENSE for more information about Parsee's licensing. */
|
||||||
|
|
||||||
#include <Cytoplasm/HttpClient.h>
|
#include "common.h"
|
||||||
#include <Cytoplasm/Memory.h>
|
|
||||||
#include <Cytoplasm/Json.h>
|
|
||||||
#include <Cytoplasm/Args.h>
|
|
||||||
#include <Cytoplasm/Util.h>
|
|
||||||
#include <Cytoplasm/Log.h>
|
|
||||||
#include <Cytoplasm/Uri.h>
|
|
||||||
#include <Cytoplasm/Str.h>
|
|
||||||
#include <Cytoplasm/Db.h>
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
static Uri *
|
|
||||||
DelegateServer(char *raw)
|
|
||||||
{
|
|
||||||
HttpClientContext *ctx = NULL;
|
|
||||||
Stream *stream = NULL;
|
|
||||||
HashMap *reply = NULL;
|
|
||||||
Uri *ret = NULL;
|
|
||||||
|
|
||||||
if (!raw)
|
|
||||||
{
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx = HttpRequest(
|
|
||||||
HTTP_GET,
|
|
||||||
HTTP_FLAG_TLS, 443,
|
|
||||||
raw, "/.well-known/matrix/client"
|
|
||||||
);
|
|
||||||
HttpRequestSendHeaders(ctx);
|
|
||||||
|
|
||||||
switch (HttpRequestSend(ctx))
|
|
||||||
{
|
|
||||||
case HTTP_OK:
|
|
||||||
stream = HttpClientStream(ctx);
|
|
||||||
reply = JsonDecode(stream);
|
|
||||||
if (!reply)
|
|
||||||
{
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = UriParse(JsonValueAsString(JsonGet(
|
|
||||||
reply, 2,
|
|
||||||
"m.homeserver", "base_url"
|
|
||||||
)));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
/* TODO */
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ret && !ret->port && StrEquals(ret->proto, "https"))
|
|
||||||
{
|
|
||||||
ret->port = 443;
|
|
||||||
}
|
|
||||||
if (ret && !ret->port)
|
|
||||||
{
|
|
||||||
ret->port = 80;
|
|
||||||
}
|
|
||||||
|
|
||||||
end:
|
|
||||||
HttpClientContextFree(ctx);
|
|
||||||
JsonFree(reply);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
int
|
||||||
Main(Array *args, HashMap *env)
|
Main(Array *args, HashMap *env)
|
||||||
|
|
|
||||||
|
|
@ -3,12 +3,7 @@
|
||||||
* Under CC0, as its a rather useful example of a Parsee tool.
|
* Under CC0, as its a rather useful example of a Parsee tool.
|
||||||
* See LICENSE for more information about Parsee's licensing. */
|
* See LICENSE for more information about Parsee's licensing. */
|
||||||
|
|
||||||
#include <Cytoplasm/Memory.h>
|
#include "common.h"
|
||||||
#include <Cytoplasm/Json.h>
|
|
||||||
#include <Cytoplasm/Log.h>
|
|
||||||
#include <Cytoplasm/Db.h>
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
int
|
int
|
||||||
Main(Array *args, HashMap *env)
|
Main(Array *args, HashMap *env)
|
||||||
|
|
@ -20,13 +15,13 @@ Main(Array *args, HashMap *env)
|
||||||
|
|
||||||
if (ArraySize(args) < 2)
|
if (ArraySize(args) < 2)
|
||||||
{
|
{
|
||||||
Log(LOG_ERR, "Usage: %s [DB path]", exec);
|
Log(LOG_ERR, "Usage: %s [config]", exec);
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
db_path = ArrayGet(args, 1);
|
db_path = ArrayGet(args, 1);
|
||||||
|
|
||||||
parsee = DbOpenLMDB(db_path, 8 * 1024 * 1024);
|
parsee = GetDB(db_path);
|
||||||
if (parsee)
|
if (parsee)
|
||||||
{
|
{
|
||||||
DbDelete(parsee, 1, "avatars");
|
DbDelete(parsee, 1, "avatars");
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue