2023-03-03 10:52:29 -05:00
#!/bin/bash
2023-05-06 10:31:31 -04:00
# This should allow Blueprint to run in docker. Please note that changing the $FOLDER variable after running
# the Blueprint installation script will not change anything in any files besides blueprint.sh.
2023-05-06 10:21:22 -04:00
FOLDER = "pterodactyl"
if [ [ -f ".dockerenv" ] ] ; then
2023-06-02 10:37:38 -04:00
DOCKER = "y" ;
FOLDER = "html"
2023-05-06 10:21:22 -04:00
fi ;
2023-04-24 10:43:31 -04:00
# If the fallback version below does not match your downloaded version, please let us know.
2023-06-12 11:45:03 -04:00
VER_FALLBACK = "alpha-ML7" ;
2023-04-24 10:43:31 -04:00
2023-05-06 10:21:22 -04:00
# This will be automatically replaced by some marketplaces, if not, $VER_FALLBACK will be used as fallback.
2023-04-24 10:43:31 -04:00
PM_VERSION = "([(pterodactylmarket_version)])" ;
2023-05-09 11:45:02 -04:00
if [ [ -d " /var/www/ $FOLDER /blueprint " ] ] ; then mv /var/www/$FOLDER /blueprint /var/www/$FOLDER /.blueprint; fi ;
2023-04-25 13:33:21 -04:00
2023-06-02 09:00:08 -04:00
if [ [ $PM_VERSION = = "([(pterodactylmarket" "_version)])" ] ] ; then
2023-06-02 10:37:38 -04:00
# This runs when the placeholder has not changed, indicating an issue with PterodactylMarket
# or Blueprint being installed from other sources.
if [ [ ! -f " /var/www/ $FOLDER /.blueprint/.storage/versionschemefix.flag " ] ] ; then
sed -E -i " s*&bp.version&* $VER_FALLBACK *g " app/Services/Helpers/BlueprintPlaceholderService.php;
sed -E -i " s*@version* $VER_FALLBACK *g " public/extensions/blueprint/index.html;
touch /var/www/$FOLDER /.blueprint/.storage/versionschemefix.flag;
fi ;
VERSION = $VER_FALLBACK ;
2023-04-24 10:43:31 -04:00
elif [ [ $PM_VERSION != "([(pterodactylmarket" "_version)])" ] ] ; then
2023-06-02 10:37:38 -04:00
# This runs in case it is possible to use the PterodactylMarket placeholder instead of the
# fallback version.
if [ [ ! -f " /var/www/ $FOLDER /.blueprint/.storage/versionschemefix.flag " ] ] ; then
sed -E -i " s*&bp.version&* $PM_VERSION *g " app/Services/Helpers/BlueprintPlaceholderService.php;
sed -E -i " s*@version* $PM_VERSION *g " public/extensions/blueprint/index.html;
touch /var/www/$FOLDER /.blueprint/.storage/versionschemefix.flag;
fi ;
VERSION = $PM_VERSION ;
2023-04-24 10:43:31 -04:00
fi ;
2023-05-09 11:59:12 -04:00
# Fix for Blueprint's bash database to work with docker and custom folder installations.
sed -i " s!&bp.folder&! $FOLDER !g " /var/www/$FOLDER /.blueprint/lib/db.sh;
2023-06-18 10:37:46 -04:00
cd /var/www/$FOLDER ; # Automatically navigate to the Pterodactyl directory when running the script.
# Import libraries.
2023-03-19 16:02:29 -04:00
source .blueprint/lib/bash_colors.sh;
2023-03-22 05:47:43 -04:00
source .blueprint/lib/parse_yaml.sh;
2023-03-22 04:28:14 -04:00
source .blueprint/lib/db.sh;
2023-06-18 12:32:02 -04:00
source .blueprint/lib/telemetry.sh;
2023-03-03 10:52:29 -05:00
2023-06-18 10:37:46 -04:00
# -exec
2023-06-18 12:32:02 -04:00
if [ [ " $2 " = = *"-exec" * ] ] ; then
# Update the telemetry id to argument.
if [ [ $3 = = "key" ] ] ; then
echo " $4 " > .blueprint/.storage/telemetry_id;
fi ;
2023-06-18 14:13:12 -04:00
# Developer tool to test telemetry.
if [ [ $3 = = "helloworld" ] ] ; then
sendTelemetry "HELLO_WORLD" ;
fi ;
2023-06-02 10:37:38 -04:00
exit 1;
2023-04-23 15:23:15 -04:00
fi ;
2023-06-18 10:37:46 -04:00
# Function that exits the script after logging a "red" message.
2023-06-10 09:46:36 -04:00
quit_red( ) {
2023-06-02 10:37:38 -04:00
log_red " ${ 1 } " ;
exit 1;
2023-04-05 15:26:33 -04:00
} ;
2023-06-18 10:37:46 -04:00
# Adds the "blueprint" command to the /usr/local/bin directory and configures the correct permissions for it.
2023-04-02 14:47:24 -04:00
touch /usr/local/bin/blueprint > /dev/null;
2023-05-06 10:21:22 -04:00
echo -e " #!/bin/bash\nbash /var/www/ $FOLDER /blueprint.sh -bash \$@; " > /usr/local/bin/blueprint;
chmod u+x /var/www/$FOLDER /blueprint.sh > /dev/null;
2023-04-02 14:47:24 -04:00
chmod u+x /usr/local/bin/blueprint > /dev/null;
2023-03-23 06:54:40 -04:00
if [ [ $1 != "-bash" ] ] ; then
2023-06-02 10:37:38 -04:00
if dbValidate "blueprint.setupFinished" ; then
2023-06-15 05:44:33 -04:00
log_yellow "[WARNING] This command only works if you have yet to install Blueprint. Run 'blueprint (cmd) [arg]' instead." ;
2023-06-02 10:37:38 -04:00
exit 1;
else
2023-06-10 08:52:00 -04:00
if [ [ $1 != "--post-upgrade" ] ] ; then
log " ██\n██ ██\n ████\n" ;
if [ [ $DOCKER = = "y" ] ] ; then
2023-06-15 05:56:11 -04:00
log_yellow "[WARNING] While running Blueprint with docker is supported, you may run into some issues. Report problems you find at ptero.shop/issue." ;
2023-06-10 08:52:00 -04:00
fi ;
2023-06-02 10:37:38 -04:00
fi ;
2023-05-06 10:21:22 -04:00
2023-06-02 10:37:38 -04:00
sed -i " s!&bp.folder&! $FOLDER !g " /var/www/$FOLDER /app/Services/Helpers/BlueprintPlaceholderService.php;
sed -i " s!&bp.folder&! $FOLDER !g " /var/www/$FOLDER /resources/views/layouts/admin.blade.php;
2023-05-06 10:21:22 -04:00
2023-06-17 07:28:26 -04:00
# Put application into maintenance.
2023-06-10 08:52:00 -04:00
log_bright "[INFO] php artisan down" ;
2023-06-02 10:37:38 -04:00
php artisan down;
2023-04-10 10:50:23 -04:00
2023-06-17 07:28:26 -04:00
# Inject custom Blueprint css into Pterodactyl's admin panel.
2023-06-10 08:52:00 -04:00
log_bright " [INFO] /var/www/ $FOLDER /public/themes/pterodactyl/css/pterodactyl.css " ;
2023-06-02 10:37:38 -04:00
sed -i "s!@import 'checkbox.css';!@import 'checkbox.css';\n@import url(/assets/extensions/blueprint/blueprint.style.css);\n/* blueprint reserved line */!g" /var/www/$FOLDER /public/themes/pterodactyl/css/pterodactyl.css;
2023-03-06 13:11:53 -05:00
2023-06-10 08:52:00 -04:00
log_bright "[INFO] php artisan view:clear" ;
2023-06-02 10:37:38 -04:00
php artisan view:clear;
2023-03-08 12:35:54 -05:00
2023-06-10 08:52:00 -04:00
log_bright "[INFO] php artisan config:clear" ;
2023-06-02 10:37:38 -04:00
php artisan config:clear;
2023-03-06 13:11:53 -05:00
2023-03-08 12:35:54 -05:00
2023-06-17 07:28:26 -04:00
# Run migrations if Blueprint is not upgrading.
2023-06-10 08:52:00 -04:00
if [ [ $1 != "--post-upgrade" ] ] ; then
log_bright "[INFO] php artisan migrate" ;
php artisan migrate;
fi ;
2023-04-08 10:14:36 -04:00
2023-06-10 08:52:00 -04:00
log_bright " [INFO] chown -R www-data:www-data /var/www/ $FOLDER /* " ;
2023-06-02 10:37:38 -04:00
chown -R www-data:www-data /var/www/$FOLDER /*;
2023-03-06 13:11:53 -05:00
2023-06-10 08:52:00 -04:00
log_bright " [INFO] chown -R www-data:www-data /var/www/ $FOLDER /.* " ;
2023-06-02 10:37:38 -04:00
chown -R www-data:www-data /var/www/$FOLDER /.*;
2023-04-10 10:50:23 -04:00
2023-06-10 08:52:00 -04:00
log_bright "[INFO] rm .blueprint/.development/.hello.txt" ;
2023-06-02 10:37:38 -04:00
rm .blueprint/.development/.hello.txt;
2023-05-30 05:27:02 -04:00
2023-06-17 07:28:26 -04:00
# Put application into production.
2023-06-10 08:52:00 -04:00
log_bright "[INFO] php artisan up" ;
2023-06-02 10:37:38 -04:00
php artisan up;
2023-03-19 15:20:01 -04:00
2023-06-10 08:52:00 -04:00
if [ [ $1 != "--post-upgrade" ] ] ; then
2023-06-15 05:56:11 -04:00
log_green "\n\n[SUCCESS] Blueprint should now be installed. If something didn't work as expected, please let us know at ptero.shop/issue." ;
2023-06-10 08:52:00 -04:00
fi ;
2023-04-10 11:13:28 -04:00
2023-06-02 10:37:38 -04:00
dbAdd "blueprint.setupFinished" ;
exit 1;
fi ;
2023-03-19 15:20:01 -04:00
fi ;
2023-06-18 10:37:46 -04:00
# -i, -install
2023-04-02 15:12:21 -04:00
if [ [ ( $2 = = "-i" ) || ( $2 = = "-install" ) ] ] ; then
2023-06-10 08:52:00 -04:00
log_bright "[INFO] Always make sure you place your extensions in the Pterodactyl directory, else Blueprint won't be able to find them!" ;
2023-06-05 14:45:31 -04:00
2023-06-10 09:46:36 -04:00
if [ [ $( expr $# - 2) != 1 ] ] ; then quit_red " [FATAL] Expected 1 argument but got $( expr $# - 2) . " ; fi ;
2023-06-02 10:37:38 -04:00
if [ [ $3 = = "test␀" ] ] ; then
dev = true;
n = "dev" ;
mkdir .blueprint/.storage/tmp/dev;
cp -R .blueprint/.development/* .blueprint/.storage/tmp/dev/;
else
dev = false;
n = $3 ;
FILE = $n ".blueprint"
2023-06-10 09:46:36 -04:00
if [ [ ! -f " $FILE " ] ] ; then quit_red " [FATAL] $FILE could not be found. " ; fi ;
2023-06-02 10:37:38 -04:00
ZIP = $n ".zip" ;
cp $FILE .blueprint/.storage/tmp/$ZIP ;
cd .blueprint/.storage/tmp;
unzip $ZIP ;
rm $ZIP ;
if [ [ ! -f " $n /* " ] ] ; then
cd ..;
rm -R tmp;
mkdir tmp;
cd tmp;
mkdir ./$n ;
2023-06-05 14:34:20 -04:00
cp ../../../$FILE ./$n /$ZIP ;
2023-06-02 10:37:38 -04:00
cd $n ;
unzip $ZIP ;
rm $ZIP ;
cd ..;
2023-04-12 12:10:45 -04:00
fi ;
2023-06-02 10:37:38 -04:00
fi ;
2023-04-17 10:54:12 -04:00
2023-06-18 10:37:46 -04:00
# Return to the Pterodactyl installation folder.
2023-06-02 10:37:38 -04:00
cd /var/www/$FOLDER ;
2023-03-22 05:20:59 -04:00
2023-06-17 07:28:26 -04:00
# Get all strings from the conf.yml file and make them accessible as variables.
2023-06-02 10:37:38 -04:00
eval $( parse_yaml .blueprint/.storage/tmp/$n /conf.yml)
2023-06-17 07:28:26 -04:00
# Add aliases for the info config values to make working with them easier.
2023-06-11 14:58:20 -04:00
name = $info_name ;
2023-06-11 15:12:40 -04:00
identifier = $info_identifier ;
2023-06-11 14:58:20 -04:00
description = $info_description ;
flags = $info_flags ;
version = $info_version ;
target = $info_target ;
author = $info_author ;
icon = $info_icon ;
2023-05-17 03:55:16 -04:00
2023-06-02 10:37:38 -04:00
if [ [ $dev ] ] ; then
mv .blueprint/.storage/tmp/$n .blueprint/.storage/tmp/$identifier ;
n = $identifier ;
fi ;
2023-03-26 12:19:10 -04:00
2023-06-02 10:37:38 -04:00
if [ [ $flags != *"-placeholders.skip;" * ] ] ; then
DIR = .blueprint/.storage/tmp/$n /*;
2023-03-26 09:19:39 -04:00
2023-06-02 10:37:38 -04:00
if [ [ $flags = = *"-disable_az_placeholders;" * ] ] ; then
SKIPAZPLACEHOLDERS = true;
2023-06-10 08:52:00 -04:00
log_bright "[INFO] A-Z placeholders will be skipped due to the '-disable_az_placeholders;' flag." ;
2023-06-02 10:37:38 -04:00
else
SKIPAZPLACEHOLDERS = false;
2023-05-21 09:10:43 -04:00
fi ;
2023-06-02 10:37:38 -04:00
for f in $( find $DIR -type f -exec echo { } \; ) ; do
sed -i " s~\^#version#\^~ $version ~g " $f ;
sed -i " s~\^#author#\^~ $author ~g " $f ;
sed -i " s~\^#identifier#\^~ $identifier ~g " $f ;
sed -i " s~\^#path#\^~/var/www/ $FOLDER ~g " $f ;
sed -i " s~\^#datapath#\^~/var/www/ $FOLDER /.blueprint/.storage/extensiondata/ $identifier ~g " $f ;
2023-04-17 10:11:33 -04:00
2023-06-02 10:37:38 -04:00
if [ [ $SKIPAZPLACEHOLDERS != true ] ] ; then
sed -i " s~bpversionreplace~ $version ~g " $f ;
sed -i " s~bpauthorreplace~ $author ~g " $f ;
sed -i " s~bpidentifierreplace~ $identifier ~g " $f ;
sed -i " s~bppathreplace~/var/www/ $FOLDER ~g " $f ;
sed -i " s~bpdatapathreplace~/var/www/ $FOLDER /.blueprint/.storage/extensiondata/ $identifier ~g " $f ;
fi ;
2023-04-14 11:19:15 -04:00
2023-06-10 08:52:00 -04:00
log_bright " [INFO] Done placeholders in ' $f '. " ;
2023-06-02 10:37:38 -04:00
done ;
2023-03-26 11:24:30 -04:00
2023-06-10 08:52:00 -04:00
else log_bright "[INFO] Placeholders will be skipped due to the '-placeholders.skip;' flag." ; fi ;
2023-03-22 05:20:59 -04:00
2023-06-11 15:03:15 -04:00
if [ [ $name = = "" ] ] ; then rm -R .blueprint/.storage/tmp/$n ; quit_red "[FATAL] 'info_name' is a required configuration option." ; fi ;
if [ [ $identifier = = "" ] ] ; then rm -R .blueprint/.storage/tmp/$n ; quit_red "[FATAL] 'info_identifier' is a required configuration option." ; fi ;
if [ [ $description = = "" ] ] ; then rm -R .blueprint/.storage/tmp/$n ; quit_red "[FATAL] 'info_description' is a required configuration option." ; fi ;
if [ [ $version = = "" ] ] ; then rm -R .blueprint/.storage/tmp/$n ; quit_red "[FATAL] 'info_version' is a required configuration option." ; fi ;
if [ [ $target = = "" ] ] ; then rm -R .blueprint/.storage/tmp/$n ; quit_red "[FATAL] 'info_target' is a required configuration option." ; fi ;
if [ [ $icon = = "" ] ] ; then rm -R .blueprint/.storage/tmp/$n ; quit_red "[FATAL] 'info_icon' is a required configuration option." ; fi ;
2023-06-11 14:58:20 -04:00
if [ [ $admin_controller = = "" ] ] ; then log_bright "[INFO] Admin controller field left blank, using default controller instead.." ;
controller_type = "default" ; else controller_type = "custom" ; fi ;
if [ [ $admin_view = = "" ] ] ; then rm -R .blueprint/.storage/tmp/$n ; quit_red "[FATAL] 'admin_view' is a required configuration option." ; fi ;
2023-06-10 08:52:00 -04:00
if [ [ $target != $VERSION ] ] ; then log_yellow " [WARNING] This extension is built for version $target , but your version is $VERSION . " ; fi ;
2023-06-10 09:46:36 -04:00
if [ [ $identifier != $n ] ] ; then rm -R .blueprint/.storage/tmp/$n ; quit_red "[FATAL] The extension file name must be the same as your identifier. (example: identifier.blueprint)" ; fi ;
if [ [ $identifier = = "blueprint" ] ] ; then rm -R .blueprint/.storage/tmp/$n ; quit_red "[FATAL] Extensions can not have the identifier 'blueprint'." ; fi ;
2023-03-22 05:20:59 -04:00
2023-06-10 08:52:00 -04:00
if [ [ $identifier = ~ [ a-z] ] ] ; then log_bright "[INFO] Identifier a-z checks passed." ;
2023-06-10 09:46:36 -04:00
else rm -R .blueprint/.storage/tmp/$n ; quit_red "[FATAL] The extension identifier should be lowercase and only contain characters a-z." ; fi ;
2023-06-10 08:52:00 -04:00
if [ [ ! -f " .blueprint/.storage/tmp/ $n / $icon " ] ] ; then
2023-06-11 15:03:15 -04:00
rm -R .blueprint/.storage/tmp/$n ; quit_red "[FATAL] The 'info_icon' path points to a file that does not exist." ; fi ;
2023-04-01 06:58:23 -04:00
2023-06-11 14:58:20 -04:00
if [ [ $database_migrations != "" ] ] ; then
cp -R .blueprint/.storage/tmp/$n /$database_migrations /* database/migrations/ 2> /dev/null;
2023-06-02 10:37:38 -04:00
fi ;
2023-03-26 09:27:37 -04:00
2023-06-11 14:58:20 -04:00
if [ [ $css != "" ] ] ; then
INJECTCSS = "y" ;
2023-06-02 10:37:38 -04:00
fi ;
2023-06-11 14:58:20 -04:00
if [ [ $admin_requests != "" ] ] ; then
mkdir app/Http/Requests/Admin/Extensions/$identifier ;
cp -R .blueprint/.storage/tmp/$n /$admin_requests /* app/Http/Requests/Admin/Extensions/$identifier / 2> /dev/null;
2023-06-02 10:37:38 -04:00
fi ;
2023-06-11 14:58:20 -04:00
if [ [ $data_public != "" ] ] ; then
mkdir public/extensions/$identifier ;
cp -R .blueprint/.storage/tmp/$n /$data_public /* public/extensions/$identifier / 2> /dev/null;
2023-06-02 10:37:38 -04:00
fi ;
cp -R .blueprint/.storage/defaults/extensions/admin.default .blueprint/.storage/defaults/extensions/admin.default.bak 2> /dev/null;
2023-06-11 14:58:20 -04:00
if [ [ $admin_controller = = "" ] ] ; then # use default controller when admin_controller is left blank
cp -R .blueprint/.storage/defaults/extensions/controller.default .blueprint/.storage/defaults/extensions/controller.default.bak 2> /dev/null;
2023-06-02 10:37:38 -04:00
fi ;
cp -R .blueprint/.storage/defaults/extensions/route.default .blueprint/.storage/defaults/extensions/route.default.bak 2> /dev/null;
cp -R .blueprint/.storage/defaults/extensions/button.default .blueprint/.storage/defaults/extensions/button.default.bak 2> /dev/null;
mkdir .blueprint/.storage/extensiondata/$identifier ;
2023-06-11 14:58:20 -04:00
if [ [ $data_directory != "" ] ] ; then
cp -R .blueprint/.storage/tmp/$n /$data_directory /* .blueprint/.storage/extensiondata/$identifier /;
2023-06-02 10:37:38 -04:00
fi ;
mkdir public/assets/extensions/$identifier ;
cp .blueprint/.storage/tmp/$n /$icon public/assets/extensions/$identifier /icon.jpg;
ICON = " /assets/extensions/ $identifier /icon.jpg " ;
2023-06-11 14:58:20 -04:00
CONTENT = $( cat .blueprint/.storage/tmp/$n /$admin_view ) ;
2023-06-02 10:37:38 -04:00
if [ [ $INJECTCSS = = "y" ] ] ; then
sed -i " s!/* blueprint reserved line */!/* blueprint reserved line */\n@import url(/assets/extensions/ $identifier / $identifier .style.css);!g " public/themes/pterodactyl/css/pterodactyl.css;
2023-06-11 14:58:20 -04:00
cp -R .blueprint/.storage/tmp/$n /$css /* public/assets/extensions/$identifier /$identifier .style.css 2> /dev/null;
2023-06-02 10:37:38 -04:00
fi ;
2023-06-10 08:52:00 -04:00
if [ [ $name = = *"~" * ] ] ; then log_yellow "[WARNING] 'name' contains '~' and may result in an error." ; fi ;
if [ [ $description = = *"~" * ] ] ; then log_yellow "[WARNING] 'description' contains '~' and may result in an error." ; fi ;
if [ [ $version = = *"~" * ] ] ; then log_yellow "[WARNING] 'version' contains '~' and may result in an error." ; fi ;
if [ [ $CONTENT = = *"~" * ] ] ; then log_yellow "[WARNING] 'CONTENT' contains '~' and may result in an error." ; fi ;
if [ [ $ICON = = *"~" * ] ] ; then log_yellow "[WARNING] 'ICON' contains '~' and may result in an error." ; fi ;
if [ [ $identifier = = *"~" * ] ] ; then log_yellow "[WARNING] 'identifier' contains '~' and may result in an error." ; fi ;
2023-06-02 10:37:38 -04:00
sed -i " s~␀title␀~ $name ~g " .blueprint/.storage/defaults/extensions/admin.default.bak;
sed -i " s~␀name␀~ $name ~g " .blueprint/.storage/defaults/extensions/admin.default.bak;
sed -i " s~␀breadcrumb␀~ $name ~g " .blueprint/.storage/defaults/extensions/admin.default.bak;
sed -i " s~␀name␀~ $name ~g " .blueprint/.storage/defaults/extensions/button.default.bak;
sed -i " s~␀description␀~ $description ~g " .blueprint/.storage/defaults/extensions/admin.default.bak;
sed -i " s~␀version␀~ $version ~g " .blueprint/.storage/defaults/extensions/admin.default.bak;
sed -i " s~␀version␀~ $version ~g " .blueprint/.storage/defaults/extensions/button.default.bak;
sed -i " s~␀icon␀~ $ICON ~g " .blueprint/.storage/defaults/extensions/admin.default.bak;
echo -e " $CONTENT \n@endsection " >> .blueprint/.storage/defaults/extensions/admin.default.bak;
2023-06-11 14:58:20 -04:00
if [ [ $admin_controller = = "" ] ] ; then
2023-06-02 10:37:38 -04:00
sed -i " s~␀id␀~ $identifier ~g " .blueprint/.storage/defaults/extensions/controller.default.bak;
fi ;
sed -i " s~␀id␀~ $identifier ~g " .blueprint/.storage/defaults/extensions/route.default.bak;
sed -i " s~␀id␀~ $identifier ~g " .blueprint/.storage/defaults/extensions/button.default.bak;
ADMINVIEW_RESULT = $( cat .blueprint/.storage/defaults/extensions/admin.default.bak) ;
ADMINROUTE_RESULT = $( cat .blueprint/.storage/defaults/extensions/route.default.bak) ;
ADMINBUTTON_RESULT = $( cat .blueprint/.storage/defaults/extensions/button.default.bak) ;
2023-06-11 14:58:20 -04:00
if [ [ $admin_controller = = "" ] ] ; then
2023-06-02 10:37:38 -04:00
ADMINCONTROLLER_RESULT = $( cat .blueprint/.storage/defaults/extensions/controller.default.bak) ;
fi ;
ADMINCONTROLLER_NAME = $identifier "ExtensionController.php" ;
mkdir resources/views/admin/extensions/$identifier ;
touch resources/views/admin/extensions/$identifier /index.blade.php;
echo $ADMINVIEW_RESULT > resources/views/admin/extensions/$identifier /index.blade.php;
mkdir app/Http/Controllers/Admin/Extensions/$identifier ;
touch app/Http/Controllers/Admin/Extensions/$identifier /$ADMINCONTROLLER_NAME ;
2023-06-11 14:58:20 -04:00
if [ [ $admin_controller = = "" ] ] ; then
2023-06-02 10:37:38 -04:00
echo $ADMINCONTROLLER_RESULT > app/Http/Controllers/Admin/Extensions/$identifier /$ADMINCONTROLLER_NAME ;
else
2023-06-11 14:58:20 -04:00
cp .blueprint/.storage/tmp/$n /$admin_controller app/Http/Controllers/Admin/Extensions/$identifier /$ADMINCONTROLLER_NAME ;
2023-06-02 10:37:38 -04:00
fi ;
2023-06-11 14:58:20 -04:00
if [ [ $admin_controller != "" ] ] ; then
cp .blueprint/.storage/tmp/$n /$admin_controller app/Http/Controllers/Admin/Extensions/$identifier /${ identifier } ExtensionController.php;
2023-06-02 10:37:38 -04:00
fi ;
echo $ADMINROUTE_RESULT >> routes/admin.php;
sed -i " s~<!--␀replace␀-->~ $ADMINBUTTON_RESULT \n<!--␀replace␀-->~g " resources/views/admin/extensions.blade.php;
rm .blueprint/.storage/defaults/extensions/admin.default.bak;
2023-06-11 14:58:20 -04:00
if [ [ $admin_controller = = "" ] ] ; then
2023-06-02 10:37:38 -04:00
rm .blueprint/.storage/defaults/extensions/controller.default.bak;
fi ;
rm .blueprint/.storage/defaults/extensions/route.default.bak;
rm .blueprint/.storage/defaults/extensions/button.default.bak;
rm -R .blueprint/.storage/tmp/$n ;
2023-06-11 14:58:20 -04:00
if [ [ $database_migrations != "" ] ] ; then
2023-06-10 08:52:00 -04:00
log_bright "[INFO] This extension comes with migrations. If you get prompted, answer 'yes'.\n" ;
2023-06-02 10:37:38 -04:00
php artisan migrate;
fi ;
chmod -R +x .blueprint/.storage/extensiondata/$identifier /*;
if [ [ $flags = = *"-run.afterinstall;" * ] ] ; then
2023-06-10 08:52:00 -04:00
log_yellow "[WARNING] This extension uses a custom installation script, proceed with caution."
2023-06-02 10:37:38 -04:00
bash .blueprint/.storage/extensiondata/$identifier /install.sh;
fi ;
2023-06-15 05:56:11 -04:00
log_green " \n\n[SUCCESS] $identifier should now be installed. If something didn't work as expected, please let us know at ptero.shop/issue. " ;
2023-06-18 14:13:12 -04:00
sendTelemetry "FINISH_EXTENSION_INSTALLATION" ;
2023-03-22 05:20:59 -04:00
fi ;
2023-06-18 10:37:46 -04:00
# help, -help, --help
2023-05-04 16:01:35 -04:00
if [ [ ( $2 = = "help" ) || ( $2 = = "-help" ) || ( $2 = = "--help" ) ] ] ; then
2023-06-12 09:49:55 -04:00
echo -e " -install [name] install a blueprint extension" "
" " -version get the current blueprint version""
2023-06-10 10:09:12 -04:00
" " -init initialize extension development files""
" " -build run an installation on your extension development files""
2023-06-01 14:41:36 -04:00
" " -export export your extension development files ( experimental) ""
2023-06-15 05:56:11 -04:00
" " -runinstall rerun the blueprint installation script ( advanced) ""
" " -upgrade ( dev) update/reset to a newer pre-release version ( advanced) " ;
2023-03-27 15:17:57 -04:00
fi ;
2023-06-18 10:37:46 -04:00
# -v, -version
2023-04-02 15:12:21 -04:00
if [ [ ( $2 = = "-v" ) || ( $2 = = "-version" ) ] ] ; then
2023-06-02 10:37:38 -04:00
echo -e $VERSION ;
2023-04-10 10:50:23 -04:00
fi ;
2023-06-18 10:37:46 -04:00
# -init
2023-05-04 16:01:35 -04:00
if [ [ $2 = = "-init" ] ] ; then
2023-06-02 10:37:38 -04:00
echo "Name (Generic Extension):" ; read ASKNAME;
echo "Identifier (genericextension):" ; read ASKIDENTIFIER;
echo "Description (My awesome description):" ; read ASKDESCRIPTION;
echo "Version (indev):" ; read ASKVERSION;
echo "Author (prplwtf):" ; read ASKAUTHOR;
2023-06-10 08:52:00 -04:00
log_bright "[INFO] Running validation checks.." ;
if [ [ $ASKIDENTIFIER = ~ [ a-z] ] ] ; then log_bright "[INFO] Identifier a-z checks passed." > /dev/null;
2023-06-10 09:46:36 -04:00
else quit_red "[FATAL] Identifier should only contain a-z characters." ; fi ;
2023-06-02 10:37:38 -04:00
2023-06-10 08:52:00 -04:00
log_bright "[INFO] Copying init defaults to tmp directory.." ;
2023-06-02 10:37:38 -04:00
mkdir .blueprint/.storage/tmp/init;
cp -R .blueprint/.storage/defaults/init/* .blueprint/.storage/tmp/init/;
2023-06-10 08:52:00 -04:00
log_bright "[INFO] Applying variables.."
2023-06-02 10:37:38 -04:00
sed -i " s~␀name␀~ $ASKNAME ~g " .blueprint/.storage/tmp/init/conf.yml; #NAME
sed -i " s~␀identifier␀~ $ASKIDENTIFIER ~g " .blueprint/.storage/tmp/init/conf.yml; #IDENTIFIER
sed -i " s~␀description␀~ $ASKDESCRIPTION ~g " .blueprint/.storage/tmp/init/conf.yml; #DESCRIPTION
sed -i " s~␀ver␀~ $ASKVERSION ~g " .blueprint/.storage/tmp/init/conf.yml; #VERSION
sed -i " s~␀author␀~ $ASKAUTHOR ~g " .blueprint/.storage/tmp/init/conf.yml; #AUTHOR
2023-06-12 11:45:03 -04:00
icnNUM = $( expr 1 + $RANDOM % 4) ;
2023-06-02 10:37:38 -04:00
sed -i " s~␀num␀~ $icnNUM ~g " .blueprint/.storage/tmp/init/conf.yml;
sed -i " s~␀version␀~ $VERSION ~g " .blueprint/.storage/tmp/init/conf.yml;
# Return files to folder.
2023-06-10 08:52:00 -04:00
log_bright "[INFO] Copying output to .development directory."
2023-06-02 10:37:38 -04:00
cp -R .blueprint/.storage/tmp/init/* .blueprint/.development/;
2023-06-10 08:52:00 -04:00
# Remove tmp files.
log_bright "[INFO] Purging tmp files."
2023-06-02 10:37:38 -04:00
rm -R .blueprint/.storage/tmp;
mkdir .blueprint/.storage/tmp;
2023-06-10 08:52:00 -04:00
log_green "[SUCCESS] Your extension files have been generated and exported to '.blueprint/.development'." ;
2023-05-17 03:55:16 -04:00
fi ;
2023-06-18 10:37:46 -04:00
# -build, -test
2023-06-01 14:41:36 -04:00
if [ [ ( $2 = = "-build" ) || ( $2 = = "-test" ) ] ] ; then
2023-06-02 10:37:38 -04:00
if [ [ $2 = = "-test" ] ] ; then
2023-06-10 09:46:36 -04:00
quit_red "[FATAL] -test has been removed in alpha-T0R and up, please use -build instead." ;
2023-06-02 10:37:38 -04:00
fi
2023-06-10 09:46:36 -04:00
log_bright "[INFO] Installing development extension files.." ;
2023-06-02 10:37:38 -04:00
blueprint -i test␀;
2023-06-10 09:46:36 -04:00
log_bright "[INFO] Extension installation ends here, if there are any errors during installation, fix them and try again." ;
2023-05-04 16:01:35 -04:00
fi ;
2023-05-29 14:33:01 -04:00
if [ [ $2 = = "-export" ] ] ; then
2023-06-10 08:52:00 -04:00
log_yellow "[WARNING] This is an experimental feature, proceed with caution." ;
log_bright "[INFO] Exporting extension files located in '.blueprint/.development'." ;
2023-05-29 14:33:01 -04:00
2023-06-02 10:37:38 -04:00
cd .blueprint
2023-06-11 15:30:16 -04:00
eval $( parse_yaml .development/conf.yml)
mkdir .storage/tmp/$info_identifier
mv .development/* .storage/tmp/$info_identifier /
zip .storage/tmp/blueprint.zip .storage/tmp/$info_identifier
mv .storage/tmp/blueprint.zip ../$info_identifier .blueprint;
2023-05-29 14:33:01 -04:00
2023-06-11 15:30:16 -04:00
log_bright "[INFO] Extension files should be exported into your Pterodactyl directory now." ;
2023-05-29 14:33:01 -04:00
fi ;
2023-06-18 10:37:46 -04:00
# -runinstall
2023-06-15 05:56:11 -04:00
if [ [ $2 = = "-runinstall" ] ] ; then
log_yellow "[WARNING] This is an advanced feature, only proceed if you know what you are doing.\n"
2023-06-02 10:37:38 -04:00
dbRemove "blueprint.setupFinished" ;
cd /var/www/$FOLDER ;
bash blueprint.sh;
2023-05-20 03:01:26 -04:00
fi ;
2023-06-01 15:25:15 -04:00
2023-06-18 10:37:46 -04:00
# -upgrade
2023-06-01 15:25:15 -04:00
if [ [ $2 = = "-upgrade" ] ] ; then
2023-06-15 05:56:11 -04:00
log_yellow "[WARNING] This is an advanced feature, only proceed if you know what you are doing.\n" ;
2023-06-02 10:37:38 -04:00
2023-06-12 10:30:27 -04:00
if [ [ $3 = = "dev" ] ] ; then
log_yellow "[WARNING] Upgrading to the latest dev build will update Blueprint to an unstable work-in-progress preview of the next version. Continue? (y/N)" ;
read YN1;
if [ [ ( $YN1 != "y" ) && ( $YN1 != "Y" ) ] ] ; then log_bright "[INFO] Upgrade cancelled." ; exit 1; fi ;
fi ;
2023-06-10 08:52:00 -04:00
log_yellow "[WARNING] Upgrading will wipe your .blueprint folder and will overwrite your extensions. Continue? (y/N)" ;
read YN2;
if [ [ ( $YN2 != "y" ) && ( $YN2 != "Y" ) ] ] ; then log_bright "[INFO] Upgrade cancelled." ; exit 1; fi ;
log_yellow "[WARNING] This is the last warning before upgrading/wiping Blueprint. Type 'continue' to continue, all other input will be taken as 'no'." ;
read YN3;
if [ [ $YN3 != "continue" ] ] ; then log_bright "[INFO] Upgrade cancelled." ; exit 1; fi ;
log_bright "[INFO] Blueprint is upgrading.. Please do not turn off your machine." ;
2023-06-12 10:30:27 -04:00
if [ [ $3 = = "dev" ] ] ; then
bash tools/update.sh /var/www/$FOLDER dev
else
bash tools/update.sh /var/www/$FOLDER
fi ;
2023-06-12 10:35:15 -04:00
rm -R tools/tmp/main;
2023-06-10 08:52:00 -04:00
log_bright "[INFO] Files have been upgraded, running installation script.." ;
chmod +x blueprint.sh;
bash blueprint.sh --post-upgrade;
2023-06-12 09:56:29 -04:00
log_bright "[INFO] Database migrations are skipped when upgrading, run them anyways? (Y/n)" ;
2023-06-10 08:52:00 -04:00
read YN4;
if [ [ ( $YN4 = = "y" ) || ( $YN4 = = "Y" ) ] ] ; then
log_bright "[INFO] Running database migrations.." ;
php artisan migrate;
else
log_bright "[INFO] Database migrations have been skipped." ;
fi ;
2023-06-12 09:21:38 -04:00
2023-06-10 08:52:00 -04:00
log_bright "[INFO] Running post-upgrade checks.." ;
score = 0;
2023-06-12 09:21:38 -04:00
2023-06-10 08:52:00 -04:00
if dbValidate "blueprint.setupFinished" ; then
score = $(( score+1)) ;
else
log_yellow "[WARNING] 'blueprint.setupFinished' could not be found." ;
fi ;
2023-06-12 09:21:38 -04:00
2023-06-10 08:52:00 -04:00
if [ [ $score = = 1 ] ] ; then
log_green "[SUCCESS] Blueprint has upgraded successfully." ;
elif [ [ $score = = 0 ] ] ; then
log_red "[FATAL] Upgrading has failed."
else
log_yellow "[WARNING] Some post-upgrade checks have failed."
2023-06-02 10:37:38 -04:00
fi ;
2023-06-02 16:01:47 -04:00
fi ;