<?php
/**
- * @file include/api.php
* Friendica implementation of statusnet/twitter API
*
+ * @file include/api.php
* @todo Automatically detect if incoming data is HTML or BBCode
*/
use Friendica\App;
$called_api = null;
/**
- * @brief Auth API user
- *
* It is not sufficient to use local_user() to check whether someone is allowed to use the API,
* because this will open CSRF holes (just embed an image with src=friendicasite.com/api/statuses/update?status=CSRF
* into a page, and visitors will post something without noticing it).
+ *
+ * @brief Auth API user
*/
function api_user()
{
}
/**
- * @brief Get source name from API client
- *
* Clients can send 'source' parameter to be show in post metadata
* as "sent via <source>".
* Some clients doesn't send a source param, we support ones we know
* (only Twidere, atm)
*
+ * @brief Get source name from API client
+ *
* @return string
* Client source name, default to "api" if unset/unknown
*/
}
/**
- * @brief Register API endpoint
+ * Register a function to be the endpoint for defined API path.
*
- * Register a function to be the endpont for defined API path.
+ * @brief Register API endpoint
*
* @param string $path API URL path, relative to System::baseUrl()
* @param string $func Function name to call on path request
}
/**
- * @brief Login API user
- *
* Log in user via OAuth1 or Simple HTTP Auth.
* Simple Auth allow username in form of <pre>user@server</pre>, ignoring server part
*
+ * @brief Login API user
+ *
* @param object $a App
* @hook 'authenticate'
* array $addon_auth
}
/**
- * @brief Check HTTP method of called API
- *
* API endpoints can define which HTTP method to accept when called.
* This function check the current HTTP method agains endpoint
* registered method.
*
+ * @brief Check HTTP method of called API
+ *
* @param string $method Required methods, uppercase, separated by comma
* @return bool
*/
}
/**
- * @brief Main API entry point
- *
* Authenticate user, call registered API function, set HTTP headers
*
+ * @brief Main API entry point
+ *
* @param object $a App
* @return string API call result
*/
/**
* Returns an HTTP 200 OK response code and a representation of the requesting user if authentication was successful;
* returns a 401 status code and an error message if not.
- * http://developer.twitter.com/doc/get/account/verify_credentials
+ * @see https://developer.twitter.com/en/docs/accounts-and-users/manage-account-settings/api-reference/get-account-verify_credentials
+ *
+ * @param string $type Return type (atom, rss, xml, json)
*/
function api_account_verify_credentials($type)
{
/**
* Get data from $_POST or $_GET
+ *
+ * @param string $k
*/
function requestdata($k)
{
return null;
}
-/*Waitman Gobble Mod*/
+/**
+ * Waitman Gobble Mod
+ *
+ * @param string $type Return type (atom, rss, xml, json)
+ *
+ * @return array|string
+ */
function api_statuses_mediap($type)
{
$a = get_app();
/// @TODO move this to top of file or somewhere better!
api_register_func('api/statuses/mediap', 'api_statuses_mediap', true, API_METHOD_POST);
+/**
+ * Updates the user’s current status.
+ *
+ * @param string $type Return type (atom, rss, xml, json)
+ *
+ * @return array|string
+ * @see https://developer.twitter.com/en/docs/tweets/post-and-engage/api-reference/post-statuses-update
+ */
function api_statuses_update($type)
{
api_register_func('api/statuses/update', 'api_statuses_update', true, API_METHOD_POST);
api_register_func('api/statuses/update_with_media', 'api_statuses_update', true, API_METHOD_POST);
+/**
+ * Uploads an image to Friendica.
+ *
+ * @param string $type Return type (atom, rss, xml, json)
+ *
+ * @return array
+ * @see https://developer.twitter.com/en/docs/media/upload-media/api-reference/post-media-upload
+ */
function api_media_upload($type)
{
$a = get_app();
/// @TODO move to top of file or somwhere better
api_register_func('api/media/upload', 'api_media_upload', true, API_METHOD_POST);
+/**
+ *
+ * @param string $type Return type (atom, rss, xml, json)
+ *
+ * @return array|string
+ */
function api_status_show($type)
{
$a = get_app();
/**
* Returns extended information of a given user, specified by ID or screen name as per the required id parameter.
* The author's most recent status will be returned inline.
- * http://developer.twitter.com/doc/get/users/show
+ *
+ * @param string $type Return type (atom, rss, xml, json)
+ * @see https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-users-show
*/
function api_users_show($type)
{
api_register_func('api/users/show', 'api_users_show');
api_register_func('api/externalprofile/show', 'api_users_show');
+/**
+ * Search a public user account.
+ *
+ * @param string $type Return type (atom, rss, xml, json)
+ *
+ * @return array|string
+ * @see https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-users-search
+ */
function api_users_search($type)
{
$a = get_app();
api_register_func('api/search', 'api_search', true);
/**
+ * Returns the most recent statuses posted by the user and the users they follow.
+ *
+ * @see https://developer.twitter.com/en/docs/tweets/timelines/api-reference/get-statuses-home_timeline
*
- * http://developer.twitter.com/doc/get/statuses/home_timeline
+ * @param string $type Return type (atom, rss, xml, json)
*
- * TODO: Optional parameters
- * TODO: Add reply info
+ * @todo Optional parameters
+ * @todo Add reply info
*/
function api_statuses_home_timeline($type)
{
api_register_func('api/statuses/home_timeline', 'api_statuses_home_timeline', true);
api_register_func('api/statuses/friends_timeline', 'api_statuses_home_timeline', true);
+/**
+ * Returns the most recent statuses from public users.
+ *
+ * @param string $type Return type (atom, rss, xml, json)
+ *
+ * @return array|string
+ */
function api_statuses_public_timeline($type)
{
$a = get_app();
api_register_func('api/statuses/public_timeline', 'api_statuses_public_timeline', true);
/**
+ * Returns the most recent statuses posted by users this node knows about.
+ *
* @brief Returns the list of public federated posts this node knows about
*
* @param string $type Return format: json, xml, atom, rss
api_register_func('api/statuses/networkpublic_timeline', 'api_statuses_networkpublic_timeline', true);
/**
- * @TODO nothing to say?
+ * Returns a single status.
+ *
+ * @param string $type Return type (atom, rss, xml, json)
+ *
+ * @see https://developer.twitter.com/en/docs/tweets/post-and-engage/api-reference/get-statuses-show-id
*/
function api_statuses_show($type)
{
api_register_func('api/statuses/show', 'api_statuses_show', true);
/**
- * @TODO nothing to say?
+ *
+ * @param string $type Return type (atom, rss, xml, json)
+ *
+ * @todo nothing to say?
*/
function api_conversation_show($type)
{
api_register_func('api/statusnet/conversation', 'api_conversation_show', true);
/**
- * @TODO nothing to say?
+ * Repeats a status.
+ *
+ * @param string $type Return type (atom, rss, xml, json)
+ *
+ * @see https://developer.twitter.com/en/docs/tweets/post-and-engage/api-reference/post-statuses-retweet-id
*/
function api_statuses_repeat($type)
{
api_register_func('api/statuses/retweet', 'api_statuses_repeat', true, API_METHOD_POST);
/**
- * @TODO nothing to say?
+ * Destroys a specific status.
+ *
+ * @param string $type Return type (atom, rss, xml, json)
+ *
+ * @see https://developer.twitter.com/en/docs/tweets/post-and-engage/api-reference/post-statuses-destroy-id
*/
function api_statuses_destroy($type)
{
api_register_func('api/statuses/destroy', 'api_statuses_destroy', true, API_METHOD_DELETE);
/**
- * @TODO Nothing more than an URL to say?
- * http://developer.twitter.com/doc/get/statuses/mentions
+ * Returns the most recent mentions.
+ *
+ * @param string $type Return type (atom, rss, xml, json)
+ *
+ * @see http://developer.twitter.com/doc/get/statuses/mentions
*/
function api_statuses_mentions($type)
{
api_register_func('api/statuses/replies', 'api_statuses_mentions', true);
/**
+ * Returns the most recent statuses posted by the user.
+ *
* @brief Returns a user's public timeline
*
* @param string $type Either "json" or "xml"
* @return string|array
* @throws ForbiddenException
+ * @see https://developer.twitter.com/en/docs/tweets/timelines/api-reference/get-statuses-user_timeline
*/
function api_statuses_user_timeline($type)
{
api_register_func('api/statuses/user_timeline', 'api_statuses_user_timeline', true);
/**
- * Star/unstar an item
+ * Star/unstar an item.
* param: id : id of the item
*
- * api v1 : https://web.archive.org/web/20131019055350/https://dev.twitter.com/docs/api/1/post/favorites/create/%3Aid
+ * @param string $type Return type (atom, rss, xml, json)
+ *
+ * @see https://web.archive.org/web/20131019055350/https://dev.twitter.com/docs/api/1/post/favorites/create/%3Aid
*/
function api_favorites_create_destroy($type)
{
api_register_func('api/favorites/create', 'api_favorites_create_destroy', true, API_METHOD_POST);
api_register_func('api/favorites/destroy', 'api_favorites_create_destroy', true, API_METHOD_DELETE);
+/**
+ * Returns the most recent favorite statuses.
+ *
+ * @param string $type Return type (atom, rss, xml, json)
+ *
+ * @return string|array
+ */
function api_favorites($type)
{
global $called_api;
/// @TODO move to top of file or somwhere better
api_register_func('api/favorites', 'api_favorites', true);
+/**
+ *
+ * @param array $item
+ * @param array $recipient
+ * @param array $sender
+ *
+ * @return array
+ */
function api_format_messages($item, $recipient, $sender)
{
// standard meta information
return $ret;
}
+/**
+ *
+ * @param array $item
+ *
+ * @return array
+ */
function api_convert_item($item)
{
$body = $item['body'];
);
}
+/**
+ *
+ * @param string $body
+ *
+ * @return array
+ */
function api_get_attachments(&$body)
{
$text = $body;
return $attachments;
}
+/**
+ *
+ * @param string $text
+ * @param string $bbcode
+ *
+ * @return array
+ * @todo Links at the first character of the post
+ */
function api_get_entitities(&$text, $bbcode)
{
- /*
- To-Do:
- * Links at the first character of the post
- */
-
$a = get_app();
$include_entities = strtolower(x($_REQUEST, 'include_entities') ? $_REQUEST['include_entities'] : "false");
return $entities;
}
+
+/**
+ *
+ * @param array $item
+ * @param string $text
+ *
+ * @return string
+ */
function api_format_items_embeded_images(&$item, $text)
{
$text = preg_replace_callback(
*
* @param string $txt text
* @return array
- * name => 'name'
+ * 'name' => 'name',
* 'url => 'url'
*/
function api_contactlink_to_array($txt)
* @brief return likes, dislikes and attend status for item
*
* @param array $item array
+ * @param string $type Return type (atom, rss, xml, json)
+ *
* @return array
- * likes => int count
+ * likes => int count,
* dislikes => int count
*/
function api_format_items_activities(&$item, $type = "json")
/**
* @brief format items to be returned by api
*
- * @param array $r array of items
- * @param array $user_info
- * @param bool $filter_user filter items by $user_info
+ * @param array $r array of items
+ * @param array $user_info
+ * @param bool $filter_user filter items by $user_info
+ * @param string $type Return type (atom, rss, xml, json)
*/
function api_format_items($r, $user_info, $filter_user = false, $type = "json")
{
return $ret;
}
+/**
+ * Returns the remaining number of API requests available to the user before the API limit is reached.
+ *
+ * @param string $type Return type (atom, rss, xml, json)
+ *
+ * @return array|string
+ */
function api_account_rate_limit_status($type)
{
if ($type == "xml") {
/// @TODO move to top of file or somwhere better
api_register_func('api/account/rate_limit_status', 'api_account_rate_limit_status', true);
+/**
+ * Returns the string "ok" in the requested format with a 200 OK HTTP status code.
+ *
+ * @param string $type Return type (atom, rss, xml, json)
+ *
+ * @return array|string
+ */
function api_help_test($type)
{
if ($type == 'xml') {
/// @TODO move to top of file or somwhere better
api_register_func('api/help/test', 'api_help_test', false);
+/**
+ *
+ * @param string $type Return type (atom, rss, xml, json)
+ *
+ * @return array|string
+ */
function api_lists($type)
{
$ret = array();
/// @TODO move to top of file or somwhere better
api_register_func('api/lists', 'api_lists', true);
+/**
+ * Returns all lists the user subscribes to.
+ *
+ * @param string $type Return type (atom, rss, xml, json)
+ *
+ * @return array|string
+ * @see https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/get-lists-list
+ */
function api_lists_list($type)
{
$ret = array();
api_register_func('api/lists/list', 'api_lists_list', true);
/**
- * @brief Returns either the friends of the follower list
- *
- * Note: Considers friends and followers lists to be private and won't return
+ * Considers friends and followers lists to be private and won't return
* anything if any user_id parameter is passed.
*
+ * @brief Returns either the friends of the follower list
+ *
* @param string $qtype Either "friends" or "followers"
* @return boolean|array
* @throws ForbiddenException
/**
+ * Returns the user's friends.
+ *
* @brief Returns the list of friends of the provided user
*
* @deprecated By Twitter API in favor of friends/list
}
/**
- * @brief Returns the list of friends of the provided user
+ * Returns the user's followers.
+ *
+ * @brief Returns the list of followers of the provided user
*
* @deprecated By Twitter API in favor of friends/list
*
/// @TODO move to top of file or somewhere better
api_register_func('api/friendships/incoming', 'api_friendships_incoming', true);
+/**
+ * Returns the instance's configuration information.
+ *
+ * @param string $type Return type (atom, rss, xml, json)
+ *
+ * @return array|string
+ */
function api_statusnet_config($type)
{
$a = get_app();
api_register_func('api/gnusocial/config', 'api_statusnet_config', false);
api_register_func('api/statusnet/config', 'api_statusnet_config', false);
+/**
+ *
+ * @param string $type Return type (atom, rss, xml, json)
+ *
+ * @return array|string
+ */
function api_statusnet_version($type)
{
// liar
api_register_func('api/statusnet/version', 'api_statusnet_version', false);
/**
+ *
+ * @param string $type Return type (atom, rss, xml, json)
+ * @param string $qtype
+ *
* @todo use api_format_data() to return data
*/
function api_ff_ids($type, $qtype)
return api_format_data("ids", $type, array('id' => $ids));
}
+/**
+ * Returns the ID of every user the user is following.
+ *
+ * @param string $type Return type (atom, rss, xml, json)
+ *
+ * @return array|string
+ * @see https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-friends-ids
+ */
function api_friends_ids($type)
{
return api_ff_ids($type, 'friends');
}
+/**
+ * Returns the ID of every user following the user.
+ *
+ * @param string $type Return type (atom, rss, xml, json)
+ *
+ * @return array|string
+ * @see https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-followers-ids
+ */
function api_followers_ids($type)
{
return api_ff_ids($type, 'followers');
api_register_func('api/friends/ids', 'api_friends_ids', true);
api_register_func('api/followers/ids', 'api_followers_ids', true);
+/**
+ * Sends a new direct message.
+ *
+ * @param string $type Return type (atom, rss, xml, json)
+ *
+ * @return array|string
+ * @see https://developer.twitter.com/en/docs/direct-messages/sending-and-receiving/api-reference/new-message
+ */
function api_direct_messages_new($type)
{
api_register_func('api/direct_messages/new', 'api_direct_messages_new', true, API_METHOD_POST);
/**
+ * Destroys a direct message.
+ *
* @brief delete a direct_message from mail table through api
*
* @param string $type Known types are 'atom', 'rss', 'xml' and 'json'
* @return string
+ * @see https://developer.twitter.com/en/docs/direct-messages/sending-and-receiving/api-reference/delete-message
*/
function api_direct_messages_destroy($type)
{
/// @TODO move to top of file or somewhere better
api_register_func('api/direct_messages/destroy', 'api_direct_messages_destroy', true, API_METHOD_DELETE);
+/**
+ *
+ * @param string $type Return type (atom, rss, xml, json)
+ * @param string $box
+ * @param string $verbose
+ *
+ * @return array|string
+ */
function api_direct_messages_box($type, $box, $verbose)
{
$a = get_app();
return api_format_data("direct-messages", $type, $data);
}
+/**
+ * Returns the most recent direct messages sent by the user.
+ *
+ * @param string $type Return type (atom, rss, xml, json)
+ *
+ * @return array|string
+ * @see https://developer.twitter.com/en/docs/direct-messages/sending-and-receiving/api-reference/get-sent-message
+ */
function api_direct_messages_sentbox($type)
{
$verbose = (x($_GET, 'friendica_verbose') ? strtolower($_GET['friendica_verbose']) : "false");
return api_direct_messages_box($type, "sentbox", $verbose);
}
+/**
+ * Returns the most recent direct messages sent to the user.
+ *
+ * @param string $type Return type (atom, rss, xml, json)
+ *
+ * @return array|string
+ * @see https://developer.twitter.com/en/docs/direct-messages/sending-and-receiving/api-reference/get-messages
+ */
function api_direct_messages_inbox($type)
{
$verbose = (x($_GET, 'friendica_verbose') ? strtolower($_GET['friendica_verbose']) : "false");
return api_direct_messages_box($type, "inbox", $verbose);
}
+/**
+ *
+ * @param string $type Return type (atom, rss, xml, json)
+ *
+ * @return array|string
+ */
function api_direct_messages_all($type)
{
$verbose = (x($_GET, 'friendica_verbose') ? strtolower($_GET['friendica_verbose']) : "false");
return api_direct_messages_box($type, "all", $verbose);
}
+/**
+ *
+ * @param string $type Return type (atom, rss, xml, json)
+ *
+ * @return array|string
+ */
function api_direct_messages_conversation($type)
{
$verbose = (x($_GET, 'friendica_verbose') ? strtolower($_GET['friendica_verbose']) : "false");
api_register_func('api/direct_messages/sent', 'api_direct_messages_sentbox', true);
api_register_func('api/direct_messages', 'api_direct_messages_inbox', true);
+/**
+ * Returns an OAuth Request Token.
+ *
+ * @param string $type Return type (atom, rss, xml, json)
+ * @see https://oauth.net/core/1.0/#auth_step1
+ */
function api_oauth_request_token($type)
{
$oauth1 = new FKOAuth1();
killme();
}
+/**
+ * Returns an OAuth Access Token.
+ *
+ * @param string $type Return type (atom, rss, xml, json)
+ *
+ * @return array|string
+ * @see https://oauth.net/core/1.0/#auth_step3
+ */
function api_oauth_access_token($type)
{
$oauth1 = new FKOAuth1();
/**
+ * Updates the user’s profile image.
+ *
* @brief updates the profile image for the user (either a specified profile or the default profile)
*
* @param string $type Known types are 'atom', 'rss', 'xml' and 'json'
+ *
* @return string
+ * @see https://developer.twitter.com/en/docs/accounts-and-users/manage-account-settings/api-reference/post-account-update_profile_image
*/
function api_account_update_profile_image($type)
{
api_register_func('api/friendica/photo', 'api_fr_photo_detail', true);
api_register_func('api/account/update_profile_image', 'api_account_update_profile_image', true, API_METHOD_POST);
-
+/**
+ *
+ * @param string $acl_string
+ */
function check_acl_input($acl_string)
{
if ($acl_string == null || $acl_string == " ") {
return $contact_not_found;
}
+/**
+ *
+ * @param string $mediatype
+ * @param array $media
+ * @param string $type
+ * @param string $album
+ * @param string $allow_cid
+ * @param string $deny_cid
+ * @param string $allow_gid
+ * @param string $deny_gid
+ * @param string $desc
+ * @param integer $profile
+ * @param boolean $visibility
+ * @param string $photo_id
+ */
function save_media_to_database($mediatype, $media, $type, $album, $allow_cid, $deny_cid, $allow_gid, $deny_gid, $desc, $profile = 0, $visibility = false, $photo_id = null)
{
$visitor = 0;
}
}
+/**
+ *
+ * @param string $hash
+ * @param string $allow_cid
+ * @param string $deny_cid
+ * @param string $allow_gid
+ * @param string $deny_gid
+ * @param string $filetype
+ * @param boolean $visibility
+ */
function post_photo_item($hash, $allow_cid, $deny_cid, $allow_gid, $deny_gid, $filetype, $visibility = false)
{
// get data about the api authenticated user
item_store($arr);
}
+/**
+ *
+ * @param string $type
+ * @param int $scale
+ * @param string $photo_id
+ *
+ * @return array
+ */
function prepare_photo_data($type, $scale, $photo_id)
{
$scale_sql = ($scale === false ? "" : sprintf("AND scale=%d", intval($scale)));
return $reshared_item;
}
+/**
+ *
+ * @param string $profile
+ *
+ * @return string|false
+ * @todo remove trailing junk from profile url
+ * @todo pump.io check has to check the website
+ */
function api_get_nick($profile)
{
- /* To-Do:
- - remove trailing junk from profile url
- - pump.io check has to check the website
- */
-
$nick = "";
$r = q(
return false;
}
+/**
+ *
+ * @param array $item
+ *
+ * @return array
+ */
function api_in_reply_to($item)
{
$in_reply_to = array();
return $in_reply_to;
}
+/**
+ *
+ * @param string $Text
+ *
+ * @return string
+ */
function api_clean_plain_items($Text)
{
$include_entities = strtolower(x($_REQUEST, 'include_entities') ? $_REQUEST['include_entities'] : "false");
return $body;
}
+/**
+ *
+ * @param array $contacts
+ *
+ * @return array
+ */
function api_best_nickname(&$contacts)
{
$best_contact = array();
}
}
-// return all or a specified group of the user with the containing contacts
+/**
+ * Return all or a specified group of the user with the containing contacts.
+ *
+ * @param string $type Return type (atom, rss, xml, json)
+ *
+ * @return array|string
+ */
function api_friendica_group_show($type)
{
$a = get_app();
api_register_func('api/friendica/group_show', 'api_friendica_group_show', true);
-// delete the specified group of the user
+/**
+ * Delete the specified group of the user.
+ *
+ * @param string $type Return type (atom, rss, xml, json)
+ *
+ * @return array|string
+ */
function api_friendica_group_delete($type)
{
$a = get_app();
api_register_func('api/friendica/group_delete', 'api_friendica_group_delete', true, API_METHOD_DELETE);
-// create the specified group with the posted array of contacts
+/**
+ * Create the specified group with the posted array of contacts.
+ *
+ * @param string $type Return type (atom, rss, xml, json)
+ *
+ * @return array|string
+ */
function api_friendica_group_create($type)
{
$a = get_app();
api_register_func('api/friendica/group_create', 'api_friendica_group_create', true, API_METHOD_POST);
-// update the specified group with the posted array of contacts
+/**
+ * Update the specified group with the posted array of contacts.
+ *
+ * @param string $type Return type (atom, rss, xml, json)
+ *
+ * @return array|string
+ */
function api_friendica_group_update($type)
{
$a = get_app();
api_register_func('api/friendica/group_update', 'api_friendica_group_update', true, API_METHOD_POST);
+/**
+ *
+ * @param string $type Return type (atom, rss, xml, json)
+ *
+ * @return array|string
+ */
function api_friendica_activity($type)
{
$a = get_app();
}
/**
- * @brief Set notification as seen and returns associated item (if possible)
- *
* POST request with 'id' param as notification id
*
+ * @brief Set notification as seen and returns associated item (if possible)
+ *
* @param string $type Known types are 'atom', 'rss', 'xml' and 'json'
* @return string
*/
* @brief search for direct_messages containing a searchstring through api
*
* @param string $type Known types are 'atom', 'rss', 'xml' and 'json'
- * @return string (success: success=true if found and search_result contains found messages
+ * @return string (success: success=true if found and search_result contains found messages,
* success=false if nothing was found, search_result='nothing found',
* error: result=error with error message)
*/