mirror of
https://github.com/anonaddy/anonaddy
synced 2026-04-26 01:25:06 +02:00
Rebrand update
This commit is contained in:
252
app/Http/Controllers/Api/AliasBulkController.php
Normal file
252
app/Http/Controllers/Api/AliasBulkController.php
Normal file
@@ -0,0 +1,252 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Resources\AliasResource;
|
||||
use App\Rules\VerifiedRecipientId;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Ramsey\Uuid\Uuid;
|
||||
|
||||
class AliasBulkController extends Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('throttle:12,1');
|
||||
}
|
||||
|
||||
public function get(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'ids' => 'required|array|max:25|min:1',
|
||||
'ids.*' => 'required|uuid|distinct',
|
||||
]);
|
||||
|
||||
$aliases = user()->aliases()->withTrashed()
|
||||
->whereIn('id', $request->ids)
|
||||
->get();
|
||||
|
||||
// If there are no aliases found return 404 response
|
||||
if (! $aliases->count()) {
|
||||
return response()->json(['message' => 'No aliases found'], 404);
|
||||
}
|
||||
|
||||
return AliasResource::collection($aliases);
|
||||
}
|
||||
|
||||
public function activate(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'ids' => 'required|array|max:25|min:1',
|
||||
'ids.*' => 'required|uuid|distinct',
|
||||
]);
|
||||
|
||||
$aliasesWithTrashed = user()->aliases()->withTrashed()
|
||||
->select(['id', 'user_id', 'active', 'deleted_at'])
|
||||
->where('active', false)
|
||||
->whereIn('id', $request->ids)
|
||||
->get();
|
||||
|
||||
// If there are no aliases found return 404 response
|
||||
if (! $aliasesWithTrashedCount = $aliasesWithTrashed->count()) {
|
||||
return response()->json(['message' => 'No aliases found'], 404);
|
||||
}
|
||||
|
||||
// Check if all aliases are deleted, if so return message
|
||||
$aliases = $aliasesWithTrashed->filter(function ($alias) {
|
||||
return ! $alias->trashed();
|
||||
});
|
||||
|
||||
if ($aliases->count() === 0) {
|
||||
return response()->json([
|
||||
'message' => $aliasesWithTrashedCount === 1 ? 'You need to restore this alias before you can activate it' : 'You need to restore these aliases before you can activate them',
|
||||
'ids' => $aliasesWithTrashed->pluck('id'),
|
||||
], 422);
|
||||
}
|
||||
|
||||
$aliasIds = $aliases->pluck('id')->all();
|
||||
$aliasIdsCount = count($aliasIds);
|
||||
user()->aliases()->whereIn('id', $aliasIds)->update(['active' => true]);
|
||||
|
||||
return response()->json([
|
||||
'message' => $aliasIdsCount === 1 ? '1 alias activated successfully' : "{$aliasIdsCount} aliases activated successfully",
|
||||
'ids' => $aliasIds,
|
||||
], 200);
|
||||
}
|
||||
|
||||
public function deactivate(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'ids' => 'required|array|max:25|min:1',
|
||||
'ids.*' => 'required|uuid|distinct',
|
||||
]);
|
||||
|
||||
$aliasIds = user()->aliases()
|
||||
->where('active', true)
|
||||
->whereIn('id', $request->ids)
|
||||
->pluck('id');
|
||||
|
||||
// If there are no aliases found return 404 response
|
||||
if (! $aliasIdsCount = $aliasIds->count()) {
|
||||
return response()->json(['message' => 'No aliases found'], 404);
|
||||
}
|
||||
|
||||
user()->aliases()->whereIn('id', $aliasIds)->update(['active' => false]);
|
||||
|
||||
return response()->json([
|
||||
'message' => $aliasIdsCount === 1 ? '1 alias deactivated successfully' : "{$aliasIdsCount} aliases deactivated successfully",
|
||||
'ids' => $aliasIds,
|
||||
], 200);
|
||||
}
|
||||
|
||||
public function delete(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'ids' => 'required|array|max:25|min:1',
|
||||
'ids.*' => 'required|uuid|distinct',
|
||||
]);
|
||||
|
||||
$aliasIds = user()->aliases()
|
||||
->whereIn('id', $request->ids)
|
||||
->pluck('id');
|
||||
|
||||
// If there are no aliases found return 404 response
|
||||
if (! $aliasIdsCount = $aliasIds->count()) {
|
||||
return response()->json(['message' => 'No aliases found'], 404);
|
||||
}
|
||||
|
||||
// Detach any recipients
|
||||
DB::table('alias_recipients')->whereIn('alias_id', $aliasIds)->delete();
|
||||
|
||||
// Use update since delete() does not trigger model event
|
||||
user()->aliases()->whereIn('id', $aliasIds)->update(['active' => false, 'deleted_at' => now()]);
|
||||
|
||||
// Don't return 204 as that is only for empty responses
|
||||
return response()->json([
|
||||
'message' => $aliasIdsCount === 1 ? '1 alias deleted successfully' : "{$aliasIdsCount} aliases deleted successfully",
|
||||
'ids' => $aliasIds,
|
||||
], 200);
|
||||
}
|
||||
|
||||
public function forget(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'ids' => 'required|array|max:25|min:1',
|
||||
'ids.*' => 'required|uuid|distinct',
|
||||
]);
|
||||
|
||||
$aliasIds = user()->aliases()->withTrashed()
|
||||
->whereIn('id', $request->ids)
|
||||
->pluck('id');
|
||||
|
||||
// If there are no aliases found return 404 response
|
||||
if (! $aliasIdsCount = $aliasIds->count()) {
|
||||
return response()->json(['message' => 'No aliases found'], 404);
|
||||
}
|
||||
|
||||
// Detach any recipients
|
||||
DB::table('alias_recipients')->whereIn('alias_id', $aliasIds)->delete();
|
||||
|
||||
// Shared Domain aliases, remove all data and change user_id
|
||||
$forgottenSharedDomainCount = user()->aliases()->withTrashed()
|
||||
->whereIn('id', $aliasIds)
|
||||
->whereIn('domain', config('anonaddy.all_domains'))
|
||||
->update([
|
||||
'user_id' => '00000000-0000-0000-0000-000000000000',
|
||||
'extension' => null,
|
||||
'description' => null,
|
||||
'emails_forwarded' => 0,
|
||||
'emails_blocked' => 0,
|
||||
'emails_replied' => 0,
|
||||
'emails_sent' => 0,
|
||||
'active' => false,
|
||||
'deleted_at' => now(),
|
||||
]);
|
||||
|
||||
if ($forgottenSharedDomainCount < $aliasIdsCount) {
|
||||
// Standard aliases
|
||||
user()->aliases()->withTrashed()
|
||||
->whereIn('id', $aliasIds)
|
||||
->whereNotIn('domain', config('anonaddy.all_domains'))
|
||||
->forceDelete();
|
||||
}
|
||||
|
||||
// Don't return 204 as that is only for empty responses
|
||||
return response()->json([
|
||||
'message' => $aliasIdsCount === 1 ? '1 alias forgotten successfully' : "{$aliasIdsCount} aliases forgotten successfully",
|
||||
'ids' => $aliasIds,
|
||||
], 200);
|
||||
}
|
||||
|
||||
public function restore(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'ids' => 'required|array|max:25|min:1',
|
||||
'ids.*' => 'required|uuid|distinct',
|
||||
]);
|
||||
|
||||
$aliasIds = user()->aliases()->onlyTrashed()
|
||||
->whereIn('id', $request->ids)
|
||||
->pluck('id');
|
||||
|
||||
// If there are no aliases found return 404 response
|
||||
if (! $aliasIdsCount = $aliasIds->count()) {
|
||||
return response()->json(['message' => 'No aliases found'], 404);
|
||||
}
|
||||
|
||||
// Use update since delete() does not trigger model event
|
||||
user()->aliases()->onlyTrashed()->whereIn('id', $aliasIds)->update(['active' => true, 'deleted_at' => null]);
|
||||
|
||||
// Don't return 204 as that is only for empty responses
|
||||
return response()->json([
|
||||
'message' => $aliasIdsCount === 1 ? '1 alias restored successfully' : "{$aliasIdsCount} aliases restored successfully",
|
||||
'ids' => $aliasIds,
|
||||
], 200);
|
||||
}
|
||||
|
||||
public function recipients(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'ids' => 'required|array|max:25|min:1',
|
||||
'ids.*' => 'required|uuid|distinct',
|
||||
'recipient_ids' => [
|
||||
'array',
|
||||
'max:10',
|
||||
new VerifiedRecipientId(),
|
||||
],
|
||||
'recipient_ids.*' => 'required|uuid|distinct',
|
||||
]);
|
||||
|
||||
$aliasIds = user()->aliases()->withTrashed()
|
||||
->whereIn('id', $request->ids)
|
||||
->pluck('id');
|
||||
|
||||
// If there are no aliases found return 404 response
|
||||
if (! $aliasIdsCount = $aliasIds->count()) {
|
||||
return response()->json(['message' => 'No aliases found'], 404);
|
||||
}
|
||||
|
||||
// First delete existing alias recipients
|
||||
DB::table('alias_recipients')->whereIn('alias_id', $aliasIds)->delete();
|
||||
// Then create alias recipients
|
||||
DB::table('alias_recipients')->insert((collect($aliasIds))->flatMap(function ($aliasId) use ($request) {
|
||||
$val = [];
|
||||
foreach ($request->recipient_ids as $recipientId) {
|
||||
$val[] = [
|
||||
'id' => Uuid::uuid4(),
|
||||
'alias_id' => $aliasId,
|
||||
'recipient_id' => $recipientId,
|
||||
];
|
||||
}
|
||||
|
||||
return $val;
|
||||
})->all());
|
||||
|
||||
// Don't return 204 as that is only for empty responses
|
||||
return response()->json([
|
||||
'message' => $aliasIdsCount === 1 ? 'recipients updated for 1 alias successfully' : "recipients updated for {$aliasIdsCount} aliases successfully",
|
||||
'ids' => $aliasIds,
|
||||
], 200);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user