From 554eb0b9722f2a16f00493eee1ed6ff8a6b60566 Mon Sep 17 00:00:00 2001 From: Ghostie Date: Mon, 6 Jan 2025 21:57:48 -0500 Subject: [PATCH] added nodeinfo --- .env.example | 2 + TODO.md | 2 +- .../Controllers/AP/APNodeInfoController.php | 66 +++++++++++++++++++ routes/api.php | 6 +- 4 files changed, 74 insertions(+), 2 deletions(-) create mode 100644 app/Http/Controllers/AP/APNodeInfoController.php diff --git a/.env.example b/.env.example index 45c0652..7d50a2d 100644 --- a/.env.example +++ b/.env.example @@ -1,4 +1,6 @@ APP_NAME=Laravel +APP_VERSION=0.1 +APP_DESCRIPTION=OurSpace is a MySpace clone with ActivityPub support. APP_ENV=local APP_KEY= APP_DEBUG=true diff --git a/TODO.md b/TODO.md index e8a0f62..afa2a9c 100644 --- a/TODO.md +++ b/TODO.md @@ -20,7 +20,7 @@ - [ ] Local mentions - [ ] Private post - [ ] Pinned Posts - - [ ] Nodeinfo + - [x] Nodeinfo - [ ] Notifications - [-] Social features diff --git a/app/Http/Controllers/AP/APNodeInfoController.php b/app/Http/Controllers/AP/APNodeInfoController.php new file mode 100644 index 0000000..c48e2a1 --- /dev/null +++ b/app/Http/Controllers/AP/APNodeInfoController.php @@ -0,0 +1,66 @@ + [ + "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); + } +} diff --git a/routes/api.php b/routes/api.php index ee78b93..b1ae57e 100644 --- a/routes/api.php +++ b/routes/api.php @@ -4,14 +4,18 @@ use Illuminate\Support\Facades\Route; use App\Http\Controllers\AP\APActorController; use App\Http\Controllers\AP\APGeneralController; + +use App\Http\Controllers\AP\APOutboxController; use App\Http\Controllers\AP\APInboxController; use App\Http\Controllers\AP\APInstanceInboxController; -use App\Http\Controllers\AP\APOutboxController; 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/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 () { // users