Encryption is optional (but on by default) and a command to switch from one to the other

This commit is contained in:
James Cole
2017-01-14 17:13:57 +01:00
parent 30bc4ccfa7
commit 5bbaaece38
10 changed files with 94 additions and 19 deletions

View File

@@ -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=

View 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))));
}
}

View File

@@ -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,
]; ];
/** /**

View File

@@ -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;
} }
/** /**

View File

@@ -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;
} }
/** /**

View File

@@ -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;
} }
/** /**

View File

@@ -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;
} }
/** /**

View File

@@ -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;
} }
/** /**

View File

@@ -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;
} }
/** /**

View File

@@ -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,