From f4414a931e5154398c7d6db385c4e1b3c717e40d Mon Sep 17 00:00:00 2001
From: Saeed Vaziry <61919774+saeedvaziry@users.noreply.github.com>
Date: Wed, 25 Jun 2025 21:50:07 +0200
Subject: [PATCH] add custom path to site env (#629)
---
app/Actions/Site/UpdateEnv.php | 5 ++++-
app/Http/Middleware/HandleInertiaRequests.php | 11 ++++++++---
resources/js/components/app-header.tsx | 2 +-
resources/js/pages/application/components/env.tsx | 13 ++++++++++++-
resources/js/types/site.d.ts | 1 +
tests/Feature/API/SitesTest.php | 1 +
tests/Feature/ApplicationTest.php | 5 +++++
7 files changed, 32 insertions(+), 6 deletions(-)
diff --git a/app/Actions/Site/UpdateEnv.php b/app/Actions/Site/UpdateEnv.php
index 1219d6a9..b3aa1a01 100644
--- a/app/Actions/Site/UpdateEnv.php
+++ b/app/Actions/Site/UpdateEnv.php
@@ -17,12 +17,15 @@ public function update(Site $site, array $input): void
{
Validator::make($input, [
'env' => ['required', 'string'],
+ 'path' => ['required', 'string'],
])->validate();
$site->server->os()->write(
- $site->path.'/.env',
+ $input['path'],
trim((string) $input['env']),
$site->user,
);
+
+ $site->jsonUpdate('type_data', 'env_path', $input['path']);
}
}
diff --git a/app/Http/Middleware/HandleInertiaRequests.php b/app/Http/Middleware/HandleInertiaRequests.php
index 4ede1db0..c8407338 100644
--- a/app/Http/Middleware/HandleInertiaRequests.php
+++ b/app/Http/Middleware/HandleInertiaRequests.php
@@ -55,12 +55,17 @@ public function share(Request $request): array
$data = [];
if ($request->route('server')) {
- $data['server'] = ServerResource::make($request->route('server'));
+ /** @var Server $server */
+ $server = $request->route('server');
+ if ($user && $user->can('view', $server) && $user->current_project_id !== $server->project_id) {
+ $user->current_project_id = $server->project_id;
+ $user->save();
+ }
+
+ $data['server'] = ServerResource::make($server);
// sites
$sites = [];
- /** @var Server $server */
- $server = $request->route('server');
if ($user && $user->can('viewAny', [Site::class, $server])) {
$sites = SiteResource::collection($server->sites);
}
diff --git a/resources/js/components/app-header.tsx b/resources/js/components/app-header.tsx
index e57a70a8..027c773d 100644
--- a/resources/js/components/app-header.tsx
+++ b/resources/js/components/app-header.tsx
@@ -19,7 +19,7 @@ export function AppHeader() {
- {page.props.server && (
+ {page.props.server && page.props.server.services['webserver'] && (
<>
diff --git a/resources/js/pages/application/components/env.tsx b/resources/js/pages/application/components/env.tsx
index 28a60793..0be68689 100644
--- a/resources/js/pages/application/components/env.tsx
+++ b/resources/js/pages/application/components/env.tsx
@@ -11,14 +11,17 @@ import { LoaderCircleIcon } from 'lucide-react';
import { registerDotEnvLanguage } from '@/lib/editor';
import { Site } from '@/types/site';
import { useAppearance } from '@/hooks/use-appearance';
+import { Input } from '@/components/ui/input';
export default function Env({ site, children }: { site: Site; children: ReactNode }) {
const { getActualAppearance } = useAppearance();
const [open, setOpen] = useState(false);
const form = useForm<{
env: string;
+ path: string;
}>({
env: '',
+ path: site.type_data.env_path || `${site.path}/.env`,
});
const submit = (e: FormEvent) => {
@@ -55,7 +58,15 @@ export default function Env({ site, children }: { site: Site; children: ReactNod
{children}
- Edit .env
+
+ form.setData('path', e.target.value)}
+ autoFocus={false}
+ className="max-w-[80%]"
+ />
+
Edit .env file