diff --git a/.env.example b/.env.example index c523ef0c0..fbf5c4cff 100644 --- a/.env.example +++ b/.env.example @@ -175,6 +175,15 @@ REQUIRE_SAML=false API_THROTTLE_PER_MINUTE=120 CSV_ESCAPE_FORMULAS=true +# -------------------------------------------- +# OPTIONAL: HASHING +# -------------------------------------------- +HASHING_DRIVER='bcrypt' +BCRYPT_ROUNDS=10 +ARGON_MEMORY=1024 +ARGON_THREADS=2 +ARGON_TIME=2 + # -------------------------------------------- # OPTIONAL: SCIM # -------------------------------------------- diff --git a/app/Http/Transformers/CategoriesTransformer.php b/app/Http/Transformers/CategoriesTransformer.php index faf05f7f4..d5e1ceb51 100644 --- a/app/Http/Transformers/CategoriesTransformer.php +++ b/app/Http/Transformers/CategoriesTransformer.php @@ -38,6 +38,9 @@ class CategoriesTransformer case 'component': $category->item_count = $category->components_count; break; + case 'license': + $category->item_count = $category->licenses_count; + break; default: $category->item_count = 0; } diff --git a/app/Models/Manufacturer.php b/app/Models/Manufacturer.php index eb91b3b8f..da4f26b02 100755 --- a/app/Models/Manufacturer.php +++ b/app/Models/Manufacturer.php @@ -25,7 +25,7 @@ class Manufacturer extends SnipeModel 'url' => 'url|nullable', 'support_email' => 'email|nullable', 'support_url' => 'nullable|url', - 'warranty_lookup_url' => 'starts_with:http://,https://,afp://,facetime://,file://,irc://','nullable' + 'warranty_lookup_url' => 'nullable|starts_with:http://,https://,afp://,facetime://,file://,irc://' ]; protected $hidden = ['user_id']; diff --git a/app/Presenters/LicensePresenter.php b/app/Presenters/LicensePresenter.php index 5a44bf52a..f2d54549e 100644 --- a/app/Presenters/LicensePresenter.php +++ b/app/Presenters/LicensePresenter.php @@ -151,6 +151,21 @@ class LicensePresenter extends Presenter 'visible' => false, 'title' => trans('general.order_number'), ], [ + 'field' => 'created_at', + 'searchable' => false, + 'sortable' => true, + 'visible' => false, + 'title' => trans('general.created_at'), + 'formatter' => 'dateDisplayFormatter', + ], [ + 'field' => 'updated_at', + 'searchable' => false, + 'sortable' => true, + 'visible' => false, + 'title' => trans('general.updated_at'), + 'formatter' => 'dateDisplayFormatter', + ], + [ 'field' => 'notes', 'searchable' => true, 'sortable' => true, diff --git a/config/hashing.php b/config/hashing.php index d3c8e2fb2..06f18a0c6 100644 --- a/config/hashing.php +++ b/config/hashing.php @@ -15,7 +15,7 @@ return [ | */ - 'driver' => 'bcrypt', + 'driver' => env('HASHING_DRIVER', 'bcrypt'), /* |-------------------------------------------------------------------------- @@ -44,9 +44,9 @@ return [ */ 'argon' => [ - 'memory' => 1024, - 'threads' => 2, - 'time' => 2, + 'memory' => env('ARGON_MEMORY', 1024), + 'threads' => env('ARGON_THREADS', 2), + 'time' => env('ARGON_TIME', 2), ], ]; diff --git a/resources/views/partials/bootstrap-table.blade.php b/resources/views/partials/bootstrap-table.blade.php index 3f263dd96..5233c4b7e 100644 --- a/resources/views/partials/bootstrap-table.blade.php +++ b/resources/views/partials/bootstrap-table.blade.php @@ -514,7 +514,7 @@ if (value) { if ((value.indexOf("{") === -1) || (value.indexOf("}") ===-1)) { - return ' ' + value + ''; + return ' ' + value + ''; } return value; } diff --git a/tests/Support/InteractsWithSettings.php b/tests/Support/InteractsWithSettings.php index 1de9e7bc1..a8c007018 100644 --- a/tests/Support/InteractsWithSettings.php +++ b/tests/Support/InteractsWithSettings.php @@ -2,12 +2,16 @@ namespace Tests\Support; +use App\Models\Setting; + trait InteractsWithSettings { protected Settings $settings; - public function setUpSettings() + public function initializeSettings() { $this->settings = Settings::initialize(); + + $this->beforeApplicationDestroyed(fn() => Setting::$_cache = null); } } diff --git a/tests/TestCase.php b/tests/TestCase.php index e3fd8a7aa..28051c7c7 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -23,7 +23,7 @@ abstract class TestCase extends BaseTestCase $this->withoutMiddleware($this->globallyDisabledMiddleware); if (collect(class_uses_recursive($this))->contains(InteractsWithSettings::class)) { - $this->setUpSettings(); + $this->initializeSettings(); } } } diff --git a/tests/Unit/AssetMaintenanceTest.php b/tests/Unit/AssetMaintenanceTest.php index 31b68c0cf..b5ee25cf2 100644 --- a/tests/Unit/AssetMaintenanceTest.php +++ b/tests/Unit/AssetMaintenanceTest.php @@ -3,10 +3,13 @@ namespace Tests\Unit; use App\Models\AssetMaintenance; use Carbon\Carbon; +use Tests\Support\InteractsWithSettings; use Tests\TestCase; class AssetMaintenanceTest extends TestCase { + use InteractsWithSettings; + public function testZerosOutWarrantyIfBlank() { $c = new AssetMaintenance; diff --git a/tests/Unit/AssetModelTest.php b/tests/Unit/AssetModelTest.php index 7050ea307..8771187b2 100644 --- a/tests/Unit/AssetModelTest.php +++ b/tests/Unit/AssetModelTest.php @@ -4,10 +4,13 @@ namespace Tests\Unit; use App\Models\Asset; use App\Models\Category; use App\Models\AssetModel; +use Tests\Support\InteractsWithSettings; use Tests\TestCase; class AssetModelTest extends TestCase { + use InteractsWithSettings; + public function testAnAssetModelZerosOutBlankEols() { $am = new AssetModel; diff --git a/tests/Unit/AssetTest.php b/tests/Unit/AssetTest.php index e4dc8a803..432165dc0 100644 --- a/tests/Unit/AssetTest.php +++ b/tests/Unit/AssetTest.php @@ -5,10 +5,13 @@ use App\Models\Asset; use App\Models\AssetModel; use App\Models\Category; use Carbon\Carbon; +use Tests\Support\InteractsWithSettings; use Tests\TestCase; class AssetTest extends TestCase { + use InteractsWithSettings; + // public function testAutoIncrementMixed() // { // $expected = '123411'; diff --git a/tests/Unit/CategoryTest.php b/tests/Unit/CategoryTest.php index 387ed946e..c74597b1b 100644 --- a/tests/Unit/CategoryTest.php +++ b/tests/Unit/CategoryTest.php @@ -4,10 +4,13 @@ namespace Tests\Unit; use App\Models\Category; use App\Models\AssetModel; use App\Models\Asset; +use Tests\Support\InteractsWithSettings; use Tests\TestCase; class CategoryTest extends TestCase { + use InteractsWithSettings; + public function testFailsEmptyValidation() { // An Asset requires a name, a qty, and a category_id. diff --git a/tests/Unit/ComponentTest.php b/tests/Unit/ComponentTest.php index df8f64771..8f71057bf 100644 --- a/tests/Unit/ComponentTest.php +++ b/tests/Unit/ComponentTest.php @@ -5,10 +5,13 @@ use App\Models\Category; use App\Models\Company; use App\Models\Component; use App\Models\Location; +use Tests\Support\InteractsWithSettings; use Tests\TestCase; class ComponentTest extends TestCase { + use InteractsWithSettings; + public function testAComponentBelongsToACompany() { $component = Component::factory() diff --git a/tests/Unit/DepreciationTest.php b/tests/Unit/DepreciationTest.php index 4dd842227..ed033cf44 100644 --- a/tests/Unit/DepreciationTest.php +++ b/tests/Unit/DepreciationTest.php @@ -5,10 +5,13 @@ use App\Models\Depreciation; use App\Models\Category; use App\Models\License; use App\Models\AssetModel; +use Tests\Support\InteractsWithSettings; use Tests\TestCase; class DepreciationTest extends TestCase { + use InteractsWithSettings; + public function testADepreciationHasModels() { $depreciation = Depreciation::factory()->create(); diff --git a/tests/Unit/NotificationTest.php b/tests/Unit/NotificationTest.php index 8005759a1..64cf8afb0 100644 --- a/tests/Unit/NotificationTest.php +++ b/tests/Unit/NotificationTest.php @@ -8,10 +8,13 @@ use App\Models\Category; use Carbon\Carbon; use App\Notifications\CheckoutAssetNotification; use Illuminate\Support\Facades\Notification; +use Tests\Support\InteractsWithSettings; use Tests\TestCase; class NotificationTest extends TestCase { + use InteractsWithSettings; + public function testAUserIsEmailedIfTheyCheckoutAnAssetWithEULA() { $admin = User::factory()->superuser()->create(); diff --git a/tests/Unit/SnipeModelTest.php b/tests/Unit/SnipeModelTest.php index 2bc81da61..ad4231010 100644 --- a/tests/Unit/SnipeModelTest.php +++ b/tests/Unit/SnipeModelTest.php @@ -2,10 +2,13 @@ namespace Tests\Unit; use App\Models\SnipeModel; +use Tests\Support\InteractsWithSettings; use Tests\TestCase; class SnipeModelTest extends TestCase { + use InteractsWithSettings; + public function testSetsPurchaseDatesAppropriately() { $c = new SnipeModel;