mirror of
https://github.com/vitodeploy/vito.git
synced 2025-07-01 14:06:15 +00:00
Compare commits
21 Commits
Author | SHA1 | Date | |
---|---|---|---|
debcd002f1 | |||
59e8c82e5c | |||
682da0d6d5 | |||
9db310a06b | |||
f70963d6bb | |||
b75df8e1c5 | |||
a22e9cb946 | |||
b2b9bea0b1 | |||
3f4a2bce3a | |||
8bffefabef | |||
3da1f4fe4c | |||
2214a76e09 | |||
55bf8b8ecf | |||
0420babdef | |||
1c3d78a5ed | |||
8665435bc4 | |||
0ec6a9dea2 | |||
bdfda05398 | |||
919cdc6892 | |||
902548e463 | |||
2462b31f3b |
38
.env.docker
Executable file
38
.env.docker
Executable file
@ -0,0 +1,38 @@
|
||||
APP_NAME=Vito
|
||||
APP_ENV=production
|
||||
APP_KEY=
|
||||
APP_DEBUG=false
|
||||
APP_URL=http://localhost
|
||||
|
||||
LOG_CHANNEL=stack
|
||||
LOG_LEVEL=debug
|
||||
|
||||
DB_CONNECTION=mysql
|
||||
DB_HOST=127.0.0.1
|
||||
DB_PORT=3306
|
||||
DB_DATABASE=vito
|
||||
DB_USERNAME=root
|
||||
DB_PASSWORD=password
|
||||
|
||||
BROADCAST_DRIVER=null
|
||||
CACHE_DRIVER=file
|
||||
FILESYSTEM_DRIVER=local
|
||||
QUEUE_CONNECTION=default
|
||||
SESSION_DRIVER=database
|
||||
SESSION_LIFETIME=120
|
||||
|
||||
REDIS_HOST=127.0.0.1
|
||||
REDIS_PASSWORD=null
|
||||
REDIS_PORT=6379
|
||||
|
||||
MAIL_MAILER=smtp
|
||||
MAIL_HOST=
|
||||
MAIL_PORT=
|
||||
MAIL_USERNAME=null
|
||||
MAIL_PASSWORD=null
|
||||
MAIL_ENCRYPTION=null
|
||||
MAIL_FROM_ADDRESS=null
|
||||
MAIL_FROM_NAME="${APP_NAME}"
|
||||
|
||||
SSH_PUBLIC_KEY_NAME=ssh-public.key
|
||||
SSH_PRIVATE_KEY_NAME=ssh-private.pem
|
65
Dockerfile
Normal file
65
Dockerfile
Normal file
@ -0,0 +1,65 @@
|
||||
FROM ubuntu:22.04
|
||||
|
||||
WORKDIR /var/www/html
|
||||
|
||||
ENV DEBIAN_FRONTEND noninteractive
|
||||
|
||||
RUN echo "mysql-server mysql-server/root_password password password" | debconf-set-selections
|
||||
RUN echo "mysql-server mysql-server/root_password_again password password" | debconf-set-selections
|
||||
|
||||
# upgrade
|
||||
RUN apt clean && apt update && apt update && apt upgrade -y && apt autoremove -y
|
||||
|
||||
# requirements
|
||||
RUN apt install -y software-properties-common curl zip unzip git gcc
|
||||
|
||||
# nginx
|
||||
RUN apt install -y nginx
|
||||
|
||||
# php
|
||||
RUN apt update \
|
||||
&& apt install -y gnupg gosu curl ca-certificates zip unzip git supervisor libcap2-bin libpng-dev \
|
||||
python2 dnsutils librsvg2-bin fswatch wget \
|
||||
&& add-apt-repository ppa:ondrej/php -y \
|
||||
&& apt update \
|
||||
&& apt install -y php8.1 php8.1-fpm php8.1-mbstring php8.1-mysql php8.1-mcrypt php8.1-gd php8.1-xml \
|
||||
php8.1-curl php8.1-gettext php8.1-zip php8.1-bcmath php8.1-soap php8.1-redis
|
||||
COPY docker/standalone/php.ini /etc/php/8.1/cli/conf.d/99-vito.ini
|
||||
|
||||
# composer
|
||||
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
|
||||
|
||||
# mysql
|
||||
RUN wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.22-1_all.deb \
|
||||
&& mkdir -p /etc/apt/keyrings \
|
||||
&& apt clean \
|
||||
&& apt update \
|
||||
&& dpkg -i mysql-apt-config_0.8.22-1_all.deb \
|
||||
&& apt install mysql-server -y
|
||||
|
||||
RUN service mysql stop
|
||||
|
||||
# app
|
||||
COPY . /var/www/html
|
||||
RUN rm -rf /var/www/html/vendor
|
||||
RUN rm -rf /var/www/html/.env
|
||||
RUN composer install --no-dev --prefer-dist
|
||||
RUN chown -R www-data:www-data /var/www/html \
|
||||
&& chmod -R 755 /var/www/html/storage /var/www/html/bootstrap/cache
|
||||
|
||||
# webserver
|
||||
RUN rm /etc/nginx/sites-available/default
|
||||
RUN rm /etc/nginx/sites-enabled/default
|
||||
COPY docker/standalone/nginx.conf /etc/nginx/sites-available/default
|
||||
RUN ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default
|
||||
|
||||
# supervisord
|
||||
COPY docker/standalone/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
|
||||
|
||||
# start
|
||||
COPY docker/standalone/start.sh /start.sh
|
||||
RUN chmod +x /start.sh
|
||||
|
||||
EXPOSE 80 3306
|
||||
|
||||
CMD ["/start.sh"]
|
55
README.md
55
README.md
@ -1,36 +1,49 @@
|
||||
# Vito
|
||||
|
||||

|
||||
<p align="center">
|
||||
<img alt="srcshot 2024-02-23 at 16 26 21@2x" src="https://github.com/vitodeploy/vito/assets/61919774/c22842ff-b458-443c-90b7-a98148b0d49e" alt="VitoDeploy>
|
||||
<p align="center">
|
||||
<a href="https://github.com/vitodeploy/vito/actions"><img alt="GitHub Workflow Status" src="https://github.com/vitodeploy/vito/workflows/tests/badge.svg"></a>
|
||||
</p>
|
||||
</p>
|
||||
|
||||

