From 42e3eecf80540a4963c25bd1ddae36c1bb38b7cf Mon Sep 17 00:00:00 2001 From: Asherslab Date: Thu, 17 May 2018 22:53:17 -0400 Subject: [PATCH 01/23] Add docker files --- .gitignore | 2 +- Dockerfile | 26 ++++++++++++++++++++++++++ default.conf | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ entrypoint.sh | 27 +++++++++++++++++++++++++++ 4 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 Dockerfile create mode 100644 default.conf create mode 100644 entrypoint.sh diff --git a/.gitignore b/.gitignore index 8c2fb940..33e412c0 100644 --- a/.gitignore +++ b/.gitignore @@ -20,7 +20,7 @@ sami.phar # For local development with docker # Remove if we ever put the Dockerfile in the repo .dockerignore -Dockerfile +#Dockerfile docker-compose.yml # for image related files misc diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..90d18594 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,26 @@ +FROM alpine:3.7 + +WORKDIR /app + +RUN apk add --no-cache wget ca-certificates && \ + wget -O /etc/apk/keys/phpearth.rsa.pub https://repos.php.earth/alpine/phpearth.rsa.pub && \ + echo "https://repos.php.earth/alpine/v3.7" >> /etc/apk/repositories && \ + apk add --no-cache --update certbot nginx dcron curl tini php7.2 php7.2-bcmath php7.2-common php7.2-dom php7.2-fpm php7.2-gd php7.2-mbstring php7.2-openssl php7.2-zip php7.2-pdo php7.2-phar php7.2-json php7.2-pdo_mysql php7.2-session php7.2-ctype php7.2-tokenizer php7.2-zlib php7.2-simplexml && \ + curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer + +COPY . ./ + +COPY default.conf /etc/nginx/conf.d/default.conf + +RUN cp .env.example .env +RUN composer install --no-dev + + +EXPOSE 80 +EXPOSE 443 + +RUN chown -R www-data:www-data . +RUN chmod -R 777 storage/* bootstrap/cache /var/run/php + +ENTRYPOINT ["ash", "entrypoint.sh"] + diff --git a/default.conf b/default.conf new file mode 100644 index 00000000..0944bf79 --- /dev/null +++ b/default.conf @@ -0,0 +1,51 @@ +# If using Ubuntu this file should be placed in: +# /etc/nginx/sites-available/ +# +# If using CentOS this file should be placed in: +# /etc/nginx/conf.d/ +# +server { + listen 80; + server_name _; + + root /app/public; + index index.html index.htm index.php; + charset utf-8; + + location / { + try_files $uri $uri/ /index.php?$query_string; + } + + location = /favicon.ico { access_log off; log_not_found off; } + location = /robots.txt { access_log off; log_not_found off; } + + access_log off; + error_log /var/log/nginx/pterodactyl.app-error.log error; + + # allow larger file uploads and longer script runtimes + client_max_body_size 100m; + client_body_timeout 120s; + + sendfile off; + + location ~ \.php$ { + fastcgi_split_path_info ^(.+\.php)(/.+)$; + # the fastcgi_pass path needs to be changed accordingly when using CentOS + fastcgi_pass unix:/var/run/php/php-fpm7.2.sock; + fastcgi_index index.php; + include fastcgi_params; + fastcgi_param PHP_VALUE "upload_max_filesize = 100M \n post_max_size=100M"; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_param HTTP_PROXY ""; + fastcgi_intercept_errors off; + fastcgi_buffer_size 16k; + fastcgi_buffers 4 16k; + fastcgi_connect_timeout 300; + fastcgi_send_timeout 300; + fastcgi_read_timeout 300; + } + + location ~ /\.ht { + deny all; + } +} diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100644 index 00000000..495581c3 --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,27 @@ +#!/bin/ash +tini -- php-fpm + +until nc -z -v -w30 $DB_HOST 3306 +do + echo "Waiting for database connection..." + # wait for 5 seconds before check again + sleep 5 +done + +sed -i s/DB_HOST=127.0.0.1/DB_HOST=$DB_HOST/g /app/.env +sed -i s/DB_DATABASE=panel/DB_DATABASE=$DB_DATABASE/g /app/.env +sed -i s/DB_USERNAME=pterodactyl/DB_USERNAME=$DB_USERNAME/g /app/.env +sed -i s/DB_PASSWORD=/DB_PASSWORD=$DB_PASSWORD/g /app/.env + +#echo "1" +#chown -R www-data:www-data . +#echo "2" +#chmod -R 777 storage/* bootstrap/cache /var/run/php +echo "3" +php artisan key:generate --force +echo "4" +php artisan migrate --force +echo "5" +php artisan db:seed --force +echo "Done" +nginx -g 'pid /tmp/nginx.pid; daemon off;' From 737bae300c7aec69a1fba812a044ff3f6cd0d6a6 Mon Sep 17 00:00:00 2001 From: Asherslab Date: Fri, 18 May 2018 08:55:12 -0400 Subject: [PATCH 02/23] Some Additions --- Dockerfile | 1 - entrypoint.sh | 21 +++++++++++++++------ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/Dockerfile b/Dockerfile index 90d18594..ef05f6da 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,7 +15,6 @@ COPY default.conf /etc/nginx/conf.d/default.conf RUN cp .env.example .env RUN composer install --no-dev - EXPOSE 80 EXPOSE 443 diff --git a/entrypoint.sh b/entrypoint.sh index 495581c3..8a42015e 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -8,17 +8,26 @@ do sleep 5 done -sed -i s/DB_HOST=127.0.0.1/DB_HOST=$DB_HOST/g /app/.env -sed -i s/DB_DATABASE=panel/DB_DATABASE=$DB_DATABASE/g /app/.env -sed -i s/DB_USERNAME=pterodactyl/DB_USERNAME=$DB_USERNAME/g /app/.env -sed -i s/DB_PASSWORD=/DB_PASSWORD=$DB_PASSWORD/g /app/.env +#sed -i s/DB_HOST=127.0.0.1/DB_HOST=$DB_HOST/g /app/.env +#sed -i s/DB_DATABASE=panel/DB_DATABASE=$DB_DATABASE/g /app/.env +#sed -i s/DB_USERNAME=pterodactyl/DB_USERNAME=$DB_USERNAME/g /app/.env +#sed -i s/DB_PASSWORD=/DB_PASSWORD=$DB_PASSWORD/g /app/.env #echo "1" #chown -R www-data:www-data . #echo "2" -#chmod -R 777 storage/* bootstrap/cache /var/run/php +chmod -R 777 storage/* bootstrap/cache /var/run/php /app/.env echo "3" -php artisan key:generate --force + +if [ "$(cat .env)" == "" ]; then + cat /app/.env.example > /app/.env +fi + +if [ "$(cat .env | grep APP_KEY)" == "APP_KEY=" ]; then + echo "Generating New Key" + php artisan key:generate --force +fi + echo "4" php artisan migrate --force echo "5" From a93a73ef4dea7382ac43d3bac21f75f1e544cbb0 Mon Sep 17 00:00:00 2001 From: Asherslab Date: Fri, 18 May 2018 09:11:33 -0400 Subject: [PATCH 03/23] Moved files --- default.conf => .dev/default.conf | 0 entrypoint.sh => .dev/entrypoint.sh | 2 ++ Dockerfile | 4 ++-- 3 files changed, 4 insertions(+), 2 deletions(-) rename default.conf => .dev/default.conf (100%) rename entrypoint.sh => .dev/entrypoint.sh (98%) diff --git a/default.conf b/.dev/default.conf similarity index 100% rename from default.conf rename to .dev/default.conf diff --git a/entrypoint.sh b/.dev/entrypoint.sh similarity index 98% rename from entrypoint.sh rename to .dev/entrypoint.sh index 8a42015e..eeb416ce 100644 --- a/entrypoint.sh +++ b/.dev/entrypoint.sh @@ -1,4 +1,6 @@ #!/bin/ash +cd /app + tini -- php-fpm until nc -z -v -w30 $DB_HOST 3306 diff --git a/Dockerfile b/Dockerfile index ef05f6da..94817bdb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,7 +10,7 @@ RUN apk add --no-cache wget ca-certificates && \ COPY . ./ -COPY default.conf /etc/nginx/conf.d/default.conf +COPY .dev/default.conf /etc/nginx/conf.d/default.conf RUN cp .env.example .env RUN composer install --no-dev @@ -21,5 +21,5 @@ EXPOSE 443 RUN chown -R www-data:www-data . RUN chmod -R 777 storage/* bootstrap/cache /var/run/php -ENTRYPOINT ["ash", "entrypoint.sh"] +ENTRYPOINT ["ash", ".dev/entrypoint.sh"] From 0667b61abf6135a993b498251684a42f25e52b98 Mon Sep 17 00:00:00 2001 From: Lance Pioch Date: Sun, 8 Jul 2018 11:11:47 -0400 Subject: [PATCH 04/23] Combine and consolidate --- .dev/entrypoint.sh | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/.dev/entrypoint.sh b/.dev/entrypoint.sh index eeb416ce..9cfcd0d5 100644 --- a/.dev/entrypoint.sh +++ b/.dev/entrypoint.sh @@ -15,11 +15,8 @@ done #sed -i s/DB_USERNAME=pterodactyl/DB_USERNAME=$DB_USERNAME/g /app/.env #sed -i s/DB_PASSWORD=/DB_PASSWORD=$DB_PASSWORD/g /app/.env -#echo "1" #chown -R www-data:www-data . -#echo "2" chmod -R 777 storage/* bootstrap/cache /var/run/php /app/.env -echo "3" if [ "$(cat .env)" == "" ]; then cat /app/.env.example > /app/.env @@ -30,9 +27,6 @@ if [ "$(cat .env | grep APP_KEY)" == "APP_KEY=" ]; then php artisan key:generate --force fi -echo "4" -php artisan migrate --force -echo "5" -php artisan db:seed --force +php artisan migrate --seed --force echo "Done" nginx -g 'pid /tmp/nginx.pid; daemon off;' From 925f28b29cd0ba25e08a32150d4e1560c945f93c Mon Sep 17 00:00:00 2001 From: Lance Pioch Date: Sun, 8 Jul 2018 11:13:18 -0400 Subject: [PATCH 05/23] Update alpine version --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 94817bdb..675c8a79 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM alpine:3.7 +FROM alpine:3.8 WORKDIR /app From 7ef3b76499ba2bf8070fc8fe2b5311173044eae6 Mon Sep 17 00:00:00 2001 From: Lance Pioch Date: Sun, 8 Jul 2018 11:14:20 -0400 Subject: [PATCH 06/23] Consolidate commands --- Dockerfile | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index 675c8a79..43366e02 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,14 +12,11 @@ COPY . ./ COPY .dev/default.conf /etc/nginx/conf.d/default.conf -RUN cp .env.example .env -RUN composer install --no-dev +RUN cp .env.example .env && composer install --no-dev -EXPOSE 80 -EXPOSE 443 +EXPOSE 80 443 -RUN chown -R www-data:www-data . -RUN chmod -R 777 storage/* bootstrap/cache /var/run/php +RUN chown -R www-data:www-data . && chmod -R 777 storage/* bootstrap/cache /var/run/php ENTRYPOINT ["ash", ".dev/entrypoint.sh"] From 44a65b4b3c947894331709a2a7e84bd65b020dfb Mon Sep 17 00:00:00 2001 From: Lance Pioch Date: Sun, 8 Jul 2018 11:28:26 -0400 Subject: [PATCH 07/23] Move to its own dir --- .dev/{ => docker}/default.conf | 0 Dockerfile | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename .dev/{ => docker}/default.conf (100%) diff --git a/.dev/default.conf b/.dev/docker/default.conf similarity index 100% rename from .dev/default.conf rename to .dev/docker/default.conf diff --git a/Dockerfile b/Dockerfile index 43366e02..335c021a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,7 +10,7 @@ RUN apk add --no-cache wget ca-certificates && \ COPY . ./ -COPY .dev/default.conf /etc/nginx/conf.d/default.conf +COPY .dev/docker/default.conf /etc/nginx/conf.d/default.conf RUN cp .env.example .env && composer install --no-dev From 5427b7e1723f31e5747057cbc145b08c24f459a8 Mon Sep 17 00:00:00 2001 From: "Michael (Parker) Parker" Date: Wed, 18 Jul 2018 12:15:33 -0400 Subject: [PATCH 08/23] dockerfile changes --- Dockerfile | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index 335c021a..00842cf6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,11 +2,8 @@ FROM alpine:3.8 WORKDIR /app -RUN apk add --no-cache wget ca-certificates && \ - wget -O /etc/apk/keys/phpearth.rsa.pub https://repos.php.earth/alpine/phpearth.rsa.pub && \ - echo "https://repos.php.earth/alpine/v3.7" >> /etc/apk/repositories && \ - apk add --no-cache --update certbot nginx dcron curl tini php7.2 php7.2-bcmath php7.2-common php7.2-dom php7.2-fpm php7.2-gd php7.2-mbstring php7.2-openssl php7.2-zip php7.2-pdo php7.2-phar php7.2-json php7.2-pdo_mysql php7.2-session php7.2-ctype php7.2-tokenizer php7.2-zlib php7.2-simplexml && \ - curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer +RUN apk add --no-cache --update ca-certificates certbot nginx dcron curl tini php7 php7-bcmath php7-common php7-dom php7-fpm php7-gd php7-mbstring php7-openssl php7-zip php7-pdo php7-phar php7-json php7-pdo_mysql php7-session php7-ctype php7-tokenizer php7-zlib \ + && curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer COPY . ./ From b7da8532ba7c4ab5bc823c70d2413082d78079ca Mon Sep 17 00:00:00 2001 From: "Michael (Parker) Parker" Date: Wed, 18 Jul 2018 15:31:35 -0400 Subject: [PATCH 09/23] Fixing install Adding php fpm conf and fixing dockerfile --- .dev/docker/www.conf | 14 ++++++++++++++ Dockerfile | 14 +++++++------- 2 files changed, 21 insertions(+), 7 deletions(-) create mode 100644 .dev/docker/www.conf diff --git a/.dev/docker/www.conf b/.dev/docker/www.conf new file mode 100644 index 00000000..808180b9 --- /dev/null +++ b/.dev/docker/www.conf @@ -0,0 +1,14 @@ +[pterodactyl] + +user = nginx +group = nginx + +listen = /var/run/php/php-fpm7.2.sock +listen.owner = nginx +listen.group = nginx +listen.mode = 0750 + +pm = ondemand +pm.max_children = 9 +pm.process_idle_timeout = 10s +pm.max_requests = 200 \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 00842cf6..7901e66b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,18 +2,18 @@ FROM alpine:3.8 WORKDIR /app -RUN apk add --no-cache --update ca-certificates certbot nginx dcron curl tini php7 php7-bcmath php7-common php7-dom php7-fpm php7-gd php7-mbstring php7-openssl php7-zip php7-pdo php7-phar php7-json php7-pdo_mysql php7-session php7-ctype php7-tokenizer php7-zlib \ +RUN apk add --no-cache --update ca-certificates certbot nginx dcron curl tini php7 php7-bcmath php7-common php7-dom php7-fpm php7-gd php7-mbstring php7-openssl php7-zip php7-pdo php7-phar php7-json php7-pdo_mysql php7-session php7-ctype php7-tokenizer php7-zlib php7-simplexml \ && curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer COPY . ./ -COPY .dev/docker/default.conf /etc/nginx/conf.d/default.conf - -RUN cp .env.example .env && composer install --no-dev +RUN cp .dev/docker/default.conf /etc/nginx/conf.d/default.conf \ + && cp .dev/docker/www.conf /etc/php7/php-fpm.d/www.conf \ + && cp .env.example .env \ + && composer install --no-dev EXPOSE 80 443 -RUN chown -R www-data:www-data . && chmod -R 777 storage/* bootstrap/cache /var/run/php - -ENTRYPOINT ["ash", ".dev/entrypoint.sh"] +RUN chown -R nginx:nginx . && chmod -R 777 storage/* bootstrap/cache +ENTRYPOINT ["ash", ".dev/entrypoint.sh"] \ No newline at end of file From 1ac13c82fa6c4daf588f0b067cd95818dcaf8cd6 Mon Sep 17 00:00:00 2001 From: "Michael (Parker) Parker" Date: Wed, 18 Jul 2018 17:15:28 -0400 Subject: [PATCH 10/23] more docker changes --- .dev/docker/README.md | 69 +++++++++++++++++++++++++++++++++ .dev/{ => docker}/entrypoint.sh | 8 ---- Dockerfile | 2 +- 3 files changed, 70 insertions(+), 9 deletions(-) create mode 100644 .dev/docker/README.md rename .dev/{ => docker}/entrypoint.sh (57%) diff --git a/.dev/docker/README.md b/.dev/docker/README.md new file mode 100644 index 00000000..b4d97ca3 --- /dev/null +++ b/.dev/docker/README.md @@ -0,0 +1,69 @@ +# Pterodactyl Panel - Docker Image +This is a ready to use docker image for the panel. + +## Requirements +This docker image requires some additional software to function. The software can either be provided in other containers (see the [docker-compose.yml](docker-compose.yml) as an example) or as existing instances. + +A mysql database is required. We recommend [this](quay.io/parkervcp/mariadb-alpine) image if you prefer to run it in a docker container. As a non-containerized option we recommend mariadb. + +A caching software is required as well. You can choose any of the [supported options](#cache-drivers). + +You can provide additional settings using a custom `.env` file or by setting the appropriate environment variables. + +## Setup + +Start the docker container and the required dependencies (either provide existing ones or start containers as well, see the [docker-compose.yml](docker-compose.yml) file as an example). + +After the startup is complete you'll need to create a user. +If you are running the docker container without docker-compose, use: +``` +docker exec -it php artisan pterodactyl:user +``` +If you are using docker compose use +``` +docker-compose exec panel php artisan pterodactyl:user +``` + +## Environment Variables +There are multiple environment variables to configure the panel when not providing your own `.env` file, see the following table for details on each available option. + +Note: If your `APP_URL` starts with `https://` you need to provide an `LETSENCRYPT_EMAIL` as well so Certificates can be generated. + +| Variable | Description | Required | +| ------------------- | ------------------------------------------------------------------------------ | -------- | +| `APP_URL` | The URL the panel will be reachable with (including protocol) | yes | +| `LETSENCRYPT_EMAIL` | The email used for letsencrypt certificate generation | yes | +| `DB_HOST` | The host of the mysql instance | yes | +| `DB_PORT` | The port of the mysql instance | yes | +| `DB_DATABASE` | The name of the mysql database | yes | +| `DB_USERNAME` | The mysql user | yes | +| `DB_PASSWORD` | The mysql password for the specified user | yes | +| `CACHE_DRIVER` | The cache driver (see [Cache drivers](#cache-drivers) for detais) | yes | +| `MAIL_DRIVER` | The email driver (see [Mail drivers](#mail-drivers) for details) | yes | +| `MAIL_FROM` | The email that should be used as the sender email | yes | +| `MAIL_HOST` | The host of your mail driver instance | maybe | +| `MAIL_PORT` | The port of your mail driver instance | maybe | +| `MAIL_USERNAME` | The username for your mail driver | maybe | +| `MAIL_PASSWORD` | The password for your mail driver | maybe | +| `APP_TIMEZONE` | The timezone to use for the panel | yes | + + +### Cache drivers +You can choose between different cache drivers depending on what you prefer. +We recommend redis when using docker as it can be started in a container easily. + +| Driver | Description | Required variables | +| -------- | ------------------------------------ | ------------------------------------------------------ | +| redis | | `REDIS_HOST` | + +### Mail drivers +You can choose between different mail drivers according to your needs. +Every driver requires `MAIL_FROM` to be set. + +| Driver | Description | Required variables | +| -------- | ------------------------------------ | ------------------------------------------------------------- | +| mail | uses the installed php mail | | +| mandrill | [Mandrill](http://www.mandrill.com/) | `MAIL_USERNAME` | +| postmark | [Postmark](https://postmarkapp.com/) | `MAIL_USERNAME` | +| mailgun | [Mailgun](https://www.mailgun.com/) | `MAIL_USERNAME`, `MAIL_HOST` | +| smtp | Any SMTP server can be configured | `MAIL_USERNAME`, `MAIL_HOST`, `MAIL_PASSWORD`, `MAIL_PORT` | diff --git a/.dev/entrypoint.sh b/.dev/docker/entrypoint.sh similarity index 57% rename from .dev/entrypoint.sh rename to .dev/docker/entrypoint.sh index 9cfcd0d5..ac4d8efb 100644 --- a/.dev/entrypoint.sh +++ b/.dev/docker/entrypoint.sh @@ -10,14 +10,6 @@ do sleep 5 done -#sed -i s/DB_HOST=127.0.0.1/DB_HOST=$DB_HOST/g /app/.env -#sed -i s/DB_DATABASE=panel/DB_DATABASE=$DB_DATABASE/g /app/.env -#sed -i s/DB_USERNAME=pterodactyl/DB_USERNAME=$DB_USERNAME/g /app/.env -#sed -i s/DB_PASSWORD=/DB_PASSWORD=$DB_PASSWORD/g /app/.env - -#chown -R www-data:www-data . -chmod -R 777 storage/* bootstrap/cache /var/run/php /app/.env - if [ "$(cat .env)" == "" ]; then cat /app/.env.example > /app/.env fi diff --git a/Dockerfile b/Dockerfile index 7901e66b..fa0afd7b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,4 +16,4 @@ EXPOSE 80 443 RUN chown -R nginx:nginx . && chmod -R 777 storage/* bootstrap/cache -ENTRYPOINT ["ash", ".dev/entrypoint.sh"] \ No newline at end of file +ENTRYPOINT ["ash", ".dev/app/entrypoint.sh"] \ No newline at end of file From 63b76c60fbf44e6a2294f99e017e8fb40e002615 Mon Sep 17 00:00:00 2001 From: "Michael (Parker) Parker" Date: Sat, 4 Aug 2018 19:21:51 -0400 Subject: [PATCH 11/23] dockerfile changes --- .dev/docker/default_ssl.conf | 70 ++++++++++++++++++++++++++++++++++++ .dev/docker/entrypoint.sh | 39 +++++++++++++------- .gitignore | 3 +- Dockerfile | 6 ++-- docker-compose.yml | 62 ++++++++++++++++++++++++++++++++ 5 files changed, 164 insertions(+), 16 deletions(-) create mode 100644 .dev/docker/default_ssl.conf create mode 100644 docker-compose.yml diff --git a/.dev/docker/default_ssl.conf b/.dev/docker/default_ssl.conf new file mode 100644 index 00000000..b102d572 --- /dev/null +++ b/.dev/docker/default_ssl.conf @@ -0,0 +1,70 @@ +# If using Ubuntu this file should be placed in: +# /etc/nginx/sites-available/ +# +server { + listen 80; + server_name ; + return 301 https://$server_name$request_uri; +} + +server { + listen 443 ssl http2; + server_name ; + + root /var/www/pterodactyl/public; + index index.php; + + access_log /var/log/nginx/pterodactyl.app-access.log; + error_log /var/log/nginx/pterodactyl.app-error.log error; + + # allow larger file uploads and longer script runtimes + client_max_body_size 100m; + client_body_timeout 120s; + + sendfile off; + + # strengthen ssl security + ssl_certificate /etc/letsencrypt/live//fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live//privkey.pem; + ssl_protocols TLSv1 TLSv1.1 TLSv1.2; + ssl_prefer_server_ciphers on; + ssl_session_cache shared:SSL:10m; + ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4"; + + # See the link below for more SSL information: + # https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html + # + # ssl_dhparam /etc/ssl/certs/dhparam.pem; + + # Add headers to serve security related headers + add_header Strict-Transport-Security "max-age=15768000; preload;"; + add_header X-Content-Type-Options nosniff; + add_header X-XSS-Protection "1; mode=block"; + add_header X-Robots-Tag none; + add_header Content-Security-Policy "frame-ancestors 'self'"; + + location / { + try_files $uri $uri/ /index.php?$query_string; + } + + location ~ \.php$ { + fastcgi_split_path_info ^(.+\.php)(/.+)$; + fastcgi_pass unix:/run/php/pterodactyl.sock; + fastcgi_index index.php; + include fastcgi_params; + fastcgi_param PHP_VALUE "upload_max_filesize = 100M \n post_max_size=100M"; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_param HTTP_PROXY ""; + fastcgi_intercept_errors off; + fastcgi_buffer_size 16k; + fastcgi_buffers 4 16k; + fastcgi_connect_timeout 300; + fastcgi_send_timeout 300; + fastcgi_read_timeout 300; + include /etc/nginx/fastcgi_params; + } + + location ~ /\.ht { + deny all; + } +} \ No newline at end of file diff --git a/.dev/docker/entrypoint.sh b/.dev/docker/entrypoint.sh index ac4d8efb..454c1a2e 100644 --- a/.dev/docker/entrypoint.sh +++ b/.dev/docker/entrypoint.sh @@ -1,24 +1,39 @@ #!/bin/ash +## Ensure we are in /app + cd /app -tini -- php-fpm +## check for .env file and generate app keys if missing +if [ -f /app/var/.env ]; then + echo "external vars exist" + rm /app/.env + ln -s /app/var/.env /app/ +else + echo "external vars don't exist" + php artisan key:generate --force + cp /app/.env /app/var/ +fi +## check for DB up before starting the panel +echo "Checking database status." until nc -z -v -w30 $DB_HOST 3306 + do echo "Waiting for database connection..." # wait for 5 seconds before check again sleep 5 done -if [ "$(cat .env)" == "" ]; then - cat /app/.env.example > /app/.env -fi - -if [ "$(cat .env | grep APP_KEY)" == "APP_KEY=" ]; then - echo "Generating New Key" - php artisan key:generate --force -fi - +## make sure the db is set up php artisan migrate --seed --force -echo "Done" -nginx -g 'pid /tmp/nginx.pid; daemon off;' + +echo -e "Done\n" + +## start php-fpm in the background +echo -e "Starting php-fpm in the background. \n" +php-fpm7 -D +echo -e "php-fpm starte.d \n" + +## start webserver +echo -e "Starting nginx in the foreground. \n" +nginx -g 'pid /tmp/nginx.pid; daemon off;' \ No newline at end of file diff --git a/.gitignore b/.gitignore index 33e412c0..36f2ddc9 100644 --- a/.gitignore +++ b/.gitignore @@ -20,8 +20,7 @@ sami.phar # For local development with docker # Remove if we ever put the Dockerfile in the repo .dockerignore -#Dockerfile -docker-compose.yml + # for image related files misc .phpstorm.meta.php diff --git a/Dockerfile b/Dockerfile index fa0afd7b..56a6cad3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,11 +9,13 @@ COPY . ./ RUN cp .dev/docker/default.conf /etc/nginx/conf.d/default.conf \ && cp .dev/docker/www.conf /etc/php7/php-fpm.d/www.conf \ - && cp .env.example .env \ + && echo "APP_ENVIRONMENT_ONLY=false" > /app/.env \ + && echo "APP_KEY=" >> /app/.env \ + && mkdir /var/run/php \ && composer install --no-dev EXPOSE 80 443 RUN chown -R nginx:nginx . && chmod -R 777 storage/* bootstrap/cache -ENTRYPOINT ["ash", ".dev/app/entrypoint.sh"] \ No newline at end of file +ENTRYPOINT ["ash", ".dev/docker/entrypoint.sh"] \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..96c3ead3 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,62 @@ +version: '2' +services: + database: + image: mariadb + volumes: + - "/srv/pterodactyl/database:/var/lib/mysql" + environment: + - "MYSQL_ROOT_PASSWORD=apassword" + - "MYSQL_DATABASE=pterodb" + - "MYSQL_USER=ptero" + - "MYSQL_PASSWORD=pterodbpass" + + cache: + image: redis:alpine + + panel: + image: quay.io/pterodactyl/panel:latest + ports: + - "80:80" + - "443:443" + links: + - database + - cache + volumes: + - "/srv/pterodactyl/var/:/app/var/" + environment: + ## These are defaults and should be left alone + - "APP_ENV=production" + - "APP_DEBUG=false" + - "APP_THEME=pterodactyl" + - "APP_CLEAR_TASKLOG=720" + - "APP_DELETE_MINUTES=10" + - "APP_ENVIRONMENT_ONLY=false" + - "QUEUE_HIGH=high" + - "QUEUE_STANDARD=standard" + - "QUEUE_LOW=low" + - "CACHE_DRIVER=redis" + - "SESSION_DRIVER=redis" + - "QUEUE_DRIVER=redis" + - "REDIS_HOST=cache_1" + - "REDIS_PASSWORD=null" + - "REDIS_PORT=6379" + ## Domain settings + - "APP_URL=https://your.domain.here" + ## Timezone settings + - "APP_TIMEZONE=America/New_York" + ## Service egg settings + - "APP_SERVICE_AUTHOR=noreply@your.domain.here" + ## Database settings + - "DB_HOST=database" + - "DB_PORT=3306" + - "DB_DATABASE=pterodb" + - "DB_USERNAME=ptero" + - "DB_PASSWORD=pterodbpass" + ## Email settings + - "MAIL_FROM=noreply@your.domain.here" + - "MAIL_DRIVER=smtp" + - "MAIL_HOST=mail" + - "MAIL_PORT=1025" + - "MAIL_USERNAME=''" + - "MAIL_PASSWORD=''" + - "MAIL_ENCRYPTION=true" \ No newline at end of file From 87e125ddadb9eda2bcd483879aa2b1cde9cc57bd Mon Sep 17 00:00:00 2001 From: "Michael (Parker) Parker" Date: Mon, 13 Aug 2018 23:33:15 -0400 Subject: [PATCH 12/23] key:generate is f'd --- .dev/docker/entrypoint.sh | 17 +++++++++++++---- Dockerfile | 6 +++--- docker-compose.yml | 2 ++ 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/.dev/docker/entrypoint.sh b/.dev/docker/entrypoint.sh index 454c1a2e..f05d621a 100644 --- a/.dev/docker/entrypoint.sh +++ b/.dev/docker/entrypoint.sh @@ -7,15 +7,24 @@ cd /app if [ -f /app/var/.env ]; then echo "external vars exist" rm /app/.env + ln -s /app/var/.env /app/ else echo "external vars don't exist" - php artisan key:generate --force - cp /app/.env /app/var/ + rm /app/.env + touch /app/var/.env + + ## manually generate a key because key generate --force fails + echo -e "Generating key" + APP_KEY=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1) + echo -e "Generated app key: $APP_KEY" + echo -e "APP_KEY=$APP_KEY" > /app/var/.env + + ln -s /app/var/.env /app/ fi ## check for DB up before starting the panel -echo "Checking database status." +zshoecho "Checking database status." until nc -z -v -w30 $DB_HOST 3306 do @@ -32,7 +41,7 @@ echo -e "Done\n" ## start php-fpm in the background echo -e "Starting php-fpm in the background. \n" php-fpm7 -D -echo -e "php-fpm starte.d \n" +echo -e "php-fpm started \n" ## start webserver echo -e "Starting nginx in the foreground. \n" diff --git a/Dockerfile b/Dockerfile index 56a6cad3..f9de52ba 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,10 +9,10 @@ COPY . ./ RUN cp .dev/docker/default.conf /etc/nginx/conf.d/default.conf \ && cp .dev/docker/www.conf /etc/php7/php-fpm.d/www.conf \ - && echo "APP_ENVIRONMENT_ONLY=false" > /app/.env \ - && echo "APP_KEY=" >> /app/.env \ && mkdir /var/run/php \ - && composer install --no-dev + && cp .env.example .env \ + && composer install --no-dev --optimize-autoloader \ + && rm .env EXPOSE 80 443 diff --git a/docker-compose.yml b/docker-compose.yml index 96c3ead3..4ba26836 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -23,6 +23,7 @@ services: - cache volumes: - "/srv/pterodactyl/var/:/app/var/" + - "/srv/pterodactyl/certs/:/" environment: ## These are defaults and should be left alone - "APP_ENV=production" @@ -34,6 +35,7 @@ services: - "QUEUE_HIGH=high" - "QUEUE_STANDARD=standard" - "QUEUE_LOW=low" + ## Cache settings - "CACHE_DRIVER=redis" - "SESSION_DRIVER=redis" - "QUEUE_DRIVER=redis" From 47c100de2f1270f980aaf3cbba59c4cd4d4b9503 Mon Sep 17 00:00:00 2001 From: "Michael (Parker) Parker" Date: Tue, 14 Aug 2018 00:01:25 -0400 Subject: [PATCH 13/23] latest changes --- .dev/docker/README.md | 4 ++-- .dev/docker/www.conf | 4 +++- docker-compose.yml | 11 +++++++++-- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/.dev/docker/README.md b/.dev/docker/README.md index b4d97ca3..db10d531 100644 --- a/.dev/docker/README.md +++ b/.dev/docker/README.md @@ -17,11 +17,11 @@ Start the docker container and the required dependencies (either provide existin After the startup is complete you'll need to create a user. If you are running the docker container without docker-compose, use: ``` -docker exec -it php artisan pterodactyl:user +docker exec -it php artisan p:user:make ``` If you are using docker compose use ``` -docker-compose exec panel php artisan pterodactyl:user +docker-compose exec panel php artisan p:user:make ``` ## Environment Variables diff --git a/.dev/docker/www.conf b/.dev/docker/www.conf index 808180b9..88142564 100644 --- a/.dev/docker/www.conf +++ b/.dev/docker/www.conf @@ -11,4 +11,6 @@ listen.mode = 0750 pm = ondemand pm.max_children = 9 pm.process_idle_timeout = 10s -pm.max_requests = 200 \ No newline at end of file +pm.max_requests = 200 + +clear_env = no \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 4ba26836..aaf27562 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,6 +1,7 @@ version: '2' services: database: + hostname: database image: mariadb volumes: - "/srv/pterodactyl/database:/var/lib/mysql" @@ -11,6 +12,7 @@ services: - "MYSQL_PASSWORD=pterodbpass" cache: + hostname: redis image: redis:alpine panel: @@ -23,7 +25,6 @@ services: - cache volumes: - "/srv/pterodactyl/var/:/app/var/" - - "/srv/pterodactyl/certs/:/" environment: ## These are defaults and should be left alone - "APP_ENV=production" @@ -61,4 +62,10 @@ services: - "MAIL_PORT=1025" - "MAIL_USERNAME=''" - "MAIL_PASSWORD=''" - - "MAIL_ENCRYPTION=true" \ No newline at end of file + - "MAIL_ENCRYPTION=true" + +networks: + default: + ipam: + config: + - subnet: 172.20.0.0/16 From a4c54c4e47fd6d4f08ca0d694e7ad8d887eeb85f Mon Sep 17 00:00:00 2001 From: "Michael (Parker) Parker" Date: Tue, 14 Aug 2018 00:12:04 -0400 Subject: [PATCH 14/23] updated docker-compose updated docker-compose --- docker-compose.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index aaf27562..02799382 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,18 +1,18 @@ version: '2' services: database: - hostname: database image: mariadb volumes: - "/srv/pterodactyl/database:/var/lib/mysql" environment: + ## Database settings + ## change if you want it to be more secure. - "MYSQL_ROOT_PASSWORD=apassword" - "MYSQL_DATABASE=pterodb" - "MYSQL_USER=ptero" - "MYSQL_PASSWORD=pterodbpass" cache: - hostname: redis image: redis:alpine panel: @@ -40,7 +40,7 @@ services: - "CACHE_DRIVER=redis" - "SESSION_DRIVER=redis" - "QUEUE_DRIVER=redis" - - "REDIS_HOST=cache_1" + - "REDIS_HOST=cache" - "REDIS_PASSWORD=null" - "REDIS_PORT=6379" ## Domain settings @@ -50,6 +50,7 @@ services: ## Service egg settings - "APP_SERVICE_AUTHOR=noreply@your.domain.here" ## Database settings + ## change if you want it to be more secure. - "DB_HOST=database" - "DB_PORT=3306" - "DB_DATABASE=pterodb" From 77dfd9815f83a39b107bbf761b081a0cdfeac593 Mon Sep 17 00:00:00 2001 From: "Michael (Parker) Parker" Date: Tue, 14 Aug 2018 00:14:13 -0400 Subject: [PATCH 15/23] moved compose to example moved the docker-compose script to an example and ignore docker-compose.yml --- .gitignore | 2 ++ docker-compose.yml => docker-compose.example.yml | 0 2 files changed, 2 insertions(+) rename docker-compose.yml => docker-compose.example.yml (100%) diff --git a/.gitignore b/.gitignore index 36f2ddc9..ab517590 100644 --- a/.gitignore +++ b/.gitignore @@ -20,6 +20,8 @@ sami.phar # For local development with docker # Remove if we ever put the Dockerfile in the repo .dockerignore +#Dockerfile +docker-compose.yml # for image related files misc diff --git a/docker-compose.yml b/docker-compose.example.yml similarity index 100% rename from docker-compose.yml rename to docker-compose.example.yml From e24abe9626b3ae6903279c4a332409e27a0ec7cd Mon Sep 17 00:00:00 2001 From: "Michael (Parker) Parker" Date: Sat, 18 Aug 2018 07:32:01 -0400 Subject: [PATCH 16/23] changes per schrej's request Lists the stock MariaDB Link instead of my old personal one. Corrects an echo command in the entrypoint. --- .dev/docker/README.md | 2 +- .dev/docker/entrypoint.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.dev/docker/README.md b/.dev/docker/README.md index db10d531..6e877d8d 100644 --- a/.dev/docker/README.md +++ b/.dev/docker/README.md @@ -4,7 +4,7 @@ This is a ready to use docker image for the panel. ## Requirements This docker image requires some additional software to function. The software can either be provided in other containers (see the [docker-compose.yml](docker-compose.yml) as an example) or as existing instances. -A mysql database is required. We recommend [this](quay.io/parkervcp/mariadb-alpine) image if you prefer to run it in a docker container. As a non-containerized option we recommend mariadb. +A mysql database is required. We recommend [this](https://hub.docker.com/_/mariadb/) image if you prefer to run it in a docker container. As a non-containerized option we recommend mariadb. A caching software is required as well. You can choose any of the [supported options](#cache-drivers). diff --git a/.dev/docker/entrypoint.sh b/.dev/docker/entrypoint.sh index f05d621a..23ea4cda 100644 --- a/.dev/docker/entrypoint.sh +++ b/.dev/docker/entrypoint.sh @@ -24,7 +24,7 @@ else fi ## check for DB up before starting the panel -zshoecho "Checking database status." +echo "Checking database status." until nc -z -v -w30 $DB_HOST 3306 do From d5f166d12104a201dce25808a83ec06109968add Mon Sep 17 00:00:00 2001 From: Dane Everitt Date: Mon, 3 Sep 2018 16:23:59 -0700 Subject: [PATCH 17/23] bump for release --- config/app.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/app.php b/config/app.php index a7c196b3..a92ab036 100644 --- a/config/app.php +++ b/config/app.php @@ -9,7 +9,7 @@ return [ | change this value if you are not maintaining your own internal versions. */ - 'version' => 'canary', + 'version' => '0.7.10', /* |-------------------------------------------------------------------------- From d24c61b472f9c49af95ad1f9ee337ff8d3a0635c Mon Sep 17 00:00:00 2001 From: ayan4m1 Date: Sat, 15 Sep 2018 20:43:11 -0400 Subject: [PATCH 18/23] Revert "Update terminal.css" This reverts commit 955617d7ce34a49b785a87c707df6962a51ea3a7. --- public/themes/pterodactyl/css/terminal.css | 1 - 1 file changed, 1 deletion(-) diff --git a/public/themes/pterodactyl/css/terminal.css b/public/themes/pterodactyl/css/terminal.css index 29ede479..ecdd10ff 100644 --- a/public/themes/pterodactyl/css/terminal.css +++ b/public/themes/pterodactyl/css/terminal.css @@ -26,7 +26,6 @@ #terminal > .cmd { padding: 1px 0; - white-space: pre; } #terminal_input { From b370b2cb910f46bb3c6bb01486ad44bd5da4cade Mon Sep 17 00:00:00 2001 From: "Michael (Parker) Parker" Date: Sat, 15 Sep 2018 21:22:13 -0400 Subject: [PATCH 19/23] adding supervisord for queue workers Added supervisord to run the queue worker,. moved php-fpm and nginx to supervisord as well. --- .dev/docker/README.md | 19 ++++++++++++------ .dev/docker/entrypoint.sh | 18 ++++++++--------- .dev/docker/supervisord.conf | 39 ++++++++++++++++++++++++++++++++++++ Dockerfile | 19 +++++++++++------- 4 files changed, 72 insertions(+), 23 deletions(-) create mode 100644 .dev/docker/supervisord.conf diff --git a/.dev/docker/README.md b/.dev/docker/README.md index 6e877d8d..c5c2991c 100644 --- a/.dev/docker/README.md +++ b/.dev/docker/README.md @@ -4,11 +4,11 @@ This is a ready to use docker image for the panel. ## Requirements This docker image requires some additional software to function. The software can either be provided in other containers (see the [docker-compose.yml](docker-compose.yml) as an example) or as existing instances. -A mysql database is required. We recommend [this](https://hub.docker.com/_/mariadb/) image if you prefer to run it in a docker container. As a non-containerized option we recommend mariadb. +A mysql database is required. We recommend the stock [MariaDB Image](https://hub.docker.com/_/mariadb/) image if you prefer to run it in a docker container. As a non-containerized option we recommend mariadb. -A caching software is required as well. You can choose any of the [supported options](#cache-drivers). +A caching software is required as well. We recommend the stock [Redis Image](https://hub.docker.com/_/redis/) image. You can choose any of the [supported options](#cache-drivers). -You can provide additional settings using a custom `.env` file or by setting the appropriate environment variables. +You can provide additional settings using a custom `.env` file or by setting the appropriate environment variables in the docker-compose file. ## Setup @@ -32,6 +32,7 @@ Note: If your `APP_URL` starts with `https://` you need to provide an `LETSENCRY | Variable | Description | Required | | ------------------- | ------------------------------------------------------------------------------ | -------- | | `APP_URL` | The URL the panel will be reachable with (including protocol) | yes | +| `APP_TIMEZONE` | The timezone to use for the panel | yes | | `LETSENCRYPT_EMAIL` | The email used for letsencrypt certificate generation | yes | | `DB_HOST` | The host of the mysql instance | yes | | `DB_PORT` | The port of the mysql instance | yes | @@ -39,13 +40,17 @@ Note: If your `APP_URL` starts with `https://` you need to provide an `LETSENCRY | `DB_USERNAME` | The mysql user | yes | | `DB_PASSWORD` | The mysql password for the specified user | yes | | `CACHE_DRIVER` | The cache driver (see [Cache drivers](#cache-drivers) for detais) | yes | +| `SESSION_DRIVER` | | yes | +| `QUEUE_DRIVER` | | yes | +| `REDIS_HOST` | The hostname or IP address of the redis database | yes | +| `REDIS_PASSWORD` | The password used to secure the redis database | maybe | +| `REDIS_PORT` | The port the redis database is using on the host | maybe | | `MAIL_DRIVER` | The email driver (see [Mail drivers](#mail-drivers) for details) | yes | | `MAIL_FROM` | The email that should be used as the sender email | yes | | `MAIL_HOST` | The host of your mail driver instance | maybe | | `MAIL_PORT` | The port of your mail driver instance | maybe | | `MAIL_USERNAME` | The username for your mail driver | maybe | | `MAIL_PASSWORD` | The password for your mail driver | maybe | -| `APP_TIMEZONE` | The timezone to use for the panel | yes | ### Cache drivers @@ -54,7 +59,9 @@ We recommend redis when using docker as it can be started in a container easily. | Driver | Description | Required variables | | -------- | ------------------------------------ | ------------------------------------------------------ | -| redis | | `REDIS_HOST` | +| redis | host where redis is running | `REDIS_HOST` | +| redis | port redis is running on | `REDIS_PORT` | +| redis | redis database password | `REDIS_PASSWORD` | ### Mail drivers You can choose between different mail drivers according to your needs. @@ -66,4 +73,4 @@ Every driver requires `MAIL_FROM` to be set. | mandrill | [Mandrill](http://www.mandrill.com/) | `MAIL_USERNAME` | | postmark | [Postmark](https://postmarkapp.com/) | `MAIL_USERNAME` | | mailgun | [Mailgun](https://www.mailgun.com/) | `MAIL_USERNAME`, `MAIL_HOST` | -| smtp | Any SMTP server can be configured | `MAIL_USERNAME`, `MAIL_HOST`, `MAIL_PASSWORD`, `MAIL_PORT` | +| smtp | Any SMTP server can be configured | `MAIL_USERNAME`, `MAIL_HOST`, `MAIL_PASSWORD`, `MAIL_PORT` | \ No newline at end of file diff --git a/.dev/docker/entrypoint.sh b/.dev/docker/entrypoint.sh index 23ea4cda..772645f6 100644 --- a/.dev/docker/entrypoint.sh +++ b/.dev/docker/entrypoint.sh @@ -34,15 +34,13 @@ do done ## make sure the db is set up -php artisan migrate --seed --force +echo -e "Migrating and Seeding DB" +php artisan migrate --force +php artisan db:seed --force -echo -e "Done\n" +## start cronjobs for the queue +echo -e "Starting cron jobs" +crond -## start php-fpm in the background -echo -e "Starting php-fpm in the background. \n" -php-fpm7 -D -echo -e "php-fpm started \n" - -## start webserver -echo -e "Starting nginx in the foreground. \n" -nginx -g 'pid /tmp/nginx.pid; daemon off;' \ No newline at end of file +echo -e "Starting supervisord" +exec "$@" \ No newline at end of file diff --git a/.dev/docker/supervisord.conf b/.dev/docker/supervisord.conf new file mode 100644 index 00000000..f2fd3a1b --- /dev/null +++ b/.dev/docker/supervisord.conf @@ -0,0 +1,39 @@ +[unix_http_server] +file=/tmp/supervisor.sock ; path to your socket file + +[supervisord] +logfile=/var/log/supervisord/supervisord.log ; supervisord log file +logfile_maxbytes=50MB ; maximum size of logfile before rotation +logfile_backups=2 ; number of backed up logfiles +loglevel=error ; info, debug, warn, trace +pidfile=/var/run/supervisord.pid ; pidfile location +nodaemon=false ; run supervisord as a daemon +minfds=1024 ; number of startup file descriptors +minprocs=200 ; number of process descriptors +user=root ; default user +childlogdir=/var/log/supervisord/ ; where child log files will live + +[rpcinterface:supervisor] +supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface + +[supervisorctl] +serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket + +[program:php-fpm] +command=/usr/sbin/php-fpm7 -F +autostart=true +autorestart=true + +[program:queue-worker] +command=/usr/bin/php /app/artisan queue:work --queue=high,standard,low --sleep=3 --tries=3 +user=nginx +autostart=true +autorestart=true + +[program:nginx] +command=/usr/sbin/nginx -g 'daemon off;' +autostart=true +autorestart=true +priority=10 +stdout_events_enabled=true +stderr_events_enabled=true \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index f9de52ba..ae96a60c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,20 +2,25 @@ FROM alpine:3.8 WORKDIR /app -RUN apk add --no-cache --update ca-certificates certbot nginx dcron curl tini php7 php7-bcmath php7-common php7-dom php7-fpm php7-gd php7-mbstring php7-openssl php7-zip php7-pdo php7-phar php7-json php7-pdo_mysql php7-session php7-ctype php7-tokenizer php7-zlib php7-simplexml \ +RUN apk add --no-cache --update ca-certificates certbot nginx dcron curl tini php7 php7-bcmath php7-common php7-dom php7-fpm php7-gd php7-mbstring php7-openssl php7-zip php7-pdo php7-phar php7-json php7-pdo_mysql php7-session php7-ctype php7-tokenizer php7-zlib php7-simplexml supervisor \ && curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer COPY . ./ +RUN cp .env.example .env \ + && composer install --no-dev --optimize-autoloader \ + && rm .env \ + && chown -R nginx:nginx . && chmod -R 777 storage/* bootstrap/cache + RUN cp .dev/docker/default.conf /etc/nginx/conf.d/default.conf \ && cp .dev/docker/www.conf /etc/php7/php-fpm.d/www.conf \ - && mkdir /var/run/php \ - && cp .env.example .env \ - && composer install --no-dev --optimize-autoloader \ - && rm .env + && cat .dev/docker/supervisord.conf > /etc/supervisord.conf \ + && echo "* * * * * /usr/bin/php /app/pterodactyl/artisan schedule:run >> /dev/null 2>&1" >> /var/spool/cron/crontabs/root \ + && mkdir -p /var/run/php /var/run/nginx \ + && mkdir -p /var/log/supervisord/ EXPOSE 80 443 -RUN chown -R nginx:nginx . && chmod -R 777 storage/* bootstrap/cache +ENTRYPOINT ["/bin/ash", ".dev/docker/entrypoint.sh"] -ENTRYPOINT ["ash", ".dev/docker/entrypoint.sh"] \ No newline at end of file +CMD [ "supervisord", "-n", "-c", "/etc/supervisord.conf" ] \ No newline at end of file From 9f6875ed619b26eddca0fa4a085eef1f0caca8b0 Mon Sep 17 00:00:00 2001 From: ayan4m1 Date: Sun, 16 Sep 2018 13:20:57 -0400 Subject: [PATCH 20/23] log query exception message during settings boot --- app/Providers/SettingsServiceProvider.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Providers/SettingsServiceProvider.php b/app/Providers/SettingsServiceProvider.php index 48861db4..2cc26e66 100644 --- a/app/Providers/SettingsServiceProvider.php +++ b/app/Providers/SettingsServiceProvider.php @@ -78,7 +78,7 @@ class SettingsServiceProvider extends ServiceProvider return [$setting->key => $setting->value]; })->toArray(); } catch (QueryException $exception) { - $log->notice('A query exception was encountered while trying to load settings from the database.'); + $log->notice('A query exception was encountered while trying to load settings from the database: ' . $exception->getMessage()); return; } From 053d7917aee19af88c9423d96dbe28c2706cf5b8 Mon Sep 17 00:00:00 2001 From: Knot3n Date: Wed, 19 Sep 2018 06:42:03 +0200 Subject: [PATCH 21/23] Translation improved - extended (#1317) --- resources/lang/de/auth.php | 20 +-- resources/lang/de/base.php | 102 ++++++------- resources/lang/de/command/messages.php | 40 ++--- resources/lang/de/exceptions.php | 2 +- resources/lang/de/navigation.php | 2 +- resources/lang/de/pagination.php | 10 +- resources/lang/de/passwords.php | 4 +- resources/lang/de/server.php | 198 ++++++++++++------------- resources/lang/de/strings.php | 2 +- 9 files changed, 190 insertions(+), 190 deletions(-) diff --git a/resources/lang/de/auth.php b/resources/lang/de/auth.php index f014ea32..73673a00 100644 --- a/resources/lang/de/auth.php +++ b/resources/lang/de/auth.php @@ -2,26 +2,26 @@ return [ '2fa_failed' => 'Der 2FA-Token war ungültig.', - '2fa_must_be_enabled' => 'Der Administrator hat festgelegt, dass dein Konto 2-Faktor-Authentifizierung benutzen muss, um das Panel verwenden zu können.', + '2fa_must_be_enabled' => 'Der Administrator hat festgelegt, dass dein Konto die 2-Faktor-Authentifizierung benutzen muss, um das Panel verwenden zu können.', '2fa_required' => 'Zwei-Faktor Authentifizierung', - 'authentication_required' => 'Sie müssen angemeldet sein, um fortzufahren.', - 'auth_error' => 'Währen dem Einloggen ist ein Fehler aufgetreten.', + 'authentication_required' => 'Du musst angemeldet sein, um fortzufahren.', + 'auth_error' => 'Während dem anmelden ist ein Fehler aufgetreten.', 'confirmpassword' => 'Passwort bestätigen', - 'emailsent' => 'Ihre E-Mail zum Zurücksetzen des Passworts ist nun unterwegs.', - 'email_sent' => 'Du erhälst eine E-Mail mit weiteren Anweisungen zum Zurücksetzen deines Passworts.', + 'emailsent' => 'Deine E-Mail zum zurücksetzen des Passworts ist unterwegs.', + 'email_sent' => 'Du erhälst eine E-Mail mit weiteren Anweisungen zum zurücksetzen deines Passworts.', 'failed' => 'Die Anmeldeinformationen stimmen nicht überein.', 'forgot_password' => 'Passwort vergessen', - 'not_authorized' => 'Du bist nicht autorisiert diese Aktion auszuführen0.', + 'not_authorized' => 'Du bist nicht autorisiert diese Aktion auszuführen.', 'password_requirements' => 'Passwörter müssen Zahlen, Klein-, Großbuchstaben enthalten und mindestens 8 Zeichen lang sein.', 'remeberme' => 'Angemeldet bleiben', - 'remember_me' => 'Eingeloggt bleiben', + 'remember_me' => 'Angemeldet bleiben', 'request_reset' => 'Konto suchen', - 'request_reset_text' => 'Du hast dein Passwort vergessen? Das ist keinWeltuntergang! Gib einfach deine Email hier an.', + 'request_reset_text' => 'Du hast dein Passwort vergessen? Das ist kein Weltuntergang! Gib einfach deine E-Mail hier an.', 'resetpassword' => 'Passwort zurücksetzen', 'reset_password' => 'Passwort zurücksetzen', 'reset_password_text' => 'Passwort zurücksetzen.', 'sendlink' => 'Passwortrücksetzungslink senden.', - 'sign_in' => 'Einloggen', - 'throttle' => 'Du hast zu oft versucht dich anzumalen bitte warte noch :seconds Sekunden.', + 'sign_in' => 'Anmelden', + 'throttle' => 'Du hast zu oft versucht dich anzumelden, bitte warte noch :seconds Sekunden.', 'totp_failed' => 'Der TOTP Code war ungültig.', ]; diff --git a/resources/lang/de/base.php b/resources/lang/de/base.php index 142d5713..9a99320a 100644 --- a/resources/lang/de/base.php +++ b/resources/lang/de/base.php @@ -6,7 +6,7 @@ return [ 'delete_user' => 'Benutzer löschen', 'details_updated' => 'Dein Account wurde erfolgreich bearbeitet.', 'email_password' => 'Email Passwort', - 'exception' => 'Währen dem Aktualisieren deines Account ist ein Fehler aufgetreten.', + 'exception' => 'Während dem aktualisieren deines Kontos ist ein Fehler aufgetreten.', 'first_name' => 'Vorname', 'header' => 'BENUTZERVERWALTUNG', 'header_sub' => 'Verwalte deine Kontodetails.', @@ -18,11 +18,11 @@ return [ 'new_password_again' => 'Neues Passwort wiederholen', 'totp_disable' => 'Deaktiviere die Zwei-Faktor-Authentifizierung', 'totp_enable' => 'Zwei-Faktor-Authentifizierung aktivieren', - 'totp_enable_help' => 'Es sieht so aus als hättest du Zwei-Faktor-Authentifizierung deaktiviert. Diese Authentifizierungsmethode schützt dein Konto zusätzlich vor unerlaubtem Zugriff. Wenn du es aktivierst musst du zukünftig neben deinem Passwort auch einen Code, der von deinem Smartphone oder einem anderen TOTP fähigen Gerät generiert wird, eingeben um dich anzumelden.', + 'totp_enable_help' => 'Es sieht so aus als hättest du die Zwei-Faktor-Authentifizierung deaktiviert. Diese Authentifizierungsmethode schützt dein Konto zusätzlich vor unerlaubtem Zugriff. Wenn du sie aktivierst musst du zukünftig neben deinem Passwort auch einen Code, der von deinem Smartphone oder einem anderen TOTP fähigen Gerät generiert wird, eingeben um dich anzumelden.', 'totp_header' => 'Zwei-Faktor Authentifizierung', 'update_email' => 'E-Mail Adresse aktualisieren', 'update_identitity' => 'Kotodetails aktualisieren', - 'update_identity' => 'Account bearbeiten', + 'update_identity' => 'Konto bearbeiten', 'update_pass' => 'Passwort ändern', 'update_user' => 'Benutzer aktualisieren', 'username_help' => 'Dein Benutzername muss für dein Konto einzigartig sein und darf nur die folgenden Zeichen enthalten: :requirements.', @@ -32,7 +32,7 @@ return [ 'create_new' => 'Neuen API Schlüssel erstellen', 'header' => 'API Zugriff', 'header_sub' => 'Verwalte deine API Zugangsschlüssel.', - 'keypair_created' => 'An API Key-Pair has been generated. Your API secret token is :token. Please take note of this key as it will not be displayed again.', + 'keypair_created' => 'Ein API-Schlüsselpaar wurde generiert. Dein API Secret Token ist : token . Bitte notiere diesen Schlüssel, da er nicht mehr angezeigt wird. ', 'list' => 'API Schlüssel', ], 'new' => [ @@ -141,7 +141,7 @@ return [ ], 'title' => 'Benutzerverwaltung', 'update' => [ - 'description' => 'Erlaubt Benutzerdetails zu ändern (E-Mail, Passwort, TOPT einstellungen).', + 'description' => 'Erlaubt Benutzerdetails zu ändern (E-Mail, Passwort, TOPT Einstellungen).', 'title' => 'Benutzer aktualisieren', ], 'view' => [ @@ -154,7 +154,7 @@ return [ 'admin' => [ 'location' => [ 'list' => [ - 'desc' => 'Der User darf alle Standorte sehen.', + 'desc' => 'Der Benutzer darf alle Standorte sehen.', 'title' => 'Liste Standorte', ], ], @@ -169,11 +169,11 @@ return [ 'title' => 'Node löschen', ], 'list' => [ - 'desc' => 'Der User darf alle Nodes sehen.', + 'desc' => 'Der Benutzer darf alle Nodes sehen.', 'title' => 'Nodes auflisten', ], 'view-config' => [ - 'desc' => 'Achtung. Der User kann die Konfiguration dieser Node sehen.', + 'desc' => 'Der Benutzer kann die Konfiguration dieser Node sehen.', 'title' => 'Node Konfiguration anzeigen', ], 'view' => [ @@ -202,70 +202,70 @@ return [ 'pack_header' => 'Pack Control', 'server' => [ 'create' => [ - 'desc' => 'Der User darf Server erstellen.', - 'title' => 'Create Server', + 'desc' => 'Der Benutzer darf Server erstellen.', + 'title' => 'Server erstellen', ], 'delete' => [ - 'desc' => 'Der User darf Server löschen.', - 'title' => 'Delete Server', + 'desc' => 'Der Benutzer darf Server löschen.', + 'title' => 'Server löschen', ], 'edit-build' => [ - 'desc' => 'Der User darf Server einstellungen bearbeiten.', - 'title' => 'Edit Server Build', + 'desc' => 'Der Benutzer darf Servereinstellungen bearbeiten.', + 'title' => 'Servereinstellungen ändern', ], 'edit-container' => [ - 'desc' => 'Der User darf die Container Einstellungen des Servers verändern.', - 'title' => 'Edit Server Container', + 'desc' => 'Der Benutzer darf die Container Einstellungen des Servers verändern.', + 'title' => 'Server Container Einstellungen ändern', ], 'edit-details' => [ - 'desc' => 'Der User darf die Server EInstellungen bearbeiten.', - 'title' => 'Edit Server Details', + 'desc' => 'Der Benutzer darf die Servereinstellungen bearbeiten.', + 'title' => 'Server Details ändern', ], 'edit-startup' => [ 'desc' => 'Der User darf die Startparameter ändern.', - 'title' => 'Edit Server Startup', + 'title' => 'Server Startparameter ändern', ], 'install' => [ - 'desc' => 'Der User darf den Installationstatus bearbeiten', - 'title' => 'Toggle Install Status', + 'desc' => 'Der Benutzer darf den Installationstatus bearbeiten', + 'title' => 'Installlations Status ändern', ], 'list' => [ - 'desc' => 'Der User darf alle Server dieser Instanz sehen.', - 'title' => 'List Servers', + 'desc' => 'Der Benutzer darf alle Server dieser Instanz sehen.', + 'title' => 'Servers Liste anzeigen', ], 'rebuild' => [ - 'desc' => 'Der User darf den Server ner erstellen', + 'desc' => 'Der Benutzer darf den Server ner erstellen', 'title' => 'Rebuild Server', ], 'suspend' => [ 'desc' => 'Der User darf Server sperren.', - 'title' => 'Suspend Server', + 'title' => 'Server sperren', ], 'view' => [ - 'desc' => 'Der user darf detaillierte Informationen zu allen Servern dieser Instanz sehen.', - 'title' => 'View Server', + 'desc' => 'Der Benutzer darf detaillierte Informationen zu allen Servern dieser Instanz sehen.', + 'title' => 'Server Informationen anzeigen', ], ], 'server_header' => 'Server Control', 'service' => [ 'list' => [ - 'desc' => 'Der User kann alle Services sehen.', - 'title' => 'List Service', + 'desc' => 'Der Benutzer kann alle Services sehen.', + 'title' => 'Services anzeigen', ], 'view' => [ - 'desc' => 'Der user kann detaillierte Informationen über einen Service sehen.', - 'title' => 'View Service', + 'desc' => 'Der Benutzer kann detaillierte Informationen über einen Service sehen.', + 'title' => 'Service anzeigen', ], ], 'service_header' => 'Service Control', 'user' => [ 'create' => [ - 'desc' => 'Der User kann einen User erstellen.', - 'title' => 'Create User', + 'desc' => 'Der Benutzer kann einen User erstellen.', + 'title' => 'Benutzer erstellen', ], 'delete' => [ 'desc' => 'Der User kann einen Server löschen.', - 'title' => 'Delete User', + 'title' => 'Benutzer löschen', ], 'edit' => [ 'desc' => 'Der User kann einen User bearbeiten.', @@ -273,11 +273,11 @@ return [ ], 'list' => [ 'desc' => 'Ermöglicht die Auflistung aller derzeit im System befindlichen Benutzer.', - 'title' => 'List Users', + 'title' => 'Benutzerliste anzeigen', ], 'view' => [ 'desc' => 'Der User kann detaillierte Informationen der User sehen.', - 'title' => 'View User', + 'title' => 'Benutzerinformationen anzeigen', ], ], 'user_header' => 'Benutzer Control', @@ -285,20 +285,20 @@ return [ 'user' => [ 'server' => [ 'command' => [ - 'desc' => 'Der User hat Zugriff auf die Server Console.', - 'title' => 'Send Command', + 'desc' => 'Der Benutzer hat Zugriff auf die Server Konsole.', + 'title' => 'Befehl senden', ], 'list' => [ - 'desc' => 'Der user darf seine Serverliste ansehen.', - 'title' => 'List Servers', + 'desc' => 'Der Benutzer darf seine Serverliste ansehen.', + 'title' => 'Serverliste', ], 'power' => [ - 'desc' => 'Der User darf den Server starten/stoppen/restartet.', - 'title' => 'Toggle Power', + 'desc' => 'Der Benutzer darf den Server starten/stoppen/restartet.', + 'title' => 'Server start/stop/restart', ], 'view' => [ - 'desc' => 'Der User darf detaillierte Informationen über seine Server sehen.', - 'title' => 'View Server', + 'desc' => 'Der Benutzer darf detaillierte Informationen über seine Server sehen.', + 'title' => 'Serverinformationen anzeigen', ], ], 'server_header' => 'Benutzer Rechte', @@ -312,13 +312,13 @@ return [ 'header' => 'Forbidden', ], '404' => [ - 'desc' => 'Die Angefragte Ressource konnte nicht gefunden werden.', + 'desc' => 'Die angefragte Ressource konnte nicht gefunden werden.', 'header' => 'File Not Found', ], 'home' => 'Gehe zur Startseite', 'installing' => [ - 'desc' => 'Der angeforderte Server wird derzeit noch installiert. Bitte versuche es in ein paar Minuten erneut, du solltest eine E-Mail erhalten, sobald dieser Prozess abgeschlossen ist.', - 'header' => 'Server Installing', + 'desc' => 'Dieser Server wird derzeit noch installiert. Bitte versuche es in ein paar Minuten erneut, du solltest eine E-Mail erhalten, sobald dieser Prozess abgeschlossen ist.', + 'header' => 'Server Installation', ], 'return' => 'Zur vorherigen Seite zurückkehren', 'suspended' => [ @@ -335,13 +335,13 @@ return [ 'no_servers' => 'Deinem Benutzerkonto sind aktuell keine Server zugeordnet.', 'password_req' => 'Passwörter müssen den folgenden Anforderungen genügen: mindestens ein Großbuchstabe, ein Kleinbuchstabe, eine Ziffer und eine Länge von mindestens 8 Zeichen.', 'security' => [ - '2fa_checkpoint_help' => 'Verwende die 2FA-Anwendung auf deinem Telefon, um den QR-Codes auf der linken Seite zu scannen, oder gebe den Code darunter manuell ein. Sobald du dies getan haben, generiere einen Token und gebe ihn unten ein.', - '2fa_disabled' => '2-Faktor-Authentifizierung ist deaktiviert! Du solltest 2-Faktor-Authentifizierung aktivieren um dein Konto zusätzlich zu schützen.', + '2fa_checkpoint_help' => 'Verwende die 2FA-Anwendung auf deinem Telefon, um den QR-Codes auf der linken Seite zu scannen, oder gebe den Code darunter manuell ein. Sobald du dies getan hast, generiere einen Token und gebe ihn unten ein.', + '2fa_disabled' => '2-Faktor-Authentifizierung ist deaktiviert! Du solltest die 2-Faktor-Authentifizierung aktivieren um dein Konto zusätzlich zu schützen.', '2fa_disable_error' => 'Der bereitgestellte 2FA-Token war nicht gültig. Der Schutz wurde für dieses Konto nicht deaktiviert.', '2fa_header' => '2-Faktor-Authentifizierung', '2fa_qr' => '2FA konfigurieren', '2fa_token_help' => 'Bitte gebe den 2FA Code von deiner 2FA APP ein (Google Authenticatior, Authy, etc.).', - 'disable_2fa' => '2-Factor-Authentification deaktivieren', + 'disable_2fa' => '2-Factor-Authentifizierung deaktivieren', 'enable_2fa' => '2-Faktor-Authentifizierung aktivieren', 'header' => 'Kontosicherheit', 'header_sub' => 'Verwalte aktive Sitzungen und die 2-Faktor-Authentifizierung.', @@ -349,6 +349,6 @@ return [ 'session_mgmt_disabled' => 'Der Administrator hat die Möglichkeit, aktive Sitzungen über dieses Panel zu verwalten, nicht aktiviert.', ], 'server_name' => 'Name des Servers', - 'validation_error' => 'Es gab ein Problem mit einer oder mehreren deriner Eingaben.', + 'validation_error' => 'Es gab ein Problem mit einer oder mehreren deiner Eingaben.', 'view_as_admin' => 'Du siehst die Serverliste als Administrator. Deshalb siehst du alle im System vorhandenen Server. Die Server bei denen du als Besitzer eingetragen bist sind mit einem blauen Punkt markiert.', ]; diff --git a/resources/lang/de/command/messages.php b/resources/lang/de/command/messages.php index e3733935..f4cdfa85 100644 --- a/resources/lang/de/command/messages.php +++ b/resources/lang/de/command/messages.php @@ -3,18 +3,18 @@ return [ 'location' => [ 'no_location_found' => 'Shortcode wurde nicht gefunden.', - 'ask_short' => 'Location Short Code', - 'ask_long' => 'Location Beschreibung', - 'created' => 'Neue Location (:name) mit der ID :id erstellt.', - 'deleted' => 'Location gelöscht.', + 'ask_short' => 'Standort Short Code', + 'ask_long' => 'Standortbeschreibung', + 'created' => 'Neuer Standort (:name) mit der ID :id erstellt.', + 'deleted' => 'Standort gelöscht.', ], 'user' => [ - 'search_users' => 'Gib einen Benutzernamen, eine UUID oder eine Email an', + 'search_users' => 'Gib einen Benutzernamen, eine UUID oder eine E-Mail an', 'select_search_user' => 'ID des Benutzers (Gib \'0\' ein, um erneut zu suchen)', 'deleted' => 'Benutzer erfolgreich gelöscht.', 'confirm_delete' => 'Bist du dir wirklich sicher?', 'no_users_found' => 'Es wurden keine Benutzer gefunden.', - 'multiple_found' => 'Es wurden mehrere Accounts gefunden.', + 'multiple_found' => 'Es wurden mehrere Benutzer gefunden.', 'ask_admin' => 'Ist dieser Benutzer ein Administrator?', 'ask_email' => 'Email Adresse', 'ask_username' => 'Benutzername', @@ -24,8 +24,8 @@ return [ 'ask_password_tip' => 'Wenn du das wirklich tun willst drücke Strg+c und benutze das `--no-password` flag.', 'ask_password_help' => 'Das Passwort muss Zahlen, Groß- und Kleinbuchstaben enthalten und mindestens 8 Zeichen lang sein.', '2fa_help_text' => [ - 'Dieser Befehl deaktiviert 2-Faktor-Authentifizierung für ein Benutzerkonto, falls es aktiviert ist. Dieser Befehl sollte nur zur Accountrettung verwendet werden, wenn sich ein Nutzer aus seinem Account ausgeschlossen hat.', - 'Falls das nicht ist, was du erreichen wolltest, drücke Strg+C, um diesen Prozess zu beenden.', + 'Dieser Befehl deaktiviert die 2-Faktor-Authentifizierung für ein Benutzerkonto, falls es aktiviert ist. Dieser Befehl sollte nur zur Accountrettung verwendet werden, wenn sich ein Nutzer aus seinem Account ausgeschlossen hat.', + 'Falls es nicht das ist, was du erreichen wolltest, drücke Strg+C, um diesen Prozess zu beenden.', ], '2fa_disabled' => '2-Faktor-Authentifizierung wurde für :email deaktiviert.', ], @@ -43,7 +43,7 @@ return [ 'ask_smtp_host' => 'SMTP Host (e.g. smtp.gmail.com)', 'ask_smtp_port' => 'SMTP Port', 'ask_smtp_username' => 'SMTP Benutzername', - 'ask_smtp_password' => 'SMTP Password', + 'ask_smtp_password' => 'SMTP Passwort', 'ask_mailgun_domain' => 'Mailgun Domain', 'ask_mailgun_secret' => 'Mailgun Secret', 'ask_mandrill_secret' => 'Mandrill Secret', @@ -54,17 +54,17 @@ return [ 'ask_encryption' => 'Encryption method to use', ], 'database' => [ - 'host_warning' => 'It is highly recommended to not use "localhost" as your database host as we have seen frequent socket connection issues. If you want to use a local connection you should be using "127.0.0.1".', - 'host' => 'Database Host', - 'port' => 'Database Port', - 'database' => 'Database Name', - 'username_warning' => 'Using the "root" account for MySQL connections is not only highly frowned upon, it is also not allowed by this application. You\'ll need to have created a MySQL user for this software.', - 'username' => 'Database Benutzername', - 'password_defined' => 'It appears you already have a MySQL connection password defined, would you like to change it?', - 'password' => 'Database Password', - 'connection_error' => 'Unable to connect to the MySQL server using the provided credentials. The error returned was ":error".', - 'creds_not_saved' => 'Your connection credentials have NOT been saved. You will need to provide valid connection information before proceeding.', - 'try_again' => 'Go back and try again?', + 'host_warning' => 'Es wird dringend empfohlen, "localhost" nicht als Datenbank-Host zu verwenden, da es zu häufigen Socket-Verbindungsproblemen gekommen ist. Wenn du eine lokale Verbindung verwenden möchten, solltest du "127.0.0.1" verwenden.', + 'host' => 'Datenbank Host', + 'port' => 'Datenbank Port', + 'database' => 'Datenbank Name', + 'username_warning' => 'Die Verwendung des "root" -Kontos für MySQL-Verbindungen ist nicht erlaubt, Du musst einen extra MySQL-Benutzer erstellt haben.', + 'username' => 'Datenbank Benutzername', + 'password_defined' => 'Es scheint so, als ob du schon ein MySQL-kennwort definiert haast. Möchtest du es ändern?', + 'password' => 'Datenbank Passwort', + 'connection_error' => 'Es konnte keine Verbindung zum MySQL-Server mit den angegebenen Anmeldeinformationen hergestellt werden. Zurückgegebene Fehler ":error".', + 'creds_not_saved' => 'Die Verbindungsdaten wurden NICHT gespeichert. Du musst gültige Verbindungsinformationen angeben, bevor du fortfahren kannst.', + 'try_again' => 'Zurück und erneuert versuchen?', ], 'app' => [ 'app_url_help' => 'The application URL MUST begin with https:// or http:// depending on if you are using SSL or not. If you do not include the scheme your emails and other content will link to the wrong location.', diff --git a/resources/lang/de/exceptions.php b/resources/lang/de/exceptions.php index 57fa375d..eb416b5f 100644 --- a/resources/lang/de/exceptions.php +++ b/resources/lang/de/exceptions.php @@ -40,7 +40,7 @@ return [ ], 'subusers' => [ 'editing_self' => 'Du darfst deinen eigenen Subuser nicht bearbeiten.', - 'user_is_owner' => 'Du kannst den Owner nicht als Subuser hinzufügen.', + 'user_is_owner' => 'Du kannst den Serverbesitzer nicht als Subuser hinzufügen.', 'subuser_exists' => 'Diese Email ist bereits registriert.', ], 'databases' => [ diff --git a/resources/lang/de/navigation.php b/resources/lang/de/navigation.php index 8241a63b..607aaf8c 100644 --- a/resources/lang/de/navigation.php +++ b/resources/lang/de/navigation.php @@ -23,7 +23,7 @@ return [ 'port_allocations' => 'Port-Einstellungen', 'sftp_settings' => 'SFTP Einstellungen', 'startup_parameters' => 'Startup Parameter', - 'databases' => 'Datenbaken', + 'databases' => 'Datenbanken', 'edit_file' => 'Datei bearbeiten', 'admin_header' => 'ADMINISTRATIV', 'admin' => 'Server Konfiguration', diff --git a/resources/lang/de/pagination.php b/resources/lang/de/pagination.php index f024fb93..1680d25b 100644 --- a/resources/lang/de/pagination.php +++ b/resources/lang/de/pagination.php @@ -1,16 +1,16 @@ - 'Nächste »', 'previous' => '« Vorherige', 'sidebar' => [ - 'account_controls' => 'Kontoeinstellungen', - 'account_security' => 'Account Sicherheit', - 'account_settings' => 'Account Einstellungen', + 'account_controls' => 'Kontosteuerung', + 'account_security' => 'Kontosicherheit', + 'account_settings' => 'Kontoeinstellungen', 'files' => 'Dateimanager', 'manage' => 'Server verwalten', 'overview' => 'Server Übersicht', 'servers' => 'Deine Server', - 'subusers' => 'Unterbenutzer verwalten', + 'subusers' => 'Subuser verwalten', ], ]; diff --git a/resources/lang/de/passwords.php b/resources/lang/de/passwords.php index 96ad4d8b..b1502c70 100644 --- a/resources/lang/de/passwords.php +++ b/resources/lang/de/passwords.php @@ -3,7 +3,7 @@ return [ 'password' => 'Passwort', 'reset' => 'Dein Passwort wurde zurückgesetzt!', - 'sent' => 'Wir haben Ihren Link zum Zurücksetzen des Passworts per E-Mail gesendet!', + 'sent' => 'Ein Link zum zurücksetzen des Passworts wurde per E-Mail gesendet!', 'token' => 'Der Token war ungültig', - 'user' => 'Es gibt keinen User mit dieser Email.', + 'user' => 'Es gibt keinen Benutzer mit dieser E-Mail.', ]; diff --git a/resources/lang/de/server.php b/resources/lang/de/server.php index b22b8503..4ee2ad06 100644 --- a/resources/lang/de/server.php +++ b/resources/lang/de/server.php @@ -3,11 +3,11 @@ return [ 'config' => [ 'allocation' => [ - 'available' => 'Available Allocations', + 'available' => 'Verfügbare Allocations', 'header' => 'Server Allocations', - 'header_sub' => 'Control the IPs and ports available on this server.', + 'header_sub' => 'Verfügbare IPs und Ports für diesen Server verwalten.', 'help' => 'Allocation Help', - 'help_text' => 'The list to the left includes all available IPs and ports that are open for your server to use for incoming connections.', + 'help_text' => 'Die Liste auf der linken Seite zeigt alle verfügbaren IPs und Ports, die für eingehende Verbindungen auf diesem Server geöffnet sind.', ], 'database' => [ 'add_db' => 'Datenbank hinzufügen.', @@ -23,16 +23,16 @@ return [ 'conn_addr' => 'Verbindungsadresse', 'details' => 'SFTP Details', 'header' => 'SFTP Information', - 'header_sub' => 'Details für eine SFTP verbindung.', + 'header_sub' => 'Details für eine SFTP Verbindung.', 'warning' => 'Bitte benutze SFTP und nicht FTP!.', ], 'startup' => [ - 'command' => 'Startup Command', + 'command' => 'Startbefehl', 'edited' => 'Die Einstellungen wurden gespeichert und werden beim nächsten Serverstart verwendet.', 'edit_params' => 'Parameter bearbeiten', 'header' => 'Start Konfiguration', 'header_sub' => 'Bearbeite die Startparameter des Serves.', - 'startup_regex' => 'Input Rules', + 'startup_regex' => 'Input Regeln', 'startup_var' => 'Startbefehl Variablen', 'update' => 'Absenden', ], @@ -47,7 +47,7 @@ return [ 'add_folder' => 'Neuen Ordner erstellen', 'add_new' => 'Neue Datei erstellen', 'back' => 'Zurück zum Datei-Manager', - 'delete' => 'löschen', + 'delete' => 'Löschen', 'edit' => [ 'header' => 'Datei bearbeiten', 'header_sub' => 'Bearbeite Dateien direkt vom Browser aus.', @@ -87,21 +87,21 @@ return [ ], 'schedule' => [ 'actions' => [ - 'command' => 'Command ausführen', + 'command' => 'Befehl ausführen', 'power' => 'Power Aktion', ], 'current' => 'Derzeitige Aktionen', - 'day_of_month' => 'Day of Month', - 'day_of_week' => 'Day of Week', - 'header' => 'Schedule Manager', + 'day_of_month' => 'Tag eines Monats', + 'day_of_week' => 'Tag einer Woche', + 'header' => 'Zeitplan Manager', 'header_sub' => 'Erstelle geplante Aktionen.', - 'hour' => 'Hour of Day', + 'hour' => 'Stunde des Tages', 'manage' => [ 'delete' => 'Aktion löschen', 'header' => 'Aktion verwalten', 'submit' => 'Aktion bearbeiten', ], - 'minute' => 'Minute of Hour', + 'minute' => 'Minute der Stunde', 'new' => [ 'header' => 'Neue Aktion erstellen', 'header_sub' => 'Erstelle eine neue Gruppe an Aktionen.', @@ -110,26 +110,26 @@ return [ 'run_now' => 'Zeitplan jetzt ausführen', 'schedule_created' => 'Neuen Zeitplan für diesen Server erfolgreich erstellt.', 'schedule_updated' => 'Der Zeitplan wurde aktualisiert.', - 'setup' => 'Schedule Setup', + 'setup' => 'Zeitplan Erstellung', 'task' => [ 'action' => 'Aktion ausführen', 'add_more' => 'Weitere Aktion', - 'payload' => 'With Payload', + 'payload' => 'Mit Payload', 'time' => 'Nach', ], - 'task_help' => 'Times for tasks are relative to the previously defined task. Each schedule may have no more than 5 tasks assigned to it and tasks may not be scheduled more than 15 minutes apart.', + 'task_help' => 'Zeiten für Aufgaben sind relativ zu der zuvor definierten Aufgabe. Jedem Zeitplan dürfen nicht mehr als 5 Aufgaben zugewiesen sein und Aufgaben dürfen nicht mehr als 15 Minuten voneinander entfernt liegen.', 'time_help' => 'Dieses System unterstützt dern Cronjob Syntax.', 'toggle' => 'Status wechseln', - 'unnamed' => 'Unnamed Schedule', + 'unnamed' => 'Unbenannter Zeitplan', ], 'tasks' => [ 'actions' => [ - 'command' => 'Command ausführen', + 'command' => 'Befehl ausführen', 'power' => 'Power Aktion senden', ], 'current' => 'Aktuelle Aktionen', 'edit' => [ - 'header' => 'Aktion beareiten', + 'header' => 'Aktion bearbeiten', 'submit' => 'Abschicken', ], 'header' => 'Geplante Aufgaben', @@ -146,16 +146,16 @@ return [ 'header_sub' => 'Neuen Aktion erstellen.', 'hour' => 'Stunde', 'minute' => 'Minute', - 'mon' => 'Montad', + 'mon' => 'Montag', 'payload' => 'Task Payload', - 'payload_help' => 'Wenn du die send command Methode ausgewählt hast wird ein Command zur angegebenen Zeit ausgeführt.', + 'payload_help' => 'Wenn du die Befehl ausführen Methode ausgewählt hast, wird ein Befehl zur angegebenen Zeit ausgeführt.', 'sat' => 'Samstag', 'submit' => 'Absenden', - 'sun' => 'Sontag', + 'sun' => 'Sonntag', 'task_name' => 'Name', 'thurs' => 'Donnerstag', 'tues' => 'Dienstag', - 'type' => 'TTyp', + 'type' => 'Typ', 'wed' => 'Mittwoch', ], 'new_task' => 'Neue Aufgabe hinzufügen', @@ -164,26 +164,26 @@ return [ 'toggle' => 'Status ändern', ], 'users' => [ - 'add' => 'Neuen User erstellen', + 'add' => 'Neuen Benutzer erstellen', 'configure' => 'Rechte einstellen', 'edit' => [ - 'header' => 'User bearbeiten', - 'header_sub' => 'Bearbeite den Zugriff eines Users auf deine Server.', + 'header' => 'Benutzer bearbeiten', + 'header_sub' => 'Verwalte den Zugriff eines Benutzers auf diesen Server.', ], - 'header' => 'User verwalten', + 'header' => 'Benutzer verwalten', 'header_sub' => 'Bestimme wer den Server verwalten kann.', 'list' => 'Account Liste', 'new' => [ 'access_sftp' => [ 'description' => 'Ermöglicht dem Benutzer, eine Verbindung mit dem vom Daemon bereitgestellten SFTP-Server herzustellen.', - 'title' => 'SFTP erlaubt', + 'title' => 'SFTP-Verbindung erlauben', ], 'command' => [ 'title' => 'Konsolenbefehl senden', ], 'compress_files' => [ 'description' => 'Der User darf die Server-Dateien komprimieren(zip).', - 'title' => 'Compress Files', + 'title' => 'Dateien komprimieren', ], 'copy_files' => [ 'description' => 'Der User darf die Server-Dateien kopieren.', @@ -195,97 +195,97 @@ return [ ], 'create_files' => [ 'description' => 'Der User darf Server-Dateien erstellen.', - 'title' => 'Create Files', + 'title' => 'Dateien erstellen', ], 'create_schedule' => [ 'description' => 'Der User darf geplante Aktionen für den Server erstellen.', - 'title' => 'Create Schedule', + 'title' => 'Aktionen erstellen', ], 'create_subuser' => [ 'description' => 'Der User darf Subuser erstellen.', - 'title' => 'Create Subuser', + 'title' => 'Subuser erstellen', ], 'create_task' => [ 'description' => 'Ermöglicht es einem Benutzer, neue Aufgaben zu erstellen.', 'title' => 'Aufgabe erstellen', ], - 'database_header' => 'Database Verwaltung', + 'database_header' => 'Datenbank Verwaltung', 'db_header' => 'Datenbankverwaltung', 'decompress_files' => [ - 'description' => 'Der User darf zip Archive entpacken.', - 'title' => 'Decompress Files', + 'description' => 'Der Benutzer darf ZIP Archive entpacken.', + 'title' => 'Dateien entpacken', ], 'delete_database' => [ 'description' => 'Ermöglicht es dem Benutzer, Datenbanken für diesen Server über das Panel zu löschen.', 'title' => 'Datenbank löschen', ], 'delete_files' => [ - 'description' => 'Der User darf Server-Dateien löschen.', - 'title' => 'Delete Files', + 'description' => 'Der Benutzer darf Server-Dateien löschen.', + 'title' => 'Dateien löschen', ], 'delete_schedule' => [ - 'description' => 'Der User darf geplante Aktionen für den Server löschen.', - 'title' => 'Delete Schedule', + 'description' => 'Der Benutzer darf geplante Aktionen für den Server löschen.', + 'title' => 'Aktionen löschen', ], 'delete_subuser' => [ - 'description' => 'Der User darf Subuser löschen.', - 'title' => 'Delete Subuser', + 'description' => 'Der Benutzer darf Subuser löschen.', + 'title' => 'Subuser löschen', ], 'delete_task' => [ 'description' => 'Ermöglicht es dem Benutzer, eine Aufgabe zu löschen.', 'title' => 'Aufgabe löschen', ], 'download_files' => [ - 'description' => 'Der User darf Server-Dateien herunterladen.', + 'description' => 'Der Benutzer darf Server-Dateien herunterladen.', 'title' => 'Dateien herunterladen', ], 'edit_allocation' => [ - 'description' => 'Allows user to change the default connection allocation to use for a server.', - 'title' => 'Edit Default Connection', + 'description' => 'Ermöglicht es dem Benutzer, die IP:Port Adresse für einen Server zu ändern.', + 'title' => 'Standardverbindung bearbeiten', ], 'edit_files' => [ - 'description' => 'Der User darf die Server-Dateien sehen.', - 'title' => 'Edit Files', + 'description' => 'Der Benutzer darf die Server-Dateien bearbeiten.', + 'title' => 'Dateien bearbeiten', ], 'edit_schedule' => [ - 'description' => 'Der User darf geplante Aktionen für den Server bearbeiten.', - 'title' => 'Edit Schedule', + 'description' => 'Der Benutzer darf geplante Aktionen für den Server bearbeiten.', + 'title' => 'Aktionen bearbeiten', ], 'edit_startup' => [ - 'description' => 'Allows a user to modify startup variables for a server.', - 'title' => 'Edit Startup Command', + 'description' => 'Ermöglicht einem Benutzer, Startvariablen für einen Server zu ändern.', + 'title' => 'Startbefehl bearbeiten', ], 'edit_subuser' => [ - 'description' => 'Der User darf Subuser bearbeiten.', - 'title' => 'Edit Subuser', + 'description' => 'Der Benutzer darf Subuser bearbeiten.', + 'title' => 'Subuser bearbeiten', ], 'email' => 'E-Mail Adresse', - 'email_help' => 'Email Adresse für Einladungs mail.', - 'file_header' => 'Datein Verwaltung', + 'email_help' => 'Email Adresse für Einladungs Mail.', + 'file_header' => 'Dateien Verwaltung', 'header' => 'Neuen Benutzer erstellen', 'header_sub' => 'Erstelle einen neuen Benutzer und gebe ihm Zugriff auf diesen Server.', 'kill' => [ - 'description' => 'Ermöglicht es dem Benutzer, den Serverprozess abzubrechen.', + 'description' => 'Ermöglicht es dem Benutzer, den Serverprozess zu töten.', 'title' => 'Server sofort beenden', ], 'list_files' => [ - 'description' => 'Der User darf die Server-Dateien sehen.', - 'title' => 'List Files', + 'description' => 'Der Benutzer darf die Server-Dateien sehen.', + 'title' => 'Dateien anzeigen', ], 'list_schedules' => [ - 'description' => 'Der User darf geplante Aktionen für den Server sehen.', - 'title' => 'List Schedules', + 'description' => 'Der Benutzer darf geplante Aktionen für den Server sehen.', + 'title' => 'Geplante Aktionen anzeigen', ], 'list_subusers' => [ - 'description' => 'Der User darf Subuser sehen.', - 'title' => 'List Subusers', + 'description' => 'Der Benutzer darf Subuser sehen.', + 'title' => 'Subusers anzeigen', ], 'list_tasks' => [ 'title' => 'Aufgaben auflisten', ], 'move_files' => [ - 'description' => 'Der User darf die Server-Dateien ubenennen und verschieben.', - 'title' => 'Rename & Move Files', + 'description' => 'Der Benutzer darf die Server-Dateien umbenennen und verschieben.', + 'title' => 'Dateien umbenennen & verschieben', ], 'power_header' => 'Power Verwaltung', 'power_kill' => [ @@ -293,43 +293,43 @@ return [ 'title' => 'Kill Server', ], 'power_restart' => [ - 'description' => 'Der User darf den Server neu starten.', + 'description' => 'Der Benutzer darf den Server neu starten.', 'title' => 'Server neu starten', ], 'power_start' => [ 'description' => 'Der Benutzer darf den Server starten.', - 'title' => 'Start Server', + 'title' => 'Server starten', ], 'power_stop' => [ - 'description' => 'Der User darf den Server stoppen.', - 'title' => 'Stop Server', + 'description' => 'Der Benutzer darf den Server stoppen.', + 'title' => 'Server stoppen', ], 'queue_schedule' => [ - 'description' => "Allows a user to queue a schedule to run it's tasks on the next process cycle.", + 'description' => 'Ermöglicht einem Benutzer, einen Zeitplan in die Warteschlange zu stellen.', 'title' => 'Queue Schedule', ], 'queue_task' => [ 'title' => 'Aufgabe einreihen', ], 'reset_db_password' => [ - 'description' => 'Der User darf das Datenbankpasswort zurücksetzen.', - 'title' => 'Reset Database Password', + 'description' => 'Der Benutzer darf das Datenbankpasswort zurücksetzen.', + 'title' => 'Datenbank Passwort zurücksetzen ', ], 'reset_sftp' => [ - 'description' => 'Der User darf dass SFTP Passwort zurücksetzen.', - 'title' => 'Reset SFTP Password', + 'description' => 'Der Benutzer darf dass SFTP Passwort zurücksetzen.', + 'title' => 'SFTP Passwort zurücksetzen', ], 'restart' => [ 'description' => 'Der Benutzer darf den Server neu starten.', 'title' => 'Server neu starten', ], 'save_files' => [ - 'description' => 'Der User darf die Server-Dateien bearbeiten.', - 'title' => 'Save Files', + 'description' => 'Der Benutzer darf bearbeitete Server-Dateien speichern.', + 'title' => 'Dateien speichern', ], 'send_command' => [ - 'description' => 'Der User darf die Konsole benutzen.', - 'title' => 'Send Console Command', + 'description' => 'Der Benutzer darf die Konsole benutzen.', + 'title' => 'Konsolenbefehle senden', ], 'server_header' => 'Server Verwaltung', 'set_connection' => [ @@ -341,57 +341,57 @@ return [ 'title' => 'Server starten', ], 'stop' => [ - 'description' => 'Der User darf den Server stoppen.', + 'description' => 'Der Benutzer darf den Server stoppen.', 'title' => 'Server stoppen', ], 'subuser_header' => 'Subuser Verwaltung', - 'task_header' => 'Schedule Verwaltung', + 'task_header' => 'Aktion Verwaltung', 'toggle_schedule' => [ - 'description' => 'Der User darf geplante Aktionen für den Server de-/aktivieren.', - 'title' => 'Toggle Schedule', + 'description' => 'Der Benutzer darf geplante Aktionen für den Server de-/aktivieren.', + 'title' => 'De-/Aktivieren von Aktionen', ], 'toggle_task' => [ - 'description' => 'Der User darf geplante Aktionen für den Server de-/aktivieren.', + 'description' => 'Der Benutzer darf geplante Aufgaben für den Server de-/aktivieren.', ], 'upload_files' => [ - 'description' => 'Der User darf Server-Dateien hochladen.', - 'title' => 'Upload Files', + 'description' => 'Der Benutzr darf Server-Dateien hochladen.', + 'title' => 'Dateien hochladen', ], 'view_allocations' => [ - 'description' => 'Allows user to view all of the IPs and ports assigned to a server.', - 'title' => 'View Allocations', + 'description' => 'Ermöglicht dem Benutzer, alle einem Server zugewiesenen IPs und Ports anzuzeigen.', + 'title' => 'Zugewiesen IPs und Ports anzeigen', ], 'view_databases' => [ - 'description' => 'Der User darf die Datenbankinformationen sehen.', - 'title' => 'View Database Details', + 'description' => 'Der Benutzer darf die Datenbankinformationen sehen.', + 'title' => 'Datenbankinformationen anzeigen', ], 'view_schedule' => [ - 'description' => 'Der User darf eine Aktion ansehen.', - 'title' => 'View Schedule', + 'description' => 'Der Benutzer darf Aktionen ansehen.', + 'title' => 'Aktionen anzeigen', ], 'view_sftp' => [ 'description' => 'Der User darf die SFTP Informationen sehen (nicht das Passwort).', - 'title' => 'View SFTP Details', + 'title' => 'SFTP Informationen anzeigen', ], 'view_sftp_password' => [ - 'description' => 'Der User darf dass SFTP Passwort sehen.', - 'title' => 'View SFTP Password', + 'description' => 'Der Benutzer darf dass SFTP Passwort sehen.', + 'title' => 'SFTP Password anzeigen', ], 'view_startup' => [ - 'description' => 'Allows user to view the startup command and associated variables for a server.', - 'title' => 'View Startup Command', + 'description' => 'Ermöglicht dem Benutzer, den Startbefehl und zugehörige Variablen für einen Server anzuzeigen.', + 'title' => 'Startbefehl anzeigen', ], 'view_subuser' => [ - 'description' => 'Der User darf Subuser genauer sehen.', + 'description' => 'Der Benutzer darf Subuser genauer sehen.', 'title' => 'View Subuser', ], 'view_task' => [ - 'description' => 'Der User darf eine Aktion ansehen.', + 'description' => 'Der Benutzer darf Aufgaben ansehen.', 'title' => 'Aufgaben ansehen', ], ], - 'update' => 'User bearbeiten', - 'user_assigned' => 'User an einen Server gebunden.', - 'user_updated' => 'User Rechte erfolgreich aktualisiert.', + 'update' => 'Benutzer bearbeiten', + 'user_assigned' => 'Benutzer zum Server hinzugefügt.', + 'user_updated' => 'Benutzer Rechte erfolgreich aktualisiert.', ], ]; diff --git a/resources/lang/de/strings.php b/resources/lang/de/strings.php index d7b09ff5..1551e6a7 100644 --- a/resources/lang/de/strings.php +++ b/resources/lang/de/strings.php @@ -10,7 +10,7 @@ return [ 'admin_cp' => 'Administration', 'again' => 'Nochmals', 'alias' => 'Alias', - 'api_access' => 'Api Access', + 'api_access' => 'API Access', 'cancel' => 'Abbrechen', 'captcha_invalid' => 'Der Captcha war ungültig.', 'close' => 'Schließen', From 262ef78fae61a81bd921cf4db88737a7f940eedf Mon Sep 17 00:00:00 2001 From: Andrew DeLisa Date: Wed, 19 Sep 2018 00:43:18 -0400 Subject: [PATCH 22/23] Allow deletion of multiple allocations at once (#1322) --- .../Controllers/Admin/NodesController.php | 21 +++ public/js/laroute.js | 2 +- .../js/frontend/files/src/index.js | 2 +- resources/lang/en/server.php | 4 + .../admin/nodes/view/allocation.blade.php | 141 +++++++++++++++++- routes/admin.php | 1 + 6 files changed, 164 insertions(+), 7 deletions(-) diff --git a/app/Http/Controllers/Admin/NodesController.php b/app/Http/Controllers/Admin/NodesController.php index 1585b6ac..70c9ff07 100644 --- a/app/Http/Controllers/Admin/NodesController.php +++ b/app/Http/Controllers/Admin/NodesController.php @@ -285,6 +285,27 @@ class NodesController extends Controller return response('', 204); } + /** + * Removes multiple individual allocations from a node. + * + * @param \Illuminate\Http\Request $request + * @param int $node + * @return \Illuminate\Http\Response + * + * @throws \Pterodactyl\Exceptions\Service\Allocation\ServerUsingAllocationException + */ + public function allocationRemoveMultiple(Request $request, int $node): Response + { + $allocations = $request->input('allocations'); + foreach ($allocations as $rawAllocation) { + $allocation = new Allocation(); + $allocation->id = $rawAllocation['id']; + $this->allocationRemoveSingle($node, $allocation); + } + + return response('', 204); + } + /** * Remove all allocations for a specific IP at once on a node. * diff --git a/public/js/laroute.js b/public/js/laroute.js index 1ffbc7b1..d1caf07a 100644 --- a/public/js/laroute.js +++ b/public/js/laroute.js @@ -6,7 +6,7 @@ absolute: false, rootUrl: 'http://pterodactyl.local', - routes : [{"host":null,"methods":["GET","HEAD"],"uri":"_debugbar\/open","name":"debugbar.openhandler","action":"Barryvdh\Debugbar\Controllers\OpenHandlerController@handle"},{"host":null,"methods":["GET","HEAD"],"uri":"_debugbar\/clockwork\/{id}","name":"debugbar.clockwork","action":"Barryvdh\Debugbar\Controllers\OpenHandlerController@clockwork"},{"host":null,"methods":["GET","HEAD"],"uri":"_debugbar\/assets\/stylesheets","name":"debugbar.assets.css","action":"Barryvdh\Debugbar\Controllers\AssetController@css"},{"host":null,"methods":["GET","HEAD"],"uri":"_debugbar\/assets\/javascript","name":"debugbar.assets.js","action":"Barryvdh\Debugbar\Controllers\AssetController@js"},{"host":null,"methods":["DELETE"],"uri":"_debugbar\/cache\/{key}\/{tags?}","name":"debugbar.cache.delete","action":"Barryvdh\Debugbar\Controllers\CacheController@delete"},{"host":null,"methods":["GET","HEAD"],"uri":"\/","name":"index","action":"Pterodactyl\Http\Controllers\Base\IndexController@getIndex"},{"host":null,"methods":["GET","HEAD"],"uri":"status\/{server}","name":"index.status","action":"Pterodactyl\Http\Controllers\Base\IndexController@status"},{"host":null,"methods":["GET","HEAD"],"uri":"account","name":"account","action":"Pterodactyl\Http\Controllers\Base\AccountController@index"},{"host":null,"methods":["POST"],"uri":"account","name":null,"action":"Pterodactyl\Http\Controllers\Base\AccountController@update"},{"host":null,"methods":["GET","HEAD"],"uri":"account\/api","name":"account.api","action":"Pterodactyl\Http\Controllers\Base\ClientApiController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"account\/api\/new","name":"account.api.new","action":"Pterodactyl\Http\Controllers\Base\ClientApiController@create"},{"host":null,"methods":["POST"],"uri":"account\/api\/new","name":null,"action":"Pterodactyl\Http\Controllers\Base\ClientApiController@store"},{"host":null,"methods":["DELETE"],"uri":"account\/api\/revoke\/{identifier}","name":"account.api.revoke","action":"Pterodactyl\Http\Controllers\Base\ClientApiController@delete"},{"host":null,"methods":["GET","HEAD"],"uri":"account\/security","name":"account.security","action":"Pterodactyl\Http\Controllers\Base\SecurityController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"account\/security\/revoke\/{id}","name":"account.security.revoke","action":"Pterodactyl\Http\Controllers\Base\SecurityController@revoke"},{"host":null,"methods":["PUT"],"uri":"account\/security\/totp","name":"account.security.totp","action":"Pterodactyl\Http\Controllers\Base\SecurityController@generateTotp"},{"host":null,"methods":["POST"],"uri":"account\/security\/totp","name":"account.security.totp.set","action":"Pterodactyl\Http\Controllers\Base\SecurityController@setTotp"},{"host":null,"methods":["DELETE"],"uri":"account\/security\/totp","name":"account.security.totp.disable","action":"Pterodactyl\Http\Controllers\Base\SecurityController@disableTotp"},{"host":null,"methods":["GET","HEAD"],"uri":"admin","name":"admin.index","action":"Pterodactyl\Http\Controllers\Admin\BaseController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/api","name":"admin.api.index","action":"Pterodactyl\Http\Controllers\Admin\ApiController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/api\/new","name":"admin.api.new","action":"Pterodactyl\Http\Controllers\Admin\ApiController@create"},{"host":null,"methods":["POST"],"uri":"admin\/api\/new","name":null,"action":"Pterodactyl\Http\Controllers\Admin\ApiController@store"},{"host":null,"methods":["DELETE"],"uri":"admin\/api\/revoke\/{identifier}","name":"admin.api.delete","action":"Pterodactyl\Http\Controllers\Admin\ApiController@delete"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/locations","name":"admin.locations","action":"Pterodactyl\Http\Controllers\Admin\LocationController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/locations\/view\/{location}","name":"admin.locations.view","action":"Pterodactyl\Http\Controllers\Admin\LocationController@view"},{"host":null,"methods":["POST"],"uri":"admin\/locations","name":null,"action":"Pterodactyl\Http\Controllers\Admin\LocationController@create"},{"host":null,"methods":["PATCH"],"uri":"admin\/locations\/view\/{location}","name":null,"action":"Pterodactyl\Http\Controllers\Admin\LocationController@update"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/databases","name":"admin.databases","action":"Pterodactyl\Http\Controllers\Admin\DatabaseController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/databases\/view\/{host}","name":"admin.databases.view","action":"Pterodactyl\Http\Controllers\Admin\DatabaseController@view"},{"host":null,"methods":["POST"],"uri":"admin\/databases","name":null,"action":"Pterodactyl\Http\Controllers\Admin\DatabaseController@create"},{"host":null,"methods":["PATCH"],"uri":"admin\/databases\/view\/{host}","name":null,"action":"Pterodactyl\Http\Controllers\Admin\DatabaseController@update"},{"host":null,"methods":["DELETE"],"uri":"admin\/databases\/view\/{host}","name":null,"action":"Pterodactyl\Http\Controllers\Admin\DatabaseController@delete"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/settings","name":"admin.settings","action":"Pterodactyl\Http\Controllers\Admin\Settings\IndexController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/settings\/mail","name":"admin.settings.mail","action":"Pterodactyl\Http\Controllers\Admin\Settings\MailController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/settings\/advanced","name":"admin.settings.advanced","action":"Pterodactyl\Http\Controllers\Admin\Settings\AdvancedController@index"},{"host":null,"methods":["PATCH"],"uri":"admin\/settings","name":null,"action":"Pterodactyl\Http\Controllers\Admin\Settings\IndexController@update"},{"host":null,"methods":["PATCH"],"uri":"admin\/settings\/mail","name":null,"action":"Pterodactyl\Http\Controllers\Admin\Settings\MailController@update"},{"host":null,"methods":["PATCH"],"uri":"admin\/settings\/advanced","name":null,"action":"Pterodactyl\Http\Controllers\Admin\Settings\AdvancedController@update"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/users","name":"admin.users","action":"Pterodactyl\Http\Controllers\Admin\UserController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/users\/accounts.json","name":"admin.users.json","action":"Pterodactyl\Http\Controllers\Admin\UserController@json"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/users\/new","name":"admin.users.new","action":"Pterodactyl\Http\Controllers\Admin\UserController@create"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/users\/view\/{user}","name":"admin.users.view","action":"Pterodactyl\Http\Controllers\Admin\UserController@view"},{"host":null,"methods":["POST"],"uri":"admin\/users\/new","name":null,"action":"Pterodactyl\Http\Controllers\Admin\UserController@store"},{"host":null,"methods":["PATCH"],"uri":"admin\/users\/view\/{user}","name":null,"action":"Pterodactyl\Http\Controllers\Admin\UserController@update"},{"host":null,"methods":["DELETE"],"uri":"admin\/users\/view\/{user}","name":null,"action":"Pterodactyl\Http\Controllers\Admin\UserController@delete"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/servers","name":"admin.servers","action":"Pterodactyl\Http\Controllers\Admin\ServersController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/servers\/new","name":"admin.servers.new","action":"Pterodactyl\Http\Controllers\Admin\ServersController@create"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/servers\/view\/{server}","name":"admin.servers.view","action":"Pterodactyl\Http\Controllers\Admin\ServersController@viewIndex"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/servers\/view\/{server}\/details","name":"admin.servers.view.details","action":"Pterodactyl\Http\Controllers\Admin\ServersController@viewDetails"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/servers\/view\/{server}\/build","name":"admin.servers.view.build","action":"Pterodactyl\Http\Controllers\Admin\ServersController@viewBuild"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/servers\/view\/{server}\/startup","name":"admin.servers.view.startup","action":"Pterodactyl\Http\Controllers\Admin\ServersController@viewStartup"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/servers\/view\/{server}\/database","name":"admin.servers.view.database","action":"Pterodactyl\Http\Controllers\Admin\ServersController@viewDatabase"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/servers\/view\/{server}\/manage","name":"admin.servers.view.manage","action":"Pterodactyl\Http\Controllers\Admin\ServersController@viewManage"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/servers\/view\/{server}\/delete","name":"admin.servers.view.delete","action":"Pterodactyl\Http\Controllers\Admin\ServersController@viewDelete"},{"host":null,"methods":["POST"],"uri":"admin\/servers\/new","name":null,"action":"Pterodactyl\Http\Controllers\Admin\ServersController@store"},{"host":null,"methods":["POST"],"uri":"admin\/servers\/view\/{server}\/build","name":null,"action":"Pterodactyl\Http\Controllers\Admin\ServersController@updateBuild"},{"host":null,"methods":["POST"],"uri":"admin\/servers\/view\/{server}\/startup","name":null,"action":"Pterodactyl\Http\Controllers\Admin\ServersController@saveStartup"},{"host":null,"methods":["POST"],"uri":"admin\/servers\/view\/{server}\/database","name":null,"action":"Pterodactyl\Http\Controllers\Admin\ServersController@newDatabase"},{"host":null,"methods":["POST"],"uri":"admin\/servers\/view\/{server}\/manage\/toggle","name":"admin.servers.view.manage.toggle","action":"Pterodactyl\Http\Controllers\Admin\ServersController@toggleInstall"},{"host":null,"methods":["POST"],"uri":"admin\/servers\/view\/{server}\/manage\/rebuild","name":"admin.servers.view.manage.rebuild","action":"Pterodactyl\Http\Controllers\Admin\ServersController@rebuildContainer"},{"host":null,"methods":["POST"],"uri":"admin\/servers\/view\/{server}\/manage\/suspension","name":"admin.servers.view.manage.suspension","action":"Pterodactyl\Http\Controllers\Admin\ServersController@manageSuspension"},{"host":null,"methods":["POST"],"uri":"admin\/servers\/view\/{server}\/manage\/reinstall","name":"admin.servers.view.manage.reinstall","action":"Pterodactyl\Http\Controllers\Admin\ServersController@reinstallServer"},{"host":null,"methods":["POST"],"uri":"admin\/servers\/view\/{server}\/delete","name":null,"action":"Pterodactyl\Http\Controllers\Admin\ServersController@delete"},{"host":null,"methods":["PATCH"],"uri":"admin\/servers\/view\/{server}\/details","name":null,"action":"Pterodactyl\Http\Controllers\Admin\ServersController@setDetails"},{"host":null,"methods":["PATCH"],"uri":"admin\/servers\/view\/{server}\/database","name":null,"action":"Pterodactyl\Http\Controllers\Admin\ServersController@resetDatabasePassword"},{"host":null,"methods":["DELETE"],"uri":"admin\/servers\/view\/{server}\/database\/{database}\/delete","name":"admin.servers.view.database.delete","action":"Pterodactyl\Http\Controllers\Admin\ServersController@deleteDatabase"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/nodes","name":"admin.nodes","action":"Pterodactyl\Http\Controllers\Admin\NodesController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/nodes\/new","name":"admin.nodes.new","action":"Pterodactyl\Http\Controllers\Admin\NodesController@create"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/nodes\/view\/{node}","name":"admin.nodes.view","action":"Pterodactyl\Http\Controllers\Admin\NodesController@viewIndex"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/nodes\/view\/{node}\/settings","name":"admin.nodes.view.settings","action":"Pterodactyl\Http\Controllers\Admin\NodesController@viewSettings"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/nodes\/view\/{node}\/configuration","name":"admin.nodes.view.configuration","action":"Pterodactyl\Http\Controllers\Admin\NodesController@viewConfiguration"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/nodes\/view\/{node}\/allocation","name":"admin.nodes.view.allocation","action":"Pterodactyl\Http\Controllers\Admin\NodesController@viewAllocation"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/nodes\/view\/{node}\/servers","name":"admin.nodes.view.servers","action":"Pterodactyl\Http\Controllers\Admin\NodesController@viewServers"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/nodes\/view\/{node}\/settings\/token","name":"admin.nodes.view.configuration.token","action":"Pterodactyl\Http\Controllers\Admin\NodesController@setToken"},{"host":null,"methods":["POST"],"uri":"admin\/nodes\/new","name":null,"action":"Pterodactyl\Http\Controllers\Admin\NodesController@store"},{"host":null,"methods":["POST"],"uri":"admin\/nodes\/view\/{node}\/allocation","name":null,"action":"Pterodactyl\Http\Controllers\Admin\NodesController@createAllocation"},{"host":null,"methods":["POST"],"uri":"admin\/nodes\/view\/{node}\/allocation\/remove","name":"admin.nodes.view.allocation.removeBlock","action":"Pterodactyl\Http\Controllers\Admin\NodesController@allocationRemoveBlock"},{"host":null,"methods":["POST"],"uri":"admin\/nodes\/view\/{node}\/allocation\/alias","name":"admin.nodes.view.allocation.setAlias","action":"Pterodactyl\Http\Controllers\Admin\NodesController@allocationSetAlias"},{"host":null,"methods":["PATCH"],"uri":"admin\/nodes\/view\/{node}\/settings","name":null,"action":"Pterodactyl\Http\Controllers\Admin\NodesController@updateSettings"},{"host":null,"methods":["DELETE"],"uri":"admin\/nodes\/view\/{node}\/delete","name":"admin.nodes.view.delete","action":"Pterodactyl\Http\Controllers\Admin\NodesController@delete"},{"host":null,"methods":["DELETE"],"uri":"admin\/nodes\/view\/{node}\/allocation\/remove\/{allocation}","name":"admin.nodes.view.allocation.removeSingle","action":"Pterodactyl\Http\Controllers\Admin\NodesController@allocationRemoveSingle"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/nests","name":"admin.nests","action":"Pterodactyl\Http\Controllers\Admin\Nests\NestController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/nests\/new","name":"admin.nests.new","action":"Pterodactyl\Http\Controllers\Admin\Nests\NestController@create"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/nests\/view\/{nest}","name":"admin.nests.view","action":"Pterodactyl\Http\Controllers\Admin\Nests\NestController@view"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/nests\/egg\/new","name":"admin.nests.egg.new","action":"Pterodactyl\Http\Controllers\Admin\Nests\EggController@create"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/nests\/egg\/{egg}","name":"admin.nests.egg.view","action":"Pterodactyl\Http\Controllers\Admin\Nests\EggController@view"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/nests\/egg\/{egg}\/export","name":"admin.nests.egg.export","action":"Pterodactyl\Http\Controllers\Admin\Nests\EggShareController@export"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/nests\/egg\/{egg}\/variables","name":"admin.nests.egg.variables","action":"Pterodactyl\Http\Controllers\Admin\Nests\EggVariableController@view"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/nests\/egg\/{egg}\/scripts","name":"admin.nests.egg.scripts","action":"Pterodactyl\Http\Controllers\Admin\Nests\EggScriptController@index"},{"host":null,"methods":["POST"],"uri":"admin\/nests\/new","name":null,"action":"Pterodactyl\Http\Controllers\Admin\Nests\NestController@store"},{"host":null,"methods":["POST"],"uri":"admin\/nests\/import","name":"admin.nests.egg.import","action":"Pterodactyl\Http\Controllers\Admin\Nests\EggShareController@import"},{"host":null,"methods":["POST"],"uri":"admin\/nests\/egg\/new","name":null,"action":"Pterodactyl\Http\Controllers\Admin\Nests\EggController@store"},{"host":null,"methods":["POST"],"uri":"admin\/nests\/egg\/{egg}\/variables","name":null,"action":"Pterodactyl\Http\Controllers\Admin\Nests\EggVariableController@store"},{"host":null,"methods":["PUT"],"uri":"admin\/nests\/egg\/{egg}","name":null,"action":"Pterodactyl\Http\Controllers\Admin\Nests\EggShareController@update"},{"host":null,"methods":["PATCH"],"uri":"admin\/nests\/view\/{nest}","name":null,"action":"Pterodactyl\Http\Controllers\Admin\Nests\NestController@update"},{"host":null,"methods":["PATCH"],"uri":"admin\/nests\/egg\/{egg}","name":null,"action":"Pterodactyl\Http\Controllers\Admin\Nests\EggController@update"},{"host":null,"methods":["PATCH"],"uri":"admin\/nests\/egg\/{egg}\/scripts","name":null,"action":"Pterodactyl\Http\Controllers\Admin\Nests\EggScriptController@update"},{"host":null,"methods":["PATCH"],"uri":"admin\/nests\/egg\/{egg}\/variables\/{variable}","name":"admin.nests.egg.variables.edit","action":"Pterodactyl\Http\Controllers\Admin\Nests\EggVariableController@update"},{"host":null,"methods":["DELETE"],"uri":"admin\/nests\/view\/{nest}","name":null,"action":"Pterodactyl\Http\Controllers\Admin\Nests\NestController@destroy"},{"host":null,"methods":["DELETE"],"uri":"admin\/nests\/egg\/{egg}","name":null,"action":"Pterodactyl\Http\Controllers\Admin\Nests\EggController@destroy"},{"host":null,"methods":["DELETE"],"uri":"admin\/nests\/egg\/{egg}\/variables\/{variable}","name":null,"action":"Pterodactyl\Http\Controllers\Admin\Nests\EggVariableController@destroy"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/packs","name":"admin.packs","action":"Pterodactyl\Http\Controllers\Admin\PackController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/packs\/new","name":"admin.packs.new","action":"Pterodactyl\Http\Controllers\Admin\PackController@create"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/packs\/new\/template","name":"admin.packs.new.template","action":"Pterodactyl\Http\Controllers\Admin\PackController@newTemplate"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/packs\/view\/{pack}","name":"admin.packs.view","action":"Pterodactyl\Http\Controllers\Admin\PackController@view"},{"host":null,"methods":["POST"],"uri":"admin\/packs\/new","name":null,"action":"Pterodactyl\Http\Controllers\Admin\PackController@store"},{"host":null,"methods":["POST"],"uri":"admin\/packs\/view\/{pack}\/export\/{files?}","name":"admin.packs.view.export","action":"Pterodactyl\Http\Controllers\Admin\PackController@export"},{"host":null,"methods":["PATCH"],"uri":"admin\/packs\/view\/{pack}","name":null,"action":"Pterodactyl\Http\Controllers\Admin\PackController@update"},{"host":null,"methods":["DELETE"],"uri":"admin\/packs\/view\/{pack}","name":null,"action":"Pterodactyl\Http\Controllers\Admin\PackController@destroy"},{"host":null,"methods":["GET","HEAD"],"uri":"auth\/login","name":"auth.login","action":"Pterodactyl\Http\Controllers\Auth\LoginController@showLoginForm"},{"host":null,"methods":["GET","HEAD"],"uri":"auth\/login\/totp","name":"auth.totp","action":"Pterodactyl\Http\Controllers\Auth\LoginController@totp"},{"host":null,"methods":["GET","HEAD"],"uri":"auth\/password","name":"auth.password","action":"Pterodactyl\Http\Controllers\Auth\ForgotPasswordController@showLinkRequestForm"},{"host":null,"methods":["GET","HEAD"],"uri":"auth\/password\/reset\/{token}","name":"auth.reset","action":"Pterodactyl\Http\Controllers\Auth\ResetPasswordController@showResetForm"},{"host":null,"methods":["POST"],"uri":"auth\/login","name":null,"action":"Pterodactyl\Http\Controllers\Auth\LoginController@login"},{"host":null,"methods":["POST"],"uri":"auth\/login\/totp","name":null,"action":"Pterodactyl\Http\Controllers\Auth\LoginController@loginUsingTotp"},{"host":null,"methods":["POST"],"uri":"auth\/password","name":null,"action":"Pterodactyl\Http\Controllers\Auth\ForgotPasswordController@sendResetLinkEmail"},{"host":null,"methods":["POST"],"uri":"auth\/password\/reset","name":"auth.reset.post","action":"Pterodactyl\Http\Controllers\Auth\ResetPasswordController@reset"},{"host":null,"methods":["POST"],"uri":"auth\/password\/reset\/{token}","name":null,"action":"Pterodactyl\Http\Controllers\Auth\ForgotPasswordController@sendResetLinkEmail"},{"host":null,"methods":["GET","HEAD"],"uri":"auth\/logout","name":"auth.logout","action":"Pterodactyl\Http\Controllers\Auth\LoginController@logout"},{"host":null,"methods":["GET","HEAD"],"uri":"server\/{server}","name":"server.index","action":"Pterodactyl\Http\Controllers\Server\ConsoleController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"server\/{server}\/console","name":"server.console","action":"Pterodactyl\Http\Controllers\Server\ConsoleController@console"},{"host":null,"methods":["GET","HEAD"],"uri":"server\/{server}\/settings\/allocation","name":"server.settings.allocation","action":"Pterodactyl\Http\Controllers\Server\Settings\AllocationController@index"},{"host":null,"methods":["PATCH"],"uri":"server\/{server}\/settings\/allocation","name":null,"action":"Pterodactyl\Http\Controllers\Server\Settings\AllocationController@update"},{"host":null,"methods":["GET","HEAD"],"uri":"server\/{server}\/settings\/sftp","name":"server.settings.sftp","action":"Pterodactyl\Http\Controllers\Server\Settings\SftpController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"server\/{server}\/settings\/startup","name":"server.settings.startup","action":"Pterodactyl\Http\Controllers\Server\Settings\StartupController@index"},{"host":null,"methods":["PATCH"],"uri":"server\/{server}\/settings\/startup","name":null,"action":"Pterodactyl\Http\Controllers\Server\Settings\StartupController@update"},{"host":null,"methods":["GET","HEAD"],"uri":"server\/{server}\/databases","name":"server.databases.index","action":"Pterodactyl\Http\Controllers\Server\DatabaseController@index"},{"host":null,"methods":["POST"],"uri":"server\/{server}\/databases\/new","name":"server.databases.new","action":"Pterodactyl\Http\Controllers\Server\DatabaseController@store"},{"host":null,"methods":["PATCH"],"uri":"server\/{server}\/databases\/password","name":"server.databases.password","action":"Pterodactyl\Http\Controllers\Server\DatabaseController@update"},{"host":null,"methods":["DELETE"],"uri":"server\/{server}\/databases\/delete\/{database}","name":"server.databases.delete","action":"Pterodactyl\Http\Controllers\Server\DatabaseController@delete"},{"host":null,"methods":["GET","HEAD"],"uri":"server\/{server}\/files","name":"server.files.index","action":"Pterodactyl\Http\Controllers\Server\Files\FileActionsController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"server\/{server}\/files\/add","name":"server.files.add","action":"Pterodactyl\Http\Controllers\Server\Files\FileActionsController@create"},{"host":null,"methods":["GET","HEAD"],"uri":"server\/{server}\/files\/edit\/{file}","name":"server.files.edit","action":"Pterodactyl\Http\Controllers\Server\Files\FileActionsController@view"},{"host":null,"methods":["GET","HEAD"],"uri":"server\/{server}\/files\/download\/{file}","name":"server.files.edit","action":"Pterodactyl\Http\Controllers\Server\Files\DownloadController@index"},{"host":null,"methods":["POST"],"uri":"server\/{server}\/files\/directory-list","name":"server.files.directory-list","action":"Pterodactyl\Http\Controllers\Server\Files\RemoteRequestController@directory"},{"host":null,"methods":["POST"],"uri":"server\/{server}\/files\/save","name":"server.files.save","action":"Pterodactyl\Http\Controllers\Server\Files\RemoteRequestController@store"},{"host":null,"methods":["GET","HEAD"],"uri":"server\/{server}\/users","name":"server.subusers","action":"Pterodactyl\Http\Controllers\Server\SubuserController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"server\/{server}\/users\/new","name":"server.subusers.new","action":"Pterodactyl\Http\Controllers\Server\SubuserController@create"},{"host":null,"methods":["POST"],"uri":"server\/{server}\/users\/new","name":null,"action":"Pterodactyl\Http\Controllers\Server\SubuserController@store"},{"host":null,"methods":["GET","HEAD"],"uri":"server\/{server}\/users\/view\/{subuser}","name":"server.subusers.view","action":"Pterodactyl\Http\Controllers\Server\SubuserController@view"},{"host":null,"methods":["PATCH"],"uri":"server\/{server}\/users\/view\/{subuser}","name":null,"action":"Pterodactyl\Http\Controllers\Server\SubuserController@update"},{"host":null,"methods":["DELETE"],"uri":"server\/{server}\/users\/view\/{subuser}","name":null,"action":"Pterodactyl\Http\Controllers\Server\SubuserController@delete"},{"host":null,"methods":["GET","HEAD"],"uri":"server\/{server}\/schedules","name":"server.schedules","action":"Pterodactyl\Http\Controllers\Server\Tasks\TaskManagementController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"server\/{server}\/schedules\/new","name":"server.schedules.new","action":"Pterodactyl\Http\Controllers\Server\Tasks\TaskManagementController@create"},{"host":null,"methods":["POST"],"uri":"server\/{server}\/schedules\/new","name":null,"action":"Pterodactyl\Http\Controllers\Server\Tasks\TaskManagementController@store"},{"host":null,"methods":["GET","HEAD"],"uri":"server\/{server}\/schedules\/view\/{schedule}","name":"server.schedules.view","action":"Pterodactyl\Http\Controllers\Server\Tasks\TaskManagementController@view"},{"host":null,"methods":["PATCH"],"uri":"server\/{server}\/schedules\/view\/{schedule}","name":null,"action":"Pterodactyl\Http\Controllers\Server\Tasks\TaskManagementController@update"},{"host":null,"methods":["POST"],"uri":"server\/{server}\/schedules\/view\/{schedule}\/toggle","name":"server.schedules.toggle","action":"Pterodactyl\Http\Controllers\Server\Tasks\ActionController@toggle"},{"host":null,"methods":["POST"],"uri":"server\/{server}\/schedules\/view\/{schedule}\/trigger","name":"server.schedules.trigger","action":"Pterodactyl\Http\Controllers\Server\Tasks\ActionController@trigger"},{"host":null,"methods":["DELETE"],"uri":"server\/{server}\/schedules\/view\/{schedule}","name":null,"action":"Pterodactyl\Http\Controllers\Server\Tasks\TaskManagementController@delete"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/application\/users","name":"api.application.users","action":"Pterodactyl\Http\Controllers\Api\Application\Users\UserController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/application\/users\/{user}","name":"api.application.users.view","action":"Pterodactyl\Http\Controllers\Api\Application\Users\UserController@view"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/application\/users\/external\/{external_id}","name":"api.application.users.external","action":"Pterodactyl\Http\Controllers\Api\Application\Users\ExternalUserController@index"},{"host":null,"methods":["POST"],"uri":"api\/application\/users","name":null,"action":"Pterodactyl\Http\Controllers\Api\Application\Users\UserController@store"},{"host":null,"methods":["PATCH"],"uri":"api\/application\/users\/{user}","name":null,"action":"Pterodactyl\Http\Controllers\Api\Application\Users\UserController@update"},{"host":null,"methods":["DELETE"],"uri":"api\/application\/users\/{user}","name":null,"action":"Pterodactyl\Http\Controllers\Api\Application\Users\UserController@delete"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/application\/nodes","name":"api.application.nodes","action":"Pterodactyl\Http\Controllers\Api\Application\Nodes\NodeController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/application\/nodes\/{node}","name":"api.application.nodes.view","action":"Pterodactyl\Http\Controllers\Api\Application\Nodes\NodeController@view"},{"host":null,"methods":["POST"],"uri":"api\/application\/nodes","name":null,"action":"Pterodactyl\Http\Controllers\Api\Application\Nodes\NodeController@store"},{"host":null,"methods":["PATCH"],"uri":"api\/application\/nodes\/{node}","name":null,"action":"Pterodactyl\Http\Controllers\Api\Application\Nodes\NodeController@update"},{"host":null,"methods":["DELETE"],"uri":"api\/application\/nodes\/{node}","name":null,"action":"Pterodactyl\Http\Controllers\Api\Application\Nodes\NodeController@delete"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/application\/nodes\/{node}\/allocations","name":"api.application.allocations","action":"Pterodactyl\Http\Controllers\Api\Application\Nodes\AllocationController@index"},{"host":null,"methods":["POST"],"uri":"api\/application\/nodes\/{node}\/allocations","name":null,"action":"Pterodactyl\Http\Controllers\Api\Application\Nodes\AllocationController@store"},{"host":null,"methods":["DELETE"],"uri":"api\/application\/nodes\/{node}\/allocations\/{allocation}","name":"api.application.allocations.view","action":"Pterodactyl\Http\Controllers\Api\Application\Nodes\AllocationController@delete"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/application\/locations","name":"api.applications.locations","action":"Pterodactyl\Http\Controllers\Api\Application\Locations\LocationController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/application\/locations\/{location}","name":"api.application.locations.view","action":"Pterodactyl\Http\Controllers\Api\Application\Locations\LocationController@view"},{"host":null,"methods":["POST"],"uri":"api\/application\/locations","name":null,"action":"Pterodactyl\Http\Controllers\Api\Application\Locations\LocationController@store"},{"host":null,"methods":["PATCH"],"uri":"api\/application\/locations\/{location}","name":null,"action":"Pterodactyl\Http\Controllers\Api\Application\Locations\LocationController@update"},{"host":null,"methods":["DELETE"],"uri":"api\/application\/locations\/{location}","name":null,"action":"Pterodactyl\Http\Controllers\Api\Application\Locations\LocationController@delete"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/application\/servers","name":"api.application.servers","action":"Pterodactyl\Http\Controllers\Api\Application\Servers\ServerController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/application\/servers\/{server}","name":"api.application.servers.view","action":"Pterodactyl\Http\Controllers\Api\Application\Servers\ServerController@view"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/application\/servers\/external\/{external_id}","name":"api.application.servers.external","action":"Pterodactyl\Http\Controllers\Api\Application\Servers\ExternalServerController@index"},{"host":null,"methods":["PATCH"],"uri":"api\/application\/servers\/{server}\/details","name":"api.application.servers.details","action":"Pterodactyl\Http\Controllers\Api\Application\Servers\ServerDetailsController@details"},{"host":null,"methods":["PATCH"],"uri":"api\/application\/servers\/{server}\/build","name":"api.application.servers.build","action":"Pterodactyl\Http\Controllers\Api\Application\Servers\ServerDetailsController@build"},{"host":null,"methods":["PATCH"],"uri":"api\/application\/servers\/{server}\/startup","name":"api.application.servers.startup","action":"Pterodactyl\Http\Controllers\Api\Application\Servers\StartupController@index"},{"host":null,"methods":["POST"],"uri":"api\/application\/servers","name":null,"action":"Pterodactyl\Http\Controllers\Api\Application\Servers\ServerController@store"},{"host":null,"methods":["POST"],"uri":"api\/application\/servers\/{server}\/suspend","name":"api.application.servers.suspend","action":"Pterodactyl\Http\Controllers\Api\Application\Servers\ServerManagementController@suspend"},{"host":null,"methods":["POST"],"uri":"api\/application\/servers\/{server}\/unsuspend","name":"api.application.servers.unsuspend","action":"Pterodactyl\Http\Controllers\Api\Application\Servers\ServerManagementController@unsuspend"},{"host":null,"methods":["POST"],"uri":"api\/application\/servers\/{server}\/reinstall","name":"api.application.servers.reinstall","action":"Pterodactyl\Http\Controllers\Api\Application\Servers\ServerManagementController@reinstall"},{"host":null,"methods":["POST"],"uri":"api\/application\/servers\/{server}\/rebuild","name":"api.application.servers.rebuild","action":"Pterodactyl\Http\Controllers\Api\Application\Servers\ServerManagementController@rebuild"},{"host":null,"methods":["DELETE"],"uri":"api\/application\/servers\/{server}","name":null,"action":"Pterodactyl\Http\Controllers\Api\Application\Servers\ServerController@delete"},{"host":null,"methods":["DELETE"],"uri":"api\/application\/servers\/{server}\/{force?}","name":null,"action":"Pterodactyl\Http\Controllers\Api\Application\Servers\ServerController@delete"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/application\/servers\/{server}\/databases","name":"api.application.servers.databases","action":"Pterodactyl\Http\Controllers\Api\Application\Servers\DatabaseController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/application\/servers\/{server}\/databases\/{database}","name":"api.application.servers.databases.view","action":"Pterodactyl\Http\Controllers\Api\Application\Servers\DatabaseController@view"},{"host":null,"methods":["POST"],"uri":"api\/application\/servers\/{server}\/databases","name":null,"action":"Pterodactyl\Http\Controllers\Api\Application\Servers\DatabaseController@store"},{"host":null,"methods":["POST"],"uri":"api\/application\/servers\/{server}\/databases\/{database}\/reset-password","name":null,"action":"Pterodactyl\Http\Controllers\Api\Application\Servers\DatabaseController@resetPassword"},{"host":null,"methods":["DELETE"],"uri":"api\/application\/servers\/{server}\/databases\/{database}","name":null,"action":"Pterodactyl\Http\Controllers\Api\Application\Servers\DatabaseController@delete"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/application\/nests","name":"api.application.nests","action":"Pterodactyl\Http\Controllers\Api\Application\Nests\NestController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/application\/nests\/{nest}","name":"api.application.nests.view","action":"Pterodactyl\Http\Controllers\Api\Application\Nests\NestController@view"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/application\/nests\/{nest}\/eggs","name":"api.application.nests.eggs","action":"Pterodactyl\Http\Controllers\Api\Application\Nests\EggController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/application\/nests\/{nest}\/eggs\/{egg}","name":"api.application.nests.eggs.view","action":"Pterodactyl\Http\Controllers\Api\Application\Nests\EggController@view"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/client","name":"api.client.index","action":"Pterodactyl\Http\Controllers\Api\Client\ClientController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/client\/servers\/{server}","name":"api.client.servers.view","action":"Pterodactyl\Http\Controllers\Api\Client\Servers\ServerController@index"},{"host":null,"methods":["POST"],"uri":"api\/client\/servers\/{server}\/command","name":"api.client.servers.command","action":"Pterodactyl\Http\Controllers\Api\Client\Servers\CommandController@index"},{"host":null,"methods":["POST"],"uri":"api\/client\/servers\/{server}\/power","name":"api.client.servers.power","action":"Pterodactyl\Http\Controllers\Api\Client\Servers\PowerController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/remote\/authenticate\/{token}","name":"api.remote.authenticate","action":"Pterodactyl\Http\Controllers\Api\Remote\ValidateKeyController@index"},{"host":null,"methods":["POST"],"uri":"api\/remote\/download-file","name":"api.remote.download_file","action":"Pterodactyl\Http\Controllers\Api\Remote\FileDownloadController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/remote\/eggs","name":"api.remote.eggs","action":"Pterodactyl\Http\Controllers\Api\Remote\EggRetrievalController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/remote\/eggs\/{uuid}","name":"api.remote.eggs.download","action":"Pterodactyl\Http\Controllers\Api\Remote\EggRetrievalController@download"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/remote\/scripts\/{uuid}","name":"api.remote.scripts","action":"Pterodactyl\Http\Controllers\Api\Remote\EggInstallController@index"},{"host":null,"methods":["POST"],"uri":"api\/remote\/sftp","name":"api.remote.sftp","action":"Pterodactyl\Http\Controllers\Api\Remote\SftpController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"daemon\/packs\/pull\/{uuid}","name":"daemon.pack.pull","action":"Pterodactyl\Http\Controllers\Daemon\PackController@pull"},{"host":null,"methods":["GET","HEAD"],"uri":"daemon\/packs\/pull\/{uuid}\/hash","name":"daemon.pack.hash","action":"Pterodactyl\Http\Controllers\Daemon\PackController@hash"},{"host":null,"methods":["GET","HEAD"],"uri":"daemon\/configure\/{token}","name":"daemon.configuration","action":"Pterodactyl\Http\Controllers\Daemon\ActionController@configuration"},{"host":null,"methods":["POST"],"uri":"daemon\/install","name":"daemon.install","action":"Pterodactyl\Http\Controllers\Daemon\ActionController@markInstall"}], + routes : [{"host":null,"methods":["GET","HEAD"],"uri":"\/","name":"index","action":"Pterodactyl\Http\Controllers\Base\IndexController@getIndex"},{"host":null,"methods":["GET","HEAD"],"uri":"status\/{server}","name":"index.status","action":"Pterodactyl\Http\Controllers\Base\IndexController@status"},{"host":null,"methods":["GET","HEAD"],"uri":"account","name":"account","action":"Pterodactyl\Http\Controllers\Base\AccountController@index"},{"host":null,"methods":["POST"],"uri":"account","name":null,"action":"Pterodactyl\Http\Controllers\Base\AccountController@update"},{"host":null,"methods":["GET","HEAD"],"uri":"account\/api","name":"account.api","action":"Pterodactyl\Http\Controllers\Base\ClientApiController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"account\/api\/new","name":"account.api.new","action":"Pterodactyl\Http\Controllers\Base\ClientApiController@create"},{"host":null,"methods":["POST"],"uri":"account\/api\/new","name":null,"action":"Pterodactyl\Http\Controllers\Base\ClientApiController@store"},{"host":null,"methods":["DELETE"],"uri":"account\/api\/revoke\/{identifier}","name":"account.api.revoke","action":"Pterodactyl\Http\Controllers\Base\ClientApiController@delete"},{"host":null,"methods":["GET","HEAD"],"uri":"account\/security","name":"account.security","action":"Pterodactyl\Http\Controllers\Base\SecurityController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"account\/security\/revoke\/{id}","name":"account.security.revoke","action":"Pterodactyl\Http\Controllers\Base\SecurityController@revoke"},{"host":null,"methods":["PUT"],"uri":"account\/security\/totp","name":"account.security.totp","action":"Pterodactyl\Http\Controllers\Base\SecurityController@generateTotp"},{"host":null,"methods":["POST"],"uri":"account\/security\/totp","name":"account.security.totp.set","action":"Pterodactyl\Http\Controllers\Base\SecurityController@setTotp"},{"host":null,"methods":["DELETE"],"uri":"account\/security\/totp","name":"account.security.totp.disable","action":"Pterodactyl\Http\Controllers\Base\SecurityController@disableTotp"},{"host":null,"methods":["GET","HEAD"],"uri":"admin","name":"admin.index","action":"Pterodactyl\Http\Controllers\Admin\BaseController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/statistics","name":"admin.statistics","action":"Pterodactyl\Http\Controllers\Admin\StatisticsController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/api","name":"admin.api.index","action":"Pterodactyl\Http\Controllers\Admin\ApiController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/api\/new","name":"admin.api.new","action":"Pterodactyl\Http\Controllers\Admin\ApiController@create"},{"host":null,"methods":["POST"],"uri":"admin\/api\/new","name":null,"action":"Pterodactyl\Http\Controllers\Admin\ApiController@store"},{"host":null,"methods":["DELETE"],"uri":"admin\/api\/revoke\/{identifier}","name":"admin.api.delete","action":"Pterodactyl\Http\Controllers\Admin\ApiController@delete"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/locations","name":"admin.locations","action":"Pterodactyl\Http\Controllers\Admin\LocationController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/locations\/view\/{location}","name":"admin.locations.view","action":"Pterodactyl\Http\Controllers\Admin\LocationController@view"},{"host":null,"methods":["POST"],"uri":"admin\/locations","name":null,"action":"Pterodactyl\Http\Controllers\Admin\LocationController@create"},{"host":null,"methods":["PATCH"],"uri":"admin\/locations\/view\/{location}","name":null,"action":"Pterodactyl\Http\Controllers\Admin\LocationController@update"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/databases","name":"admin.databases","action":"Pterodactyl\Http\Controllers\Admin\DatabaseController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/databases\/view\/{host}","name":"admin.databases.view","action":"Pterodactyl\Http\Controllers\Admin\DatabaseController@view"},{"host":null,"methods":["POST"],"uri":"admin\/databases","name":null,"action":"Pterodactyl\Http\Controllers\Admin\DatabaseController@create"},{"host":null,"methods":["PATCH"],"uri":"admin\/databases\/view\/{host}","name":null,"action":"Pterodactyl\Http\Controllers\Admin\DatabaseController@update"},{"host":null,"methods":["DELETE"],"uri":"admin\/databases\/view\/{host}","name":null,"action":"Pterodactyl\Http\Controllers\Admin\DatabaseController@delete"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/settings","name":"admin.settings","action":"Pterodactyl\Http\Controllers\Admin\Settings\IndexController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/settings\/mail","name":"admin.settings.mail","action":"Pterodactyl\Http\Controllers\Admin\Settings\MailController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/settings\/advanced","name":"admin.settings.advanced","action":"Pterodactyl\Http\Controllers\Admin\Settings\AdvancedController@index"},{"host":null,"methods":["PATCH"],"uri":"admin\/settings","name":null,"action":"Pterodactyl\Http\Controllers\Admin\Settings\IndexController@update"},{"host":null,"methods":["PATCH"],"uri":"admin\/settings\/mail","name":null,"action":"Pterodactyl\Http\Controllers\Admin\Settings\MailController@update"},{"host":null,"methods":["PATCH"],"uri":"admin\/settings\/advanced","name":null,"action":"Pterodactyl\Http\Controllers\Admin\Settings\AdvancedController@update"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/users","name":"admin.users","action":"Pterodactyl\Http\Controllers\Admin\UserController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/users\/accounts.json","name":"admin.users.json","action":"Pterodactyl\Http\Controllers\Admin\UserController@json"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/users\/new","name":"admin.users.new","action":"Pterodactyl\Http\Controllers\Admin\UserController@create"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/users\/view\/{user}","name":"admin.users.view","action":"Pterodactyl\Http\Controllers\Admin\UserController@view"},{"host":null,"methods":["POST"],"uri":"admin\/users\/new","name":null,"action":"Pterodactyl\Http\Controllers\Admin\UserController@store"},{"host":null,"methods":["PATCH"],"uri":"admin\/users\/view\/{user}","name":null,"action":"Pterodactyl\Http\Controllers\Admin\UserController@update"},{"host":null,"methods":["DELETE"],"uri":"admin\/users\/view\/{user}","name":null,"action":"Pterodactyl\Http\Controllers\Admin\UserController@delete"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/servers","name":"admin.servers","action":"Pterodactyl\Http\Controllers\Admin\ServersController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/servers\/new","name":"admin.servers.new","action":"Pterodactyl\Http\Controllers\Admin\ServersController@create"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/servers\/view\/{server}","name":"admin.servers.view","action":"Pterodactyl\Http\Controllers\Admin\ServersController@viewIndex"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/servers\/view\/{server}\/details","name":"admin.servers.view.details","action":"Pterodactyl\Http\Controllers\Admin\ServersController@viewDetails"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/servers\/view\/{server}\/build","name":"admin.servers.view.build","action":"Pterodactyl\Http\Controllers\Admin\ServersController@viewBuild"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/servers\/view\/{server}\/startup","name":"admin.servers.view.startup","action":"Pterodactyl\Http\Controllers\Admin\ServersController@viewStartup"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/servers\/view\/{server}\/database","name":"admin.servers.view.database","action":"Pterodactyl\Http\Controllers\Admin\ServersController@viewDatabase"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/servers\/view\/{server}\/manage","name":"admin.servers.view.manage","action":"Pterodactyl\Http\Controllers\Admin\ServersController@viewManage"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/servers\/view\/{server}\/delete","name":"admin.servers.view.delete","action":"Pterodactyl\Http\Controllers\Admin\ServersController@viewDelete"},{"host":null,"methods":["POST"],"uri":"admin\/servers\/new","name":null,"action":"Pterodactyl\Http\Controllers\Admin\ServersController@store"},{"host":null,"methods":["POST"],"uri":"admin\/servers\/view\/{server}\/build","name":null,"action":"Pterodactyl\Http\Controllers\Admin\ServersController@updateBuild"},{"host":null,"methods":["POST"],"uri":"admin\/servers\/view\/{server}\/startup","name":null,"action":"Pterodactyl\Http\Controllers\Admin\ServersController@saveStartup"},{"host":null,"methods":["POST"],"uri":"admin\/servers\/view\/{server}\/database","name":null,"action":"Pterodactyl\Http\Controllers\Admin\ServersController@newDatabase"},{"host":null,"methods":["POST"],"uri":"admin\/servers\/view\/{server}\/manage\/toggle","name":"admin.servers.view.manage.toggle","action":"Pterodactyl\Http\Controllers\Admin\ServersController@toggleInstall"},{"host":null,"methods":["POST"],"uri":"admin\/servers\/view\/{server}\/manage\/rebuild","name":"admin.servers.view.manage.rebuild","action":"Pterodactyl\Http\Controllers\Admin\ServersController@rebuildContainer"},{"host":null,"methods":["POST"],"uri":"admin\/servers\/view\/{server}\/manage\/suspension","name":"admin.servers.view.manage.suspension","action":"Pterodactyl\Http\Controllers\Admin\ServersController@manageSuspension"},{"host":null,"methods":["POST"],"uri":"admin\/servers\/view\/{server}\/manage\/reinstall","name":"admin.servers.view.manage.reinstall","action":"Pterodactyl\Http\Controllers\Admin\ServersController@reinstallServer"},{"host":null,"methods":["POST"],"uri":"admin\/servers\/view\/{server}\/delete","name":null,"action":"Pterodactyl\Http\Controllers\Admin\ServersController@delete"},{"host":null,"methods":["PATCH"],"uri":"admin\/servers\/view\/{server}\/details","name":null,"action":"Pterodactyl\Http\Controllers\Admin\ServersController@setDetails"},{"host":null,"methods":["PATCH"],"uri":"admin\/servers\/view\/{server}\/database","name":null,"action":"Pterodactyl\Http\Controllers\Admin\ServersController@resetDatabasePassword"},{"host":null,"methods":["DELETE"],"uri":"admin\/servers\/view\/{server}\/database\/{database}\/delete","name":"admin.servers.view.database.delete","action":"Pterodactyl\Http\Controllers\Admin\ServersController@deleteDatabase"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/nodes","name":"admin.nodes","action":"Pterodactyl\Http\Controllers\Admin\NodesController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/nodes\/new","name":"admin.nodes.new","action":"Pterodactyl\Http\Controllers\Admin\NodesController@create"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/nodes\/view\/{node}","name":"admin.nodes.view","action":"Pterodactyl\Http\Controllers\Admin\NodesController@viewIndex"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/nodes\/view\/{node}\/settings","name":"admin.nodes.view.settings","action":"Pterodactyl\Http\Controllers\Admin\NodesController@viewSettings"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/nodes\/view\/{node}\/configuration","name":"admin.nodes.view.configuration","action":"Pterodactyl\Http\Controllers\Admin\NodesController@viewConfiguration"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/nodes\/view\/{node}\/allocation","name":"admin.nodes.view.allocation","action":"Pterodactyl\Http\Controllers\Admin\NodesController@viewAllocation"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/nodes\/view\/{node}\/servers","name":"admin.nodes.view.servers","action":"Pterodactyl\Http\Controllers\Admin\NodesController@viewServers"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/nodes\/view\/{node}\/settings\/token","name":"admin.nodes.view.configuration.token","action":"Pterodactyl\Http\Controllers\Admin\NodesController@setToken"},{"host":null,"methods":["POST"],"uri":"admin\/nodes\/new","name":null,"action":"Pterodactyl\Http\Controllers\Admin\NodesController@store"},{"host":null,"methods":["POST"],"uri":"admin\/nodes\/view\/{node}\/allocation","name":null,"action":"Pterodactyl\Http\Controllers\Admin\NodesController@createAllocation"},{"host":null,"methods":["POST"],"uri":"admin\/nodes\/view\/{node}\/allocation\/remove","name":"admin.nodes.view.allocation.removeBlock","action":"Pterodactyl\Http\Controllers\Admin\NodesController@allocationRemoveBlock"},{"host":null,"methods":["POST"],"uri":"admin\/nodes\/view\/{node}\/allocation\/alias","name":"admin.nodes.view.allocation.setAlias","action":"Pterodactyl\Http\Controllers\Admin\NodesController@allocationSetAlias"},{"host":null,"methods":["PATCH"],"uri":"admin\/nodes\/view\/{node}\/settings","name":null,"action":"Pterodactyl\Http\Controllers\Admin\NodesController@updateSettings"},{"host":null,"methods":["DELETE"],"uri":"admin\/nodes\/view\/{node}\/delete","name":"admin.nodes.view.delete","action":"Pterodactyl\Http\Controllers\Admin\NodesController@delete"},{"host":null,"methods":["DELETE"],"uri":"admin\/nodes\/view\/{node}\/allocation\/remove\/{allocation}","name":"admin.nodes.view.allocation.removeSingle","action":"Pterodactyl\Http\Controllers\Admin\NodesController@allocationRemoveSingle"},{"host":null,"methods":["DELETE"],"uri":"admin\/nodes\/view\/{node}\/allocations","name":"admin.nodes.view.allocation.removeMultiple","action":"Pterodactyl\Http\Controllers\Admin\NodesController@allocationRemoveMultiple"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/nests","name":"admin.nests","action":"Pterodactyl\Http\Controllers\Admin\Nests\NestController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/nests\/new","name":"admin.nests.new","action":"Pterodactyl\Http\Controllers\Admin\Nests\NestController@create"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/nests\/view\/{nest}","name":"admin.nests.view","action":"Pterodactyl\Http\Controllers\Admin\Nests\NestController@view"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/nests\/egg\/new","name":"admin.nests.egg.new","action":"Pterodactyl\Http\Controllers\Admin\Nests\EggController@create"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/nests\/egg\/{egg}","name":"admin.nests.egg.view","action":"Pterodactyl\Http\Controllers\Admin\Nests\EggController@view"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/nests\/egg\/{egg}\/export","name":"admin.nests.egg.export","action":"Pterodactyl\Http\Controllers\Admin\Nests\EggShareController@export"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/nests\/egg\/{egg}\/variables","name":"admin.nests.egg.variables","action":"Pterodactyl\Http\Controllers\Admin\Nests\EggVariableController@view"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/nests\/egg\/{egg}\/scripts","name":"admin.nests.egg.scripts","action":"Pterodactyl\Http\Controllers\Admin\Nests\EggScriptController@index"},{"host":null,"methods":["POST"],"uri":"admin\/nests\/new","name":null,"action":"Pterodactyl\Http\Controllers\Admin\Nests\NestController@store"},{"host":null,"methods":["POST"],"uri":"admin\/nests\/import","name":"admin.nests.egg.import","action":"Pterodactyl\Http\Controllers\Admin\Nests\EggShareController@import"},{"host":null,"methods":["POST"],"uri":"admin\/nests\/egg\/new","name":null,"action":"Pterodactyl\Http\Controllers\Admin\Nests\EggController@store"},{"host":null,"methods":["POST"],"uri":"admin\/nests\/egg\/{egg}\/variables","name":null,"action":"Pterodactyl\Http\Controllers\Admin\Nests\EggVariableController@store"},{"host":null,"methods":["PUT"],"uri":"admin\/nests\/egg\/{egg}","name":null,"action":"Pterodactyl\Http\Controllers\Admin\Nests\EggShareController@update"},{"host":null,"methods":["PATCH"],"uri":"admin\/nests\/view\/{nest}","name":null,"action":"Pterodactyl\Http\Controllers\Admin\Nests\NestController@update"},{"host":null,"methods":["PATCH"],"uri":"admin\/nests\/egg\/{egg}","name":null,"action":"Pterodactyl\Http\Controllers\Admin\Nests\EggController@update"},{"host":null,"methods":["PATCH"],"uri":"admin\/nests\/egg\/{egg}\/scripts","name":null,"action":"Pterodactyl\Http\Controllers\Admin\Nests\EggScriptController@update"},{"host":null,"methods":["PATCH"],"uri":"admin\/nests\/egg\/{egg}\/variables\/{variable}","name":"admin.nests.egg.variables.edit","action":"Pterodactyl\Http\Controllers\Admin\Nests\EggVariableController@update"},{"host":null,"methods":["DELETE"],"uri":"admin\/nests\/view\/{nest}","name":null,"action":"Pterodactyl\Http\Controllers\Admin\Nests\NestController@destroy"},{"host":null,"methods":["DELETE"],"uri":"admin\/nests\/egg\/{egg}","name":null,"action":"Pterodactyl\Http\Controllers\Admin\Nests\EggController@destroy"},{"host":null,"methods":["DELETE"],"uri":"admin\/nests\/egg\/{egg}\/variables\/{variable}","name":null,"action":"Pterodactyl\Http\Controllers\Admin\Nests\EggVariableController@destroy"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/packs","name":"admin.packs","action":"Pterodactyl\Http\Controllers\Admin\PackController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/packs\/new","name":"admin.packs.new","action":"Pterodactyl\Http\Controllers\Admin\PackController@create"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/packs\/new\/template","name":"admin.packs.new.template","action":"Pterodactyl\Http\Controllers\Admin\PackController@newTemplate"},{"host":null,"methods":["GET","HEAD"],"uri":"admin\/packs\/view\/{pack}","name":"admin.packs.view","action":"Pterodactyl\Http\Controllers\Admin\PackController@view"},{"host":null,"methods":["POST"],"uri":"admin\/packs\/new","name":null,"action":"Pterodactyl\Http\Controllers\Admin\PackController@store"},{"host":null,"methods":["POST"],"uri":"admin\/packs\/view\/{pack}\/export\/{files?}","name":"admin.packs.view.export","action":"Pterodactyl\Http\Controllers\Admin\PackController@export"},{"host":null,"methods":["PATCH"],"uri":"admin\/packs\/view\/{pack}","name":null,"action":"Pterodactyl\Http\Controllers\Admin\PackController@update"},{"host":null,"methods":["DELETE"],"uri":"admin\/packs\/view\/{pack}","name":null,"action":"Pterodactyl\Http\Controllers\Admin\PackController@destroy"},{"host":null,"methods":["GET","HEAD"],"uri":"auth\/login","name":"auth.login","action":"Pterodactyl\Http\Controllers\Auth\LoginController@showLoginForm"},{"host":null,"methods":["GET","HEAD"],"uri":"auth\/login\/totp","name":"auth.totp","action":"Pterodactyl\Http\Controllers\Auth\LoginController@totp"},{"host":null,"methods":["GET","HEAD"],"uri":"auth\/password","name":"auth.password","action":"Pterodactyl\Http\Controllers\Auth\ForgotPasswordController@showLinkRequestForm"},{"host":null,"methods":["GET","HEAD"],"uri":"auth\/password\/reset\/{token}","name":"auth.reset","action":"Pterodactyl\Http\Controllers\Auth\ResetPasswordController@showResetForm"},{"host":null,"methods":["POST"],"uri":"auth\/login","name":null,"action":"Pterodactyl\Http\Controllers\Auth\LoginController@login"},{"host":null,"methods":["POST"],"uri":"auth\/login\/totp","name":null,"action":"Pterodactyl\Http\Controllers\Auth\LoginController@loginUsingTotp"},{"host":null,"methods":["POST"],"uri":"auth\/password","name":null,"action":"Pterodactyl\Http\Controllers\Auth\ForgotPasswordController@sendResetLinkEmail"},{"host":null,"methods":["POST"],"uri":"auth\/password\/reset","name":"auth.reset.post","action":"Pterodactyl\Http\Controllers\Auth\ResetPasswordController@reset"},{"host":null,"methods":["POST"],"uri":"auth\/password\/reset\/{token}","name":null,"action":"Pterodactyl\Http\Controllers\Auth\ForgotPasswordController@sendResetLinkEmail"},{"host":null,"methods":["GET","HEAD"],"uri":"auth\/logout","name":"auth.logout","action":"Pterodactyl\Http\Controllers\Auth\LoginController@logout"},{"host":null,"methods":["GET","HEAD"],"uri":"server\/{server}","name":"server.index","action":"Pterodactyl\Http\Controllers\Server\ConsoleController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"server\/{server}\/console","name":"server.console","action":"Pterodactyl\Http\Controllers\Server\ConsoleController@console"},{"host":null,"methods":["GET","HEAD"],"uri":"server\/{server}\/settings\/allocation","name":"server.settings.allocation","action":"Pterodactyl\Http\Controllers\Server\Settings\AllocationController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"server\/{server}\/settings\/name","name":"server.settings.name","action":"Pterodactyl\Http\Controllers\Server\Settings\NameController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"server\/{server}\/settings\/sftp","name":"server.settings.sftp","action":"Pterodactyl\Http\Controllers\Server\Settings\SftpController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"server\/{server}\/settings\/startup","name":"server.settings.startup","action":"Pterodactyl\Http\Controllers\Server\Settings\StartupController@index"},{"host":null,"methods":["PATCH"],"uri":"server\/{server}\/settings\/allocation","name":null,"action":"Pterodactyl\Http\Controllers\Server\Settings\AllocationController@update"},{"host":null,"methods":["PATCH"],"uri":"server\/{server}\/settings\/name","name":null,"action":"Pterodactyl\Http\Controllers\Server\Settings\NameController@update"},{"host":null,"methods":["PATCH"],"uri":"server\/{server}\/settings\/startup","name":null,"action":"Pterodactyl\Http\Controllers\Server\Settings\StartupController@update"},{"host":null,"methods":["GET","HEAD"],"uri":"server\/{server}\/databases","name":"server.databases.index","action":"Pterodactyl\Http\Controllers\Server\DatabaseController@index"},{"host":null,"methods":["POST"],"uri":"server\/{server}\/databases\/new","name":"server.databases.new","action":"Pterodactyl\Http\Controllers\Server\DatabaseController@store"},{"host":null,"methods":["PATCH"],"uri":"server\/{server}\/databases\/password","name":"server.databases.password","action":"Pterodactyl\Http\Controllers\Server\DatabaseController@update"},{"host":null,"methods":["DELETE"],"uri":"server\/{server}\/databases\/delete\/{database}","name":"server.databases.delete","action":"Pterodactyl\Http\Controllers\Server\DatabaseController@delete"},{"host":null,"methods":["GET","HEAD"],"uri":"server\/{server}\/files","name":"server.files.index","action":"Pterodactyl\Http\Controllers\Server\Files\FileActionsController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"server\/{server}\/files\/add","name":"server.files.add","action":"Pterodactyl\Http\Controllers\Server\Files\FileActionsController@create"},{"host":null,"methods":["GET","HEAD"],"uri":"server\/{server}\/files\/edit\/{file}","name":"server.files.edit","action":"Pterodactyl\Http\Controllers\Server\Files\FileActionsController@view"},{"host":null,"methods":["GET","HEAD"],"uri":"server\/{server}\/files\/download\/{file}","name":"server.files.edit","action":"Pterodactyl\Http\Controllers\Server\Files\DownloadController@index"},{"host":null,"methods":["POST"],"uri":"server\/{server}\/files\/directory-list","name":"server.files.directory-list","action":"Pterodactyl\Http\Controllers\Server\Files\RemoteRequestController@directory"},{"host":null,"methods":["POST"],"uri":"server\/{server}\/files\/save","name":"server.files.save","action":"Pterodactyl\Http\Controllers\Server\Files\RemoteRequestController@store"},{"host":null,"methods":["GET","HEAD"],"uri":"server\/{server}\/users","name":"server.subusers","action":"Pterodactyl\Http\Controllers\Server\SubuserController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"server\/{server}\/users\/new","name":"server.subusers.new","action":"Pterodactyl\Http\Controllers\Server\SubuserController@create"},{"host":null,"methods":["POST"],"uri":"server\/{server}\/users\/new","name":null,"action":"Pterodactyl\Http\Controllers\Server\SubuserController@store"},{"host":null,"methods":["GET","HEAD"],"uri":"server\/{server}\/users\/view\/{subuser}","name":"server.subusers.view","action":"Pterodactyl\Http\Controllers\Server\SubuserController@view"},{"host":null,"methods":["PATCH"],"uri":"server\/{server}\/users\/view\/{subuser}","name":null,"action":"Pterodactyl\Http\Controllers\Server\SubuserController@update"},{"host":null,"methods":["DELETE"],"uri":"server\/{server}\/users\/view\/{subuser}","name":null,"action":"Pterodactyl\Http\Controllers\Server\SubuserController@delete"},{"host":null,"methods":["GET","HEAD"],"uri":"server\/{server}\/schedules","name":"server.schedules","action":"Pterodactyl\Http\Controllers\Server\Tasks\TaskManagementController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"server\/{server}\/schedules\/new","name":"server.schedules.new","action":"Pterodactyl\Http\Controllers\Server\Tasks\TaskManagementController@create"},{"host":null,"methods":["POST"],"uri":"server\/{server}\/schedules\/new","name":null,"action":"Pterodactyl\Http\Controllers\Server\Tasks\TaskManagementController@store"},{"host":null,"methods":["GET","HEAD"],"uri":"server\/{server}\/schedules\/view\/{schedule}","name":"server.schedules.view","action":"Pterodactyl\Http\Controllers\Server\Tasks\TaskManagementController@view"},{"host":null,"methods":["PATCH"],"uri":"server\/{server}\/schedules\/view\/{schedule}","name":null,"action":"Pterodactyl\Http\Controllers\Server\Tasks\TaskManagementController@update"},{"host":null,"methods":["POST"],"uri":"server\/{server}\/schedules\/view\/{schedule}\/toggle","name":"server.schedules.toggle","action":"Pterodactyl\Http\Controllers\Server\Tasks\ActionController@toggle"},{"host":null,"methods":["POST"],"uri":"server\/{server}\/schedules\/view\/{schedule}\/trigger","name":"server.schedules.trigger","action":"Pterodactyl\Http\Controllers\Server\Tasks\ActionController@trigger"},{"host":null,"methods":["DELETE"],"uri":"server\/{server}\/schedules\/view\/{schedule}","name":null,"action":"Pterodactyl\Http\Controllers\Server\Tasks\TaskManagementController@delete"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/application\/users","name":"api.application.users","action":"Pterodactyl\Http\Controllers\Api\Application\Users\UserController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/application\/users\/{user}","name":"api.application.users.view","action":"Pterodactyl\Http\Controllers\Api\Application\Users\UserController@view"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/application\/users\/external\/{external_id}","name":"api.application.users.external","action":"Pterodactyl\Http\Controllers\Api\Application\Users\ExternalUserController@index"},{"host":null,"methods":["POST"],"uri":"api\/application\/users","name":null,"action":"Pterodactyl\Http\Controllers\Api\Application\Users\UserController@store"},{"host":null,"methods":["PATCH"],"uri":"api\/application\/users\/{user}","name":null,"action":"Pterodactyl\Http\Controllers\Api\Application\Users\UserController@update"},{"host":null,"methods":["DELETE"],"uri":"api\/application\/users\/{user}","name":null,"action":"Pterodactyl\Http\Controllers\Api\Application\Users\UserController@delete"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/application\/nodes","name":"api.application.nodes","action":"Pterodactyl\Http\Controllers\Api\Application\Nodes\NodeController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/application\/nodes\/{node}","name":"api.application.nodes.view","action":"Pterodactyl\Http\Controllers\Api\Application\Nodes\NodeController@view"},{"host":null,"methods":["POST"],"uri":"api\/application\/nodes","name":null,"action":"Pterodactyl\Http\Controllers\Api\Application\Nodes\NodeController@store"},{"host":null,"methods":["PATCH"],"uri":"api\/application\/nodes\/{node}","name":null,"action":"Pterodactyl\Http\Controllers\Api\Application\Nodes\NodeController@update"},{"host":null,"methods":["DELETE"],"uri":"api\/application\/nodes\/{node}","name":null,"action":"Pterodactyl\Http\Controllers\Api\Application\Nodes\NodeController@delete"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/application\/nodes\/{node}\/allocations","name":"api.application.allocations","action":"Pterodactyl\Http\Controllers\Api\Application\Nodes\AllocationController@index"},{"host":null,"methods":["POST"],"uri":"api\/application\/nodes\/{node}\/allocations","name":null,"action":"Pterodactyl\Http\Controllers\Api\Application\Nodes\AllocationController@store"},{"host":null,"methods":["DELETE"],"uri":"api\/application\/nodes\/{node}\/allocations\/{allocation}","name":"api.application.allocations.view","action":"Pterodactyl\Http\Controllers\Api\Application\Nodes\AllocationController@delete"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/application\/locations","name":"api.applications.locations","action":"Pterodactyl\Http\Controllers\Api\Application\Locations\LocationController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/application\/locations\/{location}","name":"api.application.locations.view","action":"Pterodactyl\Http\Controllers\Api\Application\Locations\LocationController@view"},{"host":null,"methods":["POST"],"uri":"api\/application\/locations","name":null,"action":"Pterodactyl\Http\Controllers\Api\Application\Locations\LocationController@store"},{"host":null,"methods":["PATCH"],"uri":"api\/application\/locations\/{location}","name":null,"action":"Pterodactyl\Http\Controllers\Api\Application\Locations\LocationController@update"},{"host":null,"methods":["DELETE"],"uri":"api\/application\/locations\/{location}","name":null,"action":"Pterodactyl\Http\Controllers\Api\Application\Locations\LocationController@delete"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/application\/servers","name":"api.application.servers","action":"Pterodactyl\Http\Controllers\Api\Application\Servers\ServerController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/application\/servers\/{server}","name":"api.application.servers.view","action":"Pterodactyl\Http\Controllers\Api\Application\Servers\ServerController@view"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/application\/servers\/external\/{external_id}","name":"api.application.servers.external","action":"Pterodactyl\Http\Controllers\Api\Application\Servers\ExternalServerController@index"},{"host":null,"methods":["PATCH"],"uri":"api\/application\/servers\/{server}\/details","name":"api.application.servers.details","action":"Pterodactyl\Http\Controllers\Api\Application\Servers\ServerDetailsController@details"},{"host":null,"methods":["PATCH"],"uri":"api\/application\/servers\/{server}\/build","name":"api.application.servers.build","action":"Pterodactyl\Http\Controllers\Api\Application\Servers\ServerDetailsController@build"},{"host":null,"methods":["PATCH"],"uri":"api\/application\/servers\/{server}\/startup","name":"api.application.servers.startup","action":"Pterodactyl\Http\Controllers\Api\Application\Servers\StartupController@index"},{"host":null,"methods":["POST"],"uri":"api\/application\/servers","name":null,"action":"Pterodactyl\Http\Controllers\Api\Application\Servers\ServerController@store"},{"host":null,"methods":["POST"],"uri":"api\/application\/servers\/{server}\/suspend","name":"api.application.servers.suspend","action":"Pterodactyl\Http\Controllers\Api\Application\Servers\ServerManagementController@suspend"},{"host":null,"methods":["POST"],"uri":"api\/application\/servers\/{server}\/unsuspend","name":"api.application.servers.unsuspend","action":"Pterodactyl\Http\Controllers\Api\Application\Servers\ServerManagementController@unsuspend"},{"host":null,"methods":["POST"],"uri":"api\/application\/servers\/{server}\/reinstall","name":"api.application.servers.reinstall","action":"Pterodactyl\Http\Controllers\Api\Application\Servers\ServerManagementController@reinstall"},{"host":null,"methods":["POST"],"uri":"api\/application\/servers\/{server}\/rebuild","name":"api.application.servers.rebuild","action":"Pterodactyl\Http\Controllers\Api\Application\Servers\ServerManagementController@rebuild"},{"host":null,"methods":["DELETE"],"uri":"api\/application\/servers\/{server}","name":null,"action":"Pterodactyl\Http\Controllers\Api\Application\Servers\ServerController@delete"},{"host":null,"methods":["DELETE"],"uri":"api\/application\/servers\/{server}\/{force?}","name":null,"action":"Pterodactyl\Http\Controllers\Api\Application\Servers\ServerController@delete"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/application\/servers\/{server}\/databases","name":"api.application.servers.databases","action":"Pterodactyl\Http\Controllers\Api\Application\Servers\DatabaseController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/application\/servers\/{server}\/databases\/{database}","name":"api.application.servers.databases.view","action":"Pterodactyl\Http\Controllers\Api\Application\Servers\DatabaseController@view"},{"host":null,"methods":["POST"],"uri":"api\/application\/servers\/{server}\/databases","name":null,"action":"Pterodactyl\Http\Controllers\Api\Application\Servers\DatabaseController@store"},{"host":null,"methods":["POST"],"uri":"api\/application\/servers\/{server}\/databases\/{database}\/reset-password","name":null,"action":"Pterodactyl\Http\Controllers\Api\Application\Servers\DatabaseController@resetPassword"},{"host":null,"methods":["DELETE"],"uri":"api\/application\/servers\/{server}\/databases\/{database}","name":null,"action":"Pterodactyl\Http\Controllers\Api\Application\Servers\DatabaseController@delete"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/application\/nests","name":"api.application.nests","action":"Pterodactyl\Http\Controllers\Api\Application\Nests\NestController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/application\/nests\/{nest}","name":"api.application.nests.view","action":"Pterodactyl\Http\Controllers\Api\Application\Nests\NestController@view"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/application\/nests\/{nest}\/eggs","name":"api.application.nests.eggs","action":"Pterodactyl\Http\Controllers\Api\Application\Nests\EggController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/application\/nests\/{nest}\/eggs\/{egg}","name":"api.application.nests.eggs.view","action":"Pterodactyl\Http\Controllers\Api\Application\Nests\EggController@view"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/client","name":"api.client.index","action":"Pterodactyl\Http\Controllers\Api\Client\ClientController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/client\/servers\/{server}","name":"api.client.servers.view","action":"Pterodactyl\Http\Controllers\Api\Client\Servers\ServerController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/client\/servers\/{server}\/utilization","name":"api.client.servers.resources","action":"Pterodactyl\Http\Controllers\Api\Client\Servers\ResourceUtilizationController@index"},{"host":null,"methods":["POST"],"uri":"api\/client\/servers\/{server}\/command","name":"api.client.servers.command","action":"Pterodactyl\Http\Controllers\Api\Client\Servers\CommandController@index"},{"host":null,"methods":["POST"],"uri":"api\/client\/servers\/{server}\/power","name":"api.client.servers.power","action":"Pterodactyl\Http\Controllers\Api\Client\Servers\PowerController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/remote\/authenticate\/{token}","name":"api.remote.authenticate","action":"Pterodactyl\Http\Controllers\Api\Remote\ValidateKeyController@index"},{"host":null,"methods":["POST"],"uri":"api\/remote\/download-file","name":"api.remote.download_file","action":"Pterodactyl\Http\Controllers\Api\Remote\FileDownloadController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/remote\/eggs","name":"api.remote.eggs","action":"Pterodactyl\Http\Controllers\Api\Remote\EggRetrievalController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/remote\/eggs\/{uuid}","name":"api.remote.eggs.download","action":"Pterodactyl\Http\Controllers\Api\Remote\EggRetrievalController@download"},{"host":null,"methods":["GET","HEAD"],"uri":"api\/remote\/scripts\/{uuid}","name":"api.remote.scripts","action":"Pterodactyl\Http\Controllers\Api\Remote\EggInstallController@index"},{"host":null,"methods":["POST"],"uri":"api\/remote\/sftp","name":"api.remote.sftp","action":"Pterodactyl\Http\Controllers\Api\Remote\SftpController@index"},{"host":null,"methods":["GET","HEAD"],"uri":"daemon\/packs\/pull\/{uuid}","name":"daemon.pack.pull","action":"Pterodactyl\Http\Controllers\Daemon\PackController@pull"},{"host":null,"methods":["GET","HEAD"],"uri":"daemon\/packs\/pull\/{uuid}\/hash","name":"daemon.pack.hash","action":"Pterodactyl\Http\Controllers\Daemon\PackController@hash"},{"host":null,"methods":["GET","HEAD"],"uri":"daemon\/configure\/{token}","name":"daemon.configuration","action":"Pterodactyl\Http\Controllers\Daemon\ActionController@configuration"},{"host":null,"methods":["POST"],"uri":"daemon\/install","name":"daemon.install","action":"Pterodactyl\Http\Controllers\Daemon\ActionController@markInstall"}], prefix: '', route : function (name, parameters, route) { diff --git a/public/themes/pterodactyl/js/frontend/files/src/index.js b/public/themes/pterodactyl/js/frontend/files/src/index.js index a27d4030..83c1460b 100644 --- a/public/themes/pterodactyl/js/frontend/files/src/index.js +++ b/public/themes/pterodactyl/js/frontend/files/src/index.js @@ -113,7 +113,7 @@ class FileManager { addFolderButton() { $('[data-action="add-folder"]').unbind().on('click', () => { new ActionsClass().folder($('#file_listing').data('current-dir') || '/'); - }) + }); } selectRow() { diff --git a/resources/lang/en/server.php b/resources/lang/en/server.php index b84f7638..7782db9b 100644 --- a/resources/lang/en/server.php +++ b/resources/lang/en/server.php @@ -258,6 +258,10 @@ return [ ], ], ], + 'allocations' => [ + 'mass_actions' => 'Mass Actions', + 'delete' => 'Delete Allocations', + ], 'files' => [ 'exceptions' => [ 'invalid_mime' => 'This type of file cannot be edited via the Panel\'s built-in editor.', diff --git a/resources/themes/pterodactyl/admin/nodes/view/allocation.blade.php b/resources/themes/pterodactyl/admin/nodes/view/allocation.blade.php index 75b40811..bab9fa5d 100644 --- a/resources/themes/pterodactyl/admin/nodes/view/allocation.blade.php +++ b/resources/themes/pterodactyl/admin/nodes/view/allocation.blade.php @@ -39,23 +39,42 @@

