Compare commits

...

2 commits

Author SHA1 Message Date
LDA
29a298efe2 [MOD] Fix out redacts a bit
Some checks failed
Compile Telodendria / Compile Telodendria (x86, alpine-v3.19) (push) Has been cancelled
Compile Telodendria / Compile Telodendria (x86, debian-v12.4) (push) Has been cancelled
Compile Telodendria / Compile Telodendria (x86, freebsd-v14.0) (push) Has been cancelled
Compile Telodendria / Compile Telodendria (x86, netbsd-v9.3) (push) Has been cancelled
Compile Telodendria / Compile Telodendria (x86_64, alpine-v3.19) (push) Has been cancelled
Compile Telodendria / Compile Telodendria (x86_64, debian-v12.4) (push) Has been cancelled
Compile Telodendria / Compile Telodendria (x86_64, freebsd-v14.0) (push) Has been cancelled
Compile Telodendria / Compile Telodendria (x86_64, netbsd-v9.3) (push) Has been cancelled
Compile Telodendria / Compile Telodendria (x86_64, openbsd-v7.4) (push) Has been cancelled
2024-09-14 20:00:32 +02:00
LDA
0d7f472a24 [FIX] Count in the 'redacts' field 2024-09-14 17:43:23 +02:00
6 changed files with 20 additions and 9 deletions

View file

@ -45,6 +45,9 @@
"state_key": {
"type": "string"
},
"redacts": {
"type": "string"
},
"type": {
"type": "string",
"required": true

View file

@ -67,6 +67,7 @@
"origin_server_ts": { "type": "integer", "required": true },
"sender": { "type": "string", "required": true },
"state_key": { "type": "string" },
"redacts": { "type": "string" },
"type": { "type": "string", "required": true }
},
"type": "struct"

View file

@ -618,12 +618,13 @@ RoomLeave(Room *room, User *user, char **errp)
return ret;
}
char *
RoomRedact(Room *room, User *user, char *eventID, char **errp)
RoomRedact(Room *room, User *user, char *eventID, char *reason, char **errp)
{
CommonID *userId = NULL;
char *userString = NULL;
char *server = NULL;
HashMap *event = NULL;
HashMap *content = NULL;
HashMap *pdu = NULL;
char *ret = NULL;
@ -657,9 +658,11 @@ RoomRedact(Room *room, User *user, char *eventID, char **errp)
goto end;
}
content = HashMapCreate();
HashMapSet(content, "reason", JsonValueString(reason));
event = RoomEventCreate(userString,
"m.room.redaction", NULL,
HashMapCreate()
content
);
HashMapSet(event, "redacts", JsonValueString(eventID));
pdu = RoomEventSend(room, event, errp);
@ -761,7 +764,7 @@ RoomEventClientify(HashMap *pdu)
CopyField("type", true);
CopyField("state_key",false);
CopyField("unsigned", false);
CopyField("redacts", false);
return event;

View file

@ -56,6 +56,8 @@ EventFitsV1(PduV1 pdu)
JsonFree(hm);
return ret;
}
/* TODO: Rejection */
static PduV1Status
RoomGetEventStatusV1(Room *room, PduV1 *pdu, State *prev, bool client, char **errp)
{
@ -79,17 +81,17 @@ RoomGetEventStatusV1(Room *room, PduV1 *pdu, State *prev, bool client, char **er
}
if (!RoomAuthoriseEventV1(room, *pdu, prev, errp))
{
/* Reject this event as the current state does not allow it.
* TODO: Make the auth check function return a string showing the
* errorr status to the user. */
/* Reject this event as the PDU's own state does not allow it. */
return PDUV1_STATUS_DROPPED;
}
if (!client)
{
/* Checking for soft-failure is not that useful in that case,
* we're only doing pointless computation. */
State *current = StateCurrent(room);
if (!RoomAuthoriseEventV1(room, *pdu, current, NULL))
if (!RoomAuthoriseEventV1(room, *pdu, current, errp))
{
StateFree(current);
return PDUV1_STATUS_SOFTFAIL;

View file

@ -57,6 +57,7 @@ ROUTE_IMPL(RouteRedact, path, argp)
char *transId = ArrayGet(path, 2);
char *redactId = NULL;
char *sender = NULL;
char *reason = NULL;
Room *room = NULL;
@ -97,6 +98,7 @@ ROUTE_IMPL(RouteRedact, path, argp)
response = MatrixErrorCreate(M_NOT_JSON, NULL);
goto finish;
}
reason = JsonValueAsString(HashMapGet(request, "reason"));
user = UserAuthenticate(db, token);
if (!user)
@ -123,7 +125,7 @@ ROUTE_IMPL(RouteRedact, path, argp)
goto finish;
}
if (!(redactId = RoomRedact(room, user, eventId, &err)))
if (!(redactId = RoomRedact(room, user, eventId, reason, &err)))
{
HttpResponseStatus(args->context, HTTP_UNAUTHORIZED);
response = MatrixErrorCreate(M_FORBIDDEN, err);

View file

@ -234,7 +234,7 @@ extern bool RoomCanJoin(Room *, char *);
/**
* Makes a local user redact an event(from it's ID).
*/
extern char * RoomRedact(Room *, User *, char *, char **);
extern char * RoomRedact(Room *, User *, char *, char *, char **);
/**
* Makes a local user join a room, and returns true if