added nodeinfo

This commit is contained in:
Ghostie 2025-01-06 21:57:48 -05:00
parent 61b272625b
commit 554eb0b972
4 changed files with 74 additions and 2 deletions

View File

@ -1,4 +1,6 @@
APP_NAME=Laravel APP_NAME=Laravel
APP_VERSION=0.1
APP_DESCRIPTION=OurSpace is a MySpace clone with ActivityPub support.
APP_ENV=local APP_ENV=local
APP_KEY= APP_KEY=
APP_DEBUG=true APP_DEBUG=true

View File

@ -20,7 +20,7 @@
- [ ] Local mentions - [ ] Local mentions
- [ ] Private post - [ ] Private post
- [ ] Pinned Posts - [ ] Pinned Posts
- [ ] Nodeinfo - [x] Nodeinfo
- [ ] Notifications - [ ] Notifications
- [-] Social features - [-] Social features

View File

@ -0,0 +1,66 @@
<?php
namespace App\Http\Controllers\AP;
use App\Models\User;
use App\Models\Note;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class APNodeInfoController extends Controller
{
public function wk_nodeinfo ()
{
$response = [
"links" => [
"rel" => "self",
"type" => "http://nodeinfo.diaspora.software/ns/schema/2.1",
"href" => env ("APP_URL") . "/.well-known/nodeinfo/2.1"
]
];
return response ()->json ($response);
}
public function nodeinfo ()
{
$total_users = User::count ();
$active_month_users = User::where ("last_seen_at", ">=", now ()->subMonth ())->count ();
$active_half_year_users = User::where ("last_seen_at", ">=", now ()->subMonths (6))->count ();
$local_posts = Note::where ("private_id", "!=", null)->count ();
$response = [
"version" => "2.1",
"software" => [
"name" => "OurSpace",
"version" => env ("APP_VERSION"),
"repository" => "https://github.com/0xd011f4ce/OurSpace"
],
"protocols" => [
"activitypub"
],
"services" => [
"inbound",
"outbound"
],
"openRegistrations" => true,
"usage" => [
"users" => [
"total" => $total_users,
"activeMonth" => $active_month_users,
"activeHalfYear" => $active_half_year_users
],
"localPosts" => $local_posts
],
"metadata" => [
"nodeName" => env ("APP_NAME"),
"nodeDescription" => env ("APP_DESCRIPTION"),
"spdx" => "GPL-3.0",
]
];
return response ()->json ($response);
}
}

View File

@ -4,14 +4,18 @@ use Illuminate\Support\Facades\Route;
use App\Http\Controllers\AP\APActorController; use App\Http\Controllers\AP\APActorController;
use App\Http\Controllers\AP\APGeneralController; use App\Http\Controllers\AP\APGeneralController;
use App\Http\Controllers\AP\APOutboxController;
use App\Http\Controllers\AP\APInboxController; use App\Http\Controllers\AP\APInboxController;
use App\Http\Controllers\AP\APInstanceInboxController; use App\Http\Controllers\AP\APInstanceInboxController;
use App\Http\Controllers\AP\APOutboxController;
use App\Http\Controllers\AP\APWebfingerController; use App\Http\Controllers\AP\APWebfingerController;
use App\Http\Controllers\AP\APNodeInfoController;
Route::get ("/.well-known/webfinger", [ APWebfingerController::class, "webfinger" ])->name ("ap.webfinger"); Route::get ("/.well-known/webfinger", [ APWebfingerController::class, "webfinger" ])->name ("ap.webfinger");
Route::get ("/.well-known/nodeinfo", [ APNodeInfoController::class, "wk_nodeinfo" ])->name ("ap.nodeinfo");
Route::get ("/.well-known/nodeinfo/2.1", [ APNodeInfoController::class, "nodeinfo" ])->name ("ap.nodeinfo");
Route::prefix ("/ap/v1")->group (function () { Route::prefix ("/ap/v1")->group (function () {
// users // users