2023-04-08 04:35:51 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace App\Services;
|
|
|
|
|
|
|
|
use App\User;
|
2023-10-13 03:29:51 +00:00
|
|
|
use App\Util\Site\Nodeinfo;
|
2024-03-10 10:19:44 +00:00
|
|
|
use Illuminate\Support\Facades\Cache;
|
|
|
|
use Illuminate\Support\Str;
|
2023-04-08 04:35:51 +00:00
|
|
|
|
|
|
|
class LandingService
|
|
|
|
{
|
2024-03-10 10:19:44 +00:00
|
|
|
public static function get($json = true)
|
|
|
|
{
|
|
|
|
$activeMonth = Nodeinfo::activeUsersMonthly();
|
|
|
|
|
|
|
|
$totalUsers = Cache::remember('api:nodeinfo:users', 43200, function () {
|
|
|
|
return User::count();
|
|
|
|
});
|
|
|
|
|
2024-06-19 09:02:00 +00:00
|
|
|
$postCount = InstanceService::totalLocalStatuses();
|
2023-04-08 04:35:51 +00:00
|
|
|
|
2024-03-10 10:19:44 +00:00
|
|
|
$contactAccount = Cache::remember('api:v1:instance-data:contact', 604800, function () {
|
|
|
|
if (config_cache('instance.admin.pid')) {
|
|
|
|
return AccountService::getMastodon(config_cache('instance.admin.pid'), true);
|
|
|
|
}
|
|
|
|
$admin = User::whereIsAdmin(true)->first();
|
2023-04-08 04:35:51 +00:00
|
|
|
|
2024-03-10 10:19:44 +00:00
|
|
|
return $admin && isset($admin->profile_id) ?
|
|
|
|
AccountService::getMastodon($admin->profile_id, true) :
|
|
|
|
null;
|
|
|
|
});
|
2023-04-08 04:35:51 +00:00
|
|
|
|
2024-03-10 10:19:44 +00:00
|
|
|
$rules = Cache::remember('api:v1:instance-data:rules', 604800, function () {
|
|
|
|
return config_cache('app.rules') ?
|
|
|
|
collect(json_decode(config_cache('app.rules'), true))
|
|
|
|
->map(function ($rule, $key) {
|
|
|
|
$id = $key + 1;
|
2023-04-08 04:35:51 +00:00
|
|
|
|
2024-03-10 10:19:44 +00:00
|
|
|
return [
|
|
|
|
'id' => "{$id}",
|
|
|
|
'text' => $rule,
|
|
|
|
];
|
|
|
|
})
|
|
|
|
->toArray() : [];
|
|
|
|
});
|
2023-04-08 04:35:51 +00:00
|
|
|
|
2024-03-10 10:19:44 +00:00
|
|
|
$openReg = (bool) config_cache('pixelfed.open_registration');
|
2024-02-19 11:00:31 +00:00
|
|
|
|
2024-03-10 10:19:44 +00:00
|
|
|
$res = [
|
|
|
|
'name' => config_cache('app.name'),
|
|
|
|
'url' => config_cache('app.url'),
|
|
|
|
'domain' => config('pixelfed.domain.app'),
|
2024-03-12 08:05:22 +00:00
|
|
|
'show_directory' => (bool) config_cache('instance.landing.show_directory'),
|
|
|
|
'show_explore_feed' => (bool) config_cache('instance.landing.show_explore'),
|
2024-03-10 10:19:44 +00:00
|
|
|
'open_registration' => (bool) $openReg,
|
|
|
|
'curated_onboarding' => (bool) config_cache('instance.curated_registration.enabled'),
|
|
|
|
'version' => config('pixelfed.version'),
|
|
|
|
'about' => [
|
|
|
|
'banner_image' => config_cache('app.banner_image') ?? url('/storage/headers/default.jpg'),
|
|
|
|
'short_description' => config_cache('app.short_description'),
|
|
|
|
'description' => config_cache('app.description'),
|
|
|
|
],
|
|
|
|
'stats' => [
|
|
|
|
'active_users' => (int) $activeMonth,
|
|
|
|
'posts_count' => (int) $postCount,
|
|
|
|
'total_users' => (int) $totalUsers,
|
|
|
|
],
|
|
|
|
'contact' => [
|
|
|
|
'account' => $contactAccount,
|
|
|
|
'email' => config('instance.email'),
|
|
|
|
],
|
|
|
|
'rules' => $rules,
|
|
|
|
'uploader' => [
|
|
|
|
'max_photo_size' => (int) (config_cache('pixelfed.max_photo_size') * 1024),
|
|
|
|
'max_caption_length' => (int) config_cache('pixelfed.max_caption_length'),
|
|
|
|
'max_altext_length' => (int) config_cache('pixelfed.max_altext_length', 150),
|
|
|
|
'album_limit' => (int) config_cache('pixelfed.max_album_length'),
|
|
|
|
'image_quality' => (int) config_cache('pixelfed.image_quality'),
|
|
|
|
'max_collection_length' => (int) config('pixelfed.max_collection_length', 18),
|
|
|
|
'optimize_image' => (bool) config_cache('pixelfed.optimize_image'),
|
|
|
|
'optimize_video' => (bool) config_cache('pixelfed.optimize_video'),
|
|
|
|
'media_types' => config_cache('pixelfed.media_types'),
|
|
|
|
],
|
|
|
|
'features' => [
|
2024-03-12 08:20:37 +00:00
|
|
|
'federation' => (bool) config_cache('federation.activitypub.enabled'),
|
2024-03-10 10:19:44 +00:00
|
|
|
'timelines' => [
|
|
|
|
'local' => true,
|
|
|
|
'network' => (bool) config_cache('federation.network_timeline'),
|
|
|
|
],
|
|
|
|
'mobile_apis' => (bool) config_cache('pixelfed.oauth_enabled'),
|
|
|
|
'stories' => (bool) config_cache('instance.stories.enabled'),
|
|
|
|
'video' => Str::contains(config_cache('pixelfed.media_types'), 'video/mp4'),
|
|
|
|
],
|
|
|
|
];
|
2023-04-08 04:35:51 +00:00
|
|
|
|
2024-03-10 10:19:44 +00:00
|
|
|
if ($json) {
|
|
|
|
return json_encode($res);
|
|
|
|
}
|
2023-04-08 04:35:51 +00:00
|
|
|
|
2024-03-10 10:19:44 +00:00
|
|
|
return $res;
|
|
|
|
}
|
2023-04-08 04:35:51 +00:00
|
|
|
}
|