]> git.mxchange.org Git - friendica.git/commitdiff
Add API base module
authorHypolite Petovan <hypolite@mrpetovan.com>
Thu, 5 Dec 2019 13:12:59 +0000 (08:12 -0500)
committerHypolite Petovan <hypolite@mrpetovan.com>
Tue, 10 Dec 2019 03:50:36 +0000 (22:50 -0500)
src/Module/Base/Api.php [new file with mode: 0644]

diff --git a/src/Module/Base/Api.php b/src/Module/Base/Api.php
new file mode 100644 (file)
index 0000000..f3453e0
--- /dev/null
@@ -0,0 +1,105 @@
+<?php
+
+namespace Friendica\Module\Base;
+
+use Friendica\App\Arguments;
+use Friendica\BaseModule;
+use Friendica\Core\L10n;
+use Friendica\Network\HTTPException;
+
+require_once __DIR__ . '/../../../include/api.php';
+
+class Api extends BaseModule
+{
+       /**
+        * @var string json|xml|rss|atom
+        */
+       protected static $format = 'json';
+       /**
+        * @var bool|int
+        */
+       protected static $current_user_id;
+
+       public static function init(array $parameters = [])
+       {
+               $Arguments = self::getClass(Arguments::class);
+
+               if (substr($Arguments->getQueryString(), -4) === '.xml') {
+                       self::$format = 'xml';
+               }
+               if (substr($Arguments->getQueryString(), -4) === '.rss') {
+                       self::$format = 'rss';
+               }
+               if (substr($Arguments->getQueryString(), -4) === '.atom') {
+                       self::$format = 'atom';
+               }
+       }
+
+       public static function post(array $parameters = [])
+       {
+               if (!api_user()) {
+                       throw new HTTPException\UnauthorizedException(L10n::t('Permission denied.'));
+               }
+
+               $a = self::getApp();
+
+               if (!empty($a->user['uid']) && $a->user['uid'] != api_user()) {
+                       throw new HTTPException\ForbiddenException(L10n::t('Permission denied.'));
+               }
+       }
+
+       /**
+        * 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
+        *
+        * @throws HTTPException\ForbiddenException
+        * @throws HTTPException\UnauthorizedException
+        * @throws HTTPException\InternalServerErrorException
+        * @hook  'authenticate'
+        *               array $addon_auth
+        *               'username' => username from login form
+        *               'password' => password from login form
+        *               'authenticated' => return status,
+        *               'user_record' => return authenticated user record
+        */
+       protected static function login()
+       {
+               api_login(self::getApp());
+
+               self::$current_user_id = api_user();
+       }
+
+       /**
+        * @brief Get user info array.
+        *
+        * @param int|string $contact_id Contact ID or URL
+        * @return array|bool
+        * @throws HTTPException\BadRequestException
+        * @throws HTTPException\InternalServerErrorException
+        * @throws HTTPException\UnauthorizedException
+        * @throws \ImagickException
+        */
+       protected static function getUser($contact_id = null)
+       {
+               return api_get_user(self::getApp(), $contact_id);
+       }
+
+       protected static function format($root_element, $data)
+       {
+               switch (self::$format) {
+                       case "atom":
+                       case "rss":
+                       case "xml":
+                               $ret = api_create_xml($data, $root_element);
+                               break;
+                       case "json":
+                       default:
+                               $ret = $data;
+                               break;
+               }
+
+               return $ret;
+       }
+}