diff --git a/public/mix-manifest.json b/public/mix-manifest.json
index d8d0d897..72479be0 100644
--- a/public/mix-manifest.json
+++ b/public/mix-manifest.json
@@ -71,5 +71,6 @@
"/js/chunks/shared-with-me.js": "/js/chunks/shared-with-me.js",
"/js/chunks/invitation.js": "/js/chunks/invitation.js",
"/css/tailwind.css": "/css/tailwind.css",
- "/css/app.css": "/css/app.css"
+ "/css/app.css": "/css/app.css",
+ "/js/chunks/app-environment.js": "/js/chunks/app-environment.js"
}
diff --git a/resources/js/components/Others/Forms/FormLabel.vue b/resources/js/components/Others/Forms/FormLabel.vue
index 18ede9fe..d767f3fa 100644
--- a/resources/js/components/Others/Forms/FormLabel.vue
+++ b/resources/js/components/Others/Forms/FormLabel.vue
@@ -10,6 +10,7 @@
+
@@ -23,6 +24,7 @@
diff --git a/resources/js/views/Admin/AppSettings/AppSettingsTabs/Email.vue b/resources/js/views/Admin/AppSettings/AppSettingsTabs/Environment.vue
similarity index 58%
rename from resources/js/views/Admin/AppSettings/AppSettingsTabs/Email.vue
rename to resources/js/views/Admin/AppSettings/AppSettingsTabs/Environment.vue
index 653ba73d..ecc73ab1 100644
--- a/resources/js/views/Admin/AppSettings/AppSettingsTabs/Email.vue
+++ b/resources/js/views/Admin/AppSettings/AppSettingsTabs/Environment.vue
@@ -1,5 +1,122 @@
+
+
+ {{ $t('Storage Driver') }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('Save Storage Settings') }}
+
+
+
- {{ $t('admin_settings.email.section_email') }}
+ {{ $t('Mail Driver') }}
@@ -198,8 +315,8 @@
{
+ events.$emit('toaster', {
+ type: 'success',
+ message: this.$t('Your storage driver was updated.'),
+ })
+ })
+ .catch(() => {
+ events.$emit('toaster', {
+ type: 'danger',
+ message: this.$t('popup_error.title'),
+ })
+ })
+ .finally(() => {
+ this.isSendingStorageForm = false
+
+ this.storage = {
+ driver: undefined,
+ key: undefined,
+ secret: undefined,
+ endpoint: undefined,
+ region: undefined,
+ bucket: undefined,
+ }
+ })
+ },
async EmailSetupSubmit() {
// Validate fields
const isValid = await this.$refs.EmailSetup.validate()
@@ -281,9 +699,8 @@ export default {
if (!isValid) return
// Start loading
- this.isSendingRequest = true
+ this.isSendingEmailForm = true
- // Send request to get verify account
axios
.post('/api/admin/settings/email', {
environment: this.environment,
@@ -307,7 +724,7 @@ export default {
})
})
.finally(() => {
- this.isSendingRequest = false
+ this.isSendingEmailForm = false
})
},
},
diff --git a/routes/admin.php b/routes/admin.php
index f4a52512..8f43af4c 100644
--- a/routes/admin.php
+++ b/routes/admin.php
@@ -9,6 +9,7 @@ use Domain\Settings\Controllers\GetServerStatusController;
use Domain\Settings\Controllers\GetSettingsValueController;
use Domain\Admin\Controllers\Dashboard\GetNewbiesController;
use Domain\Admin\Controllers\Users\ChangeUserRoleController;
+use Domain\Settings\Controllers\StoreStorageCredentialsController;
use Domain\Settings\Controllers\UpdateSettingValueController;
use Domain\Admin\Controllers\Users\ResetUserPasswordController;
use Domain\Settings\Controllers\StoreEmailCredentialsController;
@@ -50,6 +51,7 @@ Route::group(['prefix' => 'settings'], function () {
Route::get('/flush-cache', FlushCacheController::class);
Route::post('/email', StoreEmailCredentialsController::class);
+ Route::post('/storage', StoreStorageCredentialsController::class);
Route::post('/payment-service', StorePaymentServiceCredentialsController::class);
Route::post('/social-service', StoreSocialServiceCredentialsController::class);
diff --git a/src/Domain/Settings/Controllers/StoreStorageCredentialsController.php b/src/Domain/Settings/Controllers/StoreStorageCredentialsController.php
new file mode 100644
index 00000000..e0a88824
--- /dev/null
+++ b/src/Domain/Settings/Controllers/StoreStorageCredentialsController.php
@@ -0,0 +1,47 @@
+runningUnitTests()) {
+ $drivers = [
+ 'local' => [
+ 'FILESYSTEM_DISK' => 'local',
+ ],
+ 's3' => [
+ 'FILESYSTEM_DISK' => 's3',
+ 'S3_ACCESS_KEY_ID' => $request->input('storage.key') ?? null,
+ 'S3_SECRET_ACCESS_KEY' => $request->input('storage.secret') ?? null,
+ 'S3_DEFAULT_REGION' => $request->input('storage.region') ?? null,
+ 'S3_BUCKET' => $request->input('storage.bucket') ?? null,
+ 'S3_URL' => $request->input('storage.endpoint') ?? null,
+ ],
+ ];
+
+ // Get storage driver from request
+ $driver = 'local' === $request->input('storage.driver') ? 'local' : 's3';
+
+ // Storage credentials for storage
+ setEnvironmentValue(
+ $drivers[$driver]
+ );
+
+ Artisan::call('config:cache');
+ }
+
+ return response('Done', 204);
+ }
+}
diff --git a/src/Domain/Settings/Requests/StoreStorageCredentialsRequest.php b/src/Domain/Settings/Requests/StoreStorageCredentialsRequest.php
new file mode 100644
index 00000000..8942e24c
--- /dev/null
+++ b/src/Domain/Settings/Requests/StoreStorageCredentialsRequest.php
@@ -0,0 +1,29 @@
+ 'required|array',
+ ];
+ }
+}
diff --git a/tests/Domain/Settings/SettingsTest.php b/tests/Domain/Settings/SettingsTest.php
index b22d0bc4..aa244a80 100644
--- a/tests/Domain/Settings/SettingsTest.php
+++ b/tests/Domain/Settings/SettingsTest.php
@@ -1,4 +1,5 @@
'tls',
])->assertStatus(204);
}
+
+ /**
+ * @test
+ */
+ public function it_set_storage()
+ {
+ $admin = User::factory()
+ ->create(['role' => 'admin']);
+
+ $this
+ ->actingAs($admin)
+ ->postJson('/api/admin/settings/storage', [
+ 'storage' => [
+ 'driver' => 's3',
+ 'key' => '123456',
+ 'secret' => '123456',
+ 'region' => 'frankfurt',
+ 'bucket' => 'cloud',
+ 'endpoint' => 'https://cloud.frankfurt.storage.com',
+ ],
+ ])->assertStatus(204);
+ }
}