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
DOCKER = "y" ;
FOLDER = "html"
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-05-20 03:01:26 -04:00
VER_FALLBACK = "indev-X34" ;
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-05-04 16:01:35 -04:00
# BUILT_FROM_SOURCE="y"; # If you downloaded Blueprint from a release instead of building it, this should be "n".
2023-05-09 11:52:08 -04:00
if [ [ $BUILT_FROM_SOURCE = = "y" ] ] ; then if [ [ ! -f " /var/www/ $FOLDER /.blueprint/.storage/versionschemefix.flag " ] ] ; then sed -E -i "s*&bp.version&*source*g" app/Services/Helpers/BlueprintPlaceholderService.php; touch /var/www/$FOLDER /.blueprint/.storage/versionschemefix.flag; fi ; VERSION = "source" ;
2023-05-04 16:01:35 -04:00
elif [ [ $PM_VERSION = = "([(pterodactylmarket" "_version)])" ] ] ; then
2023-04-24 10:43:31 -04:00
# This runs when the placeholder has not changed, indicating an issue with PterodactylMarket
# or Blueprint being installed from other sources.
2023-05-09 11:52:08 -04:00
if [ [ ! -f " /var/www/ $FOLDER /.blueprint/.storage/versionschemefix.flag " ] ] ; then
2023-04-24 10:43:31 -04:00
sed -E -i " s*&bp.version&* $VER_FALLBACK *g " app/Services/Helpers/BlueprintPlaceholderService.php;
2023-05-09 11:52:08 -04:00
touch /var/www/$FOLDER /.blueprint/.storage/versionschemefix.flag;
2023-04-24 10:43:31 -04:00
fi ;
VERSION = $VER_FALLBACK ;
elif [ [ $PM_VERSION != "([(pterodactylmarket" "_version)])" ] ] ; then
# This runs in case it is possible to use the PterodactylMarket placeholder instead of the
# fallback version.
2023-05-09 11:52:08 -04:00
if [ [ ! -f " /var/www/ $FOLDER /.blueprint/.storage/versionschemefix.flag " ] ] ; then
2023-04-24 10:43:31 -04:00
sed -E -i " s*&bp.version&* $PM_VERSION *g " app/Services/Helpers/BlueprintPlaceholderService.php;
2023-05-09 11:52:08 -04:00
touch /var/www/$FOLDER /.blueprint/.storage/versionschemefix.flag;
2023-04-24 10:43:31 -04:00
fi ;
VERSION = $PM_VERSION ;
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-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-03-03 10:52:29 -05:00
2023-05-06 10:21:22 -04:00
cd /var/www/$FOLDER ;
2023-04-23 15:23:15 -04:00
if [ [ " $@ " = = *"-php" * ] ] ; then
exit 1;
fi ;
2023-04-05 15:26:33 -04:00
export NEWT_COLORS = '
root = ,black
window = black,blue
title = white,blue
border = blue,blue
textbox = white,blue
listbox = white,black
button = white,blue
' ;
error( ) {
whiptail --title " ◆ " --ok-button "ok" --msgbox " Sorry, this operation could not be completed. For troubleshooting, please go to ptero.shop/error.\n\n\" ${ 1 } \" " 15 60;
2023-05-09 12:16:28 -04:00
log_red " ${ 1 } " ;
2023-04-05 15:26:33 -04:00
exit 1;
} ;
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-03-03 10:52:29 -05:00
if dbValidate "blueprint.setupFinished" ; then
2023-05-09 12:16:28 -04:00
log_blue "This command only works if you have yet to install Blueprint. You can run \"\033[1;94mblueprint\033[0m\033[0;34m\" instead." ;
2023-03-22 05:20:59 -04:00
exit 1;
2023-03-03 10:52:29 -05:00
else
2023-05-06 10:21:22 -04:00
if [ [ $DOCKER = = "y" ] ] ; then
2023-05-09 12:16:28 -04:00
log_red "Running Blueprint with Docker may result in issues." ;
2023-05-06 10:21:22 -04:00
fi ;
2023-05-09 15:15:13 -04:00
sed -i " s!&bp.folder&! $FOLDER !g " /var/www/$FOLDER /app/Services/Helpers/BlueprintPlaceholderService.php;
2023-05-06 10:31:31 -04:00
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-05-09 12:16:28 -04:00
log_bright "php artisan down" ;
2023-04-10 10:50:23 -04:00
php artisan down;
2023-05-09 12:16:28 -04:00
log_bright " /var/www/ $FOLDER /public/themes/pterodactyl/css/pterodactyl.css " ;
2023-05-06 10:21:22 -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-05-09 12:16:28 -04:00
log_bright "php artisan view:clear" ;
2023-04-10 10:50:23 -04:00
php artisan view:clear;
2023-03-08 12:35:54 -05:00
2023-05-09 12:16:28 -04:00
log_bright "php artisan config:clear" ;
2023-04-10 10:50:23 -04:00
php artisan config:clear;
2023-03-06 13:11:53 -05:00
2023-03-08 12:35:54 -05:00
2023-05-09 12:16:28 -04:00
log_bright "php artisan migrate" ;
2023-04-10 10:50:23 -04:00
php artisan migrate;
2023-04-08 10:14:36 -04:00
2023-05-09 12:16:28 -04:00
log_bright " chown -R www-data:www-data /var/www/ $FOLDER /* " ;
2023-05-06 10:21:22 -04:00
chown -R www-data:www-data /var/www/$FOLDER /*;
2023-03-06 13:11:53 -05:00
2023-05-09 12:16:28 -04:00
log_bright " chown -R www-data:www-data /var/www/ $FOLDER /.* " ;
2023-05-06 10:21:22 -04:00
chown -R www-data:www-data /var/www/$FOLDER /.*;
2023-04-10 10:50:23 -04:00
2023-05-30 05:27:02 -04:00
log_bright "rm .blueprint/.development/.hello.txt" ;
rm .blueprint/.development/.hello.txt;
2023-05-09 12:16:28 -04:00
log_bright "php artisan up" ;
2023-04-10 10:50:23 -04:00
php artisan up;
2023-03-19 15:20:01 -04:00
2023-05-09 12:16:28 -04:00
log_blue "\n\nBlueprint should now be installed. If something didn't work as expected, please let us know at discord.gg/CUwHwv6xRe." ;
2023-04-10 11:13:28 -04:00
2023-03-03 11:00:03 -05:00
dbAdd "blueprint.setupFinished" ;
2023-03-22 05:20:59 -04:00
exit 1;
2023-03-03 10:52:29 -05:00
fi ;
2023-03-19 15:20:01 -04:00
fi ;
2023-04-02 15:12:21 -04:00
if [ [ ( $2 = = "-i" ) || ( $2 = = "-install" ) ] ] ; then
2023-04-14 11:19:15 -04:00
if [ [ $( expr $# - 2) != 1 ] ] ; then error " Expected 1 argument but got $( expr $# - 2) . " ; fi ;
2023-05-17 03:55:16 -04:00
if [ [ $3 = = "test␀" ] ] ; then
dev = true;
n = "dev" ;
mkdir .blueprint/.storage/tmp/dev;
2023-05-30 05:31:53 -04:00
cp -R .blueprint/.development/* .blueprint/.storage/tmp/dev/;
2023-05-17 03:55:16 -04:00
else
dev = false;
n = $3 ;
FILE = $n ".blueprint"
if [ [ ! -f " $FILE " ] ] ; then error " $FILE could not be found. " ; fi ;
ZIP = $n ".zip" ;
cp $FILE .blueprint/.storage/tmp/$ZIP ;
cd .blueprint/.storage/tmp;
2023-04-14 11:19:15 -04:00
unzip $ZIP ;
rm $ZIP ;
2023-05-17 03:55:16 -04:00
if [ [ ! -f " $n /* " ] ] ; then
cd ..;
rm -R tmp;
mkdir tmp;
cd tmp;
mkdir ./$n ;
cp ../../$FILE ./$n /$ZIP ;
cd $n ;
unzip $ZIP ;
rm $ZIP ;
cd ..;
fi ;
2023-04-12 12:10:45 -04:00
fi ;
2023-04-17 10:54:12 -04:00
2023-05-06 10:21:22 -04:00
cd /var/www/$FOLDER ;
2023-03-22 05:20:59 -04:00
2023-05-17 03:55:16 -04:00
eval $( parse_yaml .blueprint/.storage/tmp/$n /conf.yml)
if [ [ $dev ] ] ; then
mv .blueprint/.storage/tmp/$n .blueprint/.storage/tmp/$identifier ;
n = $identifier ;
fi ;
2023-03-27 15:17:57 -04:00
2023-04-18 04:07:55 -04:00
if [ [ $flags != *"-placeholders.skip;" * ] ] ; then
2023-05-17 03:55:16 -04:00
DIR = .blueprint/.storage/tmp/$n /*;
2023-04-17 10:54:12 -04:00
# ^#version#^ = version
# ^#author#^ = author
2023-05-21 08:09:32 -04:00
# ^#identifier#^ = identifier
2023-04-17 10:54:12 -04:00
2023-05-30 12:24:27 -04:00
if [ [ $flags = = *"-disable_az_placeholders;" * ] ] ; then
SKIPAZPLACEHOLDERS = true;
echo "A-Z placeholders will be skipped due to the '-disable_az_placeholders;' flag." ;
else
SKIPAZPLACEHOLDERS = false;
fi ;
2023-04-17 10:54:12 -04:00
for f in $DIR ; do
sed -i " s~^#version#^~ $version ~g " $f ;
sed -i " s~^#author#^~ $author ~g " $f ;
2023-05-21 08:09:32 -04:00
sed -i " s~^#identifier#^~ $identifier ~g " $f ;
2023-05-30 12:24:27 -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 ;
fi ;
2023-04-18 04:07:55 -04:00
echo " Done placeholders in ' $f '. " ;
2023-04-17 10:54:12 -04:00
done ;
2023-04-18 04:07:55 -04:00
else echo "-placeholders.skip;" ; fi ;
2023-04-17 10:54:12 -04:00
2023-05-17 03:55:16 -04:00
if [ [ $name = = "" ] ] ; then rm -R .blueprint/.storage/tmp/$n ; error "'name' is a required option." ; fi ;
if [ [ $identifier = = "" ] ] ; then rm -R .blueprint/.storage/tmp/$n ; error "'identifier' is a required option." ; fi ;
if [ [ $description = = "" ] ] ; then rm -R .blueprint/.storage/tmp/$n ; error "'description' is a required option." ; fi ;
if [ [ $version = = "" ] ] ; then rm -R .blueprint/.storage/tmp/$n ; error "'version' is a required option." ; fi ;
if [ [ $target = = "" ] ] ; then rm -R .blueprint/.storage/tmp/$n ; error "'target' is a required option." ; fi ;
if [ [ $icon = = "" ] ] ; then rm -R .blueprint/.storage/tmp/$n ; error "'icon' is a required option." ; fi ;
2023-03-27 15:17:57 -04:00
2023-05-21 08:36:26 -04:00
if [ [ $datafolder_directory = = "" ] ] ; then log "Datafolder left blank, skipping.." ; fi ;
2023-05-30 05:36:39 -04:00
if [ [ $controller_location = = "" ] ] ; then log "Controller location left blank, using default controller instead.." ; controller_type = "default" ; fi ;
2023-05-17 03:55:16 -04:00
if [ [ $view_location = = "" ] ] ; then rm -R .blueprint/.storage/tmp/$n ; error "'view_location' is a required option." ; fi ;
2023-04-12 11:04:15 -04:00
2023-05-09 12:16:28 -04:00
if [ [ $target != $VERSION ] ] ; then log_red " This extension is built for version $target , but your version is $VERSION . " ; fi ;
2023-05-17 03:55:16 -04:00
if [ [ $identifier != $n ] ] ; then rm -R .blueprint/.storage/tmp/$n ; error "The extension identifier should be exactly the same as your .blueprint file (just without the .blueprint). This may be subject to change, but is currently required." ; fi ;
if [ [ $identifier = = "blueprint" ] ] ; then rm -R .blueprint/.storage/tmp/$n ; error "The operation could not be completed since the extension is attempting to overwrite internal files." ; fi ;
2023-04-01 07:20:25 -04:00
2023-04-18 11:01:41 -04:00
if [ [ $identifier = ~ [ a-z] ] ] ; then echo "ok" ;
2023-05-17 03:55:16 -04:00
else rm -R .blueprint/.storage/tmp/$n ; error "The extension identifier should be lowercase and only contain characters a-z." ; fi ;
2023-03-22 05:20:59 -04:00
2023-05-17 03:55:16 -04:00
if [ [ ! -f " .blueprint/.storage/tmp/ $n / $icon " ] ] ; then rm -R .blueprint/.storage/tmp/$n ; error "The 'icon' path points to a nonexisting file." ; fi ;
2023-04-14 11:19:15 -04:00
2023-04-12 11:04:15 -04:00
if [ [ $migrations_directory != "" ] ] ; then
2023-04-01 06:59:27 -04:00
if [ [ $migrations_enabled = = "yes" ] ] ; then
2023-05-17 03:55:16 -04:00
cp -R .blueprint/.storage/tmp/$n /$migrations_directory /* database/migrations/ 2> /dev/null;
2023-04-01 06:59:27 -04:00
elif [ [ $migrations_enabled = = "no" ] ] ; then
2023-04-18 04:07:55 -04:00
echo "ok" ;
2023-03-27 14:52:24 -04:00
else
2023-05-17 03:55:16 -04:00
rm -R .blueprint/.storage/tmp/$n ;
2023-04-17 10:11:33 -04:00
error "If defined, migrations_enabled should only be 'yes' or 'no'." ;
fi ;
fi ;
if [ [ $css_location != "" ] ] ; then
if [ [ $css_enabled = = "yes" ] ] ; then
INJECTCSS = true;
elif [ [ $css_enabled = = "no" ] ] ; then
2023-04-18 04:07:55 -04:00
echo "ok" ;
2023-04-17 10:11:33 -04:00
else
2023-05-17 03:55:16 -04:00
rm -R .blueprint/.storage/tmp/$n ;
2023-04-17 10:11:33 -04:00
error "If defined, css_enabled should only be 'yes' or 'no'." ;
2023-03-27 14:52:24 -04:00
fi ;
2023-03-26 12:19:10 -04:00
fi ;
2023-04-12 11:04:15 -04:00
if [ [ $adminrequests_directory != "" ] ] ; then
if [ [ $adminrequests_enabled = = "yes" ] ] ; then
mkdir app/Http/Requests/Admin/Extensions/$identifier ;
2023-05-17 03:55:16 -04:00
cp -R .blueprint/.storage/tmp/$n /$adminrequests_directory /* app/Http/Requests/Admin/Extensions/$identifier / 2> /dev/null;
2023-04-12 11:04:15 -04:00
elif [ [ $adminrequests_enabled = = "no" ] ] ; then
2023-04-18 04:07:55 -04:00
echo "ok" ;
2023-04-12 11:04:15 -04:00
else
2023-05-17 03:55:16 -04:00
rm -R .blueprint/.storage/tmp/$n ;
2023-04-17 10:11:33 -04:00
error "If defined, adminrequests_enabled should only be 'yes' or 'no'." ;
2023-04-12 11:04:15 -04:00
fi ;
fi ;
2023-04-01 06:58:23 -04:00
if [ [ $publicfiles_directory != "" ] ] ; then
if [ [ $publicfiles_enabled = = "yes" ] ] ; then
2023-04-12 11:04:15 -04:00
mkdir public/extensions/$identifier ;
2023-05-17 03:55:16 -04:00
cp -R .blueprint/.storage/tmp/$n /$publicfiles_directory /* public/extensions/$identifier / 2> /dev/null;
2023-04-01 06:58:23 -04:00
elif [ [ $publicfiles_enabled = = "no" ] ] ; then
2023-04-18 04:07:55 -04:00
echo "ok" ;
2023-03-31 07:27:57 -04:00
else
2023-05-17 03:55:16 -04:00
rm -R .blueprint/.storage/tmp/$n ;
2023-04-17 10:11:33 -04:00
error "If defined, publicfiles_enabled should only be 'yes' or 'no'." ;
2023-03-31 07:27:57 -04:00
fi ;
fi ;
2023-05-10 06:10:58 -04:00
cp -R .blueprint/.storage/defaults/extensions/admin.default .blueprint/.storage/defaults/extensions/admin.default.bak 2> /dev/null;
2023-04-01 06:58:23 -04:00
if [ [ $controller_type != "" ] ] ; then
if [ [ $controller_type = = "default" ] ] ; then
2023-05-10 06:10:58 -04:00
cp -R .blueprint/.storage/defaults/extensions/controller.default .blueprint/.storage/defaults/extensions/controller.default.bak 2> /dev/null;
2023-04-01 06:58:23 -04:00
elif [ [ $controller_type = = "custom" ] ] ; then
2023-04-14 11:19:15 -04:00
echo "ok" ;
2023-03-27 14:48:39 -04:00
else
2023-05-17 03:55:16 -04:00
rm -R .blueprint/.storage/tmp/$n ;
2023-04-17 10:11:33 -04:00
error "If defined, controller_type should only be 'default' or 'custom'." ;
2023-03-27 14:48:39 -04:00
fi ;
2023-03-26 12:19:10 -04:00
fi ;
2023-05-10 06:10:58 -04:00
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;
2023-03-26 09:19:39 -04:00
2023-05-21 09:10:43 -04:00
mkdir .blueprint/.storage/extensiondata/$identifier ;
if [ [ $datafolder_directory != "" ] ] ; then
cp -R .blueprint/.storage/tmp/$n /$datafolder_directory /* .blueprint/.storage/extensiondata/$identifier /;
fi ;
2023-03-26 09:10:04 -04:00
mkdir public/assets/extensions/$identifier ;
2023-05-17 03:55:16 -04:00
cp .blueprint/.storage/tmp/$n /$icon public/assets/extensions/$identifier /icon.jpg;
2023-03-26 11:24:30 -04:00
ICON = " /assets/extensions/ $identifier /icon.jpg " ;
2023-05-17 03:55:16 -04:00
CONTENT = $( cat .blueprint/.storage/tmp/$n /$view_location ) ;
2023-03-22 05:20:59 -04:00
2023-04-17 10:11:33 -04:00
if [ [ $INJECTCSS = = true ] ] ; 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-05-17 03:55:16 -04:00
cp -R .blueprint/.storage/tmp/$n /$css_location /* public/assets/extensions/$identifier /$identifier .style.css 2> /dev/null;
2023-04-17 10:11:33 -04:00
fi ;
2023-05-09 12:16:28 -04:00
if [ [ $name = = *"~" * ] ] ; then log_red "'name' contains '~' and may result in an error." ; fi ;
if [ [ $description = = *"~" * ] ] ; then log_red "'description' contains '~' and may result in an error." ; fi ;
if [ [ $version = = *"~" * ] ] ; then log_red "'version' contains '~' and may result in an error." ; fi ;
if [ [ $CONTENT = = *"~" * ] ] ; then log_red "'CONTENT' contains '~' and may result in an error." ; fi ;
if [ [ $ICON = = *"~" * ] ] ; then log_red "'ICON' contains '~' and may result in an error." ; fi ;
if [ [ $identifier = = *"~" * ] ] ; then log_red "'identifier' contains '~' and may result in an error." ; fi ;
2023-04-14 11:19:15 -04:00
2023-05-10 06:10:58 -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;
2023-03-26 11:24:30 -04:00
2023-05-10 06:10:58 -04:00
sed -i " s~␀description␀~ $description ~g " .blueprint/.storage/defaults/extensions/admin.default.bak;
2023-03-26 11:24:30 -04:00
2023-05-10 06:10:58 -04:00
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;
2023-03-26 11:24:30 -04:00
2023-05-10 06:10:58 -04:00
sed -i " s~␀icon␀~ $ICON ~g " .blueprint/.storage/defaults/extensions/admin.default.bak;
2023-03-26 11:24:30 -04:00
2023-05-10 06:10:58 -04:00
sed -i " s~␀content␀~ $CONTENT ~g " .blueprint/.storage/defaults/extensions/admin.default.bak;
2023-03-22 05:20:59 -04:00
2023-04-01 06:58:23 -04:00
if [ [ $controller_type != "custom" ] ] ; then
2023-05-10 06:10:58 -04:00
sed -i " s~␀id␀~ $identifier ~g " .blueprint/.storage/defaults/extensions/controller.default.bak;
2023-03-26 12:19:10 -04:00
fi ;
2023-05-10 06:10:58 -04:00
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;
2023-03-26 09:19:39 -04:00
2023-05-10 06:10:58 -04:00
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-04-01 06:58:23 -04:00
if [ [ $controller_type != "custom" ] ] ; then
2023-05-10 06:10:58 -04:00
ADMINCONTROLLER_RESULT = $( cat .blueprint/.storage/defaults/extensions/controller.default.bak) ;
2023-03-26 12:19:10 -04:00
fi ;
2023-03-26 09:27:37 -04:00
ADMINCONTROLLER_NAME = $identifier "ExtensionController.php" ;
2023-03-26 09:10:04 -04:00
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;
2023-03-22 05:20:59 -04:00
2023-03-26 09:27:37 -04:00
mkdir app/Http/Controllers/Admin/Extensions/$identifier ;
touch app/Http/Controllers/Admin/Extensions/$identifier /$ADMINCONTROLLER_NAME ;
2023-04-01 06:58:23 -04:00
if [ [ $controller_type != "custom" ] ] ; then
2023-03-26 12:19:10 -04:00
echo $ADMINCONTROLLER_RESULT > app/Http/Controllers/Admin/Extensions/$identifier /$ADMINCONTROLLER_NAME ;
2023-04-01 06:58:23 -04:00
else
2023-05-17 03:55:16 -04:00
cp .blueprint/.storage/tmp/$n /$controller_location app/Http/Controllers/Admin/Extensions/$identifier /$ADMINCONTROLLER_NAME ;
2023-03-26 12:19:10 -04:00
fi ;
2023-03-26 09:27:37 -04:00
2023-04-12 12:10:45 -04:00
if [ [ $controller_type = = "custom" ] ] ; then
2023-05-17 03:55:16 -04:00
cp .blueprint/.storage/tmp/$n /$controller_location app/Http/Controllers/Admin/Extensions/$identifier /${ identifier } ExtensionController.php;
2023-04-12 12:10:45 -04:00
fi ;
2023-03-26 11:24:30 -04:00
echo $ADMINROUTE_RESULT >> routes/admin.php;
2023-04-14 11:19:15 -04:00
sed -i " s~<!--␀replace␀-->~ $ADMINBUTTON_RESULT \n<!--␀replace␀-->~g " resources/views/admin/extensions.blade.php;
2023-03-26 09:35:47 -04:00
2023-05-10 06:10:58 -04:00
rm .blueprint/.storage/defaults/extensions/admin.default.bak;
2023-04-01 06:58:23 -04:00
if [ [ $controller_type != "custom" ] ] ; then
2023-05-10 06:10:58 -04:00
rm .blueprint/.storage/defaults/extensions/controller.default.bak;
2023-03-26 12:19:10 -04:00
fi ;
2023-05-10 06:10:58 -04:00
rm .blueprint/.storage/defaults/extensions/route.default.bak;
rm .blueprint/.storage/defaults/extensions/button.default.bak;
2023-05-17 03:55:16 -04:00
rm -R .blueprint/.storage/tmp/$n ;
2023-03-27 15:17:57 -04:00
2023-05-09 12:16:28 -04:00
if [ [ $author = = "blueprint" ] ] ; then log_blue "Please refrain from setting the author variable to 'blueprint', thanks!" ; fi ;
if [ [ $author = = "Blueprint" ] ] ; then log_blue "Please refrain from setting the author variable to 'Blueprint', thanks!" ; fi ;
2023-04-10 11:13:28 -04:00
2023-05-30 13:02:05 -04:00
chmod -R +x .blueprint/.storage/extensiondata/$identifier /*;
2023-05-21 09:24:43 -04:00
if [ [ $flags = = *"-run.afterinstall;" * ] ] ; then
if [ [ $( whoami) = = "root" ] ] ; then
log_red "Custom extension installation script will not be ran as root for safety reasons. Running as 'www:data' instead.."
sudo -u www:data .blueprint/.storage/extensiondata/$identifier /install.sh;
else
log_red "Running custom extension installation script.."
bash .blueprint/.storage/extensiondata/$identifier /install.sh;
fi ;
fi ;
2023-05-09 12:16:28 -04:00
log_blue " \n\n $identifier should now be installed. If something didn't work as expected, please let us know at discord.gg/CUwHwv6xRe. " ;
2023-03-22 05:20:59 -04:00
fi ;
2023-05-04 16:01:35 -04:00
if [ [ ( $2 = = "help" ) || ( $2 = = "-help" ) || ( $2 = = "--help" ) ] ] ; then
2023-05-30 05:15:36 -04:00
echo -e " -i [name] install a blueprint extension" "
2023-05-04 16:01:35 -04:00
" " -v get the current blueprint version""
2023-05-17 03:55:16 -04:00
" " -init initialize extension development files ( experimental) ""
" " -test run an installation on your extension development files ( experimental) ""
2023-05-29 14:33:01 -04:00
" " -export export your extension development files ( experimental) ""
2023-05-04 16:01:35 -04:00
" " -reinstall rerun the blueprint installation script" ;
2023-03-27 15:17:57 -04:00
fi ;
2023-04-02 15:12:21 -04:00
if [ [ ( $2 = = "-v" ) || ( $2 = = "-version" ) ] ] ; then
2023-03-27 15:17:57 -04:00
echo -e $VERSION ;
2023-04-10 10:50:23 -04:00
fi ;
2023-05-04 16:01:35 -04:00
if [ [ $2 = = "-init" ] ] ; then
2023-05-17 03:55:16 -04:00
log_red "This is an experimental feature, proceed with caution." ;
2023-05-15 09:52:14 -04:00
2023-05-30 05:01:53 -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-05-12 03:59:31 -04:00
2023-05-15 09:41:53 -04:00
log "Validating.." ;
if [ [ $ASKIDENTIFIER = ~ [ a-z] ] ] ; then echo "ok" > /dev/null; else log "Identifier should only contain a-z characters." ; exit 1; fi ;
2023-05-12 03:59:31 -04:00
2023-05-11 15:12:03 -04:00
log "Copying init defaults to tmp.." ;
2023-05-30 05:22:41 -04:00
mkdir .blueprint/.storage/tmp/init;
cp -R .blueprint/.storage/defaults/init/* .blueprint/.storage/tmp/init/;
2023-05-11 15:12:03 -04:00
log "Applying variables.."
2023-05-30 05:22:41 -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-05-15 09:52:14 -04:00
icnNUM = $( expr 1 + $RANDOM % 3) ;
2023-05-30 05:22:41 -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;
2023-05-15 09:41:53 -04:00
2023-05-15 09:52:14 -04:00
# Return files to folder.
2023-05-30 05:30:02 -04:00
cp -R .blueprint/.storage/tmp/init/* .blueprint/.development/;
2023-05-11 15:12:03 -04:00
# Remove tmp files
2023-05-30 05:22:41 -04:00
rm -R .blueprint/.storage/tmp;
mkdir .blueprint/.storage/tmp;
2023-05-15 09:52:14 -04:00
2023-05-17 03:55:16 -04:00
log "Your extension files have been generated and exported to '.blueprint/.development'." ;
fi ;
if [ [ $2 = = "-test" ] ] ; then
log_red "This is an experimental feature, proceed with caution." ;
log "Attempting to install extension files located in '.blueprint/.development'." ;
blueprint -i test␀;
2023-05-04 16:01:35 -04:00
fi ;
2023-05-29 14:33:01 -04:00
if [ [ $2 = = "-export" ] ] ; then
log_red "This is an experimental feature, proceed with caution." ;
log "Attempting to export extension files located in '.blueprint/.development'." ;
cd .blueprint
zip .storage/tmp/blueprint.zip .development/*
mv .storage/tmp/blueprint.zip ../extension.blueprint;
log "Extension files should be exported into your Pterodactyl directory now. Some versions of Blueprint may require your identifier to match the filename (excluding the .blueprint extension). You'll need to do this manually." ;
fi ;
2023-04-10 10:50:23 -04:00
if [ [ $2 = = "-reinstall" ] ] ; then
dbRemove "blueprint.setupFinished" ;
2023-05-06 10:21:22 -04:00
cd /var/www/$FOLDER ;
2023-04-10 10:50:23 -04:00
bash blueprint.sh;
2023-05-20 03:01:26 -04:00
fi ;