Existing Allocations

-
+
+ - + @foreach($node->allocations as $allocation) - + + - +
+ + IP Address IP Alias Port Assigned To + +
{{ $allocation->ip }} + @if(is_null($allocation->server_id)) + + @else + + @endif + {{ $allocation->ip }} {{ $allocation->port }}{{ $allocation->port }} @if(! is_null($allocation->server)) {{ $allocation->server->name }} @@ -153,17 +172,35 @@ @section('footer-scripts') @parent @endsection diff --git a/routes/admin.php b/routes/admin.php index 70ba7e3d..8e548256 100644 --- a/routes/admin.php +++ b/routes/admin.php @@ -153,6 +153,7 @@ Route::group(['prefix' => 'nodes'], function () { Route::delete('/view/{node}/delete', 'NodesController@delete')->name('admin.nodes.view.delete'); Route::delete('/view/{node}/allocation/remove/{allocation}', 'NodesController@allocationRemoveSingle')->name('admin.nodes.view.allocation.removeSingle'); + Route::delete('/view/{node}/allocations', 'NodesController@allocationRemoveMultiple')->name('admin.nodes.view.allocation.removeMultiple'); }); /* From 2d469cc9514256f64ca8ee4d66aef9149019bac9 Mon Sep 17 00:00:00 2001 From: Stijn van Nieulande Date: Sun, 23 Sep 2018 22:12:41 +0200 Subject: [PATCH 23/23] Dutch translations update (#1339) --- resources/lang/nl/auth.php | 18 +++++------ resources/lang/nl/base.php | 51 ++++++++++++++++---------------- resources/lang/nl/passwords.php | 2 +- resources/lang/nl/server.php | 11 ++++--- resources/lang/nl/strings.php | 4 +-- resources/lang/nl/validation.php | 2 +- 6 files changed, 43 insertions(+), 45 deletions(-) diff --git a/resources/lang/nl/auth.php b/resources/lang/nl/auth.php index 005b49ef..f15ea9e8 100644 --- a/resources/lang/nl/auth.php +++ b/resources/lang/nl/auth.php @@ -2,17 +2,17 @@ return [ '2fa_failed' => 'De gegeven 2FA token is niet geldig.', - '2fa_must_be_enabled' => 'De administrator heeft ingesteld dat je 2-factor authenticatie moet gebruiken voor je acount voordat je het panel kan gebruiken', + '2fa_must_be_enabled' => 'De administrator heeft ingesteld dat je 2-factor authenticatie moet gebruiken voor je acount voordat je het paneel kan gebruiken', '2fa_required' => '2-factor authenticatie', 'confirmpassword' => 'Bevestig wachtwoord', - 'emailsent' => 'Je wachtwoord reset email is onderweg.', + 'emailsent' => 'Je wachtwoord herstel e-mail is onderweg.', 'forgot_password' => 'Ik ben mijn wachtwoord vergeten!', - 'not_authorized' => 'U hebt geen toestemming om deze actie uit te voeren.', - 'password_requirements' => 'Paswoorden moeten minstens één kleine letter, één hoofdletter en één numeriek karakter bevatten, het paswoord moet ook minstens 8 karakters lang zijn.', + 'not_authorized' => 'U heeft geen toestemming om deze actie uit te voeren.', + 'password_requirements' => 'Wachtwoorden moeten minstens één kleine letter, één hoofdletter en één numeriek karakter bevatten, het wachtwoord moet ook minstens 8 karakters lang zijn.', 'remember_me' => 'Onthoud mij', - 'resetpassword' => 'Reset wachtwoord', - 'reset_password' => 'Reset account wachtwoord', - 'reset_password_text' => 'Reset uw account wachtwoord.', - 'sendlink' => 'Stuur wachtwoord reset link', - 'throttle' => 'Teveel inlog pogingen. Probeer opnieuw in :seconds seconden.', + 'resetpassword' => 'Herstel wachtwoord', + 'reset_password' => 'Herstel account wachtwoord', + 'reset_password_text' => 'Herstel uw account wachtwoord.', + 'sendlink' => 'Stuur wachtwoord herstel link', + 'throttle' => 'Teveel inlog pogingen. Probeer het opnieuw in :seconds seconden.', ]; diff --git a/resources/lang/nl/base.php b/resources/lang/nl/base.php index 66dcaad7..e600525b 100644 --- a/resources/lang/nl/base.php +++ b/resources/lang/nl/base.php @@ -2,58 +2,57 @@ return [ 'account' => [ - 'current_password' => 'Huidig Paswoord', - 'delete_user' => 'Verwijder Gebruiker', + 'current_password' => 'Huidig Wachtwoord', + 'delete_user' => 'Gebruiker Verwijderen', 'details_updated' => 'Je account details zijn succesvol veranderd', - 'email_password' => 'Email paswoord', + 'email_password' => 'E-mail wachtwoord', 'exception' => 'Er is een fout opgetreden tijdens het veranderen van je account.', 'first_name' => 'Voornaam', 'header' => 'Account Beheer', 'header_sub' => 'Beheer uw account details', - 'invalid_pass' => 'Het opgegeven wachtwoord is niet geldig voor dit account.', - 'invalid_password' => 'Het gegeven wachtwoord voor je account is niet geldig.', + 'invalid_pass' => 'Het opgegeven wachtwoord is ongeldig voor dit account.', + 'invalid_password' => 'Het opgegeven wachtwoord voor je account is ongeldig.', 'last_name' => 'Naam', - 'new_email' => 'Nieuw email adres', - 'new_password' => 'Nieuw Paswoord', + 'new_email' => 'Nieuw e-mail adres', + 'new_password' => 'Nieuw Wachtwoord', 'new_password_again' => 'Herhaal nieuw wachtwoord', - 'totp_apps' => 'U moet een TOTP ondersteunde applicatie hebben (vb Google Authenticator, DUO Mobile, Auth, Enpass) om van deze optie gebruik te kunnen maken.', - 'totp_checkpoint_help' => 'Bevestig aub uw TOTP instellingen door de QR code rechts te scannen met de authenticator applicatie op uw smartphone. Vul vervolgens de 6-delige code, die de applicatie genereerde, in onderstaand veld in. Druk op enter wanneer u klaar bent.', + 'totp_apps' => 'U moet een TOTP ondersteunde applicatie hebben (bijv. Google Authenticator, DUO Mobile, Auth, Enpass) om van deze optie gebruik te kunnen maken.', + 'totp_checkpoint_help' => 'Bevestig a.u.b. uw TOTP instellingen door de QR code rechts te scannen met de authenticator applicatie op uw smartphone. Vul vervolgens de 6-delige code, die de applicatie genereerde, in het onderstaand veld in. Druk op enter wanneer u klaar bent.', 'totp_disable' => 'Schakel 2-delige authenticatie uit.', 'totp_disable_help' => 'Om TOTP uit te schakelen op dit account moet je een geldige TOTP token geven. TOTP bescherming zal uitgeschakeld worden als de token geldig is.', 'totp_enable' => 'Schakel Two-Factor Authentication in', 'totp_enabled' => 'TOTP is nu ingeschakeld op dit account. Klik op de sluit knop om te beëindigen.', 'totp_enabled_error' => 'De opgegeven TOTP token kon niet gevalideerd worden. Probeer het aub nogmaals.', - 'totp_header' => 'Twee-Factor Authenticatie', + 'totp_header' => 'Two-Factor Authenticatie', 'totp_qr' => 'TOTP QR Code', - 'totp_token' => 'TOTP Token -', - 'update_email' => 'Update Email Adres', - 'update_identitity' => 'Update identiteit', - 'update_pass' => 'Werk wachtwoord bij', - 'update_user' => 'Update Gebruiker', - 'username_help' => 'Uw gebruikersnaam moet uniek zijn en mas enkel volgende characters bevatten: :requirements.', + 'totp_token' => 'TOTP Token', + 'update_email' => 'E-mail Adres Bijwerken', + 'update_identitity' => 'Identiteit Bijwerken', + 'update_pass' => 'Wachtwoord Bijwerken', + 'update_user' => 'Gebruiker Bijwerken', + 'username_help' => 'Uw gebruikersnaam moet uniek zijn en mag enkel de volgende characters bevatten: :requirements.', ], 'api' => [ 'index' => [ 'create_new' => 'Creëer nieuwe API sleutel', 'header' => 'API toegang', - 'header_sub' => 'Beheer jouw API keys.', - 'keypair_created' => 'Een API Key-Pair is gegenereerd. Jouw API secret token is :token. Noteer deze code, hij wordt later niet nog een keer weergegeven.', + 'header_sub' => 'Beheer jouw API sleutels.', + 'keypair_created' => 'Een API Key-Pair is gegenereerd. Jouw API geheime token is :token. Noteer deze code, hij wordt later niet nog een keer weergegeven.', 'list' => 'API sleutels', ], 'new' => [ 'allowed_ips' => [ - 'title' => 'Toegestane IPs', + 'title' => 'Toegestane IP\'s', ], 'base' => [ 'title' => 'Basis Informatie', ], 'descriptive_memo' => [ - 'description' => 'Voeg een korte beschrijving over waarvoor deze API key gebruikt zal worden toe.', + 'description' => 'Voeg een korte beschrijving over waarvoor deze API sleutel gebruikt zal worden toe.', 'title' => 'Beschrijvende notitie', ], 'form_title' => 'Details', - 'header' => 'Nieuwe API Key', + 'header' => 'Nieuwe API Sleutel', 'header_sub' => 'Maak een nieuwe API toegangs sleutel', 'node_management' => [ 'delete' => [ @@ -91,7 +90,7 @@ return [ ], 'user_management' => [ 'create' => [ - 'title' => 'Maak gebruiker', + 'title' => 'Gebruiker Aanmaken', ], 'delete' => [ 'description' => 'Geeft toegang tot het verwijderen van een gebruiker', @@ -101,7 +100,7 @@ return [ ], 'title' => 'Gebruikersbeheer', 'update' => [ - 'title' => 'Werk gebruiker bij', + 'title' => 'Gebruiker bijwerken', ], 'view' => [ 'title' => 'Toon gebruiker', @@ -122,9 +121,9 @@ return [ 'security' => [ '2fa_header' => '2-factor authenticatie', '2fa_qr' => 'Configureer 2FA op uw toestel', - 'enable_2fa' => 'Zet 2-Factor Authentication aan', + 'enable_2fa' => 'Zet 2-Factor authenticatie aan', ], 'server_name' => 'Server naam', - 'validation_error' => 'Er is een fout opgetreden tijdens het valideren van de data die u opgegeven hebt.', + 'validation_error' => 'Er is een fout opgetreden tijdens het valideren van de data die u heeft opgegeven.', 'view_as_admin' => 'U bekijkt de server lijst als een administrator. Hierdoor zijn alle servers die geïnstalleerd zijn op het systeem zichtbaar. Alle servers waarvan u de eigenaar bent zijn gemarkeerd met een blauwe bol links van hun naam.', ]; diff --git a/resources/lang/nl/passwords.php b/resources/lang/nl/passwords.php index 836932f1..7a04355d 100644 --- a/resources/lang/nl/passwords.php +++ b/resources/lang/nl/passwords.php @@ -1,7 +1,7 @@ 'Paswoord', + 'password' => 'Wachtwoord', 'sent' => 'We hebben u een wachtwoord herstel link gestuurd!', 'user' => 'We kunnen geen gebruiker vinden met dat e-mail adres.', ]; diff --git a/resources/lang/nl/server.php b/resources/lang/nl/server.php index 34034bef..e231b3d2 100644 --- a/resources/lang/nl/server.php +++ b/resources/lang/nl/server.php @@ -84,7 +84,7 @@ return [ 'description' => 'Staat gebruikers toe om een nieuw bestand aan te maken binnen het paneel.', ], 'create_task' => [ - 'title' => 'Maak een taak', + 'title' => 'Taak aanmaken', ], 'db_header' => 'Database beheer', 'delete_files' => [ @@ -118,10 +118,10 @@ return [ 'title' => 'Plan taak', ], 'reset_db_password' => [ - 'title' => 'Reset database wachtwoord', + 'title' => 'Herstel database wachtwoord', ], 'reset_sftp' => [ - 'title' => 'Reset SFTP wachtwoord', + 'title' => 'Herstel SFTP wachtwoord', ], 'restart' => [ 'title' => 'Herstart server', @@ -141,8 +141,7 @@ return [ 'description' => 'Staat gebruikers toe om bestanden te uploaden via het bestandsbeheer.', ], 'view_databases' => [ - 'title' => 'Geef database details weer -', + 'title' => 'Geef database details weer', ], 'view_schedule' => [ 'title' => 'Bekijk Schema', @@ -170,6 +169,6 @@ return [ ], 'update' => 'Werk sub gebruiker bij', 'user_assigned' => 'De subuser is succesvol toegevoegd aan deze server.', - 'user_updated' => 'Permissies zijn geupdate.', + 'user_updated' => 'Rechten zijn bijgewerkt.', ], ]; diff --git a/resources/lang/nl/strings.php b/resources/lang/nl/strings.php index 5cb7df2c..629c6329 100644 --- a/resources/lang/nl/strings.php +++ b/resources/lang/nl/strings.php @@ -17,7 +17,7 @@ return [ 'created_at' => 'Gecreëerd op', 'data' => 'Bestanden', 'database' => 'Database', - 'email' => 'Email', + 'email' => 'E-mail', 'enabled' => 'Ingeschakeld', 'expires' => 'Verloopt', 'home' => 'Home', @@ -29,7 +29,7 @@ return [ 'next_run' => 'Volgende ronde', 'node' => 'Node', 'none' => 'Geen', - 'password' => 'Paswoord', + 'password' => 'Wachtwoord', 'players' => 'Spelers', 'primary' => 'Primair', 'queued' => 'Wachtrij', diff --git a/resources/lang/nl/validation.php b/resources/lang/nl/validation.php index 08607ad7..6f4ebca1 100644 --- a/resources/lang/nl/validation.php +++ b/resources/lang/nl/validation.php @@ -8,7 +8,7 @@ return [ 'alpha' => 'Het :attribute mag enkel letters bevatten.', 'alpha_dash' => 'De :attribute mag alleen letters, nummers en streepjes bevatten.', 'alpha_num' => 'De :attribute mag alleen letters en nummers bevatten.', - 'email' => 'Email', + 'email' => 'E-mail', 'in' => 'Het geselecteerde :attribute is ongeldig.', 'timezone' => 'Het :attribute moet een geldige tijdszone zijn.', 'totp' => 'De totp token is ongeldig. Is het verlopen?',