|
||||
------
|
||||
## About Vito
|
||||
|
||||
Better Readme will come soon... :)
|
||||
Vito is a self-hosted web application that helps you manage your servers and deploy your PHP applications into production servers without a hassle.
|
||||
|
||||
## Documentation
|
||||
## Features
|
||||
|
||||
https://vitodeploy.com
|
||||
- Provisions and Manages the server
|
||||
- Easy database management, Supports Mysql and MariaDB
|
||||
- Deploy your PHP applications such as Laravel
|
||||
- Manage your server's firewall
|
||||
- Supports Custom and Letsencrypt SSL
|
||||
- Uses supervisor to handle queues
|
||||
- Manages server's services
|
||||
- Deploy your SSH Keys to the server
|
||||
- Create and Manage cron jobs on the server
|
||||
|
||||
## Feedbacks
|
||||
## Useful Links
|
||||
|
||||
https://features.vitodeploy.com
|
||||
|
||||
## Roadmap
|
||||
|
||||
https://https://features.vitodeploy.com/roadmap
|
||||
|
||||
## Contribution
|
||||
|
||||
Please read the contribution guide [Here](/CONTRIBUTING.md)
|
||||
|
||||
## Security
|
||||
|
||||
Please read the security policy [Here](/SECURITY.md)
|
||||
- [Documentation](https://vitodeploy.com)
|
||||
- [Feedbacks](https://vitodeploy.featurebase.app)
|
||||
- [Roadmap](https://vitodeploy.featurebase.app/roadmap)
|
||||
- [Discord](https://discord.gg/dcUWA5DV)
|
||||
- [Contribution](/CONTRIBUTING.md)
|
||||
- [Security](/SECURITY.md)
|
||||
|
||||
## Credits
|
||||
|
||||
- Laravel
|
||||
- Tailwind
|
||||
- Tailwindcss
|
||||
- Livewire
|
||||
- Alpinejs
|
||||
- Vite
|
||||
- Laravel Enum by BenSampo
|
||||
- Log Viewer by Arunas Skirius
|
||||
- PHPSecLib
|
||||
- Laravel Blade Icons
|
||||
- Guzzlehttp
|
||||
- Owenvoke for `owenvoke/blade-fontawesome`
|
||||
- Axios
|
||||
- Toastr by CodeSeven
|
||||
|
@ -44,9 +44,8 @@ public function create(User $creator, array $input): Server
|
||||
'progress_step' => 'Initializing',
|
||||
]);
|
||||
|
||||
DB::beginTransaction();
|
||||
try {
|
||||
DB::beginTransaction();
|
||||
|
||||
if ($server->provider != 'custom') {
|
||||
$server->provider_id = $input['server_provider'];
|
||||
}
|
||||
@ -119,7 +118,6 @@ private function validateInputs(array $input): void
|
||||
if ($input['provider'] == 'custom') {
|
||||
$rules['ip'] = [
|
||||
'required',
|
||||
'ip',
|
||||
new RestrictedIPAddressesRule(),
|
||||
];
|
||||
$rules['port'] = [
|
||||
|
@ -23,9 +23,8 @@ public function create(Server $server, array $input): Site
|
||||
{
|
||||
$this->validateInputs($server, $input);
|
||||
|
||||
DB::beginTransaction();
|
||||
try {
|
||||
DB::beginTransaction();
|
||||
|
||||
$site = new Site([
|
||||
'server_id' => $server->id,
|
||||
'type' => $input['type'],
|
||||
|
0
app/Actions/Site/UpdateEnv.php
Executable file → Normal file
0
app/Actions/Site/UpdateEnv.php
Executable file → Normal file
@ -8,7 +8,7 @@ interface Notification
|
||||
{
|
||||
public function rawText(): string;
|
||||
|
||||
public function toMail(object $notifiable): MailMessage;
|
||||
public function toEmail(object $notifiable): MailMessage;
|
||||
|
||||
public function toSlack(object $notifiable): string;
|
||||
|
||||
|
@ -8,6 +8,8 @@ final class SiteType extends Enum
|
||||
{
|
||||
const PHP = 'php';
|
||||
|
||||
const PHP_BLANK = 'php-blank';
|
||||
|
||||
const LARAVEL = 'laravel';
|
||||
|
||||
const WORDPRESS = 'wordpress';
|
||||
|
@ -8,7 +8,7 @@
|
||||
class Notifier
|
||||
{
|
||||
/**
|
||||
* In the future we can send notifications based on the notifiable instance
|
||||
* In the future we can send notifications based on the notifiable instance,
|
||||
* For example, If it was a server then we will send the channels specified by that server
|
||||
* For now, we will send all channels.
|
||||
*/
|
||||
|
@ -64,11 +64,15 @@ public function setLog(string $logType, $siteId = null): void
|
||||
*/
|
||||
public function connect(bool $sftp = false): void
|
||||
{
|
||||
$ip = $this->server->ip;
|
||||
if (str($ip)->contains(':')) {
|
||||
$ip = '['.$ip.']';
|
||||
}
|
||||
try {
|
||||
if ($sftp) {
|
||||
$this->connection = new SFTP($this->server->ip, $this->server->port);
|
||||
$this->connection = new SFTP($ip, $this->server->port);
|
||||
} else {
|
||||
$this->connection = new SSH2($this->server->ip, $this->server->port);
|
||||
$this->connection = new SSH2($ip, $this->server->port);
|
||||
}
|
||||
|
||||
$login = $this->connection->login($this->user, $this->privateKey);
|
||||
|
@ -32,9 +32,6 @@ public function info(string $message): void
|
||||
|
||||
private function toast(string $type, string $message): void
|
||||
{
|
||||
$this->component->dispatchBrowserEvent('toast', [
|
||||
'type' => $type,
|
||||
'message' => $message,
|
||||
]);
|
||||
$this->component->dispatch('toast', type: $type, message: $message);
|
||||
}
|
||||
}
|
||||
|
@ -23,9 +23,9 @@ public function deploy(): void
|
||||
|
||||
$this->toast()->success(__('Deployment started!'));
|
||||
|
||||
$this->emitTo(DeploymentsList::class, '$refresh');
|
||||
$this->dispatch('$refresh')->to(DeploymentsList::class);
|
||||
|
||||
$this->emitTo(DeploymentScript::class, '$refresh');
|
||||
$this->dispatch('$refresh')->to(DeploymentScript::class);
|
||||
} catch (SourceControlIsNotConnected $e) {
|
||||
session()->flash('toast.type', 'error');
|
||||
session()->flash('toast.message', $e->getMessage());
|
||||
|
@ -27,8 +27,8 @@ public function save(): void
|
||||
|
||||
session()->flash('status', 'script-updated');
|
||||
|
||||
$this->emitTo(Deploy::class, '$refresh');
|
||||
$this->emitTo(AutoDeployment::class, '$refresh');
|
||||
$this->dispatch('$refresh')->to(Deploy::class);
|
||||
$this->dispatch('$refresh')->to(AutoDeployment::class);
|
||||
}
|
||||
|
||||
public function render(): View
|
||||
|
@ -22,7 +22,7 @@ public function showLog(int $id): void
|
||||
$deployment = $this->site->deployments()->findOrFail($id);
|
||||
$this->logContent = $deployment->log->content;
|
||||
|
||||
$this->dispatchBrowserEvent('open-modal', 'show-log');
|
||||
$this->dispatch('open-modal', 'show-log');
|
||||
}
|
||||
|
||||
public function render(): View
|
||||
|
@ -14,11 +14,11 @@ class Env extends Component
|
||||
|
||||
public Site $site;
|
||||
|
||||
public string $env;
|
||||
public string $env = 'Loading...';
|
||||
|
||||
public function mount(): void
|
||||
public function loadEnv(): void
|
||||
{
|
||||
$this->env = $this->site->env;
|
||||
$this->env = $this->site->getEnv();
|
||||
}
|
||||
|
||||
public function save(): void
|
||||
@ -27,7 +27,7 @@ public function save(): void
|
||||
|
||||
session()->flash('status', 'updating-env');
|
||||
|
||||
$this->emit(Deploy::class, '$refresh');
|
||||
$this->dispatch('$refresh')->to(Deploy::class);
|
||||
}
|
||||
|
||||
public function render(): View
|
||||
|
19
app/Http/Livewire/Application/PhpBlankApp.php
Normal file
19
app/Http/Livewire/Application/PhpBlankApp.php
Normal file
@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Livewire\Application;
|
||||
|
||||
use App\Models\Site;
|
||||
use App\Traits\RefreshComponentOnBroadcast;
|
||||
use Livewire\Component;
|
||||
|
||||
class PhpBlankApp extends Component
|
||||
{
|
||||
use RefreshComponentOnBroadcast;
|
||||
|
||||
public Site $site;
|
||||
|
||||
public function render()
|
||||
{
|
||||
return view('livewire.application.php-blank-app');
|
||||
}
|
||||
}
|
@ -13,7 +13,7 @@ public function render(): View
|
||||
$event = Cache::get('broadcast');
|
||||
if ($event) {
|
||||
Cache::forget('broadcast');
|
||||
$this->emit('broadcast', $event);
|
||||
$this->dispatch('broadcast', $event);
|
||||
}
|
||||
|
||||
return view('livewire.broadcast');
|
||||
|
@ -22,9 +22,9 @@ public function create(): void
|
||||
{
|
||||
app(\App\Actions\CronJob\CreateCronJob::class)->create($this->server, $this->all());
|
||||
|
||||
$this->emitTo(CronjobsList::class, '$refresh');
|
||||
$this->dispatch('$refresh')->to(CronjobsList::class);
|
||||
|
||||
$this->dispatchBrowserEvent('created', true);
|
||||
$this->dispatch('created');
|
||||
}
|
||||
|
||||
public function render(): View
|
||||
|
@ -23,7 +23,7 @@ public function delete(): void
|
||||
|
||||
$this->refreshComponent([]);
|
||||
|
||||
$this->dispatchBrowserEvent('confirmed', true);
|
||||
$this->dispatch('confirmed');
|
||||
}
|
||||
|
||||
public function render(): View
|
||||
|
@ -45,7 +45,7 @@ public function restore(): void
|
||||
|
||||
$this->refreshComponent([]);
|
||||
|
||||
$this->dispatchBrowserEvent('restored', true);
|
||||
$this->dispatch('restored');
|
||||
}
|
||||
|
||||
public function delete(): void
|
||||
@ -55,7 +55,7 @@ public function delete(): void
|
||||
|
||||
$file->delete();
|
||||
|
||||
$this->dispatchBrowserEvent('confirmed', true);
|
||||
$this->dispatch('confirmed');
|
||||
}
|
||||
|
||||
public function render(): View
|
||||
|
@ -40,7 +40,7 @@ public function create(): void
|
||||
|
||||
$this->refreshComponent([]);
|
||||
|
||||
$this->dispatchBrowserEvent('backup-created', true);
|
||||
$this->dispatch('backup-created');
|
||||
}
|
||||
|
||||
public function files(int $id): void
|
||||
@ -48,7 +48,7 @@ public function files(int $id): void
|
||||
$backup = Backup::query()->findOrFail($id);
|
||||
$this->backup = $backup;
|
||||
$this->files = $backup->files()->orderByDesc('id')->simplePaginate(1);
|
||||
$this->dispatchBrowserEvent('show-files', true);
|
||||
$this->dispatch('show-files');
|
||||
}
|
||||
|
||||
public function backup(): void
|
||||
@ -57,7 +57,7 @@ public function backup(): void
|
||||
|
||||
$this->files = $this->backup?->files()->orderByDesc('id')->simplePaginate();
|
||||
|
||||
$this->dispatchBrowserEvent('backup-running', true);
|
||||
$this->dispatch('backup-running');
|
||||
}
|
||||
|
||||
public function delete(): void
|
||||
@ -67,7 +67,7 @@ public function delete(): void
|
||||
|
||||
$backup->delete();
|
||||
|
||||
$this->dispatchBrowserEvent('confirmed', true);
|
||||
$this->dispatch('confirmed');
|
||||
}
|
||||
|
||||
public function render(): View
|
||||
|
@ -40,7 +40,7 @@ public function create(): void
|
||||
|
||||
$this->refreshComponent([]);
|
||||
|
||||
$this->dispatchBrowserEvent('database-created', true);
|
||||
$this->dispatch('database-created');
|
||||
}
|
||||
|
||||
public function delete(): void
|
||||
@ -52,9 +52,9 @@ public function delete(): void
|
||||
|
||||
$this->refreshComponent([]);
|
||||
|
||||
$this->emitTo(DatabaseUserList::class, '$refresh');
|
||||
$this->dispatch('$refresh')->to(DatabaseUserList::class);
|
||||
|
||||
$this->dispatchBrowserEvent('confirmed', true);
|
||||
$this->dispatch('confirmed');
|
||||
}
|
||||
|
||||
public function render(): View
|
||||
|
@ -38,7 +38,7 @@ public function create(): void
|
||||
|
||||
$this->refreshComponent([]);
|
||||
|
||||
$this->dispatchBrowserEvent('database-user-created', true);
|
||||
$this->dispatch('database-user-created');
|
||||
}
|
||||
|
||||
public function delete(): void
|
||||
@ -50,9 +50,9 @@ public function delete(): void
|
||||
|
||||
$this->refreshComponent([]);
|
||||
|
||||
$this->emitTo(DatabaseList::class, '$refresh');
|
||||
$this->dispatch('$refresh')->to(DatabaseList::class);
|
||||
|
||||
$this->dispatchBrowserEvent('confirmed', true);
|
||||
$this->dispatch('confirmed');
|
||||
}
|
||||
|
||||
public function viewPassword(int $id): void
|
||||
@ -62,7 +62,7 @@ public function viewPassword(int $id): void
|
||||
|
||||
$this->viewPassword = $databaseUser->password;
|
||||
|
||||
$this->dispatchBrowserEvent('open-modal', 'database-user-password');
|
||||
$this->dispatch('open-modal', 'database-user-password');
|
||||
}
|
||||
|
||||
public function showLink(int $id): void
|
||||
@ -73,7 +73,7 @@ public function showLink(int $id): void
|
||||
$this->linkId = $id;
|
||||
$this->link = $databaseUser->databases ?? [];
|
||||
|
||||
$this->dispatchBrowserEvent('open-modal', 'link-database-user');
|
||||
$this->dispatch('open-modal', 'link-database-user');
|
||||
}
|
||||
|
||||
public function link(): void
|
||||
@ -85,7 +85,7 @@ public function link(): void
|
||||
|
||||
$this->refreshComponent([]);
|
||||
|
||||
$this->dispatchBrowserEvent('linked', true);
|
||||
$this->dispatch('linked');
|
||||
}
|
||||
|
||||
public function render(): View
|
||||
|
@ -28,9 +28,9 @@ public function create(): void
|
||||
{
|
||||
app(CreateRule::class)->create($this->server, $this->all());
|
||||
|
||||
$this->emitTo(FirewallRulesList::class, '$refresh');
|
||||
$this->dispatch('$refresh')->to(FirewallRulesList::class);
|
||||
|
||||
$this->dispatchBrowserEvent('created', true);
|
||||
$this->dispatch('created');
|
||||
}
|
||||
|
||||
public function render(): View
|
||||
|
@ -25,7 +25,7 @@ public function delete(): void
|
||||
|
||||
$this->refreshComponent([]);
|
||||
|
||||
$this->dispatchBrowserEvent('confirmed', true);
|
||||
$this->dispatch('confirmed');
|
||||
}
|
||||
|
||||
public function render(): View
|
||||
|
@ -26,9 +26,9 @@ public function add(): void
|
||||
$this->all()
|
||||
);
|
||||
|
||||
$this->emitTo(ChannelsList::class, '$refresh');
|
||||
$this->dispatch('$refresh')->to(ChannelsList::class);
|
||||
|
||||
$this->dispatchBrowserEvent('added', true);
|
||||
$this->dispatch('added');
|
||||
}
|
||||
|
||||
public function render(): View
|
||||
|
@ -25,7 +25,7 @@ public function delete(): void
|
||||
|
||||
$this->refreshComponent([]);
|
||||
|
||||
$this->dispatchBrowserEvent('confirmed', true);
|
||||
$this->dispatch('confirmed');
|
||||
}
|
||||
|
||||
public function render(): View
|
||||
|
@ -56,7 +56,7 @@ public function uninstall(): void
|
||||
|
||||
$this->refreshComponent([]);
|
||||
|
||||
$this->dispatchBrowserEvent('confirmed', true);
|
||||
$this->dispatch('confirmed');
|
||||
}
|
||||
|
||||
public function loadIni(int $id): void
|
||||
|
@ -33,7 +33,7 @@ public function submit(): void
|
||||
|
||||
session()->flash('status', 'profile-updated');
|
||||
|
||||
$this->emitTo(UserDropdown::class, '$refresh');
|
||||
$this->dispatch('$refresh')->to(UserDropdown::class);
|
||||
}
|
||||
|
||||
public function sendVerificationEmail(): void
|
||||
|
@ -21,9 +21,9 @@ public function create(): void
|
||||
app(\App\Actions\Projects\CreateProject::class)
|
||||
->create(auth()->user(), $this->inputs);
|
||||
|
||||
$this->emitTo(ProjectsList::class, '$refresh');
|
||||
$this->dispatch('$refresh')->to(ProjectsList::class);
|
||||
|
||||
$this->dispatchBrowserEvent('created', true);
|
||||
$this->dispatch('created');
|
||||
}
|
||||
|
||||
public function render(): View
|
||||
|
@ -24,9 +24,9 @@ public function create(): void
|
||||
{
|
||||
app(\App\Actions\Queue\CreateQueue::class)->create($this->site, $this->all());
|
||||
|
||||
$this->emitTo(QueuesList::class, '$refresh');
|
||||
$this->dispatch('$refresh')->to(QueuesList::class);
|
||||
|
||||
$this->dispatchBrowserEvent('created', true);
|
||||
$this->dispatch('created');
|
||||
}
|
||||
|
||||
public function render(): View
|
||||
|
@ -24,7 +24,7 @@ public function delete(): void
|
||||
|
||||
$this->refreshComponent([]);
|
||||
|
||||
$this->dispatchBrowserEvent('confirmed', true);
|
||||
$this->dispatch('confirmed');
|
||||
}
|
||||
|
||||
public function start(Queue $queue): void
|
||||
|
@ -27,7 +27,7 @@ public function showLog(int $id): void
|
||||
$log = $this->server->logs()->findOrFail($id);
|
||||
$this->logContent = $log->content;
|
||||
|
||||
$this->dispatchBrowserEvent('open-modal', 'show-log');
|
||||
$this->dispatch('open-modal', 'show-log');
|
||||
}
|
||||
|
||||
public function render(): View
|
||||
|
@ -22,9 +22,9 @@ public function connect(): void
|
||||
{
|
||||
app(CreateServerProvider::class)->create(auth()->user(), $this->all());
|
||||
|
||||
$this->emitTo(ProvidersList::class, '$refresh');
|
||||
$this->dispatch('$refresh')->to(ProvidersList::class);
|
||||
|
||||
$this->dispatchBrowserEvent('connected', true);
|
||||
$this->dispatch('connected');
|
||||
}
|
||||
|
||||
public function render(): View
|
||||
|
@ -25,7 +25,7 @@ public function delete(): void
|
||||
|
||||
$this->refreshComponent([]);
|
||||
|
||||
$this->dispatchBrowserEvent('confirmed', true);
|
||||
$this->dispatch('confirmed');
|
||||
}
|
||||
|
||||
public function render(): View
|
||||
|
@ -19,9 +19,9 @@ public function add(): void
|
||||
|
||||
$key->deployTo($this->server);
|
||||
|
||||
$this->emitTo(ServerKeysList::class, '$refresh');
|
||||
$this->dispatch('$refresh')->to(ServerKeysList::class);
|
||||
|
||||
$this->dispatchBrowserEvent('added', true);
|
||||
$this->dispatch('added');
|
||||
}
|
||||
|
||||
public function render(): View
|
||||
|
@ -24,9 +24,9 @@ public function add(): void
|
||||
|
||||
$key->deployTo($this->server);
|
||||
|
||||
$this->emitTo(ServerKeysList::class, '$refresh');
|
||||
$this->dispatch('$refresh')->to(ServerKeysList::class);
|
||||
|
||||
$this->dispatchBrowserEvent('added', true);
|
||||
$this->dispatch('added');
|
||||
}
|
||||
|
||||
public function render(): View
|
||||
|
@ -28,7 +28,7 @@ public function delete(): void
|
||||
|
||||
$this->refreshComponent([]);
|
||||
|
||||
$this->dispatchBrowserEvent('confirmed', true);
|
||||
$this->dispatch('confirmed');
|
||||
}
|
||||
|
||||
public function render(): View
|
||||
|
@ -21,7 +21,7 @@ public function refreshComponent(array $data): void
|
||||
return;
|
||||
}
|
||||
|
||||
$this->emit('refreshComponent');
|
||||
$this->dispatch('refreshComponent');
|
||||
}
|
||||
|
||||
public function render(): View
|
||||
|
@ -19,9 +19,9 @@ public function install(): void
|
||||
{
|
||||
app(InstallPHPMyAdminAction::class)->install($this->server, $this->all());
|
||||
|
||||
$this->dispatchBrowserEvent('started', true);
|
||||
$this->dispatch('started');
|
||||
|
||||
$this->emitTo(ServicesList::class, '$refresh');
|
||||
$this->dispatch('$refresh')->to(ServicesList::class);
|
||||
}
|
||||
|
||||
public function render(): View
|
||||
|
@ -26,7 +26,7 @@ public function refreshComponent(array $data): void
|
||||
return;
|
||||
}
|
||||
|
||||
$this->emit('refreshComponent');
|
||||
$this->dispatch('refreshComponent');
|
||||
}
|
||||
|
||||
public function render(): View
|
||||
|
@ -20,9 +20,9 @@ public function connect(): void
|
||||
{
|
||||
app(ConnectSourceControl::class)->connect($this->all());
|
||||
|
||||
$this->emitTo(SourceControlsList::class, '$refresh');
|
||||
$this->dispatch('$refresh')->to(SourceControlsList::class);
|
||||
|
||||
$this->dispatchBrowserEvent('connected', true);
|
||||
$this->dispatch('connected');
|
||||
}
|
||||
|
||||
public function render(): View
|
||||
|
@ -25,7 +25,7 @@ public function delete(): void
|
||||
|
||||
$this->refreshComponent([]);
|
||||
|
||||
$this->dispatchBrowserEvent('confirmed', true);
|
||||
$this->dispatch('confirmed');
|
||||
}
|
||||
|
||||
public function render(): View
|
||||
|
@ -19,9 +19,9 @@ public function add(): void
|
||||
$this->all()
|
||||
);
|
||||
|
||||
$this->emitTo(KeysList::class, '$refresh');
|
||||
$this->dispatch('$refresh')->to(KeysList::class);
|
||||
|
||||
$this->dispatchBrowserEvent('added', true);
|
||||
$this->dispatch('added');
|
||||
}
|
||||
|
||||
public function render(): View
|
||||
|
@ -25,7 +25,7 @@ public function delete(): void
|
||||
|
||||
$this->refreshComponent([]);
|
||||
|
||||
$this->dispatchBrowserEvent('confirmed', true);
|
||||
$this->dispatch('confirmed');
|
||||
}
|
||||
|
||||
public function render(): View
|
||||
|
@ -23,9 +23,9 @@ public function create(): void
|
||||
{
|
||||
app(\App\Actions\SSL\CreateSSL::class)->create($this->site, $this->all());
|
||||
|
||||
$this->emitTo(SslsList::class, '$refresh');
|
||||
$this->dispatch('$refresh')->to(SslsList::class);
|
||||
|
||||
$this->dispatchBrowserEvent('created', true);
|
||||
$this->dispatch('created');
|
||||
}
|
||||
|
||||
public function render(): View
|
||||
|
@ -25,7 +25,7 @@ public function delete(): void
|
||||
|
||||
$this->refreshComponent([]);
|
||||
|
||||
$this->dispatchBrowserEvent('confirmed', true);
|
||||
$this->dispatch('confirmed');
|
||||
}
|
||||
|
||||
public function refreshComponent(array $data): void
|
||||
@ -34,7 +34,7 @@ public function refreshComponent(array $data): void
|
||||
$this->toast()->error(__('SSL creation failed!'));
|
||||
}
|
||||
|
||||
$this->emit('refreshComponent');
|
||||
$this->dispatch('refreshComponent');
|
||||
}
|
||||
|
||||
public function render(): View
|
||||
|
@ -32,9 +32,9 @@ public function connect(): void
|
||||
{
|
||||
app(CreateStorageProvider::class)->create(auth()->user(), $this->all());
|
||||
|
||||
$this->emitTo(ProvidersList::class, '$refresh');
|
||||
$this->dispatch('$refresh')->to(ProvidersList::class);
|
||||
|
||||
$this->dispatchBrowserEvent('connected', true);
|
||||
$this->dispatch('connected');
|
||||
}
|
||||
|
||||
public function render(): View
|
||||
|
@ -25,7 +25,7 @@ public function delete(): void
|
||||
|
||||
$this->refreshComponent([]);
|
||||
|
||||
$this->dispatchBrowserEvent('confirmed', true);
|
||||
$this->dispatch('confirmed');
|
||||
}
|
||||
|
||||
public function render(): View
|
||||
|
@ -26,9 +26,7 @@ public function handle(): void
|
||||
new EditFileCommand(
|
||||
$this->site->path.'/.env',
|
||||
$this->site->env
|
||||
),
|
||||
'update-env',
|
||||
$this->site->id
|
||||
)
|
||||
);
|
||||
event(
|
||||
new Broadcast('deploy-site-env-finished', [
|
||||
|
@ -69,8 +69,8 @@ public function deployHook(): void
|
||||
*/
|
||||
public function destroyHook(): void
|
||||
{
|
||||
DB::beginTransaction();
|
||||
try {
|
||||
DB::beginTransaction();
|
||||
$this->sourceControl->provider()->destroyHook($this->site->repository, $this->hook_id);
|
||||
$this->delete();
|
||||
DB::commit();
|
||||
|
@ -4,6 +4,7 @@
|
||||
|
||||
use App\Contracts\ServerType;
|
||||
use App\Enums\ServerStatus;
|
||||
use App\Enums\ServiceStatus;
|
||||
use App\Facades\Notifier;
|
||||
use App\Facades\SSH;
|
||||
use App\Jobs\Installation\Upgrade;
|
||||
@ -227,6 +228,18 @@ public function defaultService($type): ?Service
|
||||
->where('is_default', 1)
|
||||
->first();
|
||||
|
||||
// If no default service found, get the first service with status ready or stopped
|
||||
if (! $service) {
|
||||
$service = $this->services()
|
||||
->where('type', $type)
|
||||
->whereIn('status', [ServiceStatus::READY, ServiceStatus::STOPPED])
|
||||
->first();
|
||||
if ($service) {
|
||||
$service->is_default = 1;
|
||||
$service->save();
|
||||
}
|
||||
}
|
||||
|
||||
return $service;
|
||||
}
|
||||
|
||||
|
@ -15,6 +15,7 @@
|
||||
use App\Jobs\Site\UpdateBranch;
|
||||
use App\Notifications\SiteInstallationFailed;
|
||||
use App\Notifications\SiteInstallationSucceed;
|
||||
use App\SSHCommands\Website\GetEnvCommand;
|
||||
use Exception;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
@ -357,8 +358,8 @@ public function enableAutoDeployment(): void
|
||||
throw new SourceControlIsNotConnected($this->source_control);
|
||||
}
|
||||
|
||||
DB::beginTransaction();
|
||||
try {
|
||||
DB::beginTransaction();
|
||||
$gitHook = new GitHook([
|
||||
'site_id' => $this->id,
|
||||
'source_control_id' => $this->sourceControl()->id,
|
||||
@ -442,4 +443,13 @@ public function isReady(): bool
|
||||
{
|
||||
return $this->status === SiteStatus::READY;
|
||||
}
|
||||
|
||||
public function getEnv(): string
|
||||
{
|
||||
return $this->server->ssh()->exec(
|
||||
new GetEnvCommand(
|
||||
$this->domain
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -3,15 +3,11 @@
|
||||
namespace App\NotificationChannels;
|
||||
|
||||
use App\Contracts\Notification;
|
||||
use App\Models\NotificationChannel;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
|
||||
class Discord extends AbstractNotificationChannel
|
||||
{
|
||||
public function channel(): string
|
||||
{
|
||||
return 'discord';
|
||||
}
|
||||
|
||||
public function createRules(array $input): array
|
||||
{
|
||||
return [
|
||||
@ -65,6 +61,8 @@ private function checkConnection(string $subject, string $text): bool
|
||||
|
||||
public function send(object $notifiable, Notification $notification): void
|
||||
{
|
||||
/** @var NotificationChannel $notifiable */
|
||||
$this->notificationChannel = $notifiable;
|
||||
$data = $this->notificationChannel->data;
|
||||
Http::post($data['webhook_url'], [
|
||||
'content' => $notification->toSlack($notifiable),
|
||||
|
@ -35,7 +35,10 @@ public function connect(): bool
|
||||
{
|
||||
try {
|
||||
Mail::to($this->data()['email'])->send(
|
||||
new NotificationMail('Test VitoDeploy', 'This is a test email!')
|
||||
new NotificationMail(
|
||||
'Connected to VitoDeploy',
|
||||
'This email confirms that you have connected your email to VitoDeploy.'
|
||||
)
|
||||
);
|
||||
} catch (Throwable) {
|
||||
return false;
|
||||
@ -48,8 +51,7 @@ public function send(object $notifiable, Notification $notification): void
|
||||
{
|
||||
/** @var NotificationChannel $notifiable */
|
||||
$this->notificationChannel = $notifiable;
|
||||
$message = $notification->toMail($notifiable);
|
||||
|
||||
$message = $notification->toEmail($notifiable);
|
||||
Mail::to($this->data()['email'])->send(
|
||||
new NotificationMail($message->subject, $message->render())
|
||||
);
|
||||
|
@ -3,15 +3,11 @@
|
||||
namespace App\NotificationChannels;
|
||||
|
||||
use App\Contracts\Notification;
|
||||
use App\Models\NotificationChannel;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
|
||||
class Slack extends AbstractNotificationChannel
|
||||
{
|
||||
public function channel(): string
|
||||
{
|
||||
return 'slack';
|
||||
}
|
||||
|
||||
public function createRules(array $input): array
|
||||
{
|
||||
return [
|
||||
@ -65,6 +61,8 @@ private function checkConnection(string $subject, string $text): bool
|
||||
|
||||
public function send(object $notifiable, Notification $notification): void
|
||||
{
|
||||
/** @var NotificationChannel $notifiable */
|
||||
$this->notificationChannel = $notifiable;
|
||||
$data = $this->notificationChannel->data;
|
||||
Http::post($data['webhook_url'], [
|
||||
'text' => $notification->toSlack($notifiable),
|
||||
|
@ -3,6 +3,7 @@
|
||||
namespace App\NotificationChannels;
|
||||
|
||||
use App\Contracts\Notification;
|
||||
use App\Models\NotificationChannel;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
use Throwable;
|
||||
|
||||
@ -10,11 +11,6 @@ class Telegram extends AbstractNotificationChannel
|
||||
{
|
||||
protected string $apiUrl = 'https://api.telegram.org/bot';
|
||||
|
||||
public function channel(): string
|
||||
{
|
||||
return 'telegram';
|
||||
}
|
||||
|
||||
public function createRules(array $input): array
|
||||
{
|
||||
return [
|
||||
@ -52,6 +48,8 @@ public function connect(): bool
|
||||
|
||||
public function send(object $notifiable, Notification $notification): void
|
||||
{
|
||||
/** @var NotificationChannel $notifiable */
|
||||
$this->notificationChannel = $notifiable;
|
||||
$this->sendToTelegram($notification->toTelegram($notifiable));
|
||||
}
|
||||
|
||||
|
@ -3,6 +3,7 @@
|
||||
namespace App\Notifications;
|
||||
|
||||
use App\Contracts\Notification as NotificationInterface;
|
||||
use App\Models\NotificationChannel;
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Notifications\Messages\MailMessage;
|
||||
@ -13,9 +14,16 @@ abstract class AbstractNotification extends Notification implements Notification
|
||||
{
|
||||
use Queueable, SerializesModels;
|
||||
|
||||
public function toMail(object $notifiable): MailMessage
|
||||
public function via(object $notifiable): string
|
||||
{
|
||||
/** @var NotificationChannel $notifiable */
|
||||
return get_class($notifiable->provider());
|
||||
}
|
||||
|
||||
public function toEmail(object $notifiable): MailMessage
|
||||
{
|
||||
return (new MailMessage())
|
||||
->subject('Notification')
|
||||
->line($this->rawText());
|
||||
}
|
||||
|
||||
|
@ -25,7 +25,7 @@ public function rawText(): string
|
||||
]);
|
||||
}
|
||||
|
||||
public function toMail(object $notifiable): MailMessage
|
||||
public function toEmail(object $notifiable): MailMessage
|
||||
{
|
||||
return (new MailMessage)
|
||||
->subject(__('Failed to delete the server from the provider!'))
|
||||
|
@ -21,7 +21,7 @@ public function rawText(): string
|
||||
]);
|
||||
}
|
||||
|
||||
public function toMail(object $notifiable): MailMessage
|
||||
public function toEmail(object $notifiable): MailMessage
|
||||
{
|
||||
return (new MailMessage)
|
||||
->subject(__('Server disconnected!'))
|
||||
|
@ -22,7 +22,7 @@ public function rawText(): string
|
||||
]);
|
||||
}
|
||||
|
||||
public function toMail(object $notifiable): MailMessage
|
||||
public function toEmail(object $notifiable): MailMessage
|
||||
{
|
||||
return (new MailMessage)
|
||||
->subject(__('Server installation failed!'))
|
||||
|
@ -22,7 +22,7 @@ public function rawText(): string
|
||||
]);
|
||||
}
|
||||
|
||||
public function toMail(object $notifiable): MailMessage
|
||||
public function toEmail(object $notifiable): MailMessage
|
||||
{
|
||||
return (new MailMessage)
|
||||
->subject(__('Server installation started!'))
|
||||
|
@ -32,7 +32,7 @@ public function rawText(): string
|
||||
]);
|
||||
}
|
||||
|
||||
public function toMail(object $notifiable): MailMessage
|
||||
public function toEmail(object $notifiable): MailMessage
|
||||
{
|
||||
$this->server->refresh();
|
||||
|
||||
|
@ -19,7 +19,7 @@ public function rawText(): string
|
||||
]);
|
||||
}
|
||||
|
||||
public function toMail(object $notifiable): MailMessage
|
||||
public function toEmail(object $notifiable): MailMessage
|
||||
{
|
||||
return (new MailMessage)
|
||||
->subject(__('Site installation failed!'))
|
||||
|
@ -18,7 +18,7 @@ public function rawText(): string
|
||||
]);
|
||||
}
|
||||
|
||||
public function toMail(object $notifiable): MailMessage
|
||||
public function toEmail(object $notifiable): MailMessage
|
||||
{
|
||||
return (new MailMessage)
|
||||
->subject(__('Site installation succeed!'))
|
||||
|
@ -18,7 +18,7 @@ public function rawText(): string
|
||||
]);
|
||||
}
|
||||
|
||||
public function toMail(object $notifiable): MailMessage
|
||||
public function toEmail(object $notifiable): MailMessage
|
||||
{
|
||||
return (new MailMessage)
|
||||
->subject(__('Source control disconnected!'))
|
||||
|
26
app/SSHCommands/Website/GetEnvCommand.php
Executable file
26
app/SSHCommands/Website/GetEnvCommand.php
Executable file
@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace App\SSHCommands\Website;
|
||||
|
||||
use App\SSHCommands\Command;
|
||||
use Illuminate\Support\Facades\File;
|
||||
|
||||
class GetEnvCommand extends Command
|
||||
{
|
||||
public function __construct(
|
||||
protected string $domain
|
||||
) {
|
||||
}
|
||||
|
||||
public function file(): string
|
||||
{
|
||||
return File::get(resource_path('commands/website/get-env.sh'));
|
||||
}
|
||||
|
||||
public function content(): string
|
||||
{
|
||||
return str($this->file())
|
||||
->replace('__domain__', $this->domain)
|
||||
->toString();
|
||||
}
|
||||
}
|
@ -14,7 +14,6 @@ public function createValidationRules(array $input): array
|
||||
return [
|
||||
'ip' => [
|
||||
'required',
|
||||
'ip',
|
||||
Rule::unique('servers', 'ip'),
|
||||
new RestrictedIPAddressesRule(),
|
||||
],
|
||||
|
@ -163,7 +163,7 @@ protected function addSupervisor(): void
|
||||
}
|
||||
|
||||
/**
|
||||
* add supervisor
|
||||
* add redis
|
||||
*/
|
||||
protected function addRedis(): void
|
||||
{
|
||||
@ -175,7 +175,7 @@ protected function addRedis(): void
|
||||
}
|
||||
|
||||
/**
|
||||
* add supervisor
|
||||
* add ufw
|
||||
*/
|
||||
protected function addUfw(): void
|
||||
{
|
||||
|
67
app/SiteTypes/PHPBlank.php
Executable file
67
app/SiteTypes/PHPBlank.php
Executable file
@ -0,0 +1,67 @@
|
||||
<?php
|
||||
|
||||
namespace App\SiteTypes;
|
||||
|
||||
use App\Enums\SiteFeature;
|
||||
use App\Jobs\Site\CreateVHost;
|
||||
use Illuminate\Support\Facades\Bus;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Throwable;
|
||||
|
||||
class PHPBlank extends PHPSite
|
||||
{
|
||||
public function supportedFeatures(): array
|
||||
{
|
||||
return [
|
||||
SiteFeature::DEPLOYMENT,
|
||||
SiteFeature::ENV,
|
||||
SiteFeature::SSL,
|
||||
SiteFeature::QUEUES,
|
||||
];
|
||||
}
|
||||
|
||||
public function createValidationRules(array $input): array
|
||||
{
|
||||
return [
|
||||
'php_version' => [
|
||||
'required',
|
||||
Rule::in($this->site->server->installedPHPVersions()),
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
public function createFields(array $input): array
|
||||
{
|
||||
return [
|
||||
'web_directory' => $input['web_directory'] ?? '',
|
||||
'php_version' => $input['php_version'] ?? '',
|
||||
];
|
||||
}
|
||||
|
||||
public function data(array $input): array
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
public function install(): void
|
||||
{
|
||||
$chain = [
|
||||
new CreateVHost($this->site),
|
||||
$this->progress(65),
|
||||
function () {
|
||||
$this->site->php()?->restart();
|
||||
},
|
||||
];
|
||||
|
||||
$chain[] = function () {
|
||||
$this->site->installationFinished();
|
||||
};
|
||||
|
||||
Bus::chain($chain)
|
||||
->catch(function (Throwable $e) {
|
||||
$this->site->installationFailed($e);
|
||||
})
|
||||
->onConnection('ssh-long')
|
||||
->dispatch();
|
||||
}
|
||||
}
|
@ -15,6 +15,6 @@ public function getListeners(): array
|
||||
|
||||
public function refreshComponent(array $data): void
|
||||
{
|
||||
$this->emit('refreshComponent');
|
||||
$this->dispatch('refreshComponent');
|
||||
}
|
||||
}
|
||||
|
@ -18,8 +18,8 @@
|
||||
"laravel/sanctum": "^3.2",
|
||||
"laravel/socialite": "^5.2",
|
||||
"laravel/tinker": "^2.8",
|
||||
"livewire/livewire": "^2.12",
|
||||
"opcodesio/log-viewer": "^2.5",
|
||||
"livewire/livewire": "^3.0",
|
||||
"opcodesio/log-viewer": "^3.0",
|
||||
"owenvoke/blade-fontawesome": "^2.5",
|
||||
"phpseclib/phpseclib": "~3.0"
|
||||
},
|
||||
|
115
composer.lock
generated
115
composer.lock
generated
@ -4,7 +4,7 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "b3f98cafe7fcc5d3ce67ad09a8f66661",
|
||||
"content-hash": "f2e6a21fc0abada9bc40b4e80df42b26",
|
||||
"packages": [
|
||||
{
|
||||
"name": "aws/aws-crt-php",
|
||||
@ -2931,34 +2931,36 @@
|
||||
},
|
||||
{
|
||||
"name": "livewire/livewire",
|
||||
"version": "v2.12.6",
|
||||
"version": "v3.4.4",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/livewire/livewire.git",
|
||||
"reference": "7d3a57b3193299cf1a0639a3935c696f4da2cf92"
|
||||
"reference": "c0489d4a76382f6dcf6e2702112f86aa089d0c8d"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/livewire/livewire/zipball/7d3a57b3193299cf1a0639a3935c696f4da2cf92",
|
||||
"reference": "7d3a57b3193299cf1a0639a3935c696f4da2cf92",
|
||||
"url": "https://api.github.com/repos/livewire/livewire/zipball/c0489d4a76382f6dcf6e2702112f86aa089d0c8d",
|
||||
"reference": "c0489d4a76382f6dcf6e2702112f86aa089d0c8d",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"illuminate/database": "^7.0|^8.0|^9.0|^10.0",
|
||||
"illuminate/support": "^7.0|^8.0|^9.0|^10.0",
|
||||
"illuminate/validation": "^7.0|^8.0|^9.0|^10.0",
|
||||
"illuminate/database": "^10.0|^11.0",
|
||||
"illuminate/routing": "^10.0|^11.0",
|
||||
"illuminate/support": "^10.0|^11.0",
|
||||
"illuminate/validation": "^10.0|^11.0",
|
||||
"league/mime-type-detection": "^1.9",
|
||||
"php": "^7.2.5|^8.0",
|
||||
"symfony/http-kernel": "^5.0|^6.0"
|
||||
"php": "^8.1",
|
||||
"symfony/http-kernel": "^6.2|^7.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"calebporzio/sushi": "^2.1",
|
||||
"laravel/framework": "^7.0|^8.0|^9.0|^10.0",
|
||||
"laravel/framework": "^10.0|^11.0",
|
||||
"laravel/prompts": "^0.1.6",
|
||||
"mockery/mockery": "^1.3.1",
|
||||
"orchestra/testbench": "^5.0|^6.0|^7.0|^8.0",
|
||||
"orchestra/testbench-dusk": "^5.2|^6.0|^7.0|^8.0",
|
||||
"phpunit/phpunit": "^8.4|^9.0",
|
||||
"psy/psysh": "@stable"
|
||||
"orchestra/testbench": "8.20.0|^9.0",
|
||||
"orchestra/testbench-dusk": "8.20.0|^9.0",
|
||||
"phpunit/phpunit": "^10.4",
|
||||
"psy/psysh": "^0.11.22|^0.12"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
@ -2992,7 +2994,7 @@
|
||||
"description": "A front-end framework for Laravel.",
|
||||
"support": {
|
||||
"issues": "https://github.com/livewire/livewire/issues",
|
||||
"source": "https://github.com/livewire/livewire/tree/v2.12.6"
|
||||
"source": "https://github.com/livewire/livewire/tree/v3.4.4"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -3000,7 +3002,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2023-08-11T04:02:34+00:00"
|
||||
"time": "2024-01-28T19:07:11+00:00"
|
||||
},
|
||||
{
|
||||
"name": "monolog/monolog",
|
||||
@ -3568,20 +3570,21 @@
|
||||
},
|
||||
{
|
||||
"name": "opcodesio/log-viewer",
|
||||
"version": "v2.5.6",
|
||||
"version": "v3.4.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/opcodesio/log-viewer.git",
|
||||
"reference": "34619b89ec0501222a661863e80dc2c92618d8f3"
|
||||
"reference": "f1d89dc2e54e186f6852533a165fc49a6a83fff8"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/opcodesio/log-viewer/zipball/34619b89ec0501222a661863e80dc2c92618d8f3",
|
||||
"reference": "34619b89ec0501222a661863e80dc2c92618d8f3",
|
||||
"url": "https://api.github.com/repos/opcodesio/log-viewer/zipball/f1d89dc2e54e186f6852533a165fc49a6a83fff8",
|
||||
"reference": "f1d89dc2e54e186f6852533a165fc49a6a83fff8",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"illuminate/contracts": "^8.0|^9.0|^10.0",
|
||||
"illuminate/contracts": "^8.0|^9.0|^10.0|^11.0",
|
||||
"opcodesio/mail-parser": "^0.1.6",
|
||||
"php": "^8.0"
|
||||
},
|
||||
"conflict": {
|
||||
@ -3591,11 +3594,10 @@
|
||||
"guzzlehttp/guzzle": "^7.2",
|
||||
"itsgoingd/clockwork": "^5.1",
|
||||
"laravel/pint": "^1.0",
|
||||
"nunomaduro/collision": "^6.0",
|
||||
"orchestra/testbench": "^7.6|^8.0",
|
||||
"pestphp/pest": "^1.21",
|
||||
"pestphp/pest-plugin-laravel": "^1.1",
|
||||
"phpunit/phpunit": "^9.5",
|
||||
"nunomaduro/collision": "^7.0|^8.0",
|
||||
"orchestra/testbench": "^7.6|^8.0|^9.0",
|
||||
"pestphp/pest": "^2.0",
|
||||
"pestphp/pest-plugin-laravel": "^2.0",
|
||||
"spatie/test-time": "^1.3"
|
||||
},
|
||||
"suggest": {
|
||||
@ -3640,7 +3642,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/opcodesio/log-viewer/issues",
|
||||
"source": "https://github.com/opcodesio/log-viewer/tree/v2.5.6"
|
||||
"source": "https://github.com/opcodesio/log-viewer/tree/v3.4.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -3652,7 +3654,60 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2023-09-03T08:22:57+00:00"
|
||||
"time": "2024-02-14T15:14:59+00:00"
|
||||
},
|
||||
{
|
||||
"name": "opcodesio/mail-parser",
|
||||
"version": "v0.1.6",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/opcodesio/mail-parser.git",
|
||||
"reference": "639ef31cbd146a63416283e75afce152e13233ea"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/opcodesio/mail-parser/zipball/639ef31cbd146a63416283e75afce152e13233ea",
|
||||
"reference": "639ef31cbd146a63416283e75afce152e13233ea",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"pestphp/pest": "^2.16",
|
||||
"symfony/var-dumper": "^6.3"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Opcodes\\MailParser\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Arunas Skirius",
|
||||
"email": "arukomp@gmail.com",
|
||||
"role": "Developer"
|
||||
}
|
||||
],
|
||||
"description": "Parse emails without the mailparse extension",
|
||||
"keywords": [
|
||||
"arukompas",
|
||||
"email",
|
||||
"email parser",
|
||||
"mail",
|
||||
"opcodesio",
|
||||
"php"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/opcodesio/mail-parser/issues",
|
||||
"source": "https://github.com/opcodesio/mail-parser/tree/v0.1.6"
|
||||
},
|
||||
"time": "2023-11-19T08:47:43+00:00"
|
||||
},
|
||||
{
|
||||
"name": "owenvoke/blade-fontawesome",
|
||||
@ -9901,5 +9956,5 @@
|
||||
"ext-ftp": "*"
|
||||
},
|
||||
"platform-dev": [],
|
||||
"plugin-api-version": "2.3.0"
|
||||
"plugin-api-version": "2.6.0"
|
||||
}
|
||||
|
@ -25,6 +25,7 @@
|
||||
use App\ServiceHandlers\ProcessManager\Supervisor;
|
||||
use App\ServiceHandlers\Webserver\Nginx;
|
||||
use App\SiteTypes\Laravel;
|
||||
use App\SiteTypes\PHPBlank;
|
||||
use App\SiteTypes\PHPSite;
|
||||
use App\SiteTypes\Wordpress;
|
||||
use App\SourceControlProviders\Bitbucket;
|
||||
@ -263,11 +264,13 @@
|
||||
*/
|
||||
'site_types' => [
|
||||
\App\Enums\SiteType::PHP,
|
||||
\App\Enums\SiteType::PHP_BLANK,
|
||||
\App\Enums\SiteType::LARAVEL,
|
||||
\App\Enums\SiteType::WORDPRESS,
|
||||
],
|
||||
'site_types_class' => [
|
||||
\App\Enums\SiteType::PHP => PHPSite::class,
|
||||
\App\Enums\SiteType::PHP_BLANK => PHPBlank::class,
|
||||
\App\Enums\SiteType::LARAVEL => Laravel::class,
|
||||
\App\Enums\SiteType::WORDPRESS => Wordpress::class,
|
||||
],
|
||||
|
159
config/livewire.php
Normal file
159
config/livewire.php
Normal file
@ -0,0 +1,159 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|---------------------------------------------------------------------------
|
||||
| Class Namespace
|
||||
|---------------------------------------------------------------------------
|
||||
|
|
||||
| This value sets the root class namespace for Livewire component classes in
|
||||
| your application. This value will change where component auto-discovery
|
||||
| finds components. It's also referenced by the file creation commands.
|
||||
|
|
||||
*/
|
||||
|
||||
'class_namespace' => 'App\\Http\\Livewire',
|
||||
|
||||
/*
|
||||
|---------------------------------------------------------------------------
|
||||
| View Path
|
||||
|---------------------------------------------------------------------------
|
||||
|
|
||||
| This value is used to specify where Livewire component Blade templates are
|
||||
| stored when running file creation commands like `artisan make:livewire`.
|
||||
| It is also used if you choose to omit a component's render() method.
|
||||
|
|
||||
*/
|
||||
|
||||
'view_path' => resource_path('views/livewire'),
|
||||
|
||||
/*
|
||||
|---------------------------------------------------------------------------
|
||||
| Layout
|
||||
|---------------------------------------------------------------------------
|
||||
| The view that will be used as the layout when rendering a single component
|
||||
| as an entire page via `Route::get('/post/create', CreatePost::class);`.
|
||||
| In this case, the view returned by CreatePost will render into $slot.
|
||||
|
|
||||
*/
|
||||
|
||||
'layout' => 'layouts.app',
|
||||
|
||||
/*
|
||||
|---------------------------------------------------------------------------
|
||||
| Lazy Loading Placeholder
|
||||
|---------------------------------------------------------------------------
|
||||
| Livewire allows you to lazy load components that would otherwise slow down
|
||||
| the initial page load. Every component can have a custom placeholder or
|
||||
| you can define the default placeholder view for all components below.
|
||||
|
|
||||
*/
|
||||
|
||||
'lazy_placeholder' => null,
|
||||
|
||||
/*
|
||||
|---------------------------------------------------------------------------
|
||||
| Temporary File Uploads
|
||||
|---------------------------------------------------------------------------
|
||||
|
|
||||
| Livewire handles file uploads by storing uploads in a temporary directory
|
||||
| before the file is stored permanently. All file uploads are directed to
|
||||
| a global endpoint for temporary storage. You may configure this below:
|
||||
|
|
||||
*/
|
||||
|
||||
'temporary_file_upload' => [
|
||||
'disk' => null, // Example: 'local', 's3' | Default: 'default'
|
||||
'rules' => null, // Example: ['file', 'mimes:png,jpg'] | Default: ['required', 'file', 'max:12288'] (12MB)
|
||||
'directory' => null, // Example: 'tmp' | Default: 'livewire-tmp'
|
||||
'middleware' => null, // Example: 'throttle:5,1' | Default: 'throttle:60,1'
|
||||
'preview_mimes' => [ // Supported file types for temporary pre-signed file URLs...
|
||||
'png', 'gif', 'bmp', 'svg', 'wav', 'mp4',
|
||||
'mov', 'avi', 'wmv', 'mp3', 'm4a',
|
||||
'jpg', 'jpeg', 'mpga', 'webp', 'wma',
|
||||
],
|
||||
'max_upload_time' => 5, // Max duration (in minutes) before an upload is invalidated...
|
||||
],
|
||||
|
||||
/*
|
||||
|---------------------------------------------------------------------------
|
||||
| Render On Redirect
|
||||
|---------------------------------------------------------------------------
|
||||
|
|
||||
| This value determines if Livewire will run a component's `render()` method
|
||||
| after a redirect has been triggered using something like `redirect(...)`
|
||||
| Setting this to true will render the view once more before redirecting
|
||||
|
|
||||
*/
|
||||
|
||||
'render_on_redirect' => false,
|
||||
|
||||
/*
|
||||
|---------------------------------------------------------------------------
|
||||
| Eloquent Model Binding
|
||||
|---------------------------------------------------------------------------
|
||||
|
|
||||
| Previous versions of Livewire supported binding directly to eloquent model
|
||||
| properties using wire:model by default. However, this behavior has been
|
||||
| deemed too "magical" and has therefore been put under a feature flag.
|
||||
|
|
||||
*/
|
||||
|
||||
'legacy_model_binding' => false,
|
||||
|
||||
/*
|
||||
|---------------------------------------------------------------------------
|
||||
| Auto-inject Frontend Assets
|
||||
|---------------------------------------------------------------------------
|
||||
|
|
||||
| By default, Livewire automatically injects its JavaScript and CSS into the
|
||||
| <head> and <body> of pages containing Livewire components. By disabling
|
||||
| this behavior, you need to use @livewireStyles and @livewireScripts.
|
||||
|
|
||||
*/
|
||||
|
||||
'inject_assets' => true,
|
||||
|
||||
/*
|
||||
|---------------------------------------------------------------------------
|
||||
| Navigate (SPA mode)
|
||||
|---------------------------------------------------------------------------
|
||||
|
|
||||
| By adding `wire:navigate` to links in your Livewire application, Livewire
|
||||
| will prevent the default link handling and instead request those pages
|
||||
| via AJAX, creating an SPA-like effect. Configure this behavior here.
|
||||
|
|
||||
*/
|
||||
|
||||
'navigate' => [
|
||||
'show_progress_bar' => true,
|
||||
'progress_bar_color' => '#2299dd',
|
||||
],
|
||||
|
||||
/*
|
||||
|---------------------------------------------------------------------------
|
||||
| HTML Morph Markers
|
||||
|---------------------------------------------------------------------------
|
||||
|
|
||||
| Livewire intelligently "morphs" existing HTML into the newly rendered HTML
|
||||
| after each update. To make this process more reliable, Livewire injects
|
||||
| "markers" into the rendered Blade surrounding @if, @class & @foreach.
|
||||
|
|
||||
*/
|
||||
|
||||
'inject_morph_markers' => true,
|
||||
|
||||
/*
|
||||
|---------------------------------------------------------------------------
|
||||
| Pagination Theme
|
||||
|---------------------------------------------------------------------------
|
||||
|
|
||||
| When enabling Livewire's pagination feature by using the `WithPagination`
|
||||
| trait, Livewire will use Tailwind templates to render pagination views
|
||||
| on the page. If you want Bootstrap CSS, you can specify: "bootstrap"
|
||||
|
|
||||
*/
|
||||
|
||||
'pagination_theme' => 'tailwind',
|
||||
];
|
@ -1,7 +1,5 @@
|
||||
<?php
|
||||
|
||||
use Opcodes\LogViewer\Level;
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
@ -14,6 +12,8 @@
|
||||
|
||||
'enabled' => env('LOG_VIEWER_ENABLED', true),
|
||||
|
||||
'require_auth_in_production' => true,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Log Viewer Domain
|
||||
@ -135,6 +135,19 @@
|
||||
'include_files' => [
|
||||
'*.log',
|
||||
'**/*.log',
|
||||
|
||||
// You can include paths to other log types as well, such as apache, nginx, and more.
|
||||
'/var/log/httpd/*',
|
||||
'/var/log/nginx/*',
|
||||
|
||||
// MacOS Apple Silicon logs
|
||||
'/opt/homebrew/var/log/nginx/*',
|
||||
'/opt/homebrew/var/log/httpd/*',
|
||||
'/opt/homebrew/var/log/php-fpm.log',
|
||||
'/opt/homebrew/var/log/postgres*log',
|
||||
'/opt/homebrew/var/log/redis*log',
|
||||
'/opt/homebrew/var/log/supervisor*log',
|
||||
|
||||
// '/absolute/paths/supported',
|
||||
],
|
||||
|
||||
@ -150,6 +163,18 @@
|
||||
// 'my_secret.log'
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Hide unknown files.
|
||||
|--------------------------------------------------------------------------
|
||||
| The include/exclude options above might catch files which are not
|
||||
| logs supported by Log Viewer. In that case, you can hide them
|
||||
| from the UI and API calls by setting this to true.
|
||||
|
|
||||
*/
|
||||
|
||||
'hide_unknown_files' => true,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Shorter stack trace filters.
|
||||
@ -165,35 +190,6 @@
|
||||
'/vendor/barryvdh/laravel-debugbar/',
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Log matching patterns
|
||||
|--------------------------------------------------------------------------
|
||||
| Regexes for matching log files
|
||||
|
|
||||
*/
|
||||
|
||||
'patterns' => [
|
||||
'laravel' => [
|
||||
'log_matching_regex' => '/^\[(\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}:\d{2}\.?(\d{6}([\+-]\d\d:\d\d)?)?)\].*/',
|
||||
|
||||
/**
|
||||
* This pattern, used for processing Laravel logs, returns these results:
|
||||
* $matches[0] - the full log line being tested.
|
||||
* $matches[1] - full timestamp between the square brackets (includes microseconds and timezone offset)
|
||||
* $matches[2] - timestamp microseconds, if available
|
||||
* $matches[3] - timestamp timezone offset, if available
|
||||
* $matches[4] - contents between timestamp and the severity level
|
||||
* $matches[5] - environment (local, production, etc)
|
||||
* $matches[6] - log severity (info, debug, error, etc)
|
||||
* $matches[7] - the log text, the rest of the text.
|
||||
*/
|
||||
'log_parsing_regex' => '/^\[(\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}:\d{2}\.?(\d{6}([\+-]\d\d:\d\d)?)?)\](.*?(\w+)\.|.*?)('
|
||||
.implode('|', array_filter(Level::caseValues()))
|
||||
.')?: (.*?)( in [\/].*?:[0-9]+)?$/is',
|
||||
],
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Cache driver
|
||||
@ -214,4 +210,6 @@
|
||||
*/
|
||||
|
||||
'lazy_scan_chunk_size_in_mb' => 50,
|
||||
|
||||
'strip_extracted_context' => true,
|
||||
];
|
||||
|
28
docker/standalone/nginx.conf
Normal file
28
docker/standalone/nginx.conf
Normal file
@ -0,0 +1,28 @@
|
||||
server {
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
server_name _;
|
||||
root /var/www/html/public;
|
||||
|
||||
add_header X-Frame-Options "SAMEORIGIN";
|
||||
add_header X-Content-Type-Options "nosniff";
|
||||
|
||||
index index.php;
|
||||
|
||||
charset utf-8;
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ /index.php?$query_string;
|
||||
}
|
||||
|
||||
location ~ \.php$ {
|
||||
include snippets/fastcgi-php.conf;
|
||||
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
|
||||
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
||||
include fastcgi_params;
|
||||
}
|
||||
|
||||
location ~ /\.(?!well-known).* {
|
||||
deny all;
|
||||
}
|
||||
}
|
3
docker/standalone/php.ini
Normal file
3
docker/standalone/php.ini
Normal file
@ -0,0 +1,3 @@
|
||||
[PHP]
|
||||
post_max_size = 100M
|
||||
upload_max_filesize = 100M
|
61
docker/standalone/start.sh
Normal file
61
docker/standalone/start.sh
Normal file
@ -0,0 +1,61 @@
|
||||
#!/bin/bash
|
||||
|
||||
INIT_FLAG="/var/www/html/storage/.INIT_ENV"
|
||||
MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-"password"}
|
||||
NAME=${NAME:-"vito"}
|
||||
EMAIL=${EMAIL:-"vito@example.com"}
|
||||
PASSWORD=${PASSWORD:-"password"}
|
||||
|
||||
# Check if the flag file does not exist, indicating a first run
|
||||
if [ ! -f "$INIT_FLAG" ]; then
|
||||
echo "First run of the container. Initializing MySQL..."
|
||||
|
||||
# Start MySQL temporarily
|
||||
service mysql start
|
||||
|
||||
# Wait for MySQL to start up completely (may need to adjust the sleep duration)
|
||||
sleep 3
|
||||
|
||||
# Create Database
|
||||
mysql -u root -p`echo password` -e "CREATE DATABASE IF NOT EXISTS vito CHARACTER SET utf8 COLLATE utf8_general_ci;"
|
||||
|
||||
# Change Password
|
||||
mysql -u root -p`echo password` -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '$MYSQL_ROOT_PASSWORD'; FLUSH PRIVILEGES;"
|
||||
|
||||
cp /var/www/html/.env.docker /var/www/html/.env
|
||||
|
||||
# Modify /var/www/html/.env and set DB_PASSWORD=password to DB_PASSWORD=MYSQL_ROOT_PASSWORD
|
||||
sed -i "s/DB_PASSWORD=password/DB_PASSWORD=$MYSQL_ROOT_PASSWORD/g" /var/www/html/.env
|
||||
|
||||
php /var/www/html/artisan key:generate
|
||||
|
||||
php /var/www/html/artisan migrate --force
|
||||
|
||||
php /var/www/html/artisan user:create "$NAME" "$EMAIL" "$PASSWORD"
|
||||
|
||||
openssl genpkey -algorithm RSA -out /var/www/html/storage/ssh-private.pem
|
||||
chmod 600 /var/www/html/storage/ssh-private.pem
|
||||
ssh-keygen -y -f /var/www/html/storage/ssh-private.pem > /var/www/html/storage/ssh-public.key
|
||||
|
||||
# Create the flag file to indicate completion of initialization tasks
|
||||
touch "$INIT_FLAG"
|
||||
fi
|
||||
|
||||
service mysql start
|
||||
|
||||
service php8.1-fpm start
|
||||
|
||||
service nginx start
|
||||
|
||||
php /var/www/html/artisan migrate --force
|
||||
php /var/www/html/artisan config:clear
|
||||
php /var/www/html/artisan config:cache
|
||||
php /var/www/html/artisan route:clear
|
||||
php /var/www/html/artisan route:cache
|
||||
php /var/www/html/artisan view:clear
|
||||
php /var/www/html/artisan view:cache
|
||||
php /var/www/html/artisan icons:cache
|
||||
|
||||
echo "Vito is running! 🚀"
|
||||
|
||||
/usr/bin/supervisord
|
16
docker/standalone/supervisord.conf
Normal file
16
docker/standalone/supervisord.conf
Normal file
@ -0,0 +1,16 @@
|
||||
[supervisord]
|
||||
nodaemon=true
|
||||
user=root
|
||||
logfile=/var/log/supervisor/supervisord.log
|
||||
pidfile=/var/run/supervisord.pid
|
||||
redirect_stderr=true
|
||||
|
||||
[program:worker]
|
||||
user=root
|
||||
autostart=1
|
||||
autorestart=1
|
||||
numprocs=1
|
||||
command=/usr/bin/php /var/www/html/artisan queue:work --sleep=3 --backoff=0 --queue=default,ssh,ssh-long --timeout=3600 --tries=1
|
||||
redirect_stderr=true
|
||||
stdout_logfile=/var/www/html/storage/logs/worker.log
|
||||
stopwaitsecs=3600
|
@ -4,11 +4,19 @@ export DEBIAN_FRONTEND=noninteractive
|
||||
export NEEDRESTART_MODE=a
|
||||
export V_USERNAME=vito
|
||||
export V_PASSWORD=$(openssl rand -base64 12)
|
||||
export V_IP_ADDRESS=$(curl https://freeipapi.com --silent)
|
||||
export V_IS_DOMAIN=1
|
||||
|
||||
echo "Enter the domain you want to install Vito? (your-domain.com)"
|
||||
echo "Hit enter to use your IP address (${V_IP_ADDRESS}):"
|
||||
|
||||
read V_DOMAIN
|
||||
|
||||
if [[ -z "${V_DOMAIN}" ]]; then
|
||||
export V_DOMAIN=${V_IP_ADDRESS}
|
||||
export V_IS_DOMAIN=0
|
||||
fi
|
||||
|
||||
echo "Enter your email address:"
|
||||
|
||||
read V_ADMIN_EMAIL
|
||||
|
423
package-lock.json
generated
423
package-lock.json
generated
@ -17,13 +17,13 @@
|
||||
"pusher-js": "^4.3.1",
|
||||
"tailwindcss": "^3.1.0",
|
||||
"toastr": "^2.1.4",
|
||||
"vite": "^4.2.3"
|
||||
"vite": "^4.5.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/android-arm": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.16.tgz",
|
||||
"integrity": "sha512-baLqRpLe4JnKrUXLJChoTN0iXZH7El/mu58GE3WIA6/H834k0XWvLRmGLG8y8arTRS9hJJibPnF0tiGhmWeZgw==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz",
|
||||
"integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==",
|
||||
"cpu": [
|
||||
"arm"
|
||||
],
|
||||
@ -37,9 +37,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/android-arm64": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.16.tgz",
|
||||
"integrity": "sha512-QX48qmsEZW+gcHgTmAj+x21mwTz8MlYQBnzF6861cNdQGvj2jzzFjqH0EBabrIa/WVZ2CHolwMoqxVryqKt8+Q==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz",
|
||||
"integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@ -53,9 +53,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/android-x64": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.16.tgz",
|
||||
"integrity": "sha512-G4wfHhrrz99XJgHnzFvB4UwwPxAWZaZBOFXh+JH1Duf1I4vIVfuYY9uVLpx4eiV2D/Jix8LJY+TAdZ3i40tDow==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz",
|
||||
"integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@ -69,9 +69,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/darwin-arm64": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.16.tgz",
|
||||
"integrity": "sha512-/Ofw8UXZxuzTLsNFmz1+lmarQI6ztMZ9XktvXedTbt3SNWDn0+ODTwxExLYQ/Hod91EZB4vZPQJLoqLF0jvEzA==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz",
|
||||
"integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@ -85,9 +85,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/darwin-x64": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.16.tgz",
|
||||
"integrity": "sha512-SzBQtCV3Pdc9kyizh36Ol+dNVhkDyIrGb/JXZqFq8WL37LIyrXU0gUpADcNV311sCOhvY+f2ivMhb5Tuv8nMOQ==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz",
|
||||
"integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@ -101,9 +101,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/freebsd-arm64": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.16.tgz",
|
||||
"integrity": "sha512-ZqftdfS1UlLiH1DnS2u3It7l4Bc3AskKeu+paJSfk7RNOMrOxmeFDhLTMQqMxycP1C3oj8vgkAT6xfAuq7ZPRA==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz",
|
||||
"integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@ -117,9 +117,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/freebsd-x64": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.16.tgz",
|
||||
"integrity": "sha512-rHV6zNWW1tjgsu0dKQTX9L0ByiJHHLvQKrWtnz8r0YYJI27FU3Xu48gpK2IBj1uCSYhJ+pEk6Y0Um7U3rIvV8g==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz",
|
||||
"integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@ -133,9 +133,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/linux-arm": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.16.tgz",
|
||||
"integrity": "sha512-n4O8oVxbn7nl4+m+ISb0a68/lcJClIbaGAoXwqeubj/D1/oMMuaAXmJVfFlRjJLu/ZvHkxoiFJnmbfp4n8cdSw==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz",
|
||||
"integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==",
|
||||
"cpu": [
|
||||
"arm"
|
||||
],
|
||||
@ -149,9 +149,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/linux-arm64": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.16.tgz",
|
||||
"integrity": "sha512-8yoZhGkU6aHu38WpaM4HrRLTFc7/VVD9Q2SvPcmIQIipQt2I/GMTZNdEHXoypbbGao5kggLcxg0iBKjo0SQYKA==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz",
|
||||
"integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@ -165,9 +165,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/linux-ia32": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.16.tgz",
|
||||
"integrity": "sha512-9ZBjlkdaVYxPNO8a7OmzDbOH9FMQ1a58j7Xb21UfRU29KcEEU3VTHk+Cvrft/BNv0gpWJMiiZ/f4w0TqSP0gLA==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz",
|
||||
"integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==",
|
||||
"cpu": [
|
||||
"ia32"
|
||||
],
|
||||
@ -181,9 +181,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/linux-loong64": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.16.tgz",
|
||||
"integrity": "sha512-TIZTRojVBBzdgChY3UOG7BlPhqJz08AL7jdgeeu+kiObWMFzGnQD7BgBBkWRwOtKR1i2TNlO7YK6m4zxVjjPRQ==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz",
|
||||
"integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==",
|
||||
"cpu": [
|
||||
"loong64"
|
||||
],
|
||||
@ -197,9 +197,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/linux-mips64el": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.16.tgz",
|
||||
"integrity": "sha512-UPeRuFKCCJYpBbIdczKyHLAIU31GEm0dZl1eMrdYeXDH+SJZh/i+2cAmD3A1Wip9pIc5Sc6Kc5cFUrPXtR0XHA==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz",
|
||||
"integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==",
|
||||
"cpu": [
|
||||
"mips64el"
|
||||
],
|
||||
@ -213,9 +213,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/linux-ppc64": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.16.tgz",
|
||||
"integrity": "sha512-io6yShgIEgVUhExJejJ21xvO5QtrbiSeI7vYUnr7l+v/O9t6IowyhdiYnyivX2X5ysOVHAuyHW+Wyi7DNhdw6Q==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz",
|
||||
"integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==",
|
||||
"cpu": [
|
||||
"ppc64"
|
||||
],
|
||||
@ -229,9 +229,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/linux-riscv64": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.16.tgz",
|
||||
"integrity": "sha512-WhlGeAHNbSdG/I2gqX2RK2gfgSNwyJuCiFHMc8s3GNEMMHUI109+VMBfhVqRb0ZGzEeRiibi8dItR3ws3Lk+cA==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz",
|
||||
"integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==",
|
||||
"cpu": [
|
||||
"riscv64"
|
||||
],
|
||||
@ -245,9 +245,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/linux-s390x": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.16.tgz",
|
||||
"integrity": "sha512-gHRReYsJtViir63bXKoFaQ4pgTyah4ruiMRQ6im9YZuv+gp3UFJkNTY4sFA73YDynmXZA6hi45en4BGhNOJUsw==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz",
|
||||
"integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==",
|
||||
"cpu": [
|
||||
"s390x"
|
||||
],
|
||||
@ -261,9 +261,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/linux-x64": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.16.tgz",
|
||||
"integrity": "sha512-mfiiBkxEbUHvi+v0P+TS7UnA9TeGXR48aK4XHkTj0ZwOijxexgMF01UDFaBX7Q6CQsB0d+MFNv9IiXbIHTNd4g==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz",
|
||||
"integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@ -277,9 +277,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/netbsd-x64": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.16.tgz",
|
||||
"integrity": "sha512-n8zK1YRDGLRZfVcswcDMDM0j2xKYLNXqei217a4GyBxHIuPMGrrVuJ+Ijfpr0Kufcm7C1k/qaIrGy6eG7wvgmA==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz",
|
||||
"integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@ -293,9 +293,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/openbsd-x64": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.16.tgz",
|
||||
"integrity": "sha512-lEEfkfsUbo0xC47eSTBqsItXDSzwzwhKUSsVaVjVji07t8+6KA5INp2rN890dHZeueXJAI8q0tEIfbwVRYf6Ew==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz",
|
||||
"integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@ -309,9 +309,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/sunos-x64": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.16.tgz",
|
||||
"integrity": "sha512-jlRjsuvG1fgGwnE8Afs7xYDnGz0dBgTNZfgCK6TlvPH3Z13/P5pi6I57vyLE8qZYLrGVtwcm9UbUx1/mZ8Ukag==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz",
|
||||
"integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@ -325,9 +325,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/win32-arm64": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.16.tgz",
|
||||
"integrity": "sha512-TzoU2qwVe2boOHl/3KNBUv2PNUc38U0TNnzqOAcgPiD/EZxT2s736xfC2dYQbszAwo4MKzzwBV0iHjhfjxMimg==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz",
|
||||
"integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@ -341,9 +341,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/win32-ia32": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.16.tgz",
|
||||
"integrity": "sha512-B8b7W+oo2yb/3xmwk9Vc99hC9bNolvqjaTZYEfMQhzdpBsjTvZBlXQ/teUE55Ww6sg//wlcDjOaqldOKyigWdA==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz",
|
||||
"integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==",
|
||||
"cpu": [
|
||||
"ia32"
|
||||
],
|
||||
@ -357,9 +357,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/win32-x64": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.16.tgz",
|
||||
"integrity": "sha512-xJ7OH/nanouJO9pf03YsL9NAFQBHd8AqfrQd7Pf5laGyyTt/gToul6QYOA/i5i/q8y9iaM5DQFNTgpi995VkOg==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz",
|
||||
"integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@ -812,9 +812,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/esbuild": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.16.tgz",
|
||||
"integrity": "sha512-aeSuUKr9aFVY9Dc8ETVELGgkj4urg5isYx8pLf4wlGgB0vTFjxJQdHnNH6Shmx4vYYrOTLCHtRI5i1XZ9l2Zcg==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz",
|
||||
"integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==",
|
||||
"dev": true,
|
||||
"hasInstallScript": true,
|
||||
"bin": {
|
||||
@ -824,28 +824,28 @@
|
||||
"node": ">=12"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@esbuild/android-arm": "0.17.16",
|
||||
"@esbuild/android-arm64": "0.17.16",
|
||||
"@esbuild/android-x64": "0.17.16",
|
||||
"@esbuild/darwin-arm64": "0.17.16",
|
||||
"@esbuild/darwin-x64": "0.17.16",
|
||||
"@esbuild/freebsd-arm64": "0.17.16",
|
||||
"@esbuild/freebsd-x64": "0.17.16",
|
||||
"@esbuild/linux-arm": "0.17.16",
|
||||
"@esbuild/linux-arm64": "0.17.16",
|
||||
"@esbuild/linux-ia32": "0.17.16",
|
||||
"@esbuild/linux-loong64": "0.17.16",
|
||||
"@esbuild/linux-mips64el": "0.17.16",
|
||||
"@esbuild/linux-ppc64": "0.17.16",
|
||||
"@esbuild/linux-riscv64": "0.17.16",
|
||||
"@esbuild/linux-s390x": "0.17.16",
|
||||
"@esbuild/linux-x64": "0.17.16",
|
||||
"@esbuild/netbsd-x64": "0.17.16",
|
||||
"@esbuild/openbsd-x64": "0.17.16",
|
||||
"@esbuild/sunos-x64": "0.17.16",
|
||||
"@esbuild/win32-arm64": "0.17.16",
|
||||
"@esbuild/win32-ia32": "0.17.16",
|
||||
"@esbuild/win32-x64": "0.17.16"
|
||||
"@esbuild/android-arm": "0.18.20",
|
||||
"@esbuild/android-arm64": "0.18.20",
|
||||
"@esbuild/android-x64": "0.18.20",
|
||||
"@esbuild/darwin-arm64": "0.18.20",
|
||||
"@esbuild/darwin-x64": "0.18.20",
|
||||
"@esbuild/freebsd-arm64": "0.18.20",
|
||||
"@esbuild/freebsd-x64": "0.18.20",
|
||||
"@esbuild/linux-arm": "0.18.20",
|
||||
"@esbuild/linux-arm64": "0.18.20",
|
||||
"@esbuild/linux-ia32": "0.18.20",
|
||||
"@esbuild/linux-loong64": "0.18.20",
|
||||
"@esbuild/linux-mips64el": "0.18.20",
|
||||
"@esbuild/linux-ppc64": "0.18.20",
|
||||
"@esbuild/linux-riscv64": "0.18.20",
|
||||
"@esbuild/linux-s390x": "0.18.20",
|
||||
"@esbuild/linux-x64": "0.18.20",
|
||||
"@esbuild/netbsd-x64": "0.18.20",
|
||||
"@esbuild/openbsd-x64": "0.18.20",
|
||||
"@esbuild/sunos-x64": "0.18.20",
|
||||
"@esbuild/win32-arm64": "0.18.20",
|
||||
"@esbuild/win32-ia32": "0.18.20",
|
||||
"@esbuild/win32-x64": "0.18.20"
|
||||
}
|
||||
},
|
||||
"node_modules/escalade": {
|
||||
@ -919,9 +919,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/follow-redirects": {
|
||||
"version": "1.15.2",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
|
||||
"integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
|
||||
"version": "1.15.5",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz",
|
||||
"integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==",
|
||||
"dev": true,
|
||||
"funding": [
|
||||
{
|
||||
@ -1609,9 +1609,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/rollup": {
|
||||
"version": "3.20.2",
|
||||
"resolved": "https://registry.npmjs.org/rollup/-/rollup-3.20.2.tgz",
|
||||
"integrity": "sha512-3zwkBQl7Ai7MFYQE0y1MeQ15+9jsi7XxfrqwTb/9EK8D9C9+//EBR4M+CuA1KODRaNbFez/lWxA5vhEGZp4MUg==",
|
||||
"version": "3.29.4",
|
||||
"resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz",
|
||||
"integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"rollup": "dist/bin/rollup"
|
||||
@ -1845,15 +1845,14 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/vite": {
|
||||
"version": "4.2.3",
|
||||
"resolved": "https://registry.npmjs.org/vite/-/vite-4.2.3.tgz",
|
||||
"integrity": "sha512-kLU+m2q0Y434Y1kCy3TchefAdtFso0ILi0dLyFV8Us3InXTU11H/B5ZTqCKIQHzSKNxVG/yEx813EA9f1imQ9A==",
|
||||
"version": "4.5.2",
|
||||
"resolved": "https://registry.npmjs.org/vite/-/vite-4.5.2.tgz",
|
||||
"integrity": "sha512-tBCZBNSBbHQkaGyhGCDUGqeo2ph8Fstyp6FMSvTtsXeZSPpSMGlviAOav2hxVTqFcx8Hj/twtWKsMJXNY0xI8w==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"esbuild": "^0.17.5",
|
||||
"postcss": "^8.4.21",
|
||||
"resolve": "^1.22.1",
|
||||
"rollup": "^3.18.0"
|
||||
"esbuild": "^0.18.10",
|
||||
"postcss": "^8.4.27",
|
||||
"rollup": "^3.27.1"
|
||||
},
|
||||
"bin": {
|
||||
"vite": "bin/vite.js"
|
||||
@ -1861,12 +1860,16 @@
|
||||
"engines": {
|
||||
"node": "^14.18.0 || >=16.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/vitejs/vite?sponsor=1"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"fsevents": "~2.3.2"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@types/node": ">= 14",
|
||||
"less": "*",
|
||||
"lightningcss": "^1.21.0",
|
||||
"sass": "*",
|
||||
"stylus": "*",
|
||||
"sugarss": "*",
|
||||
@ -1879,6 +1882,9 @@
|
||||
"less": {
|
||||
"optional": true
|
||||
},
|
||||
"lightningcss": {
|
||||
"optional": true
|
||||
},
|
||||
"sass": {
|
||||
"optional": true
|
||||
},
|
||||
@ -1956,156 +1962,156 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@esbuild/android-arm": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.16.tgz",
|
||||
"integrity": "sha512-baLqRpLe4JnKrUXLJChoTN0iXZH7El/mu58GE3WIA6/H834k0XWvLRmGLG8y8arTRS9hJJibPnF0tiGhmWeZgw==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz",
|
||||
"integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"@esbuild/android-arm64": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.16.tgz",
|
||||
"integrity": "sha512-QX48qmsEZW+gcHgTmAj+x21mwTz8MlYQBnzF6861cNdQGvj2jzzFjqH0EBabrIa/WVZ2CHolwMoqxVryqKt8+Q==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz",
|
||||
"integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"@esbuild/android-x64": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.16.tgz",
|
||||
"integrity": "sha512-G4wfHhrrz99XJgHnzFvB4UwwPxAWZaZBOFXh+JH1Duf1I4vIVfuYY9uVLpx4eiV2D/Jix8LJY+TAdZ3i40tDow==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz",
|
||||
"integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"@esbuild/darwin-arm64": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.16.tgz",
|
||||
"integrity": "sha512-/Ofw8UXZxuzTLsNFmz1+lmarQI6ztMZ9XktvXedTbt3SNWDn0+ODTwxExLYQ/Hod91EZB4vZPQJLoqLF0jvEzA==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz",
|
||||
"integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"@esbuild/darwin-x64": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.16.tgz",
|
||||
"integrity": "sha512-SzBQtCV3Pdc9kyizh36Ol+dNVhkDyIrGb/JXZqFq8WL37LIyrXU0gUpADcNV311sCOhvY+f2ivMhb5Tuv8nMOQ==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz",
|
||||
"integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"@esbuild/freebsd-arm64": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.16.tgz",
|
||||
"integrity": "sha512-ZqftdfS1UlLiH1DnS2u3It7l4Bc3AskKeu+paJSfk7RNOMrOxmeFDhLTMQqMxycP1C3oj8vgkAT6xfAuq7ZPRA==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz",
|
||||
"integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"@esbuild/freebsd-x64": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.16.tgz",
|
||||
"integrity": "sha512-rHV6zNWW1tjgsu0dKQTX9L0ByiJHHLvQKrWtnz8r0YYJI27FU3Xu48gpK2IBj1uCSYhJ+pEk6Y0Um7U3rIvV8g==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz",
|
||||
"integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"@esbuild/linux-arm": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.16.tgz",
|
||||
"integrity": "sha512-n4O8oVxbn7nl4+m+ISb0a68/lcJClIbaGAoXwqeubj/D1/oMMuaAXmJVfFlRjJLu/ZvHkxoiFJnmbfp4n8cdSw==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz",
|
||||
"integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"@esbuild/linux-arm64": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.16.tgz",
|
||||
"integrity": "sha512-8yoZhGkU6aHu38WpaM4HrRLTFc7/VVD9Q2SvPcmIQIipQt2I/GMTZNdEHXoypbbGao5kggLcxg0iBKjo0SQYKA==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz",
|
||||
"integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"@esbuild/linux-ia32": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.16.tgz",
|
||||
"integrity": "sha512-9ZBjlkdaVYxPNO8a7OmzDbOH9FMQ1a58j7Xb21UfRU29KcEEU3VTHk+Cvrft/BNv0gpWJMiiZ/f4w0TqSP0gLA==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz",
|
||||
"integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"@esbuild/linux-loong64": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.16.tgz",
|
||||
"integrity": "sha512-TIZTRojVBBzdgChY3UOG7BlPhqJz08AL7jdgeeu+kiObWMFzGnQD7BgBBkWRwOtKR1i2TNlO7YK6m4zxVjjPRQ==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz",
|
||||
"integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"@esbuild/linux-mips64el": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.16.tgz",
|
||||
"integrity": "sha512-UPeRuFKCCJYpBbIdczKyHLAIU31GEm0dZl1eMrdYeXDH+SJZh/i+2cAmD3A1Wip9pIc5Sc6Kc5cFUrPXtR0XHA==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz",
|
||||
"integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"@esbuild/linux-ppc64": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.16.tgz",
|
||||
"integrity": "sha512-io6yShgIEgVUhExJejJ21xvO5QtrbiSeI7vYUnr7l+v/O9t6IowyhdiYnyivX2X5ysOVHAuyHW+Wyi7DNhdw6Q==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz",
|
||||
"integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"@esbuild/linux-riscv64": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.16.tgz",
|
||||
"integrity": "sha512-WhlGeAHNbSdG/I2gqX2RK2gfgSNwyJuCiFHMc8s3GNEMMHUI109+VMBfhVqRb0ZGzEeRiibi8dItR3ws3Lk+cA==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz",
|
||||
"integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"@esbuild/linux-s390x": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.16.tgz",
|
||||
"integrity": "sha512-gHRReYsJtViir63bXKoFaQ4pgTyah4ruiMRQ6im9YZuv+gp3UFJkNTY4sFA73YDynmXZA6hi45en4BGhNOJUsw==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz",
|
||||
"integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"@esbuild/linux-x64": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.16.tgz",
|
||||
"integrity": "sha512-mfiiBkxEbUHvi+v0P+TS7UnA9TeGXR48aK4XHkTj0ZwOijxexgMF01UDFaBX7Q6CQsB0d+MFNv9IiXbIHTNd4g==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz",
|
||||
"integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"@esbuild/netbsd-x64": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.16.tgz",
|
||||
"integrity": "sha512-n8zK1YRDGLRZfVcswcDMDM0j2xKYLNXqei217a4GyBxHIuPMGrrVuJ+Ijfpr0Kufcm7C1k/qaIrGy6eG7wvgmA==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz",
|
||||
"integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"@esbuild/openbsd-x64": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.16.tgz",
|
||||
"integrity": "sha512-lEEfkfsUbo0xC47eSTBqsItXDSzwzwhKUSsVaVjVji07t8+6KA5INp2rN890dHZeueXJAI8q0tEIfbwVRYf6Ew==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz",
|
||||
"integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"@esbuild/sunos-x64": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.16.tgz",
|
||||
"integrity": "sha512-jlRjsuvG1fgGwnE8Afs7xYDnGz0dBgTNZfgCK6TlvPH3Z13/P5pi6I57vyLE8qZYLrGVtwcm9UbUx1/mZ8Ukag==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz",
|
||||
"integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"@esbuild/win32-arm64": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.16.tgz",
|
||||
"integrity": "sha512-TzoU2qwVe2boOHl/3KNBUv2PNUc38U0TNnzqOAcgPiD/EZxT2s736xfC2dYQbszAwo4MKzzwBV0iHjhfjxMimg==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz",
|
||||
"integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"@esbuild/win32-ia32": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.16.tgz",
|
||||
"integrity": "sha512-B8b7W+oo2yb/3xmwk9Vc99hC9bNolvqjaTZYEfMQhzdpBsjTvZBlXQ/teUE55Ww6sg//wlcDjOaqldOKyigWdA==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz",
|
||||
"integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"@esbuild/win32-x64": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.16.tgz",
|
||||
"integrity": "sha512-xJ7OH/nanouJO9pf03YsL9NAFQBHd8AqfrQd7Pf5laGyyTt/gToul6QYOA/i5i/q8y9iaM5DQFNTgpi995VkOg==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz",
|
||||
"integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
@ -2438,33 +2444,33 @@
|
||||
"dev": true
|
||||
},
|
||||
"esbuild": {
|
||||
"version": "0.17.16",
|
||||
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.16.tgz",
|
||||
"integrity": "sha512-aeSuUKr9aFVY9Dc8ETVELGgkj4urg5isYx8pLf4wlGgB0vTFjxJQdHnNH6Shmx4vYYrOTLCHtRI5i1XZ9l2Zcg==",
|
||||
"version": "0.18.20",
|
||||
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz",
|
||||
"integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@esbuild/android-arm": "0.17.16",
|
||||
"@esbuild/android-arm64": "0.17.16",
|
||||
"@esbuild/android-x64": "0.17.16",
|
||||
"@esbuild/darwin-arm64": "0.17.16",
|
||||
"@esbuild/darwin-x64": "0.17.16",
|
||||
"@esbuild/freebsd-arm64": "0.17.16",
|
||||
"@esbuild/freebsd-x64": "0.17.16",
|
||||
"@esbuild/linux-arm": "0.17.16",
|
||||
"@esbuild/linux-arm64": "0.17.16",
|
||||
"@esbuild/linux-ia32": "0.17.16",
|
||||
"@esbuild/linux-loong64": "0.17.16",
|
||||
"@esbuild/linux-mips64el": "0.17.16",
|
||||
"@esbuild/linux-ppc64": "0.17.16",
|
||||
"@esbuild/linux-riscv64": "0.17.16",
|
||||
"@esbuild/linux-s390x": "0.17.16",
|
||||
"@esbuild/linux-x64": "0.17.16",
|
||||
"@esbuild/netbsd-x64": "0.17.16",
|
||||
"@esbuild/openbsd-x64": "0.17.16",
|
||||
"@esbuild/sunos-x64": "0.17.16",
|
||||
"@esbuild/win32-arm64": "0.17.16",
|
||||
"@esbuild/win32-ia32": "0.17.16",
|
||||
"@esbuild/win32-x64": "0.17.16"
|
||||
"@esbuild/android-arm": "0.18.20",
|
||||
"@esbuild/android-arm64": "0.18.20",
|
||||
"@esbuild/android-x64": "0.18.20",
|
||||
"@esbuild/darwin-arm64": "0.18.20",
|
||||
"@esbuild/darwin-x64": "0.18.20",
|
||||
"@esbuild/freebsd-arm64": "0.18.20",
|
||||
"@esbuild/freebsd-x64": "0.18.20",
|
||||
"@esbuild/linux-arm": "0.18.20",
|
||||
"@esbuild/linux-arm64": "0.18.20",
|
||||
"@esbuild/linux-ia32": "0.18.20",
|
||||
"@esbuild/linux-loong64": "0.18.20",
|
||||
"@esbuild/linux-mips64el": "0.18.20",
|
||||
"@esbuild/linux-ppc64": "0.18.20",
|
||||
"@esbuild/linux-riscv64": "0.18.20",
|
||||
"@esbuild/linux-s390x": "0.18.20",
|
||||
"@esbuild/linux-x64": "0.18.20",
|
||||
"@esbuild/netbsd-x64": "0.18.20",
|
||||
"@esbuild/openbsd-x64": "0.18.20",
|
||||
"@esbuild/sunos-x64": "0.18.20",
|
||||
"@esbuild/win32-arm64": "0.18.20",
|
||||
"@esbuild/win32-ia32": "0.18.20",
|
||||
"@esbuild/win32-x64": "0.18.20"
|
||||
}
|
||||
},
|
||||
"escalade": {
|
||||
@ -2525,9 +2531,9 @@
|
||||
}
|
||||
},
|
||||
"follow-redirects": {
|
||||
"version": "1.15.2",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
|
||||
"integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
|
||||
"version": "1.15.5",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz",
|
||||
"integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==",
|
||||
"dev": true
|
||||
},
|
||||
"form-data": {
|
||||
@ -2987,9 +2993,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"rollup": {
|
||||
"version": "3.20.2",
|
||||
"resolved": "https://registry.npmjs.org/rollup/-/rollup-3.20.2.tgz",
|
||||
"integrity": "sha512-3zwkBQl7Ai7MFYQE0y1MeQ15+9jsi7XxfrqwTb/9EK8D9C9+//EBR4M+CuA1KODRaNbFez/lWxA5vhEGZp4MUg==",
|
||||
"version": "3.29.4",
|
||||
"resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz",
|
||||
"integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"fsevents": "~2.3.2"
|
||||
@ -3140,16 +3146,15 @@
|
||||
"dev": true
|
||||
},
|
||||
"vite": {
|
||||
"version": "4.2.3",
|
||||
"resolved": "https://registry.npmjs.org/vite/-/vite-4.2.3.tgz",
|
||||
"integrity": "sha512-kLU+m2q0Y434Y1kCy3TchefAdtFso0ILi0dLyFV8Us3InXTU11H/B5ZTqCKIQHzSKNxVG/yEx813EA9f1imQ9A==",
|
||||
"version": "4.5.2",
|
||||
"resolved": "https://registry.npmjs.org/vite/-/vite-4.5.2.tgz",
|
||||
"integrity": "sha512-tBCZBNSBbHQkaGyhGCDUGqeo2ph8Fstyp6FMSvTtsXeZSPpSMGlviAOav2hxVTqFcx8Hj/twtWKsMJXNY0xI8w==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"esbuild": "^0.17.5",
|
||||
"esbuild": "^0.18.10",
|
||||
"fsevents": "~2.3.2",
|
||||
"postcss": "^8.4.21",
|
||||
"resolve": "^1.22.1",
|
||||
"rollup": "^3.18.0"
|
||||
"postcss": "^8.4.27",
|
||||
"rollup": "^3.27.1"
|
||||
}
|
||||
},
|
||||
"vite-plugin-full-reload": {
|
||||
|
@ -2,9 +2,7 @@
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
"build": "vite build",
|
||||
"queue:listen": "php artisan queue:listen --timeout=600 --queue=default,ssh,ssh-long",
|
||||
"scheduler:run": "php artisan schedule:run"
|
||||
"build": "vite build"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@ryangjchandler/alpine-clipboard": "^2.2.0",
|
||||
@ -19,6 +17,6 @@
|
||||
"pusher-js": "^4.3.1",
|
||||
"tailwindcss": "^3.1.0",
|
||||
"toastr": "^2.1.4",
|
||||
"vite": "^4.2.3"
|
||||
"vite": "^4.5.2"
|
||||
}
|
||||
}
|
||||
|
1
public/build/assets/app-887de6f7.css
Normal file
1
public/build/assets/app-887de6f7.css
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
101
public/build/assets/app-e6b0cd9c.js
Normal file
101
public/build/assets/app-e6b0cd9c.js
Normal file
File diff suppressed because one or more lines are too long
@ -1,11 +1,11 @@
|
||||
{
|
||||
"resources/css/app.css": {
|
||||
"file": "assets/app-8b808e33.css",
|
||||
"file": "assets/app-887de6f7.css",
|
||||
"isEntry": true,
|
||||
"src": "resources/css/app.css"
|
||||
},
|
||||
"resources/js/app.js": {
|
||||
"file": "assets/app-9aa488bb.js",
|
||||
"file": "assets/app-e6b0cd9c.js",
|
||||
"isEntry": true,
|
||||
"src": "resources/js/app.js"
|
||||
}
|
||||
|
37
public/static/images/php-blank.svg
Normal file
37
public/static/images/php-blank.svg
Normal file
@ -0,0 +1,37 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg width="256px" height="135px" viewBox="0 0 256 135" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid">
|
||||
<defs>
|
||||
<radialGradient id="radialGradient-1" cx="0.8366" cy="-125.811" r="363.0565" gradientTransform="matrix(0.463 0 0 0.463 76.4644 81.9182)" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0" style="stop-color:#FFFFFF"/>
|
||||
<stop offset="0.5" style="stop-color:#4C6B97"/>
|
||||
<stop offset="1" style="stop-color:#231F20"/>
|
||||
</radialGradient>
|
||||
</defs>
|
||||
<g>
|
||||
<ellipse fill="url(#radialGradient-1)" cx="128" cy="67.3" rx="128" ry="67.3"/>
|
||||
<ellipse fill="#6181B6" cx="128" cy="67.3" rx="123" ry="62.3"/>
|
||||
<g>
|
||||
<path fill="#FFFFFF" d="M152.9,87.5c0,0,6.1-31.4,6.1-31.4c1.4-7.1,0.2-12.4-3.4-15.7c-3.5-3.2-9.5-4.8-18.3-4.8h-10.6l3-15.6
|
||||
c0.1-0.6,0-1.2-0.4-1.7c-0.4-0.5-0.9-0.7-1.5-0.7h-14.6c-1,0-1.8,0.7-2,1.6l-6.5,33.3c-0.6-3.8-2-7-4.4-9.6
|
||||
c-4.3-4.9-11-7.4-20.1-7.4H52.1c-1,0-1.8,0.7-2,1.6L37,104.7c-0.1,0.6,0,1.2,0.4,1.7c0.4,0.5,0.9,0.7,1.5,0.7h14.7
|
||||
c1,0,1.8-0.7,2-1.6l3.2-16.3h10.9c5.7,0,10.6-0.6,14.3-1.8c3.9-1.3,7.4-3.4,10.5-6.3c2.5-2.3,4.6-4.9,6.2-7.7l-2.6,13.5
|
||||
c-0.1,0.6,0,1.2,0.4,1.7s0.9,0.7,1.5,0.7h14.6c1,0,1.8-0.7,2-1.6l7.2-37h10c4.3,0,5.5,0.8,5.9,1.2c0.3,0.3,0.9,1.5,0.2,5.2
|
||||
l-5.8,29.9c-0.1,0.6,0,1.2,0.4,1.7c0.4,0.5,0.9,0.7,1.5,0.7H151C151.9,89.1,152.7,88.4,152.9,87.5z M85.3,61.5
|
||||
c-0.9,4.7-2.6,8.1-5.1,10c-2.5,1.9-6.6,2.9-12,2.9h-6.5l4.7-24.2h8.4c6.2,0,8.7,1.3,9.7,2.4C85.8,54.2,86.1,57.3,85.3,61.5z"/>
|
||||
<path fill="#FFFFFF" d="M215.3,42.9c-4.3-4.9-11-7.4-20.1-7.4h-28.3c-1,0-1.8,0.7-2,1.6l-13.1,67.5c-0.1,0.6,0,1.2,0.4,1.7
|
||||
c0.4,0.5,0.9,0.7,1.5,0.7h14.7c1,0,1.8-0.7,2-1.6l3.2-16.3h10.9c5.7,0,10.6-0.6,14.3-1.8c3.9-1.3,7.4-3.4,10.5-6.3
|
||||
c2.6-2.4,4.8-5.1,6.4-8c1.6-2.9,2.8-6.1,3.5-9.6C220.9,54.7,219.6,47.9,215.3,42.9z M200,61.5c-0.9,4.7-2.6,8.1-5.1,10
|
||||
c-2.5,1.9-6.6,2.9-12,2.9h-6.5l4.7-24.2h8.4c6.2,0,8.7,1.3,9.7,2.4C200.6,54.2,200.9,57.3,200,61.5z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#000004" d="M74.8,48.2c5.6,0,9.3,1,11.2,3.1c1.9,2.1,2.3,5.6,1.3,10.6c-1,5.2-3,9-5.9,11.2c-2.9,2.2-7.3,3.3-13.2,3.3
|
||||
h-8.9l5.5-28.2H74.8z M39,105h14.7l3.5-17.9h12.6c5.6,0,10.1-0.6,13.7-1.8c3.6-1.2,6.8-3.1,9.8-5.9c2.5-2.3,4.5-4.8,6-7.5
|
||||
c1.5-2.7,2.6-5.7,3.2-9c1.6-8,0.4-14.2-3.5-18.7c-3.9-4.5-10.1-6.7-18.6-6.7H52.1L39,105z"/>
|
||||
<path fill="#000004" d="M113.3,19.6h14.6l-3.5,17.9h13c8.2,0,13.8,1.4,16.9,4.3c3.1,2.9,4,7.5,2.8,13.9L151,87.1h-14.8l5.8-29.9
|
||||
c0.7-3.4,0.4-5.7-0.7-6.9c-1.1-1.2-3.6-1.9-7.3-1.9h-11.7l-7.5,38.7h-14.6L113.3,19.6z"/>
|
||||
<path fill="#000004" d="M189.5,48.2c5.6,0,9.3,1,11.2,3.1c1.9,2.1,2.3,5.6,1.3,10.6c-1,5.2-3,9-5.9,11.2c-2.9,2.2-7.3,3.3-13.2,3.3
|
||||
h-8.9l5.5-28.2H189.5z M153.7,105h14.7l3.5-17.9h12.6c5.6,0,10.1-0.6,13.7-1.8c3.6-1.2,6.8-3.1,9.8-5.9c2.5-2.3,4.5-4.8,6-7.5
|
||||
c1.5-2.7,2.6-5.7,3.2-9c1.6-8,0.4-14.2-3.5-18.7c-3.9-4.5-10.1-6.7-18.6-6.7h-28.3L153.7,105z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.9 KiB |
2
public/vendor/log-viewer/app.css
vendored
2
public/vendor/log-viewer/app.css
vendored
File diff suppressed because one or more lines are too long
2
public/vendor/log-viewer/app.js
vendored
2
public/vendor/log-viewer/app.js
vendored
File diff suppressed because one or more lines are too long
2
public/vendor/log-viewer/app.js.LICENSE.txt
vendored
2
public/vendor/log-viewer/app.js.LICENSE.txt
vendored
@ -5,6 +5,8 @@
|
||||
* @license MIT
|
||||
*/
|
||||
|
||||
/*! #__NO_SIDE_EFFECTS__ */
|
||||
|
||||
/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */
|
||||
|
||||
/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */
|
||||
|
4
public/vendor/log-viewer/mix-manifest.json
vendored
4
public/vendor/log-viewer/mix-manifest.json
vendored
@ -1,6 +1,6 @@
|
||||
{
|
||||
"/app.js": "/app.js?id=5f574f36f456b103dffcfa21d5612785",
|
||||
"/app.css": "/app.css?id=b701a4344131bb2c00e9f0b1ef1ab3c1",
|
||||
"/app.js": "/app.js?id=fc139aeb14d759b4a2906fc46d6c8150",
|
||||
"/app.css": "/app.css?id=12c5e78a91987c11d8a0cc04436541e9",
|
||||
"/img/log-viewer-128.png": "/img/log-viewer-128.png?id=d576c6d2e16074d3f064e60fe4f35166",
|
||||
"/img/log-viewer-32.png": "/img/log-viewer-32.png?id=f8ec67d10f996aa8baf00df3b61eea6d",
|
||||
"/img/log-viewer-64.png": "/img/log-viewer-64.png?id=8902d596fc883ca9eb8105bb683568c6"
|
||||
|
1
resources/commands/website/get-env.sh
Normal file
1
resources/commands/website/get-env.sh
Normal file
@ -0,0 +1 @@
|
||||
[ -f /home/vito/__domain__/.env ] && cat /home/vito/__domain__/.env
|
@ -1,24 +1,11 @@
|
||||
import './bootstrap';
|
||||
// import Echo from "laravel-echo"
|
||||
// import Pusher from "pusher-js"
|
||||
import Alpine from 'alpinejs';
|
||||
import Clipboard from "@ryangjchandler/alpine-clipboard";
|
||||
import { Livewire, Alpine } from '../../vendor/livewire/livewire/dist/livewire.esm';
|
||||
|
||||
Alpine.plugin(Clipboard)
|
||||
Alpine.directive('clipboard', (el) => {
|
||||
let text = el.textContent
|
||||
|
||||
// window.Echo = new Echo({
|
||||
// broadcaster: 'pusher',
|
||||
// key: 'app-key',
|
||||
// wsHost: 'localhost',
|
||||
// wsPort: 6001,
|
||||
// cluster: '',
|
||||
// forceTLS: false,
|
||||
// disableStats: true,
|
||||
// });
|
||||
//
|
||||
// window.Pusher = Pusher;
|
||||
|
||||
window.Alpine = Alpine;
|
||||
|
||||
Alpine.start();
|
||||
el.addEventListener('click', () => {
|
||||
navigator.clipboard.writeText(text)
|
||||
})
|
||||
})
|
||||
|
||||
Livewire.start()
|
||||
|
@ -1,7 +1,7 @@
|
||||
@props(['name', 'input', 'title', 'description', 'method'])
|
||||
|
||||
<x-modal :name="$name">
|
||||
<form wire:submit.prevent="{{ $method }}" class="p-6">
|
||||
<form wire:submit="{{ $method }}" class="p-6">
|
||||
<h2 class="text-lg font-medium text-gray-900 dark:text-gray-100">
|
||||
{{ __('Confirm') }}
|
||||
</h2>
|
||||
|
@ -189,15 +189,15 @@ class="min-h-screen w-64 flex-none border-r border-gray-200 bg-white dark:border
|
||||
</div>
|
||||
<x-toast />
|
||||
<livewire:broadcast />
|
||||
@livewireScripts
|
||||
@livewireScriptConfig
|
||||
<script>
|
||||
document.addEventListener('livewire:load', () => {
|
||||
Livewire.onPageExpired((response, message) => {
|
||||
({
|
||||
href: window.location.href
|
||||
} = window.location);
|
||||
})
|
||||
})
|
||||
// document.addEventListener('livewire:init', () => {
|
||||
// Livewire.onPageExpired((response, message) => {
|
||||
// ({
|
||||
// href: window.location.href
|
||||
// } = window.location);
|
||||
// })
|
||||
// })
|
||||
|
||||
// On page load or when changing themes, best to add inline in `head` to avoid FOUC
|
||||
if (localStorage.theme === 'dark' || (!('theme' in localStorage) && window.matchMedia(
|
||||
|
@ -4,7 +4,6 @@
|
||||
if (this.theme === 'dark') {
|
||||
return true
|
||||
}
|
||||
console.log(window.matchMedia('(prefers-color-scheme: dark)'))
|
||||
return this.theme === 'system' && window.matchMedia('(prefers-color-scheme: dark)').matches;
|
||||
},
|
||||
changeTheme(theme) {
|
||||
|
@ -1,13 +1,13 @@
|
||||
<div x-data="">
|
||||
<x-modal name="change-branch">
|
||||
<form wire:submit.prevent="change" class="p-6">
|
||||
<form wire:submit="change" class="p-6">
|
||||
<h2 class="text-lg font-medium text-gray-900 dark:text-gray-100">
|
||||
{{ __('Change Branch') }}
|
||||
</h2>
|
||||
|
||||
<div class="mt-6">
|
||||
<x-input-label for="branch" :value="__('Branch')" />
|
||||
<x-text-input wire:model.defer="branch" id="branch" name="branch" type="text" class="mt-1 w-full" />
|
||||
<x-text-input wire:model="branch" id="branch" name="branch" type="text" class="mt-1 w-full" />
|
||||
@error('branch')
|
||||
<x-input-error class="mt-2" :messages="$message" />
|
||||
@enderror
|
||||
|
@ -1,13 +1,13 @@
|
||||
<div x-data="">
|
||||
<x-modal name="deployment-script">
|
||||
<form wire:submit.prevent="save" class="p-6">
|
||||
<form wire:submit="save" class="p-6">
|
||||
<h2 class="text-lg font-medium text-gray-900 dark:text-gray-100">
|
||||
{{ __('Deployment Script') }}
|
||||
</h2>
|
||||
|
||||
<div class="mt-6">
|
||||
<x-input-label for="script" :value="__('Script')" />
|
||||
<x-textarea wire:model.defer="script" rows="10" id="script" name="script" class="mt-1 w-full" />
|
||||
<x-textarea wire:model="script" rows="10" id="script" name="script" class="mt-1 w-full" />
|
||||
@error('script')
|
||||
<x-input-error class="mt-2" :messages="$message" />
|
||||
@enderror
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user