#include "follow.h" // Submodules #include "ap/object.h" // Model #include "model/activity.h" #include "model/account.h" #include "model/server.h" // Standard Library #include bool route_follow( struct ap_object* act ) { struct account* follower = NULL; bool res = false; const char* target = act->object.ref; struct account* a = account_from_uri( target ); // Don't process follows for remote users if( !a || 0 != strcmp( a->server, g_server->domain ) ) { printf( "Unfollow not targeted at local account. Discarding.\n" ); goto success; } // Get account for the follower follower = account_from_uri( act->actor ); if( !follower ) { follower = account_fetch_from_uri( act->actor ); } if( follower->id == owner_account_id ) { // Something went wrong, bail goto failed; } if( !follower ) { printf( "Unable to fetch account for %s\n", act->actor ); goto failed; } // Add the follower account_add_follower( a, follower ); // Create Accept activity activity_accept( act, follower->id ); goto success; success: res = true; goto cleanup; cleanup: account_free(a); account_free(follower); return res; failed: res = false; goto cleanup; }