You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.2 KiB
C
59 lines
1.2 KiB
C
#include "forward.h"
|
|
|
|
#include "http/server/request.h"
|
|
#include "ap/object.h"
|
|
|
|
#include "model/account.h"
|
|
#include "model/activity.h"
|
|
#include "model/inbox_envelope.h"
|
|
|
|
#include "controller/api/client_apps.h"
|
|
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
bool handle_forward( struct ap_envelope* env, struct ap_object* act )
|
|
{
|
|
char* authentication = NULL;
|
|
struct account* a = NULL;
|
|
bool result = false;
|
|
|
|
for( int i = 0; i < env->headers.count; ++i ) {
|
|
char* key = env->headers.items[i].key;
|
|
char* value = env->headers.items[i].value;
|
|
if( 0 == strcasecmp( "Authentication", key ) ) {
|
|
free(authentication);
|
|
authentication = strdup(value);
|
|
}
|
|
}
|
|
|
|
// Make sure this action is allowed
|
|
if( !authentication ) { return false; }
|
|
if( !check_bearer_token( authentication ) ) { goto failed; }
|
|
a = account_from_uri( act->actor );
|
|
if( !a->local ) { goto failed; };
|
|
|
|
// Save to disk
|
|
activity_allocate_local_id(act);
|
|
activity_save(act);
|
|
|
|
// Debug
|
|
printf( "Forwarding activity. act=" );
|
|
ap_object_write_to_FILE( act, stdout );
|
|
|
|
// TODO: try to inject to create a status
|
|
|
|
// Deliver activity
|
|
activity_deliver( act );
|
|
|
|
goto failed;
|
|
cleanup:
|
|
account_free(a);
|
|
free(authentication);
|
|
return result;
|
|
failed:
|
|
result = false;
|
|
goto cleanup;
|
|
}
|
|
|