Friendica Core
Simplified the proxy mechanism. The proxy cache directory (/proxy) can now be removed [annando]
DFRN is now always handled with the Diaspora transport layer. The legacy DFRN transport layer is removed [annando]
+ Legacy OAuth server is removed [annando]
Version 2021.07 (2021-07-04)
Friendica Core
- POST api/friendships/destroy
- GET api/friends/ids
- GET/POST api/help/test
-- POST api/oauth/access_token
-- POST api/oauth/request_token
- GET api/search
- GET api/statuses/show/:id
- POST api/statuses/destroy/:id
- blocks/exists
- blocks/blocking
- oauth/authorize
+- oauth/access_token
+- oauth/request_token
- statusnet/groups/timeline
- statusnet/groups/show
- statusnet/groups/create
- [`POST /api/v1/notifications/clear`](https://docs.joinmastodon.org/methods/notifications/)
- [`POST /api/v1/notifications/:id/dismiss`](https://docs.joinmastodon.org/methods/notifications/)
- [`GET /api/v1/preferences`](https://docs.joinmastodon.org/methods/accounts/preferences/)
+- [`GET /api/v1/search`](https://docs.joinmastodon.org/methods/search/)
- [`POST /api/v1/statuses`](https://docs.joinmastodon.org/methods/statuses/)
- [`GET /api/v1/statuses/:id`](https://docs.joinmastodon.org/methods/statuses/)
- [`DELETE /api/v1/statuses/:id`](https://docs.joinmastodon.org/methods/statuses/)
+- [`GET /api/v1/statuses/:id/card`](https://docs.joinmastodon.org/methods/statuses/)
- [`GET /api/v1/statuses/:id/context`](https://docs.joinmastodon.org/methods/statuses/)
- [`GET /api/v1/statuses/:id/reblogged_by`](https://docs.joinmastodon.org/methods/statuses/)
- [`GET /api/v1/statuses/:id/favourited_by`](https://docs.joinmastodon.org/methods/statuses/)
Hook::callAll('jot_tool', $jotplugins);
-### src/Network/FKOAuth1.php
-
- Hook::callAll('logged_in', $a->user);
-
### src/Render/FriendicaSmartyEngine.php
Hook::callAll("template_vars", $arr);
### Authentication
-Friendica supports basic HTTP Auth and OAuth 1 to authenticate the user to the APIs.
-
-OAuth settings can be added by the user in web UI under [/settings/oauth/](/settings/oauth/).
+Friendica supports basic HTTP Auth and OAuth to authenticate the user to the APIs.
### Errors
}
/**
- * Log in user via OAuth1 or Simple HTTP Auth.
+ * Log in user via Simple HTTP Auth.
* Simple Auth allow username in form of <pre>user@server</pre>, ignoring server part
*
* @param App $a App
'offset' => 0, // Offset in search results. Used for pagination. Defaults to 0.
'following' => false, // Only include accounts that the user is following. Defaults to false.
]);
-
+
if (empty($request['q'])) {
DI::mstdnError()->UnprocessableEntity();
}
$result['statuses'] = self::searchStatuses($uid, $request['q'], $request['account_id'], $request['max_id'], $request['min_id'], $limit, $request['offset']);
}
if ((empty($request['type']) || ($request['type'] == 'hashtags')) && (strpos($request['q'], '@') == false)) {
- $result['hashtags'] = self::searchHashtags($request['q'], $request['exclude_unreviewed'], $limit, $request['offset']);
+ $result['hashtags'] = self::searchHashtags($request['q'], $request['exclude_unreviewed'], $limit, $request['offset'], $parameters['version']);
}
System::jsonExit($result);
return $statuses;
}
- private static function searchHashtags(string $q, bool $exclude_unreviewed, int $limit, int $offset)
+ private static function searchHashtags(string $q, bool $exclude_unreviewed, int $limit, int $offset, int $version)
{
$q = ltrim($q, '#');
$hashtags = [];
foreach ($tags as $tag) {
- $hashtags[] = new \Friendica\Object\Api\Mastodon\Tag(DI::baseUrl(), $tag);
+ if ($version == 1) {
+ $hashtags[] = $tag['name'];
+ } else {
+ $hashtags[] = new \Friendica\Object\Api\Mastodon\Tag(DI::baseUrl(), $tag);
+ }
}
return $hashtags;
--- /dev/null
+<?php
+/**
+ * @copyright Copyright (C) 2010-2021, the Friendica project
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Friendica\Module\Api\Mastodon\Statuses;
+
+use Friendica\Core\System;
+use Friendica\Database\DBA;
+use Friendica\DI;
+use Friendica\Model\Post;
+use Friendica\Module\BaseApi;
+
+/**
+ * @see https://docs.joinmastodon.org/methods/statuses/
+ */
+class Card extends BaseApi
+{
+ /**
+ * @param array $parameters
+ * @throws \Friendica\Network\HTTPException\InternalServerErrorException
+ */
+ public static function rawContent(array $parameters = [])
+ {
+ $uid = self::getCurrentUserID();
+
+ if (empty($parameters['id'])) {
+ DI::mstdnError()->UnprocessableEntity();
+ }
+
+ $request = self::getRequest([
+ 'limit' => 40, // Maximum number of results to return. Defaults to 40.
+ ]);
+
+ $id = $parameters['id'];
+
+ $card = DI::mstdnCard()->createFromUriId($id);
+
+ System::jsonExit($card->toArray());
+ }
+}
'/scheduled_statuses/{id:\d+}' => [Module\Api\Mastodon\Unimplemented::class, [R::GET, R::PUT, R::DELETE]], // not supported
'/statuses' => [Module\Api\Mastodon\Statuses::class, [ R::POST]],
'/statuses/{id:\d+}' => [Module\Api\Mastodon\Statuses::class, [R::GET, R::DELETE]],
+ '/statuses/{id:\d+}/card' => [Module\Api\Mastodon\Statuses\Card::class, [R::GET ]],
'/statuses/{id:\d+}/context' => [Module\Api\Mastodon\Statuses\Context::class, [R::GET ]],
'/statuses/{id:\d+}/reblogged_by' => [Module\Api\Mastodon\Statuses\RebloggedBy::class, [R::GET ]],
'/statuses/{id:\d+}/favourited_by' => [Module\Api\Mastodon\Statuses\FavouritedBy::class, [R::GET ]],
'/timelines/tag/{hashtag}' => [Module\Api\Mastodon\Timelines\Tag::class, [R::GET ]],
'/trends' => [Module\Api\Mastodon\Trends::class, [R::GET ]],
],
- '/v2' => [
+ '/v{version:\d+}' => [
'/search' => [Module\Api\Mastodon\Search::class, [R::GET ]],
],
'/friendica' => [
+++ /dev/null
-
-<h1>{{$title}}</h1>
-
-<p>{{$info}}</p>
-<code>{{$code}}</code>
+++ /dev/null
-
-<h1>{{$title}}</h1>
-
-<form method="POST">
-<input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
-
-{{include file="field_input.tpl" field=$name}}
-{{include file="field_input.tpl" field=$key}}
-{{include file="field_input.tpl" field=$secret}}
-{{include file="field_input.tpl" field=$redirect}}
-{{include file="field_input.tpl" field=$icon}}
-
-<div class="settings-submit-wrapper">
-<input type="submit" name="submit" class="settings-submit" value="{{$submit}}" />
-<!-- <input type="submit" name="cancel" class="settings-submit" value="{{$cancel}}" /> -->
-</div>
-
-</form>
+++ /dev/null
-<div class="generic-page-wrapper">
-<h2 class="heading">{{$title}}</h2>
-
-<form method="POST">
- <input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
-
- {{include file="field_input.tpl" field=$name}}
- {{include file="field_input.tpl" field=$key}}
- {{include file="field_input.tpl" field=$secret}}
- {{include file="field_input.tpl" field=$redirect}}
- {{include file="field_input.tpl" field=$icon}}
-
- <div class="form-group pull-right settings-submit-wrapper">
- <button type="submit" name="submit" class="btn btn-primary" value="{{$submit}}">{{$submit}}</button>
- </div>
- <div class="clear"></div>
-
-</form>
-</div>
\ No newline at end of file