Add account delete api route

pull/7698/head
Daniel Supernault 2 weeks ago
parent 61cd7dab46
commit 2d10f04f7d
No known key found for this signature in database
GPG Key ID: 23740873EE6F76A1

@ -3,10 +3,15 @@
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Jobs\DeletePipeline\DeleteAccountPipeline;
use App\Models\OauthClient;
use App\Models\UserSetting;
use App\Services\AccountService;
use App\Services\AppService;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;
class ApiV2Dot1Controller extends Controller
{
@ -27,6 +32,11 @@ class ApiV2Dot1Controller extends Controller
return $this->json(app(AppService::class)->getConfig());
}
/**
* GET /api/v2.1/account/timeline/settings
*
* Get timeline settings for non-webUI clients, allowing them to view reblog state
*/
public function accountTimelineSettings(Request $request)
{
abort_if(! $request->user() || ! $request->user()->token(), 403);
@ -69,6 +79,44 @@ class ApiV2Dot1Controller extends Controller
return $this->json($this->formatTimelineSettings($userSettings));
}
public function accountPermanentDelete(Request $request)
{
$this->validate($request, [
'current_password' => 'required|current_password:api',
]);
$user = $request->user();
abort_if(! config('pixelfed.account_deletion'), 403);
abort_if($user->is_admin, 403);
$profile = $user->profile;
abort_if($profile->status != null, 400);
$ts = now()->addMonth();
$user->email = $user->id;
$user->password = '';
$user->status = 'delete';
$profile->status = 'delete';
$user->delete_after = $ts;
$profile->delete_after = $ts;
$user->save();
$profile->save();
Cache::forget('profiles:private');
AccountService::del($profile->id);
$accessTokenIds = DB::table('oauth_access_tokens')
->where('user_id', $user->id)
->pluck('id')
->all();
DB::table('oauth_refresh_tokens')
->whereIn('access_token_id', $accessTokenIds)
->delete();
DB::table('oauth_access_tokens')->where('user_id', $user->id)->delete();
OauthClient::where('user_id', $user->id)->delete();
DeleteAccountPipeline::dispatch($user)->onQueue('low');
return $this->json(['message' => 'Account deleted']);
}
protected function formatTimelineSettings(UserSetting $userSettings): array
{
$other = is_array($userSettings->other) ? $userSettings->other : [];

@ -372,6 +372,7 @@ Route::prefix('api')->group(function () use ($middleware) {
Route::get('account/timeline/settings', [ApiV2Dot1Controller::class, 'accountTimelineSettings'])->middleware($middleware);
Route::post('account/timeline/settings', [ApiV2Dot1Controller::class, 'updateAccountTimelineSettings'])->middleware($middleware);
Route::post('account/remove/permanent', [ApiV2Dot1Controller::class, 'accountPermanentDelete'])->middleware($middleware);
});
Route::prefix('live')->group(function () {

Loading…
Cancel
Save