mirror of
https://github.com/pelican-dev/panel.git
synced 2025-05-20 08:44:46 +02:00
Add config option to disable server descriptions for users (#581)
* add config option to disable server descriptions * only disable server descriptions for users but not for admins * Add , * invert * unset description in server transformer if disabled * remove testing leftover --------- Co-authored-by: notCharles <charles@pelican.dev>
This commit is contained in:
parent
aafe17174f
commit
af4cba341a
@ -522,6 +522,25 @@ class Settings extends Page implements HasForms
|
|||||||
->suffix('Requests Per Minute')
|
->suffix('Requests Per Minute')
|
||||||
->default(env('APP_API_APPLICATION_RATELIMIT', config('http.rate_limit.application'))),
|
->default(env('APP_API_APPLICATION_RATELIMIT', config('http.rate_limit.application'))),
|
||||||
]),
|
]),
|
||||||
|
Section::make('Server')
|
||||||
|
->description('Settings for Servers.')
|
||||||
|
->columns()
|
||||||
|
->collapsible()
|
||||||
|
->collapsed()
|
||||||
|
->schema([
|
||||||
|
Toggle::make('PANEL_EDITABLE_SERVER_DESCRIPTIONS')
|
||||||
|
->label('Allow Users to edit Server Descriptions?')
|
||||||
|
->onIcon('tabler-check')
|
||||||
|
->offIcon('tabler-x')
|
||||||
|
->onColor('success')
|
||||||
|
->offColor('danger')
|
||||||
|
->live()
|
||||||
|
->columnSpanFull()
|
||||||
|
->formatStateUsing(fn ($state): bool => (bool) $state)
|
||||||
|
->afterStateUpdated(fn ($state, Set $set) => $set('PANEL_EDITABLE_SERVER_DESCRIPTIONS', (bool) $state))
|
||||||
|
->default(env('PANEL_EDITABLE_SERVER_DESCRIPTIONS', config('panel.editable_server_descriptions'))),
|
||||||
|
]),
|
||||||
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -297,7 +297,7 @@ class CreateServer extends CreateRecord
|
|||||||
'md' => 6,
|
'md' => 6,
|
||||||
'lg' => 6,
|
'lg' => 6,
|
||||||
])
|
])
|
||||||
->label('Notes'),
|
->label('Description'),
|
||||||
]),
|
]),
|
||||||
|
|
||||||
Wizard\Step::make('Egg Configuration')
|
Wizard\Step::make('Egg Configuration')
|
||||||
|
@ -2,16 +2,16 @@
|
|||||||
|
|
||||||
namespace App\Http\Controllers\Api\Client\Servers;
|
namespace App\Http\Controllers\Api\Client\Servers;
|
||||||
|
|
||||||
use Illuminate\Http\Response;
|
|
||||||
use App\Models\Server;
|
|
||||||
use Illuminate\Http\JsonResponse;
|
|
||||||
use App\Facades\Activity;
|
use App\Facades\Activity;
|
||||||
use App\Services\Servers\ReinstallServerService;
|
|
||||||
use App\Http\Controllers\Api\Client\ClientApiController;
|
use App\Http\Controllers\Api\Client\ClientApiController;
|
||||||
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
|
use App\Http\Requests\Api\Client\Servers\Settings\ReinstallServerRequest;
|
||||||
use App\Http\Requests\Api\Client\Servers\Settings\RenameServerRequest;
|
use App\Http\Requests\Api\Client\Servers\Settings\RenameServerRequest;
|
||||||
use App\Http\Requests\Api\Client\Servers\Settings\SetDockerImageRequest;
|
use App\Http\Requests\Api\Client\Servers\Settings\SetDockerImageRequest;
|
||||||
use App\Http\Requests\Api\Client\Servers\Settings\ReinstallServerRequest;
|
use App\Models\Server;
|
||||||
|
use App\Services\Servers\ReinstallServerService;
|
||||||
|
use Illuminate\Http\JsonResponse;
|
||||||
|
use Illuminate\Http\Response;
|
||||||
|
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
|
||||||
|
|
||||||
class SettingsController extends ClientApiController
|
class SettingsController extends ClientApiController
|
||||||
{
|
{
|
||||||
@ -33,7 +33,11 @@ class SettingsController extends ClientApiController
|
|||||||
$description = $request->has('description') ? (string) $request->input('description') : $server->description;
|
$description = $request->has('description') ? (string) $request->input('description') : $server->description;
|
||||||
|
|
||||||
$server->name = $name;
|
$server->name = $name;
|
||||||
$server->description = $description;
|
|
||||||
|
if (config('panel.editable_server_descriptions')) {
|
||||||
|
$server->description = $description;
|
||||||
|
}
|
||||||
|
|
||||||
$server->save();
|
$server->save();
|
||||||
|
|
||||||
if ($server->name !== $name) {
|
if ($server->name !== $name) {
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
namespace App\Http\ViewComposers;
|
namespace App\Http\ViewComposers;
|
||||||
|
|
||||||
use Illuminate\View\View;
|
|
||||||
use App\Services\Helpers\AssetHashService;
|
use App\Services\Helpers\AssetHashService;
|
||||||
|
use Illuminate\View\View;
|
||||||
|
|
||||||
class AssetComposer
|
class AssetComposer
|
||||||
{
|
{
|
||||||
@ -28,6 +28,7 @@ class AssetComposer
|
|||||||
'siteKey' => config('recaptcha.website_key') ?? '',
|
'siteKey' => config('recaptcha.website_key') ?? '',
|
||||||
],
|
],
|
||||||
'usesSyncDriver' => config('queue.default') === 'sync',
|
'usesSyncDriver' => config('queue.default') === 'sync',
|
||||||
|
'serverDescriptionsEditable' => config('panel.editable_server_descriptions'),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,17 +2,17 @@
|
|||||||
|
|
||||||
namespace App\Transformers\Api\Client;
|
namespace App\Transformers\Api\Client;
|
||||||
|
|
||||||
|
use App\Models\Allocation;
|
||||||
use App\Models\Egg;
|
use App\Models\Egg;
|
||||||
|
use App\Models\EggVariable;
|
||||||
|
use App\Models\Permission;
|
||||||
use App\Models\Server;
|
use App\Models\Server;
|
||||||
use App\Models\Subuser;
|
use App\Models\Subuser;
|
||||||
use League\Fractal\Resource\Item;
|
|
||||||
use App\Models\Allocation;
|
|
||||||
use App\Models\Permission;
|
|
||||||
use Illuminate\Container\Container;
|
|
||||||
use App\Models\EggVariable;
|
|
||||||
use League\Fractal\Resource\Collection;
|
|
||||||
use League\Fractal\Resource\NullResource;
|
|
||||||
use App\Services\Servers\StartupCommandService;
|
use App\Services\Servers\StartupCommandService;
|
||||||
|
use Illuminate\Container\Container;
|
||||||
|
use League\Fractal\Resource\Collection;
|
||||||
|
use League\Fractal\Resource\Item;
|
||||||
|
use League\Fractal\Resource\NullResource;
|
||||||
|
|
||||||
class ServerTransformer extends BaseClientTransformer
|
class ServerTransformer extends BaseClientTransformer
|
||||||
{
|
{
|
||||||
@ -36,7 +36,7 @@ class ServerTransformer extends BaseClientTransformer
|
|||||||
|
|
||||||
$user = $this->request->user();
|
$user = $this->request->user();
|
||||||
|
|
||||||
return [
|
$data = [
|
||||||
'server_owner' => $user->id === $server->owner_id,
|
'server_owner' => $user->id === $server->owner_id,
|
||||||
'identifier' => $server->uuid_short,
|
'identifier' => $server->uuid_short,
|
||||||
'internal_id' => $server->id,
|
'internal_id' => $server->id,
|
||||||
@ -76,6 +76,12 @@ class ServerTransformer extends BaseClientTransformer
|
|||||||
'is_installing' => !$server->isInstalled(),
|
'is_installing' => !$server->isInstalled(),
|
||||||
'is_transferring' => !is_null($server->transfer),
|
'is_transferring' => !is_null($server->transfer),
|
||||||
];
|
];
|
||||||
|
|
||||||
|
if (!config('panel.editable_server_descriptions')) {
|
||||||
|
unset($data['description']);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -169,4 +169,6 @@ return [
|
|||||||
],
|
],
|
||||||
|
|
||||||
'use_binary_prefix' => env('PANEL_USE_BINARY_PREFIX', true),
|
'use_binary_prefix' => env('PANEL_USE_BINARY_PREFIX', true),
|
||||||
|
|
||||||
|
'editable_server_descriptions' => env('PANEL_EDITABLE_SERVER_DESCRIPTIONS', true),
|
||||||
];
|
];
|
||||||
|
@ -2,7 +2,7 @@ import React from 'react';
|
|||||||
import { ServerContext } from '@/state/server';
|
import { ServerContext } from '@/state/server';
|
||||||
import TitledGreyBox from '@/components/elements/TitledGreyBox';
|
import TitledGreyBox from '@/components/elements/TitledGreyBox';
|
||||||
import { Field as FormikField, Form, Formik, FormikHelpers, useFormikContext } from 'formik';
|
import { Field as FormikField, Form, Formik, FormikHelpers, useFormikContext } from 'formik';
|
||||||
import { Actions, useStoreActions } from 'easy-peasy';
|
import { Actions, useStoreActions, useStoreState } from 'easy-peasy';
|
||||||
import renameServer from '@/api/server/renameServer';
|
import renameServer from '@/api/server/renameServer';
|
||||||
import Field from '@/components/elements/Field';
|
import Field from '@/components/elements/Field';
|
||||||
import { object, string } from 'yup';
|
import { object, string } from 'yup';
|
||||||
@ -23,17 +23,21 @@ interface Values {
|
|||||||
const RenameServerBox = () => {
|
const RenameServerBox = () => {
|
||||||
const { isSubmitting } = useFormikContext<Values>();
|
const { isSubmitting } = useFormikContext<Values>();
|
||||||
|
|
||||||
|
const serverDescriptionsEditable = useStoreState((state) => state.settings.data!.serverDescriptionsEditable);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<TitledGreyBox title={'Change Server Details'} css={tw`relative`}>
|
<TitledGreyBox title={'Change Server Details'} css={tw`relative`}>
|
||||||
<SpinnerOverlay visible={isSubmitting} />
|
<SpinnerOverlay visible={isSubmitting} />
|
||||||
<Form css={tw`mb-0`}>
|
<Form css={tw`mb-0`}>
|
||||||
<Field id={'name'} name={'name'} label={'Server Name'} type={'text'} />
|
<Field id={'name'} name={'name'} label={'Server Name'} type={'text'} />
|
||||||
<div css={tw`mt-6`}>
|
{serverDescriptionsEditable && (
|
||||||
<Label>Server Description</Label>
|
<div css={tw`mt-6`}>
|
||||||
<FormikFieldWrapper name={'description'}>
|
<Label>Server Description</Label>
|
||||||
<FormikField as={Textarea} name={'description'} rows={3} />
|
<FormikFieldWrapper name={'description'}>
|
||||||
</FormikFieldWrapper>
|
<FormikField as={Textarea} name={'description'} rows={3} />
|
||||||
</div>
|
</FormikFieldWrapper>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
<div css={tw`mt-6 text-right`}>
|
<div css={tw`mt-6 text-right`}>
|
||||||
<Button type={'submit'}>Save</Button>
|
<Button type={'submit'}>Save</Button>
|
||||||
</div>
|
</div>
|
||||||
|
@ -8,6 +8,7 @@ export interface SiteSettings {
|
|||||||
siteKey: string;
|
siteKey: string;
|
||||||
};
|
};
|
||||||
usesSyncDriver: boolean;
|
usesSyncDriver: boolean;
|
||||||
|
serverDescriptionsEditable: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface SettingsStore {
|
export interface SettingsStore {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user