76 lines
1.9 KiB
PHP
76 lines
1.9 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Http\Requests\SetupEncryptionRequest;
|
|
use App\Models\EncryptedMessage;
|
|
use Illuminate\Http\JsonResponse;
|
|
use Illuminate\Http\Request;
|
|
|
|
class EncryptionController extends Controller
|
|
{
|
|
public function setup(SetupEncryptionRequest $request): JsonResponse
|
|
{
|
|
$user = $request->user();
|
|
|
|
$user->update([
|
|
'encryption_salt' => $request->validated('salt'),
|
|
]);
|
|
|
|
EncryptedMessage::query()->updateOrCreate(
|
|
['user_id' => $user->id],
|
|
[
|
|
'encrypted_content' => $request->validated('encrypted_content'),
|
|
'iv' => $request->validated('iv'),
|
|
]
|
|
);
|
|
|
|
return response()->json([
|
|
'message' => 'Encryption setup completed successfully',
|
|
]);
|
|
}
|
|
|
|
public function getMessage(Request $request): JsonResponse
|
|
{
|
|
$user = $request->user();
|
|
|
|
$message = $user->encryptedMessage;
|
|
|
|
if (! $message) {
|
|
return response()->json([
|
|
'message' => 'No encrypted message found',
|
|
], 404);
|
|
}
|
|
|
|
return response()->json([
|
|
'encrypted_content' => $message->encrypted_content,
|
|
'iv' => $message->iv,
|
|
'salt' => $user->encryption_salt,
|
|
]);
|
|
}
|
|
|
|
public function updateMessage(Request $request): JsonResponse
|
|
{
|
|
$validated = $request->validate([
|
|
'encrypted_content' => ['required', 'string'],
|
|
'iv' => ['required', 'string', 'size:16'],
|
|
]);
|
|
|
|
$user = $request->user();
|
|
|
|
$message = $user->encryptedMessage;
|
|
|
|
if (! $message) {
|
|
return response()->json([
|
|
'message' => 'No encrypted message found',
|
|
], 404);
|
|
}
|
|
|
|
$message->update($validated);
|
|
|
|
return response()->json([
|
|
'message' => 'Encrypted message updated successfully',
|
|
]);
|
|
}
|
|
}
|