mirror of
https://github.com/VueFileManager/vuefilemanager.git
synced 2026-04-06 18:53:48 +00:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
35e1262676 |
@@ -201,6 +201,11 @@ Just log in to your stripe dashboard, and you will find taxes under `Dashboard /
|
||||
## For Developers
|
||||
Installation process on your localhost is the same. But, there are some good hints.
|
||||
|
||||
When you download repository from GitHub, you have to rename your `.env.example` file to `.env`. Then run this command in your terminal to install vendors:
|
||||
```
|
||||
composer install
|
||||
```
|
||||
|
||||
After successfully installation with setup wizard, you have to set your `APP_ENV` to local mode, in default, it's in production mode.
|
||||
```
|
||||
APP_ENV=local
|
||||
|
||||
@@ -24,6 +24,7 @@ use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use Illuminate\Support\Str;
|
||||
use Schema;
|
||||
use Stripe;
|
||||
use Symfony\Component\HttpKernel\Exception\HttpException;
|
||||
@@ -86,38 +87,15 @@ class SetupWizardController extends Controller
|
||||
throw new HttpException(500, $e->getMessage());
|
||||
}
|
||||
|
||||
$database_credentials = collect([
|
||||
[
|
||||
'name' => 'DB_CONNECTION',
|
||||
'value' => $request->connection,
|
||||
],
|
||||
[
|
||||
'name' => 'DB_HOST',
|
||||
'value' => $request->host,
|
||||
],
|
||||
[
|
||||
'name' => 'DB_PORT',
|
||||
'value' => $request->port,
|
||||
],
|
||||
[
|
||||
'name' => 'DB_DATABASE',
|
||||
'value' => $request->name,
|
||||
],
|
||||
[
|
||||
'name' => 'DB_USERNAME',
|
||||
'value' => $request->username,
|
||||
],
|
||||
[
|
||||
'name' => 'DB_PASSWORD',
|
||||
'value' => $request->password,
|
||||
],
|
||||
setEnvironmentValue([
|
||||
'DB_CONNECTION' => $request->connection,
|
||||
'DB_HOST' => $request->host,
|
||||
'DB_PORT' => $request->port,
|
||||
'DB_DATABASE' => $request->name,
|
||||
'DB_USERNAME' => $request->username,
|
||||
'DB_PASSWORD' => $request->password,
|
||||
]);
|
||||
|
||||
// Store database credentials
|
||||
$database_credentials->each(function ($col) {
|
||||
setEnvironmentValue($col['name'], $col['value']);
|
||||
});
|
||||
|
||||
// Clear cache
|
||||
Artisan::call('config:cache');
|
||||
|
||||
@@ -176,10 +154,12 @@ class SetupWizardController extends Controller
|
||||
});
|
||||
|
||||
// Set stripe credentials to .env
|
||||
setEnvironmentValue('CASHIER_CURRENCY', $request->currency);
|
||||
setEnvironmentValue('STRIPE_KEY', $request->key);
|
||||
setEnvironmentValue('STRIPE_SECRET', $request->secret);
|
||||
setEnvironmentValue('STRIPE_WEBHOOK_SECRET', $request->webhookSecret);
|
||||
setEnvironmentValue([
|
||||
'CASHIER_CURRENCY' => $request->currency,
|
||||
'STRIPE_KEY' => $request->key,
|
||||
'STRIPE_SECRET' => $request->secret,
|
||||
'STRIPE_WEBHOOK_SECRET' => $request->webhookSecret,
|
||||
]);
|
||||
|
||||
// Clear cache
|
||||
Artisan::call('config:cache');
|
||||
@@ -275,172 +255,67 @@ class SetupWizardController extends Controller
|
||||
|
||||
if ($storage_driver === 'local') {
|
||||
|
||||
$storage = collect([
|
||||
[
|
||||
'name' => 'FILESYSTEM_DRIVER',
|
||||
'value' => 'local',
|
||||
],
|
||||
setEnvironmentValue([
|
||||
'FILESYSTEM_DRIVER' => 'local',
|
||||
]);
|
||||
|
||||
}
|
||||
|
||||
if ($storage_driver === 's3') {
|
||||
|
||||
$storage = collect([
|
||||
[
|
||||
'name' => 'FILESYSTEM_DRIVER',
|
||||
'value' => $request->input('storage.driver'),
|
||||
],
|
||||
[
|
||||
'name' => 'AWS_ACCESS_KEY_ID',
|
||||
'value' => $request->input('storage.key'),
|
||||
],
|
||||
[
|
||||
'name' => 'AWS_SECRET_ACCESS_KEY',
|
||||
'value' => $request->input('storage.secret'),
|
||||
],
|
||||
[
|
||||
'name' => 'AWS_DEFAULT_REGION',
|
||||
'value' => $request->input('storage.region'),
|
||||
],
|
||||
[
|
||||
'name' => 'AWS_BUCKET',
|
||||
'value' => $request->input('storage.bucket'),
|
||||
],
|
||||
setEnvironmentValue([
|
||||
'FILESYSTEM_DRIVER' => $request->input('storage.driver'),
|
||||
'AWS_ACCESS_KEY_ID' => $request->input('storage.key'),
|
||||
'AWS_SECRET_ACCESS_KEY' => $request->input('storage.secret'),
|
||||
'AWS_DEFAULT_REGION' => $request->input('storage.region'),
|
||||
'AWS_BUCKET' => $request->input('storage.bucket'),
|
||||
]);
|
||||
|
||||
}
|
||||
|
||||
if ($storage_driver === 'spaces') {
|
||||
|
||||
$storage = collect([
|
||||
[
|
||||
'name' => 'FILESYSTEM_DRIVER',
|
||||
'value' => $request->input('storage.driver'),
|
||||
],
|
||||
[
|
||||
'name' => 'DO_SPACES_KEY',
|
||||
'value' => $request->input('storage.key'),
|
||||
],
|
||||
[
|
||||
'name' => 'DO_SPACES_SECRET',
|
||||
'value' => $request->input('storage.secret'),
|
||||
],
|
||||
[
|
||||
'name' => 'DO_SPACES_ENDPOINT',
|
||||
'value' => $request->input('storage.endpoint'),
|
||||
],
|
||||
[
|
||||
'name' => 'DO_SPACES_REGION',
|
||||
'value' => $request->input('storage.region'),
|
||||
],
|
||||
[
|
||||
'name' => 'DO_SPACES_BUCKET',
|
||||
'value' => $request->input('storage.bucket'),
|
||||
],
|
||||
setEnvironmentValue([
|
||||
'FILESYSTEM_DRIVER' => $request->input('storage.driver'),
|
||||
'DO_SPACES_KEY' => $request->input('storage.key'),
|
||||
'DO_SPACES_SECRET' => $request->input('storage.secret'),
|
||||
'DO_SPACES_ENDPOINT' => $request->input('storage.endpoint'),
|
||||
'DO_SPACES_REGION' => $request->input('storage.region'),
|
||||
'DO_SPACES_BUCKET' => $request->input('storage.bucket'),
|
||||
]);
|
||||
|
||||
}
|
||||
|
||||
if ($storage_driver === 'wasabi') {
|
||||
|
||||
$storage = collect([
|
||||
[
|
||||
'name' => 'FILESYSTEM_DRIVER',
|
||||
'value' => $request->input('storage.driver'),
|
||||
],
|
||||
[
|
||||
'name' => 'WASABI_KEY',
|
||||
'value' => $request->input('storage.key'),
|
||||
],
|
||||
[
|
||||
'name' => 'WASABI_SECRET',
|
||||
'value' => $request->input('storage.secret'),
|
||||
],
|
||||
[
|
||||
'name' => 'WASABI_ENDPOINT',
|
||||
'value' => $request->input('storage.endpoint'),
|
||||
],
|
||||
[
|
||||
'name' => 'WASABI_REGION',
|
||||
'value' => $request->input('storage.region'),
|
||||
],
|
||||
[
|
||||
'name' => 'WASABI_BUCKET',
|
||||
'value' => $request->input('storage.bucket'),
|
||||
],
|
||||
setEnvironmentValue([
|
||||
'FILESYSTEM_DRIVER' => $request->input('storage.driver'),
|
||||
'WASABI_KEY' => $request->input('storage.key'),
|
||||
'WASABI_SECRET' => $request->input('storage.secret'),
|
||||
'WASABI_ENDPOINT' => $request->input('storage.endpoint'),
|
||||
'WASABI_REGION' => $request->input('storage.region'),
|
||||
'WASABI_BUCKET' => $request->input('storage.bucket'),
|
||||
]);
|
||||
|
||||
}
|
||||
|
||||
if ($storage_driver === 'backblaze') {
|
||||
|
||||
$storage = collect([
|
||||
[
|
||||
'name' => 'FILESYSTEM_DRIVER',
|
||||
'value' => $request->input('storage.driver'),
|
||||
],
|
||||
[
|
||||
'name' => 'BACKBLAZE_KEY',
|
||||
'value' => $request->input('storage.key'),
|
||||
],
|
||||
[
|
||||
'name' => 'BACKBLAZE_SECRET',
|
||||
'value' => $request->input('storage.secret'),
|
||||
],
|
||||
[
|
||||
'name' => 'BACKBLAZE_ENDPOINT',
|
||||
'value' => $request->input('storage.endpoint'),
|
||||
],
|
||||
[
|
||||
'name' => 'BACKBLAZE_REGION',
|
||||
'value' => $request->input('storage.region'),
|
||||
],
|
||||
[
|
||||
'name' => 'BACKBLAZE_BUCKET',
|
||||
'value' => $request->input('storage.bucket'),
|
||||
],
|
||||
setEnvironmentValue([
|
||||
'FILESYSTEM_DRIVER' => $request->input('storage.driver'),
|
||||
'BACKBLAZE_KEY' => $request->input('storage.key'),
|
||||
'BACKBLAZE_SECRET' => $request->input('storage.secret'),
|
||||
'BACKBLAZE_ENDPOINT' => $request->input('storage.endpoint'),
|
||||
'BACKBLAZE_REGION' => $request->input('storage.region'),
|
||||
'BACKBLAZE_BUCKET' => $request->input('storage.bucket'),
|
||||
]);
|
||||
}
|
||||
|
||||
// Store storage options
|
||||
$storage->each(function ($col) {
|
||||
setEnvironmentValue($col['name'], $col['value']);
|
||||
});
|
||||
|
||||
// Get options
|
||||
$mail = collect([
|
||||
[
|
||||
'name' => 'MAIL_DRIVER',
|
||||
'value' => $request->input('mail.driver'),
|
||||
],
|
||||
[
|
||||
'name' => 'MAIL_HOST',
|
||||
'value' => $request->input('mail.host'),
|
||||
],
|
||||
[
|
||||
'name' => 'MAIL_PORT',
|
||||
'value' => $request->input('mail.port'),
|
||||
],
|
||||
[
|
||||
'name' => 'MAIL_USERNAME',
|
||||
'value' => $request->input('mail.username'),
|
||||
],
|
||||
[
|
||||
'name' => 'MAIL_PASSWORD',
|
||||
'value' => $request->input('mail.password'),
|
||||
],
|
||||
[
|
||||
'name' => 'MAIL_ENCRYPTION',
|
||||
'value' => $request->input('mail.encryption'),
|
||||
],
|
||||
setEnvironmentValue([
|
||||
'MAIL_DRIVER' => $request->input('mail.driver'),
|
||||
'MAIL_HOST' => $request->input('mail.host'),
|
||||
'MAIL_PORT' => $request->input('mail.port'),
|
||||
'MAIL_USERNAME' => $request->input('mail.username'),
|
||||
'MAIL_PASSWORD' => $request->input('mail.password'),
|
||||
'MAIL_ENCRYPTION' => $request->input('mail.encryption'),
|
||||
]);
|
||||
|
||||
// Store mail options
|
||||
$mail->each(function ($col) {
|
||||
setEnvironmentValue($col['name'], $col['value']);
|
||||
});
|
||||
|
||||
// Clear cache
|
||||
Artisan::call('config:cache');
|
||||
|
||||
@@ -521,6 +396,10 @@ class SetupWizardController extends Controller
|
||||
Setting::updateOrCreate(['name' => $col['name']], $col);
|
||||
});
|
||||
|
||||
setEnvironmentValue([
|
||||
'APP_NAME' => Str::camel($request->title),
|
||||
]);
|
||||
|
||||
return response('Done', 200);
|
||||
}
|
||||
|
||||
@@ -651,8 +530,10 @@ class SetupWizardController extends Controller
|
||||
$client = \DB::table('oauth_clients')->where('name', '=', 'vuefilemanager')->first();
|
||||
|
||||
// Set passport client to .env
|
||||
setEnvironmentValue('PASSPORT_CLIENT_ID', $client->id);
|
||||
setEnvironmentValue('PASSPORT_CLIENT_SECRET', $client->secret);
|
||||
setEnvironmentValue([
|
||||
'PASSPORT_CLIENT_ID' => $client->id,
|
||||
'PASSPORT_CLIENT_SECRET' => $client->secret,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -89,18 +89,30 @@ function add_paragraphs($str)
|
||||
*
|
||||
* @param $key
|
||||
* @param $value
|
||||
* @return bool
|
||||
*/
|
||||
function setEnvironmentValue($key, $value)
|
||||
function setEnvironmentValue(array $values)
|
||||
{
|
||||
$env_path = app()->environmentFilePath();
|
||||
$envFile = app()->environmentFilePath();
|
||||
$str = file_get_contents($envFile);
|
||||
|
||||
$escaped = preg_quote('=' . env($key), '/');
|
||||
if (count($values) > 0) {
|
||||
foreach ($values as $envKey => $envValue) {
|
||||
|
||||
$str .= "\n"; // In case the searched variable is in the last line without \n
|
||||
$keyPosition = strpos($str, "{$envKey}=");
|
||||
$endOfLinePosition = strpos($str, "\n", $keyPosition);
|
||||
$oldLine = substr($str, $keyPosition, $endOfLinePosition - $keyPosition);
|
||||
|
||||
// If key does not exist, add it
|
||||
$str = str_replace($oldLine, "{$envKey}={$envValue}", $str);
|
||||
}
|
||||
}
|
||||
|
||||
$str = substr($str, 0, -1);
|
||||
if (!file_put_contents($envFile, $str)) return false;
|
||||
return true;
|
||||
|
||||
file_put_contents($env_path, preg_replace(
|
||||
"/^{$key}{$escaped}/m",
|
||||
$key . '=' . $value,
|
||||
file_get_contents($env_path)
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
2
public/js/main.js
vendored
2
public/js/main.js
vendored
File diff suppressed because one or more lines are too long
@@ -37,7 +37,7 @@
|
||||
|
||||
<div class="block-wrapper">
|
||||
<label>Password:</label>
|
||||
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Password" rules="required" v-slot="{ errors }">
|
||||
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Password" rules="required|confirmed:confirmation" v-slot="{ errors }">
|
||||
<input v-model="admin.password" placeholder="Type your password" type="password" :class="{'is-error': errors[0]}" />
|
||||
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
|
||||
</ValidationProvider>
|
||||
@@ -45,7 +45,7 @@
|
||||
|
||||
<div class="block-wrapper">
|
||||
<label>Password Confirmation:</label>
|
||||
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Password confirmation" rules="required" v-slot="{ errors }">
|
||||
<ValidationProvider tag="div" class="input-wrapper" name="confirmation" rules="required" vid="confirmation" v-slot="{ errors }">
|
||||
<input v-model="admin.password_confirmation" placeholder="Confirm your password" type="password" :class="{'is-error': errors[0]}" />
|
||||
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
|
||||
</ValidationProvider>
|
||||
|
||||
@@ -41,10 +41,13 @@
|
||||
</ValidationProvider>
|
||||
</div>
|
||||
<div class="block-wrapper" v-if="storage.driver !== 's3'">
|
||||
<label>Endpoint:</label>
|
||||
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Endpoint" rules="required" v-slot="{ errors }">
|
||||
<label>Endpoint URL:</label>
|
||||
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Endpoint" :rules="{ required: true, regex: /^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/ }" v-slot="{ errors }">
|
||||
<input v-model="storage.endpoint" placeholder="Type your endpoint" type="text" :class="{'is-error': errors[0]}" />
|
||||
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
|
||||
<small class="input-help">
|
||||
Provide full URIs of your storage endpoint, for example 'https://ams3.digitaloceanspaces.com'.
|
||||
</small>
|
||||
</ValidationProvider>
|
||||
</div>
|
||||
<div class="block-wrapper">
|
||||
@@ -52,6 +55,9 @@
|
||||
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Region" rules="required" v-slot="{ errors }">
|
||||
<input v-model="storage.region" placeholder="Type your region" type="text" :class="{'is-error': errors[0]}" />
|
||||
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
|
||||
<small class="input-help">
|
||||
Provide your region, for example 'ams3', 'fra1', 'nyc1'...
|
||||
</small>
|
||||
</ValidationProvider>
|
||||
</div>
|
||||
<div class="block-wrapper">
|
||||
@@ -59,6 +65,9 @@
|
||||
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Bucket" rules="required" v-slot="{ errors }">
|
||||
<input v-model="storage.bucket" placeholder="Type your bucket name" type="text" :class="{'is-error': errors[0]}" />
|
||||
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
|
||||
<small class="input-help">
|
||||
Provide your created unique bucket name
|
||||
</small>
|
||||
</ValidationProvider>
|
||||
</div>
|
||||
|
||||
@@ -72,7 +81,7 @@
|
||||
<div class="block-wrapper">
|
||||
<label>Mail Driver:</label>
|
||||
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Mail Driver" rules="required" v-slot="{ errors }">
|
||||
<input v-model="mail.driver" placeholder="Type your mail driver" type="text" :class="{'is-error': errors[0]}" />
|
||||
<SelectInput v-model="mail.driver" :options="mailDriverList" default="smtp" placeholder="Select your mail driver" :isError="errors[0]"/>
|
||||
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
|
||||
</ValidationProvider>
|
||||
</div>
|
||||
@@ -188,6 +197,36 @@
|
||||
value: 'ssl',
|
||||
},
|
||||
],
|
||||
mailDriverList: [
|
||||
{
|
||||
label: 'smtp',
|
||||
value: 'smtp',
|
||||
},
|
||||
{
|
||||
label: 'sendmail',
|
||||
value: 'sendmail',
|
||||
},
|
||||
{
|
||||
label: 'mailgun',
|
||||
value: 'mailgun',
|
||||
},
|
||||
{
|
||||
label: 'ses',
|
||||
value: 'ses',
|
||||
},
|
||||
{
|
||||
label: 'postmark',
|
||||
value: 'postmark',
|
||||
},
|
||||
{
|
||||
label: 'log',
|
||||
value: 'log',
|
||||
},
|
||||
{
|
||||
label: 'array',
|
||||
value: 'array',
|
||||
},
|
||||
],
|
||||
storage: {
|
||||
driver: 'local',
|
||||
key: '',
|
||||
|
||||
Reference in New Issue
Block a user