mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-10-01 18:10:06 +00:00
Encryption is optional (but on by default) and a command to switch from one to the other
This commit is contained in:
@@ -43,6 +43,7 @@ CACHE_PREFIX=firefly
|
|||||||
GOOGLE_MAPS_API_KEY=
|
GOOGLE_MAPS_API_KEY=
|
||||||
ANALYTICS_ID=
|
ANALYTICS_ID=
|
||||||
SITE_OWNER=mail@example.com
|
SITE_OWNER=mail@example.com
|
||||||
|
USE_ENCRYPTION=true
|
||||||
|
|
||||||
PUSHER_KEY=
|
PUSHER_KEY=
|
||||||
PUSHER_SECRET=
|
PUSHER_SECRET=
|
||||||
|
66
app/Console/Commands/UseEncryption.php
Normal file
66
app/Console/Commands/UseEncryption.php
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace FireflyIII\Console\Commands;
|
||||||
|
|
||||||
|
use Illuminate\Console\Command;
|
||||||
|
use Illuminate\Support\Str;
|
||||||
|
|
||||||
|
class UseEncryption extends Command
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The console command description.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $description = 'This command will make sure that entries in the database will be encrypted (or not) according to the settings in .env';
|
||||||
|
/**
|
||||||
|
* The name and signature of the console command.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $signature = 'firefly:use-encryption';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new command instance.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute the console command.
|
||||||
|
*/
|
||||||
|
public function handle()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
$this->handleObjects('Account', 'name', 'encrypted');
|
||||||
|
$this->handleObjects('Bill', 'name', 'name_encrypted');
|
||||||
|
$this->handleObjects('Bill', 'match', 'match_encrypted');
|
||||||
|
$this->handleObjects('Budget', 'name', 'encrypted');
|
||||||
|
$this->handleObjects('Category', 'name', 'encrypted');
|
||||||
|
$this->handleObjects('PiggyBank', 'name', 'encrypted');
|
||||||
|
$this->handleObjects('TransactionJournal', 'description', 'encrypted');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $class
|
||||||
|
* @param string $field
|
||||||
|
* @param string $indicator
|
||||||
|
*/
|
||||||
|
public function handleObjects(string $class, string $field, string $indicator)
|
||||||
|
{
|
||||||
|
$fqn = sprintf('FireflyIII\Models\%s', $class);
|
||||||
|
$encrypt = config('firefly.encryption') ? 0 : 1;
|
||||||
|
$set = $fqn::where($indicator, $encrypt)->get();
|
||||||
|
|
||||||
|
foreach ($set as $entry) {
|
||||||
|
$newName = $entry->$field;
|
||||||
|
$entry->$field = $newName;
|
||||||
|
$entry->save();
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->line(sprintf('Updated %d %s.', $set->count(), strtolower(Str::plural($class))));
|
||||||
|
}
|
||||||
|
}
|
@@ -16,10 +16,10 @@ namespace FireflyIII\Console;
|
|||||||
use FireflyIII\Console\Commands\CreateImport;
|
use FireflyIII\Console\Commands\CreateImport;
|
||||||
use FireflyIII\Console\Commands\EncryptFile;
|
use FireflyIII\Console\Commands\EncryptFile;
|
||||||
use FireflyIII\Console\Commands\Import;
|
use FireflyIII\Console\Commands\Import;
|
||||||
use FireflyIII\Console\Commands\MoveRepository;
|
|
||||||
use FireflyIII\Console\Commands\ScanAttachments;
|
use FireflyIII\Console\Commands\ScanAttachments;
|
||||||
use FireflyIII\Console\Commands\UpgradeDatabase;
|
use FireflyIII\Console\Commands\UpgradeDatabase;
|
||||||
use FireflyIII\Console\Commands\UpgradeFireflyInstructions;
|
use FireflyIII\Console\Commands\UpgradeFireflyInstructions;
|
||||||
|
use FireflyIII\Console\Commands\UseEncryption;
|
||||||
use FireflyIII\Console\Commands\VerifyDatabase;
|
use FireflyIII\Console\Commands\VerifyDatabase;
|
||||||
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
|
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
|
||||||
|
|
||||||
@@ -63,6 +63,7 @@ class Kernel extends ConsoleKernel
|
|||||||
EncryptFile::class,
|
EncryptFile::class,
|
||||||
ScanAttachments::class,
|
ScanAttachments::class,
|
||||||
UpgradeDatabase::class,
|
UpgradeDatabase::class,
|
||||||
|
UseEncryption::class,
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -85,7 +85,7 @@ class Account extends Model
|
|||||||
foreach ($search as $name => $value) {
|
foreach ($search as $name => $value) {
|
||||||
$query->where($name, $value);
|
$query->where($name, $value);
|
||||||
}
|
}
|
||||||
$set = $query->get(['accounts.*']);
|
$set = $query->get(['accounts.*']);
|
||||||
|
|
||||||
// account must have a name. If not set, use IBAN.
|
// account must have a name. If not set, use IBAN.
|
||||||
if (!isset($fields['name'])) {
|
if (!isset($fields['name'])) {
|
||||||
@@ -93,7 +93,6 @@ class Account extends Model
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** @var Account $account */
|
/** @var Account $account */
|
||||||
foreach ($set as $account) {
|
foreach ($set as $account) {
|
||||||
if ($account->name == $fields['name']) {
|
if ($account->name == $fields['name']) {
|
||||||
@@ -316,8 +315,9 @@ class Account extends Model
|
|||||||
*/
|
*/
|
||||||
public function setNameAttribute($value)
|
public function setNameAttribute($value)
|
||||||
{
|
{
|
||||||
$this->attributes['name'] = $value;
|
$encrypt = config('firefly.encryption');
|
||||||
$this->attributes['encrypted'] = false;
|
$this->attributes['name'] = $encrypt ? Crypt::encrypt($value) : $value;
|
||||||
|
$this->attributes['encrypted'] = $encrypt;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -35,7 +35,7 @@ class Bill extends Model
|
|||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected $casts
|
protected $casts
|
||||||
= [
|
= [
|
||||||
'created_at' => 'date',
|
'created_at' => 'date',
|
||||||
'updated_at' => 'date',
|
'updated_at' => 'date',
|
||||||
'deleted_at' => 'date',
|
'deleted_at' => 'date',
|
||||||
@@ -47,7 +47,7 @@ class Bill extends Model
|
|||||||
'match_encrypted' => 'boolean',
|
'match_encrypted' => 'boolean',
|
||||||
];
|
];
|
||||||
/** @var array */
|
/** @var array */
|
||||||
protected $dates = ['created_at', 'updated_at', 'deleted_at'];
|
protected $dates = ['created_at', 'updated_at', 'deleted_at'];
|
||||||
protected $fillable
|
protected $fillable
|
||||||
= ['name', 'match', 'amount_min', 'match_encrypted', 'name_encrypted', 'user_id', 'amount_max', 'date', 'repeat_freq', 'skip',
|
= ['name', 'match', 'amount_min', 'match_encrypted', 'name_encrypted', 'user_id', 'amount_max', 'date', 'repeat_freq', 'skip',
|
||||||
'automatch', 'active',];
|
'automatch', 'active',];
|
||||||
@@ -120,8 +120,9 @@ class Bill extends Model
|
|||||||
*/
|
*/
|
||||||
public function setMatchAttribute($value)
|
public function setMatchAttribute($value)
|
||||||
{
|
{
|
||||||
$this->attributes['match'] = Crypt::encrypt($value);
|
$encrypt = config('firefly.encryption');
|
||||||
$this->attributes['match_encrypted'] = true;
|
$this->attributes['match'] = $encrypt ? Crypt::encrypt($value) : $value;
|
||||||
|
$this->attributes['match_encrypted'] = $encrypt;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -129,8 +130,9 @@ class Bill extends Model
|
|||||||
*/
|
*/
|
||||||
public function setNameAttribute($value)
|
public function setNameAttribute($value)
|
||||||
{
|
{
|
||||||
$this->attributes['name'] = Crypt::encrypt($value);
|
$encrypt = config('firefly.encryption');
|
||||||
$this->attributes['name_encrypted'] = true;
|
$this->attributes['name'] = $encrypt ? Crypt::encrypt($value) : $value;
|
||||||
|
$this->attributes['name_encrypted'] = $encrypt;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -121,8 +121,9 @@ class Budget extends Model
|
|||||||
*/
|
*/
|
||||||
public function setNameAttribute($value)
|
public function setNameAttribute($value)
|
||||||
{
|
{
|
||||||
$this->attributes['name'] = $value;
|
$encrypt = config('firefly.encryption');
|
||||||
$this->attributes['encrypted'] = false;
|
$this->attributes['name'] = $encrypt ? Crypt::encrypt($value) : $value;
|
||||||
|
$this->attributes['encrypted'] = $encrypt;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -115,8 +115,9 @@ class Category extends Model
|
|||||||
*/
|
*/
|
||||||
public function setNameAttribute($value)
|
public function setNameAttribute($value)
|
||||||
{
|
{
|
||||||
$this->attributes['name'] = $value;
|
$encrypt = config('firefly.encryption');
|
||||||
$this->attributes['encrypted'] = false;
|
$this->attributes['name'] = $encrypt ? Crypt::encrypt($value) : $value;
|
||||||
|
$this->attributes['encrypted'] = $encrypt;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -159,8 +159,9 @@ class PiggyBank extends Model
|
|||||||
*/
|
*/
|
||||||
public function setNameAttribute($value)
|
public function setNameAttribute($value)
|
||||||
{
|
{
|
||||||
$this->attributes['name'] = $value;
|
$encrypt = config('firefly.encryption');
|
||||||
$this->attributes['encrypted'] = false;
|
$this->attributes['name'] = $encrypt ? Crypt::encrypt($value) : $value;
|
||||||
|
$this->attributes['encrypted'] = $encrypt;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -371,8 +371,9 @@ class TransactionJournal extends TransactionJournalSupport
|
|||||||
*/
|
*/
|
||||||
public function setDescriptionAttribute($value)
|
public function setDescriptionAttribute($value)
|
||||||
{
|
{
|
||||||
$this->attributes['description'] = $value;
|
$encrypt = config('firefly.encryption');
|
||||||
$this->attributes['encrypted'] = false;
|
$this->attributes['description'] = $encrypt ? Crypt::encrypt($value) : $value;
|
||||||
|
$this->attributes['encrypted'] = $encrypt;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -22,6 +22,7 @@ return [
|
|||||||
'single_user_mode' => true,
|
'single_user_mode' => true,
|
||||||
'is_demo_site' => false,
|
'is_demo_site' => false,
|
||||||
],
|
],
|
||||||
|
'encryption' => (is_null(env('USE_ENCRYPTION')) || env('USE_ENCRYPTION') === true),
|
||||||
'chart' => 'chartjs',
|
'chart' => 'chartjs',
|
||||||
'version' => '4.3.2',
|
'version' => '4.3.2',
|
||||||
'csv_import_enabled' => true,
|
'csv_import_enabled' => true,
|
||||||
|
Reference in New Issue
Block a user