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.
257 lines
4.4 KiB
C
257 lines
4.4 KiB
C
#pragma once
|
|
|
|
#include "json/layout.h"
|
|
|
|
#include "object/context.h"
|
|
#include "object/tag.h"
|
|
|
|
#include <time.h>
|
|
|
|
// Reference: https://www.w3.org/TR/activitystreams-vocabulary/
|
|
// TODO: rename this to ap_object, as this is really an Object base and not an Activity base
|
|
struct ap_object;
|
|
#define ap_activity ap_object
|
|
|
|
struct ap_activity_source
|
|
{
|
|
char* mime_type;
|
|
char* content;
|
|
|
|
// TODO: add map;
|
|
};
|
|
|
|
enum ap_signature_type
|
|
{
|
|
apst_rsa_signature_2017 = 1,
|
|
};
|
|
|
|
struct ap_signature
|
|
{
|
|
int type;
|
|
char* creator;
|
|
time_t created;
|
|
char* value;
|
|
};
|
|
|
|
enum ap_object_type
|
|
{
|
|
// Activity Types
|
|
ap_Undo = 1,
|
|
ap_Follow = 2,
|
|
ap_Delete = 3,
|
|
ap_Accept = 4,
|
|
ap_Create = 5,
|
|
ap_TentativeAccept = 6,
|
|
ap_Add = 7,
|
|
ap_Arrive = 8,
|
|
ap_Ignore = 9,
|
|
ap_Join = 10,
|
|
ap_Leave = 11,
|
|
ap_Like = 12,
|
|
ap_Offer = 13,
|
|
ap_Invite = 14,
|
|
ap_Reject = 15,
|
|
ap_TentativeReject = 16,
|
|
ap_Remove = 17,
|
|
ap_Update = 18,
|
|
ap_View = 19,
|
|
ap_Listen = 20,
|
|
ap_Read = 21,
|
|
ap_Move = 22,
|
|
ap_Travel = 23,
|
|
ap_Announce = 24,
|
|
ap_Block = 25,
|
|
ap_Flag = 26,
|
|
ap_Dislike = 27,
|
|
|
|
// Object Types
|
|
ap_Note = 100,
|
|
ap_Question = 101,
|
|
ap_Article = 102,
|
|
ap_Audio = 103,
|
|
ap_Document = 104,
|
|
ap_Event = 105,
|
|
ap_Image = 106,
|
|
ap_Page = 107,
|
|
ap_Place = 108,
|
|
ap_Profile = 109,
|
|
ap_Relationship = 110,
|
|
ap_Tombstone = 111,
|
|
ap_Video = 112,
|
|
|
|
// Actor Types
|
|
ap_Person = 200,
|
|
ap_Service = 201,
|
|
ap_Application = 202,
|
|
ap_Group = 203,
|
|
ap_Organization = 204,
|
|
|
|
// Collection Types
|
|
ap_OrderedCollection = 301,
|
|
ap_OrderedCollectionPage = 302,
|
|
ap_Collection = 303,
|
|
ap_CollectionPage = 304,
|
|
|
|
/// Pleroma Types
|
|
pleroma_EmojiReact = 28,
|
|
|
|
/// Musicbox Types
|
|
mb_Track = 501,
|
|
mb_Album = 502,
|
|
|
|
/// Forge Types (https://forgefed.org/vocabulary.html)
|
|
forge_Grant = 601,
|
|
forge_Push = 602,
|
|
forge_Repository = 603,
|
|
forge_TicketTracker = 604,
|
|
forge_PatchTracker = 605,
|
|
forge_Project = 606,
|
|
forge_Team = 607,
|
|
forge_Branch = 608,
|
|
forge_Commit = 609,
|
|
forge_TicketDependency = 610,
|
|
forge_Ticket = 611,
|
|
|
|
/// Schema.org types
|
|
schema_PropertyValue = 401, // https://schema.org/PropertyValue
|
|
};
|
|
extern struct json_enum ap_object_type_enum[];
|
|
|
|
enum ap_activity_object_type {
|
|
apaot_ref = 1,
|
|
apaot_activity = 2,
|
|
apaot_object = 2,
|
|
};
|
|
|
|
struct ap_attachment
|
|
{
|
|
int type;
|
|
char* mediaType;
|
|
char* name;
|
|
char* url;
|
|
char* value;
|
|
};
|
|
void ap_attachment_free( struct ap_attachment* a );
|
|
extern struct json_field_type ap_attachment_type;
|
|
|
|
struct ap_object_ptr_or_ref
|
|
{
|
|
int tag;
|
|
union {
|
|
char* ref;
|
|
struct ap_object* ptr;
|
|
};
|
|
};
|
|
struct ap_public_key
|
|
{
|
|
char* id;
|
|
char* owner;
|
|
char* public_key;
|
|
};
|
|
void ap_object_ptr_or_ref_free( struct ap_object_ptr_or_ref* oor );
|
|
void ap_object_ptr_or_ref_free_composite( struct ap_object_ptr_or_ref* oor );
|
|
|
|
struct ap_object
|
|
{
|
|
struct ap_activity_context ap_context;
|
|
|
|
char* id;
|
|
char* actor;
|
|
char* name;
|
|
int local_id;
|
|
int type;
|
|
|
|
// Actor-specific fields
|
|
char* inbox;
|
|
char* outbox;
|
|
char* preferred_username;
|
|
char* url;
|
|
struct {
|
|
char* shared_inbox;
|
|
} endpoints;
|
|
char* featured;
|
|
char* followers;
|
|
char* following;
|
|
struct {
|
|
bool show;
|
|
bool accepts_chat_messages;
|
|
} capabilities;
|
|
char* avatar;
|
|
char* banner;
|
|
bool discoverable;
|
|
bool manually_approves_followers;
|
|
struct ap_public_key* public_key;
|
|
|
|
char* context;
|
|
int context_id;
|
|
|
|
bool direct_message;
|
|
|
|
char* attributed_to;
|
|
char* target;
|
|
char* in_reply_to;
|
|
|
|
struct ap_activity_source content;
|
|
|
|
char* conversation;
|
|
time_t published;
|
|
struct ap_activity_source source;
|
|
|
|
char* summary;
|
|
|
|
bool sensitive;
|
|
|
|
struct {
|
|
struct ap_activity_tag** items;
|
|
int count;
|
|
} tags;
|
|
|
|
struct {
|
|
struct ap_attachment** items;
|
|
int count;
|
|
} attachments;
|
|
|
|
struct {
|
|
char** items;
|
|
int count;
|
|
} also_known_as;
|
|
|
|
struct {
|
|
struct ap_object_ptr_or_ref* items;
|
|
int count;
|
|
} collection_items;
|
|
|
|
struct {
|
|
char** items;
|
|
int count;
|
|
} to, cc, bcc;
|
|
|
|
struct ap_object_ptr_or_ref object;
|
|
|
|
char* state;
|
|
|
|
int has_signature;
|
|
struct ap_signature signature;
|
|
|
|
// Collection fields
|
|
struct ap_object_ptr_or_ref first;
|
|
char* next;
|
|
char* prev;
|
|
char* part_of;
|
|
int total_items;
|
|
};
|
|
|
|
struct json_object_field;
|
|
extern struct json_field_type ap_object_type;
|
|
extern struct json_object_field ap_object_layout[];
|
|
|
|
struct ap_object* ap_activity_new();
|
|
struct ap_object* ap_activity_dup( struct ap_object* o );
|
|
struct ap_object* ap_object_from_FILE( FILE* f );
|
|
struct ap_object* ap_object_from_file( const char* filename );
|
|
void ap_object_free( struct ap_object* o );
|
|
void ap_activity_free_composite( struct ap_object* o );
|
|
|
|
void ap_object_write_to_FILE( struct ap_object* o, FILE* f );
|
|
|