2023-03-03 10:52:29 -05:00
#!/bin/bash
2023-11-28 12:31:26 -05:00
# blueprint.zip
2023-06-26 08:42:31 -04:00
# github.com/teamblueprint/main
# prpl.wtf
2023-08-11 18:00:23 -04:00
# This should allow Blueprint to run in Docker. Please note that changing the $FOLDER variable after running
2023-05-06 10:31:31 -04:00
# the Blueprint installation script will not change anything in any files besides blueprint.sh.
2023-08-31 12:00:27 -04:00
FOLDER = "/var/www/pterodactyl" #;
2023-05-06 10:21:22 -04:00
2023-11-23 10:03:03 -05:00
# If the version below does not match your downloaded version, please let us know.
2024-01-06 17:45:34 -05:00
VERSION = "alpha-SLX"
2023-08-27 10:01:36 -04:00
2023-08-31 12:13:44 -04:00
# Allow non-default Pterodactyl installation folders.
if [ [ $_FOLDER != "" ] ] ; then
2023-11-08 10:01:39 -05:00
if [ [ ( ! -f " $FOLDER /.blueprint/extensions/blueprint/private/db/version " ) && ( $FOLDER = = "/var/www/pterodactyl" ) ] ] ; then
2023-12-22 11:51:20 -05:00
sed -i -E " s|FOLDER=\"/var/www/pterodactyl\" #;|FOLDER=\" $_FOLDER \" #;|g " " $_FOLDER " /blueprint.sh
2023-08-31 12:19:27 -04:00
else
echo "Variable cannot be replaced right now."
2024-01-15 11:40:12 -05:00
exit 2
2023-08-31 12:19:27 -04:00
fi
2023-08-31 12:13:44 -04:00
fi
2023-12-15 13:43:57 -05:00
# Check for panels that are using Docker, which should have better support in the future.
2023-11-28 11:40:08 -05:00
if [ [ -f "/.dockerenv" ] ] ; then
2023-08-15 06:23:40 -04:00
DOCKER = "y"
2023-07-04 08:28:19 -04:00
else
2023-08-15 06:23:40 -04:00
DOCKER = "n"
fi
2023-05-06 10:21:22 -04:00
2023-08-15 06:23:40 -04:00
if [ [ -d " $FOLDER /blueprint " ] ] ; then mv $FOLDER /blueprint $FOLDER /.blueprint; fi
2023-04-25 13:33:21 -04:00
2023-11-23 10:03:03 -05:00
if [ [ $VERSION != "" ] ] ; then
# This function makes sure some placeholders get replaced with the current Blueprint version.
2023-11-08 10:01:39 -05:00
if [ [ ! -f " $FOLDER /.blueprint/extensions/blueprint/private/db/version " ] ] ; then
2024-01-01 12:09:04 -05:00
sed -E -i " s*::v* $VERSION *g " $FOLDER /app/BlueprintFramework/Services/PlaceholderService/BlueprintPlaceholderService.php
sed -E -i " s*::v* $VERSION *g " $FOLDER /.blueprint/extensions/blueprint/public/index.html
2023-11-08 10:01:39 -05:00
touch $FOLDER /.blueprint/extensions/blueprint/private/db/version
2023-08-15 06:23:40 -04:00
fi
fi
2023-04-24 10:43:31 -04:00
2023-10-31 10:35:14 -04:00
# Write environment variables.
export BLUEPRINT__FOLDER = $FOLDER
export BLUEPRINT__VERSION = $VERSION
2023-12-22 10:06:02 -05:00
export BLUEPRINT__DEBUG = " $FOLDER " /.blueprint/extensions/blueprint/private/debug/logs.txt
2023-11-01 09:51:42 -04:00
export NODE_OPTIONS = --openssl-legacy-provider
2023-08-15 06:23:40 -04:00
# Automatically navigate to the Pterodactyl directory when running the core.
2023-11-23 09:52:16 -05:00
cd $FOLDER || return
2023-05-09 11:59:12 -04:00
2023-06-18 10:37:46 -04:00
# Import libraries.
2023-12-22 08:31:31 -05:00
source .blueprint/lib/bash_colors.sh || missinglibs += "[bash_colors]"
source .blueprint/lib/parse_yaml.sh || missinglibs += "[parse_yaml]"
source .blueprint/lib/db.sh || missinglibs += "[db]"
source .blueprint/lib/telemetry.sh || missinglibs += "[telemetry]"
source .blueprint/lib/updateAdminCacheReminder.sh || missinglibs += "[updateAdminCacheReminder]"
source .blueprint/lib/grabenv.sh || missinglibs += "[grabenv]"
source .blueprint/lib/throwError.sh || missinglibs += "[throwError]"
2024-01-14 18:43:11 -05:00
source .blueprint/lib/logFormat.sh || missinglibs += "[logFormat]"
2023-03-03 10:52:29 -05:00
2023-08-06 07:41:56 -04:00
# Fallback to these functions if "bash_colors.sh" is missing
2023-12-22 08:31:31 -05:00
if [ [ $missinglibs = = *"[bash_colors]" * ] ] ; then
2023-08-15 06:23:40 -04:00
log_reset( ) { echo -e " $1 " ; }
log_reset_underline( ) { echo -e " $1 " ; }
log_reset_reverse( ) { echo -e " $1 " ; }
log_default( ) { echo -e " $1 " ; }
log_defaultb ( ) { echo -e " $1 " ; }
log_bold( ) { echo -e " $1 " ; }
log_bright( ) { echo -e " $1 " ; }
log_underscore( ) { echo -e " $1 " ; }
log_reverse( ) { echo -e " $1 " ; }
log_black( ) { echo -e " $1 " ; }
log_red( ) { echo -e " $1 " ; }
log_green( ) { echo -e " $1 " ; }
log_brown( ) { echo -e " $1 " ; }
log_blue( ) { echo -e " $1 " ; }
log_magenta( ) { echo -e " $1 " ; }
log_cyan( ) { echo -e " $1 " ; }
log_white( ) { echo -e " $1 " ; }
log_yellow( ) { echo -e " $1 " ; }
log_blackb( ) { echo -e " $1 " ; }
log_redb( ) { echo -e " $1 " ; }
log_greenb( ) { echo -e " $1 " ; }
log_brownb( ) { echo -e " $1 " ; }
log_blueb( ) { echo -e " $1 " ; }
log_magentab( ) { echo -e " $1 " ; }
log_cyanb( ) { echo -e " $1 " ; }
log_whiteb( ) { echo -e " $1 " ; }
log_yellowb( ) { echo -e " $1 " ; }
fi
2023-08-06 07:41:56 -04:00
2023-07-16 14:22:59 -04:00
# -config
# usage: "cITEM=VALUE bash blueprint.sh -config"
if [ [ " $1 " = = "-config" ] ] ; then
2023-06-27 15:49:11 -04:00
2023-07-16 14:22:59 -04:00
# cTELEMETRY_ID
# Update the telemetry id.
2023-12-17 06:51:06 -05:00
if [ [ " $cTELEMETRY_ID " != "" ] ] ; then
2023-11-08 10:01:39 -05:00
echo " $cTELEMETRY_ID " > .blueprint/extensions/blueprint/private/db/telemetry_id
2023-08-15 06:23:40 -04:00
fi
2023-06-27 15:49:11 -04:00
2023-08-07 09:50:54 -04:00
# cDEVELOPER
# Enable/Disable developer mode.
2023-12-17 06:51:06 -05:00
if [ [ " $cDEVELOPER " != "" ] ] ; then
if [ [ " $cDEVELOPER " = = "true" ] ] ; then
2023-11-01 09:51:42 -04:00
dbAdd "blueprint.developerEnabled"
else
dbRemove "blueprint.developerEnabled"
fi
2023-08-15 06:23:40 -04:00
fi
2023-08-07 09:50:54 -04:00
2023-08-15 06:23:40 -04:00
echo .
2024-01-15 11:40:12 -05:00
exit 0
2023-08-15 06:23:40 -04:00
fi
2023-04-23 15:23:15 -04:00
2023-08-06 07:41:56 -04:00
2023-06-18 10:37:46 -04:00
# Function that exits the script after logging a "red" message.
2023-11-24 11:00:08 -05:00
throw( ) { throwError " $1 " ; exit 1; }
2023-08-06 07:41:56 -04:00
2023-04-05 15:26:33 -04:00
2023-07-31 05:14:32 -04:00
depend( ) {
2023-09-11 10:29:38 -04:00
# Check for incorrect node version.
nodeVer = $( node -v)
if [ [ $nodeVer != "v17." * ] ] && [ [ $nodeVer != "v18." * ] ] && [ [ $nodeVer != "v19." * ] ] && [ [ $nodeVer != "v20." * ] ] && [ [ $nodeVer != "v21." * ] ] ; then DEPEND_MISSING = true; fi
2023-12-22 08:31:31 -05:00
# Check for required (both internal and external) dependencies.
if \
! [ -x " $( command -v unzip) " ] || # unzip
! [ -x " $( command -v node) " ] || # node
! [ -x " $( command -v yarn) " ] || # yarn
! [ -x " $( command -v zip) " ] || # zip
! [ -x " $( command -v curl) " ] || # curl
! [ -x " $( command -v php) " ] || # php
! [ -x " $( command -v git) " ] || # git
! [ -x " $( command -v grep) " ] || # grep
! [ -x " $( command -v sed) " ] || # sed
! [ -x " $( command -v awk) " ] || # awk
! [ " $( ls "node_modules/" *"cross-env" * 2> /dev/null) " ] || # cross-env
2024-01-09 05:27:13 -05:00
! [ " $( ls "node_modules/" *"webpack" * 2> /dev/null) " ] || # webpack
2024-01-09 05:29:02 -05:00
! [ " $( ls "node_modules/" *"react" * 2> /dev/null) " ] || # react
2023-12-22 08:31:31 -05:00
[ [ $missinglibs != "" ] ] ; then # internal
DEPEND_MISSING = true
fi
2023-08-18 12:29:01 -04:00
# Exit when missing dependencies.
2023-09-11 10:23:49 -04:00
if [ [ $DEPEND_MISSING = = true ] ] ; then
2024-01-14 18:43:11 -05:00
PRINT FATAL "Some framework dependencies are not installed or detected."
2023-09-11 10:23:49 -04:00
2023-12-22 08:31:31 -05:00
if [ [ $nodeVer != "v18." * ] ] && [ [ $nodeVer != "v19." * ] ] && [ [ $nodeVer != "v20." * ] ] && [ [ $nodeVer != "v21." * ] ] ; then log_red " - \"node\" ( $nodeVer ) is an unsupported version. " ; fi
2024-01-14 18:43:11 -05:00
if ! [ -x " $( command -v unzip) " ] ; then PRINT FATAL "Required dependency \"unzip\" is not installed or detected." ; fi
if ! [ -x " $( command -v node) " ] ; then PRINT FATAL "Required dependency \"node\" is not installed or detected." ; fi
if ! [ -x " $( command -v yarn) " ] ; then PRINT FATAL "Required dependency \"yarn\" is not installed or detected." ; fi
if ! [ -x " $( command -v zip) " ] ; then PRINT FATAL "Required dependency \"zip\" is not installed or detected." ; fi
if ! [ -x " $( command -v curl) " ] ; then PRINT FATAL "Required dependency \"curl\" is not installed or detected." ; fi
if ! [ -x " $( command -v php) " ] ; then PRINT FATAL "Required dependency \"php\" is not installed or detected." ; fi
if ! [ -x " $( command -v git) " ] ; then PRINT FATAL "Required dependency \"git\" is not installed or detected." ; fi
if ! [ -x " $( command -v grep) " ] ; then PRINT FATAL "Required dependency \"grep\" is not installed or detected." ; fi
if ! [ -x " $( command -v sed) " ] ; then PRINT FATAL "Required dependency \"sed\" is not installed or detected." ; fi
if ! [ -x " $( command -v awk) " ] ; then PRINT FATAL "Required dependency \"awk\" is not installed or detected." ; fi
if ! [ " $( ls "node_modules/" *"cross-env" * 2> /dev/null) " ] ; then PRINT FATAL "Required dependency \"cross-env\" is not installed or detected." ; fi
if ! [ " $( ls "node_modules/" *"webpack" * 2> /dev/null) " ] ; then PRINT FATAL "Required dependency \"webpack\" is not installed or detected." ; fi
if ! [ " $( ls "node_modules/" *"react" * 2> /dev/null) " ] ; then PRINT FATAL "Required dependency \"react\" is not installed or detected." ; fi
if [ [ $missinglibs = = *"[bash_colors]" * ] ] ; then PRINT FATAL "Required internal dependency \"internal:bash_colors\" is not installed or detected." ; fi
if [ [ $missinglibs = = *"[parse_yaml]" * ] ] ; then PRINT FATAL "Required internal dependency \"internal:parse_yaml\" is not installed or detected." ; fi
if [ [ $missinglibs = = *"[db]" * ] ] ; then PRINT FATAL "Required internal dependency \"internal:db\" is not installed or detected." ; fi
if [ [ $missinglibs = = *"[telemetry]" * ] ] ; then PRINT FATAL "Required internal dependency \"internal:telemetry\" is not installed or detected." ; fi
if [ [ $missinglibs = = *"[updateAdminCacheReminder]" * ] ] ; then PRINT FATAL "Required internal dependency \"internal:updateAdminCacheReminder\" is not installed or detected." ; fi
if [ [ $missinglibs = = *"[grabEnv]" * ] ] ; then PRINT FATAL "Required internal dependency \"internal:grabEnv\" is not installed or detected." ; fi
if [ [ $missinglibs = = *"[throwError]" * ] ] ; then PRINT FATAL "Required internal dependency \"internal:throwError\" is not installed or detected." ; fi
if [ [ $missinglibs = = *"[logFormat]" * ] ] ; then PRINT FATAL "Required internal dependency \"internal:logFormat\" is not installed or detected." ; fi
2023-09-11 10:29:38 -04:00
exit 1
2023-09-11 10:23:49 -04:00
fi
2023-07-31 05:14:32 -04:00
}
2023-12-11 09:33:33 -05:00
# Assign variables for extension flags.
assignflags( ) {
F_ignorePlaceholders = false
F_ignoreAlphabetPlaceholders = false
F_hasInstallScript = false
F_hasRemovalScript = false
F_hasExportScript = false
F_developerIgnoreInstallScript = false
2023-12-11 09:56:05 -05:00
F_developerIgnoreRebuild = false
2023-12-11 09:33:33 -05:00
if [ [ ( $flags = = *"ignorePlaceholders," * ) || ( $flags = = *"ignorePlaceholders" ) ] ] ; then F_ignorePlaceholders = true ; fi
if [ [ ( $flags = = *"ignoreAlphabetPlaceholders," * ) || ( $flags = = *"ignoreAlphabetPlaceholders" ) ] ] ; then F_ignoreAlphabetPlaceholders = true ; fi
if [ [ ( $flags = = *"hasInstallScript," * ) || ( $flags = = *"hasInstallScript" ) ] ] ; then F_hasInstallScript = true ; fi
if [ [ ( $flags = = *"hasRemovalScript," * ) || ( $flags = = *"hasRemovalScript" ) ] ] ; then F_hasRemovalScript = true ; fi
if [ [ ( $flags = = *"hasExportScript," * ) || ( $flags = = *"hasExportScript" ) ] ] ; then F_hasExportScript = true ; fi
if [ [ ( $flags = = *"developerIgnoreInstallScript," * ) || ( $flags = = *"developerIgnoreInstallScript" ) ] ] ; then F_developerIgnoreInstallScript = true ; fi
2023-12-11 09:56:05 -05:00
if [ [ ( $flags = = *"developerIgnoreRebuild," * ) || ( $flags = = *"developerIgnoreRebuild" ) ] ] ; then F_developerIgnoreRebuild = true ; fi
2023-12-11 09:33:33 -05:00
}
2023-08-06 07:41:56 -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-12-22 10:06:02 -05:00
touch /usr/local/bin/blueprint >> $BLUEPRINT__DEBUG
2023-08-15 06:23:40 -04:00
echo -e " #!/bin/bash\nbash $FOLDER /blueprint.sh -bash \$@; " > /usr/local/bin/blueprint
2023-12-22 10:06:02 -05:00
chmod u+x $FOLDER /blueprint.sh >> $BLUEPRINT__DEBUG
chmod u+x /usr/local/bin/blueprint >> $BLUEPRINT__DEBUG
2023-04-02 14:47:24 -04:00
2023-08-06 07:41:56 -04:00
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
2024-01-14 18:43:11 -05:00
PRINT FATAL "Installation process has already been finished before, consider using the 'blueprint' command."
2024-01-15 11:40:12 -05:00
exit 2
2023-06-02 10:37:38 -04:00
else
2023-06-26 06:40:33 -04:00
# Only run if Blueprint is not in the process of upgrading.
2023-06-10 08:52:00 -04:00
if [ [ $1 != "--post-upgrade" ] ] ; then
2023-08-20 04:46:52 -04:00
log " ██\n██ ██\n ████\n" ; # Blueprint "ascii" "logo".
2023-06-10 08:52:00 -04:00
if [ [ $DOCKER = = "y" ] ] ; then
2024-01-14 18:52:51 -05:00
PRINT WARNING "Docker is untested and you might run into issues."
2023-08-15 06:23:40 -04:00
fi
fi
2023-05-06 10:21:22 -04:00
2024-01-14 18:43:11 -05:00
PRINT INFO "Searching and validating framework dependencies.."
2023-07-30 06:13:53 -04:00
# Check if required programs are installed
2023-08-15 06:23:40 -04:00
depend
2023-07-30 06:13:53 -04:00
2023-11-08 05:35:18 -05:00
# Link directories.
2024-01-14 18:43:11 -05:00
PRINT INFO "Linking directories and filesystems.."
2023-12-22 10:06:02 -05:00
cd $FOLDER /public/extensions || throw 'cdMissingDirectory' ; ln -s -T $FOLDER /.blueprint/extensions/blueprint/public blueprint 2>> $BLUEPRINT__DEBUG ; cd $FOLDER || throw 'cdMissingDirectory'
cd $FOLDER /public/assets/extensions || throw 'cdMissingDirectory' ; ln -s -T $FOLDER /.blueprint/extensions/blueprint/assets blueprint 2>> $BLUEPRINT__DEBUG ; cd $FOLDER || throw 'cdMissingDirectory'
2024-01-14 18:43:11 -05:00
php artisan storage:link & >> $BLUEPRINT__DEBUG
2023-11-08 05:35:18 -05:00
2024-01-14 18:43:11 -05:00
PRINT INFO "Replacing internal placeholders.."
2023-06-26 06:40:33 -04:00
# Update folder placeholder on PlaceholderService and admin layout.
2024-01-01 12:09:04 -05:00
sed -i " s!::f! $FOLDER !g " $FOLDER /app/BlueprintFramework/Services/PlaceholderService/BlueprintPlaceholderService.php
sed -i " s!::f! $FOLDER !g " $FOLDER /resources/views/layouts/admin.blade.php
2023-07-04 04:37:31 -04:00
# Copy "Blueprint" extension page logo from assets.
2023-11-08 10:01:39 -05:00
cp $FOLDER /.blueprint/assets/logo.jpg $FOLDER /.blueprint/extensions/blueprint/assets/logo.jpg
2023-07-04 04:37:31 -04:00
2023-06-17 07:28:26 -04:00
# Put application into maintenance.
2024-01-14 18:43:11 -05:00
PRINT INFO "Put application into maintenance mode."
2023-12-22 10:06:02 -05:00
php artisan down & >> $BLUEPRINT__DEBUG
2023-04-10 10:50:23 -04:00
2023-06-26 06:40:33 -04:00
# Clear view cache.
2024-01-14 18:43:11 -05:00
PRINT INFO "Clearing view, config and route cache.."
{
php artisan view:clear
php artisan config:clear
php artisan route:cache
} & >> $BLUEPRINT__DEBUG
2023-08-15 06:23:40 -04:00
updateCacheReminder
2023-08-11 15:50:34 -04: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
2024-01-14 18:43:11 -05:00
PRINT INPUT "Would you like to migrate your database? (Y/n)"
2023-10-10 15:28:42 -04:00
read -r YN
2023-09-24 09:58:26 -04:00
if [ [ ( $YN = = "y" * ) || ( $YN = = "Y" * ) || ( $YN = = "" ) ] ] ; then
2024-01-14 18:43:11 -05:00
PRINT INFO "Running database migrations.."
2023-08-17 05:44:09 -04:00
php artisan migrate --force
else
2024-01-14 18:43:11 -05:00
PRINT INFO "Database migrations have been skipped."
2023-08-17 05:44:09 -04:00
fi
2023-08-15 06:23:40 -04:00
fi
2023-04-08 10:14:36 -04:00
2023-06-26 06:40:33 -04:00
# Make sure all files have correct permissions.
2024-01-14 18:43:11 -05:00
PRINT INFO "Changing Pterodactyl file ownership to 'www-data'.."
2023-10-25 14:37:38 -04:00
chown -R www-data:www-data $FOLDER /* &
chown -R www-data:www-data $FOLDER /.blueprint/* &
wait
2023-03-06 13:11:53 -05:00
2023-07-29 06:29:18 -04:00
# Rebuild panel assets.
2024-01-14 18:43:11 -05:00
PRINT INFO "Rebuilding panel assets.."
2023-08-15 06:23:40 -04:00
yarn run build:production
2023-07-29 06:29:18 -04:00
2023-06-17 07:28:26 -04:00
# Put application into production.
2024-01-14 18:43:11 -05:00
PRINT INFO "Put application into production."
2023-12-22 10:06:02 -05:00
php artisan up & >> $BLUEPRINT__DEBUG
2023-03-19 15:20:01 -04:00
2023-11-14 09:20:54 -05:00
# Sync some database values.
2024-01-14 18:43:11 -05:00
PRINT INFO "Syncing Blueprint-related database values.."
2023-11-14 09:20:54 -05:00
php artisan bp:sync
2024-01-14 18:43:11 -05:00
# Finish installation
2023-06-10 08:52:00 -04:00
if [ [ $1 != "--post-upgrade" ] ] ; then
2024-01-15 11:40:12 -05:00
PRINT SUCCESS "Blueprint has completed it's installation process."
2023-08-15 06:23:40 -04:00
fi
2023-04-10 11:13:28 -04:00
2023-08-15 06:23:40 -04:00
dbAdd "blueprint.setupFinished"
2023-07-09 01:47:40 -04:00
# Let the panel know the user has finished installation.
2023-09-07 10:17:04 -04:00
sed -i "s!NOTINSTALLED!INSTALLED!g" $FOLDER /app/BlueprintFramework/Services/PlaceholderService/BlueprintPlaceholderService.php
2023-08-15 06:23:40 -04:00
exit 1
fi
fi
2023-03-19 15:20:01 -04:00
2023-08-06 07:41:56 -04:00
2023-06-18 10:37:46 -04:00
# -i, -install
2023-08-15 06:23:40 -04:00
if [ [ ( $2 = = "-i" ) || ( $2 = = "-install" ) ] ] ; then VCMD = "y"
2024-01-15 11:40:12 -05:00
if [ [ $(( $# - 2 )) != 1 ] ] ; then PRINT FATAL " Expected 1 argument but got $(( $# - 2 )) . " ; exit 2; fi
if [ [ ( $3 = = "./" * ) || ( $3 = = "../" * ) || ( $3 = = "/" * ) ] ] ; then PRINT FATAL "Cannot import extensions from external paths." ; exit 2; fi
2023-08-10 05:40:26 -04:00
2024-01-14 18:43:11 -05:00
PRINT INFO "Searching and validating framework dependencies.."
2023-07-30 06:13:53 -04:00
# Check if required programs are installed
2023-08-15 06:23:40 -04:00
depend
2023-07-30 06:13:53 -04:00
2023-09-05 12:46:43 -04:00
# The following code does some magic to allow for extensions with a
# different root folder structure than expected by Blueprint.
2023-06-02 10:37:38 -04:00
if [ [ $3 = = "test␀" ] ] ; then
2023-08-15 06:23:40 -04:00
dev = true
n = "dev"
2023-10-31 05:38:52 -04:00
mkdir -p ".blueprint/tmp/dev"
cp -R ".blueprint/dev/" * ".blueprint/tmp/dev/"
2023-06-02 10:37:38 -04:00
else
2023-08-15 06:23:40 -04:00
dev = false
2023-10-31 05:38:52 -04:00
n = " $3 "
FILE = " ${ n } .blueprint "
2024-01-15 11:40:12 -05:00
if [ [ ( $FILE = = *".blueprint.blueprint" ) && ( $n = = *".blueprint" ) ] ] ; then PRINT FATAL "Argument one in '-install' must not end with '.blueprint'." ; exit 2; fi
if [ [ ! -f " $FILE " ] ] ; then PRINT FATAL " $FILE could not be found or detected. " ; exit 2; fi
2023-08-15 06:23:40 -04:00
2023-10-31 05:38:52 -04:00
ZIP = " ${ n } .zip "
cp " $FILE " " .blueprint/tmp/ $ZIP "
2023-11-23 09:59:30 -05:00
cd ".blueprint/tmp" || throw 'cdMissingDirectory'
2023-10-31 05:38:52 -04:00
unzip -o -qq " $ZIP "
rm " $ZIP "
2023-06-02 10:37:38 -04:00
if [ [ ! -f " $n /* " ] ] ; then
2023-11-23 09:59:30 -05:00
cd ".." || throw 'cdMissingDirectory'
2023-10-31 05:38:52 -04:00
rm -R "tmp"
mkdir -p "tmp"
2023-11-23 09:59:30 -05:00
cd "tmp" || throw 'cdMissingDirectory'
2023-10-31 05:38:52 -04:00
mkdir -p " ./ $n "
cp " ../../ $FILE " " ./ $n / $ZIP "
2023-11-23 09:59:30 -05:00
cd " $n " || throw 'cdMissingDirectory'
2023-10-31 05:38:52 -04:00
unzip -o -qq " $ZIP "
rm " $ZIP "
2023-11-23 09:59:30 -05:00
cd ".." || throw 'cdMissingDirectory'
2023-08-15 06:23:40 -04:00
fi
fi
2023-04-17 10:54:12 -04:00
2023-06-18 10:37:46 -04:00
# Return to the Pterodactyl installation folder.
2023-11-23 09:59:30 -05:00
cd $FOLDER || throw 'cdMissingDirectory'
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-10-21 14:05:48 -04:00
if [ [ ! -f " .blueprint/tmp/ $n /conf.yml " ] ] ; then
# Quit if the extension doesn't have a conf.yml file.
2023-10-26 07:09:31 -04:00
rm -R " .blueprint/tmp/ $n "
2023-11-23 09:59:30 -05:00
throw "confymlNotFound"
2023-10-21 14:05:48 -04:00
fi
2023-11-23 09:52:16 -05:00
2023-12-22 07:15:54 -05:00
eval " $( parse_yaml .blueprint/tmp/" ${ n } " /conf.yml conf_) "
2023-06-17 07:28:26 -04:00
2023-07-09 01:47:40 -04:00
# Add aliases for config values to make working with them easier.
2023-08-15 06:23:40 -04:00
name = " $conf_info_name "
identifier = " $conf_info_identifier "
description = " $conf_info_description "
2023-10-01 08:25:10 -04:00
flags = " $conf_info_flags " #(optional)
2023-08-15 06:23:40 -04:00
version = " $conf_info_version "
target = " $conf_info_target "
2023-10-01 08:25:10 -04:00
author = " $conf_info_author " #(optional)
2023-08-31 11:19:50 -04:00
icon = " $conf_info_icon " #(optional)
2023-07-30 16:22:08 -04:00
website = " $conf_info_website " ; #(optional)
2023-08-15 06:23:40 -04:00
admin_view = " $conf_admin_view "
2023-07-30 16:22:08 -04:00
admin_controller = " $conf_admin_controller " ; #(optional)
admin_css = " $conf_admin_css " ; #(optional)
admin_wrapper = " $conf_admin_wrapper " ; #(optional)
dashboard_css = " $conf_dashboard_css " ; #(optional)
2023-12-06 15:18:01 -05:00
dashboard_wrapper = " $conf_dashboard_wrapper " ; #(optional)
2023-12-28 14:45:03 -05:00
dashboard_components = " $conf_dashboard_components " ; #(optional)
2023-07-30 16:22:08 -04:00
data_directory = " $conf_data_directory " ; #(optional)
data_public = " $conf_data_public " ; #(optional)
2023-07-02 14:58:59 -04:00
2023-08-20 04:46:52 -04:00
database_migrations = " $conf_database_migrations " ; #(optional)
2023-12-11 08:44:29 -05:00
2023-09-06 11:54:23 -04:00
# "prevent" folder "escaping"
2023-12-28 14:45:03 -05:00
if [ [ ( $icon = = "/" * ) || ( $icon = = *"/.." * ) || ( $icon = = *"../" * ) || ( $icon = = *"/../" * ) || ( $icon = = *"\n" * ) ] ] ||
[ [ ( $admin_view = = "/" * ) || ( $admin_view = = *"/.." * ) || ( $admin_view = = *"../" * ) || ( $admin_view = = *"/../" * ) || ( $admin_view = = *"\n" * ) ] ] ||
[ [ ( $admin_controller = = "/" * ) || ( $admin_controller = = *"/.." * ) || ( $admin_controller = = *"../" * ) || ( $admin_controller = = *"/../" * ) || ( $admin_controller = = *"\n" * ) ] ] ||
[ [ ( $admin_css = = "/" * ) || ( $admin_css = = *"/.." * ) || ( $admin_css = = *"../" * ) || ( $admin_css = = *"/../" * ) || ( $admin_css = = *"\n" * ) ] ] ||
[ [ ( $admin_wrapper = = "/" * ) || ( $admin_wrapper = = *"/.." * ) || ( $admin_wrapper = = *"../" * ) || ( $admin_wrapper = = *"/../" * ) || ( $admin_wrapper = = *"\n" * ) ] ] ||
[ [ ( $dashboard_css = = "/" * ) || ( $dashboard_css = = *"/.." * ) || ( $dashboard_css = = *"../" * ) || ( $dashboard_css = = *"/../" * ) || ( $dashboard_css = = *"\n" * ) ] ] ||
[ [ ( $dashboard_wrapper = = "/" * ) || ( $dashboard_wrapper = = *"/.." * ) || ( $dashboard_wrapper = = *"../" * ) || ( $dashboard_wrapper = = *"/../" * ) || ( $dashboard_wrapper = = *"\n" * ) ] ] ||
[ [ ( $dashboard_components = = "/" * ) || ( $dashboard_components = = *"/.." * ) || ( $dashboard_components = = *"../" * ) || ( $dashboard_components = = *"/../" * ) || ( $dashboard_components = = *"\n" * ) ] ] ||
[ [ ( $data_directory = = "/" * ) || ( $data_directory = = *"/.." * ) || ( $data_directory = = *"../" * ) || ( $data_directory = = *"/../" * ) || ( $data_directory = = *"\n" * ) ] ] ||
[ [ ( $data_public = = "/" * ) || ( $data_public = = *"/.." * ) || ( $data_public = = *"../" * ) || ( $data_public = = *"/../" * ) || ( $data_public = = *"\n" * ) ] ] ||
[ [ ( $database_migrations = = "/" * ) || ( $database_migrations = = *"/.." * ) || ( $database_migrations = = *"../" * ) || ( $database_migrations = = *"/../" * ) || ( $database_migrations = = *"\n" * ) ] ] ; then
2023-10-26 07:09:31 -04:00
rm -R " .blueprint/tmp/ $n "
2024-01-02 19:56:19 -05:00
throw "pathsEscape"
2023-09-06 11:54:23 -04:00
fi
# prevent potentional problems during installation due to wrongly defined folders
2023-12-28 14:45:03 -05:00
if [ [ ( $dashboard_components = = *"/" ) ||
( $data_directory = = *"/" ) ||
( $data_public = = *"/" ) ||
( $database_migrations = = *"/" ) ] ] ; then
2023-10-26 07:09:31 -04:00
rm -R " .blueprint/tmp/ $n "
2024-01-15 11:40:12 -05:00
PRINT FATAL "Directory paths in conf.yml should not end with a slash."
exit 1
2023-09-06 11:54:23 -04:00
fi
# check if extension still has placeholder values
if [ [ ( $name = = "␀name␀" ) || ( $identifier = = "␀identifier␀" ) || ( $description = = "␀description␀" ) ] ] ||
[ [ ( $version = = "␀ver␀" ) || ( $target = = "␀version␀" ) || ( $author = = "␀author␀" ) ] ] ; then
2023-10-26 07:09:31 -04:00
rm -R " .blueprint/tmp/ $n "
2024-01-15 11:40:12 -05:00
PRINT FATAL "Extension contains placeholder values which need to be replaced."
exit 1
2023-08-15 06:23:40 -04:00
fi
2023-06-19 15:04:06 -04:00
2023-07-22 07:13:00 -04:00
# Detect if extension is already installed and prepare the upgrading process.
2023-11-08 10:01:39 -05:00
if [ [ $( cat .blueprint/extensions/blueprint/private/db/installed_extensions) = = *" $identifier , " * ] ] ; then
2024-01-15 11:40:12 -05:00
PRINT INFO "Switching to update process as extension has already been installed."
2023-12-22 07:15:54 -05:00
eval " $( parse_yaml .blueprint/extensions/" ${ identifier } " /private/.store/conf.yml old_) "
2023-08-15 06:23:40 -04:00
DUPLICATE = "y"
2023-07-22 06:40:00 -04:00
2023-11-08 10:01:39 -05:00
if [ [ ! -f " .blueprint/extensions/ $identifier /private/.store/build/button.blade.php " ] ] ; then
2023-10-26 07:09:31 -04:00
rm -R " .blueprint/tmp/ $n "
2024-01-15 11:40:12 -05:00
PRINT FATAL "Upgrading extension has failed due to missing essential .store files."
exit 1
2023-08-15 06:23:40 -04:00
fi
2023-07-22 07:13:00 -04:00
2023-10-01 08:25:10 -04:00
# Clean up some old extension files.
2023-07-22 07:13:00 -04:00
if [ [ $old_data_public != "" ] ] ; then
2023-10-01 08:25:10 -04:00
# Clean up old public folder.
2023-11-08 10:01:39 -05:00
rm -R " .blueprint/extensions/ $identifier /public "
mkdir " .blueprint/extensions/ $identifier /public "
2023-08-15 06:23:40 -04:00
fi
fi
2023-07-20 09:36:58 -04:00
2023-12-11 09:33:33 -05:00
# Assign variables to extension flags.
2024-01-15 11:40:12 -05:00
PRINT INFO "Reading and assigning extension flags.."
2023-12-11 09:33:33 -05:00
assignflags
2023-10-31 05:29:21 -04:00
# Force http/https url scheme for extension website urls.
if [ [ $website != "" ] ] ; then
if [ [ ( $website != "https://" * ) && ( $website != "http://" * ) ] ] ; then
2023-12-17 06:51:06 -05:00
website = " http:// ${ conf_info_website } "
conf_info_website = " ${ website } "
2023-10-31 05:29:21 -04:00
fi
2023-11-08 05:22:47 -05:00
# Change link icon depending on website url.
websiteiconclass = "bx-link-external"
2023-11-14 09:30:38 -05:00
2023-11-19 09:07:33 -05:00
# git
2024-01-12 10:32:42 -05:00
if [ [ $website = = *"://github.com/" * ] ] || [ [ $website = = *"://www.github.com/" * ] ] ||
[ [ $website = = *"://github.com" ] ] || [ [ $website = = *"://www.github.com" ] ] ||
[ [ $website = = *"://gitlab.com/" * ] ] || [ [ $website = = *"://www.gitlab.com/" * ] ] ||
[ [ $website = = *"://gitlab.com" ] ] || [ [ $website = = *"://www.gitlab.com" ] ] ; then websiteiconclass = "bx-git-branch" ; fi
# marketplaces
if [ [ $website = = *"://sourcexchange.net/" * ] ] || [ [ $website = = *"://www.sourcexchange.net/" * ] ] ||
[ [ $website = = *"://sourcexchange.net" ] ] || [ [ $website = = *"://www.sourcexchange.net" ] ] ||
[ [ $website = = *"://builtbybit.com/" * ] ] || [ [ $website = = *"://www.builtbybit.com/" * ] ] ||
[ [ $website = = *"://builtbybit.com" ] ] || [ [ $website = = *"://www.builtbybit.com" ] ] ||
[ [ $website = = *"://builtbyb.it/" * ] ] || [ [ $website = = *"://www.builtbyb.it/" * ] ] ||
[ [ $website = = *"://builtbyb.it" ] ] || [ [ $website = = *"://www.builtbyb.it" ] ] ; then websiteiconclass = "bx-store" ; fi
2023-11-19 09:07:33 -05:00
# discord
2024-01-12 10:32:42 -05:00
if [ [ $website = = *"://discord.com/" * ] ] || [ [ $website = = *"://www.discord.com/" * ] ] ||
[ [ $website = = *"://discord.com" ] ] || [ [ $website = = *"://www.discord.com" ] ] ||
[ [ $website = = *"://discord.gg/" * ] ] || [ [ $website = = *"://www.discord.gg/" * ] ] ||
[ [ $website = = *"://discord.gg" ] ] || [ [ $website = = *"://www.discord.gg" ] ] ; then websiteiconclass = "bxl-discord-alt" ; fi
2023-11-19 09:07:33 -05:00
# patreon
2024-01-12 10:32:42 -05:00
if [ [ $website = = *"://patreon.com/" * ] ] || [ [ $website = = *"://www.patreon.com/" * ] ] ||
[ [ $website = = *"://patreon.com" ] ] || [ [ $website = = *"://www.patreon.com" ] ] ; then websiteiconclass = "bxl-patreon" ; fi
2023-11-19 09:07:33 -05:00
# reddit
2024-01-12 10:32:42 -05:00
if [ [ $website = = *"://reddit.com/" * ] ] || [ [ $website = = *"://www.reddit.com/" * ] ] ||
[ [ $website = = *"://reddit.com" ] ] || [ [ $website = = *"://www.reddit.com" ] ] ; then websiteiconclass = "bxl-reddit" ; fi
2023-11-19 09:07:33 -05:00
# trello
2024-01-12 10:32:42 -05:00
if [ [ $website = = *"://trello.com/" * ] ] || [ [ $website = = *"://www.trello.com/" * ] ] ||
[ [ $website = = *"://trello.com" ] ] || [ [ $website = = *"://www.trello.com" ] ] ; then websiteiconclass = "bxl-trello" ; fi
2023-10-31 05:29:21 -04:00
fi
2023-05-17 03:55:16 -04:00
2023-07-03 06:48:40 -04:00
if [ [ $dev = = true ] ] ; then
2023-10-31 05:38:52 -04:00
mv " .blueprint/tmp/ $n " " .blueprint/tmp/ $identifier "
2023-08-15 06:23:40 -04:00
n = $identifier
fi
2023-03-26 12:19:10 -04:00
2023-12-11 09:50:54 -05:00
if ! $F_ignorePlaceholders ; then
2023-10-20 09:09:48 -04:00
# Prepare variables for placeholders
2024-01-15 11:40:12 -05:00
PRINT INFO "Writing extension placeholders.."
2023-10-25 15:17:28 -04:00
DIR = " .blueprint/tmp/ $n "
INSTALLMODE = "normal"
2023-11-14 09:50:14 -05:00
installation_timestamp = $( date +%s)
if [ [ $dev = = true ] ] ; then INSTALLMODE = "developer" ; fi
EXTPUBDIR = " $FOLDER /.blueprint/extensions/ $identifier /public "
if [ [ $data_public = = "" ] ] ; then EXTPUBDIR = "null" ; fi
2023-10-25 15:17:28 -04:00
PLACE_PLACEHOLDERS( ) {
local dir = " $1 "
for file in " $dir " /*; do
if [ -f " $file " ] ; then
2023-12-22 11:51:20 -05:00
file = ${ file // / \\ }
2023-10-25 15:34:05 -04:00
sed -i " s~\^#version#\^~ $version ~g " " $file "
sed -i " s~\^#author#\^~ $author ~g " " $file "
sed -i " s~\^#name#\^~ $name ~g " " $file "
sed -i " s~\^#identifier#\^~ $identifier ~g " " $file "
sed -i " s~\^#path#\^~ $FOLDER ~g " " $file "
2023-11-08 10:01:39 -05:00
sed -i " s~\^#datapath#\^~ $FOLDER /.blueprint/extensions/ $identifier /private~g " " $file "
2023-11-14 09:50:14 -05:00
sed -i " s~\^#publicpath#\^~ $EXTPUBDIR ~g " " $file "
2023-10-25 15:34:05 -04:00
sed -i " s~\^#installmode#\^~ $INSTALLMODE ~g " " $file "
sed -i " s~\^#blueprintversion#\^~ $VERSION ~g " " $file "
2023-11-14 09:35:15 -05:00
sed -i " s~\^#timestamp#\^~ $installation_timestamp ~g " " $file "
2023-12-28 15:03:05 -05:00
sed -i " s~\^#componentroot#\^~@/blueprint/extensions/ $identifier ~g " " $file "
2023-10-25 15:17:28 -04:00
2023-12-11 09:50:54 -05:00
if ! $F_ignoreAlphabetPlaceholders ; then
2023-10-25 15:34:05 -04:00
sed -i " s~__version__~ $version ~g " " $file "
sed -i " s~__author__~ $author ~g " " $file "
sed -i " s~__identifier__~ $identifier ~g " " $file "
sed -i " s~__name__~ $name ~g " " $file "
sed -i " s~__path__~ $FOLDER ~g " " $file "
2023-11-08 10:01:39 -05:00
sed -i " s~__datapath__~ $FOLDER /.blueprint/extensions/ $identifier /private~g " " $file "
2023-11-14 09:50:14 -05:00
sed -i " s~__publicpath__~ $EXTPUBDIR ~g " " $file "
2023-10-25 15:34:05 -04:00
sed -i " s~__installmode__~ $INSTALLMODE ~g " " $file "
sed -i " s~__blueprintversion__~ $VERSION ~g " " $file "
2023-11-14 09:35:15 -05:00
sed -i " s~__timestamp__~ $installation_timestamp ~g " " $file "
2023-12-28 15:03:05 -05:00
sed -i " s~__componentroot__~@/blueprint/extensions/ $identifier ~g " " $file "
2023-10-25 15:17:28 -04:00
fi
elif [ -d " $file " ] ; then
PLACE_PLACEHOLDERS " $file "
fi
done
}
PLACE_PLACEHOLDERS " $DIR "
2024-01-15 11:40:12 -05:00
fi
2023-08-15 06:23:40 -04:00
2024-01-15 11:40:12 -05:00
if [ [ $name = = "" ] ] ; then rm -R " .blueprint/tmp/ $n " ; PRINT FATAL "'info_name' is a required configuration option." ; exit 1; fi
if [ [ $identifier = = "" ] ] ; then rm -R " .blueprint/tmp/ $n " ; PRINT FATAL "'info_identifier' is a required configuration option." ; exit 1; fi
if [ [ $description = = "" ] ] ; then rm -R " .blueprint/tmp/ $n " ; PRINT FATAL "'info_description' is a required configuration option." ; exit 1; fi
if [ [ $version = = "" ] ] ; then rm -R " .blueprint/tmp/ $n " ; PRINT FATAL "'info_version' is a required configuration option." ; exit 1; fi
if [ [ $target = = "" ] ] ; then rm -R " .blueprint/tmp/ $n " ; PRINT FATAL "'info_target' is a required configuration option." ; exit 1; fi
if [ [ $admin_view = = "" ] ] ; then rm -R " .blueprint/tmp/ $n " ; PRINT FATAL "'admin_view' is a required configuration option." ; exit 1; fi
2023-12-11 08:32:32 -05:00
2024-01-15 11:40:12 -05:00
if [ [ $icon = = "" ] ] ; then PRINT WARNING "This extension does not come with an icon, consider adding one." ; fi
if [ [ $target != " $VERSION " ] ] ; then PRINT WARNING " This extension is built for version $target , but your version is $VERSION . " ; fi
if [ [ $identifier != " $n " ] ] ; then rm -R " .blueprint/tmp/ $n " ; PRINT FATAL "Extension file name must be the same as your identifier. (example: identifier.blueprint)" ; exit 1; fi
if ! [ [ $identifier = ~ [ a-z] ] ] ; then rm -R " .blueprint/tmp/ $n " ; PRINT FATAL "Extension identifier should be lowercase and only contain characters a-z." ; exit 1; fi
if [ [ $identifier = = "blueprint" ] ] ; then rm -R " .blueprint/tmp/ $n " ; PRINT FATAL "Extensions can not have the identifier 'blueprint'." ; exit 1; fi
2023-12-11 08:32:32 -05:00
2023-12-11 08:44:29 -05:00
# Validate paths to files and directories defined in conf.yml.
2023-12-28 14:45:03 -05:00
if [ [ ( ! -f " .blueprint/tmp/ $n / $icon " ) && ( ${ icon } != "" ) ] ] || # file: icon (optional)
[ [ ( ! -f " .blueprint/tmp/ $n / $admin_view " ) ] ] || # file: admin_view
[ [ ( ! -f " .blueprint/tmp/ $n / $admin_controller " ) && ( ${ admin_controller } != "" ) ] ] || # file: admin_controller (optional)
[ [ ( ! -f " .blueprint/tmp/ $n / $admin_css " ) && ( ${ admin_css } != "" ) ] ] || # file: admin_css (optional)
[ [ ( ! -f " .blueprint/tmp/ $n / $admin_wrapper " ) && ( ${ admin_wrapper } != "" ) ] ] || # file: admin_wrapper (optional)
[ [ ( ! -f " .blueprint/tmp/ $n / $dashboard_css " ) && ( ${ dashboard_css } != "" ) ] ] || # file: dashboard_css (optional)
[ [ ( ! -f " .blueprint/tmp/ $n / $dashboard_wrapper " ) && ( ${ dashboard_wrapper } != "" ) ] ] || # file: dashboard_wrapper (optional)
[ [ ( ! -d " .blueprint/tmp/ $n / $dashboard_components " ) && ( ${ dashboard_components } != "" ) ] ] || # folder: dashboard_components (optional)
[ [ ( ! -d " .blueprint/tmp/ $n / $data_directory " ) && ( ${ data_directory } != "" ) ] ] || # folder: data_directory (optional)
[ [ ( ! -d " .blueprint/tmp/ $n / $data_public " ) && ( ${ data_public } != "" ) ] ] || # folder: data_public (optional)
[ [ ( ! -d " .blueprint/tmp/ $n / $data_migrations " ) && ( ${ data_migrations } != "" ) ] ] ; then # folder: data_migrations (optional)
2023-12-11 08:44:29 -05:00
rm -R " .blueprint/tmp/ $n "
2023-12-11 08:32:32 -05:00
throw 'confymlMissingFiles'
fi
2023-12-11 10:13:24 -05:00
# Validate custom script paths.
2023-12-11 14:05:29 -05:00
if [ [ $F_hasInstallScript = = true || $F_hasRemovalScript = = true || $F_hasExportScript = = true ] ] ; then
2023-12-11 10:13:24 -05:00
if [ [ $data_directory = = "" ] ] ; then rm -R " .blueprint/tmp/ $n " ; throw 'scriptsNoDataDir' ; fi
2023-12-11 12:43:01 -05:00
if [ [ $F_hasInstallScript = = true ] ] && [ [ ! -f " .blueprint/tmp/ $n / $data_directory /install.sh " ] ] ||
[ [ $F_hasRemovalScript = = true ] ] && [ [ ! -f " .blueprint/tmp/ $n / $data_directory /remove.sh " ] ] ||
[ [ $F_hasExportScript = = true ] ] && [ [ ! -f " .blueprint/tmp/ $n / $data_directory /export.sh " ] ] ; then
2023-12-11 10:13:24 -05:00
rm -R " .blueprint/tmp/ $n "
throw 'scriptsMissingFiles'
fi
fi
2023-12-28 15:03:05 -05:00
# Place database migrations.
2023-06-11 14:58:20 -04:00
if [ [ $database_migrations != "" ] ] ; then
2024-01-15 11:40:12 -05:00
PRINT INFO "Cloning database migration files.."
2023-12-22 10:06:02 -05:00
cp -R " .blueprint/tmp/ $n / $database_migrations / " * "database/migrations/" 2>> $BLUEPRINT__DEBUG
2023-08-15 06:23:40 -04:00
fi
2023-03-26 09:27:37 -04:00
2023-12-28 15:03:05 -05:00
# Create, link and connect components directory.
if [ [ $dashboard_components != "" ] ] ; then
YARN = "y"
2024-01-15 11:40:12 -05:00
PRINT INFO "Cloning and linking components directory.."
2023-12-28 15:03:05 -05:00
mkdir -p " .blueprint/extensions/ $identifier /components "
cd $FOLDER /resources/scripts/blueprint/extensions || throw 'cdMissingDirectory'
ln -s -T $FOLDER /.blueprint/extensions/" $identifier " /components " $identifier " 2>> $BLUEPRINT__DEBUG
cd $FOLDER || throw 'cdMissingDirectory'
cp -R " .blueprint/tmp/ $n / $dashboard_components / " * " .blueprint/extensions/ $identifier /components/ " 2>> $BLUEPRINT__DEBUG
2023-12-28 18:59:12 -05:00
if [ [ -f " .blueprint/tmp/ $n / $dashboard_components /Components.yml " ] ] ; then
2023-12-28 15:24:17 -05:00
# fetch component config
2023-12-28 18:59:12 -05:00
eval " $( parse_yaml .blueprint/tmp/" $n " /" $dashboard_components " /Components.yml Components_) "
2024-01-05 19:34:31 -05:00
if [ [ $DUPLICATE = = "y" ] ] ; then eval " $( parse_yaml .blueprint/extensions/" ${ identifier } " /private/.store/Components.yml OldComponents_) " ; fi
2023-12-28 18:59:12 -05:00
# define static variables to make stuff a bit easier
im = "\/\* blueprint\/import \*\/" ; re = "{/\* blueprint\/react \*/}" ; co = "resources/scripts/blueprint/components"
s = " import ${ identifier ^ } Component from ' " ; e = "';"
PLACE_REACT( ) {
2024-01-05 19:34:31 -05:00
if [ [ ( $1 = = "/" * ) || ( $1 = = *"/.." * ) || ( $1 = = *"../" * ) || ( $1 = = *"/../" * ) || ( $1 = = *"\n" * ) || ( $1 = = *"@" * ) || ( $1 = = *"\\" * ) ] ] ; then rm -R " .blueprint/tmp/ $n " ; throw 'componentEscape' ; fi
if [ [ $3 != " $1 " ] ] ; then
# remove old components
sed -i "s~" " ${ s } @/blueprint/extensions/ ${ identifier } / $3 ${ e } " "~~g" " $co " /" $2 "
sed -i "s~" " < ${ identifier ^ } Component /> " "~~g" " $co " /" $2 "
fi
if [ [ ! $1 = = "" ] ] ; then
2024-01-02 19:33:07 -05:00
# validate file name
2024-01-05 19:34:31 -05:00
if [ [ ${ 1 } = = *".tsx" ] ] ||
[ [ ${ 1 } = = *".ts" ] ] ||
[ [ ${ 1 } = = *".jsx" ] ] ||
[ [ ${ 1 } = = *".js" ] ] ; then
2024-01-02 19:33:07 -05:00
rm -R " .blueprint/tmp/ $n "
throw 'componentFileExtension'
fi
# validate path
2024-01-05 19:34:31 -05:00
if [ [ ! -f " .blueprint/tmp/ $n / $dashboard_components / ${ 1 } .tsx " ] ] &&
[ [ ! -f " .blueprint/tmp/ $n / $dashboard_components / ${ 1 } .ts " ] ] &&
[ [ ! -f " .blueprint/tmp/ $n / $dashboard_components / ${ 1 } .jsx " ] ] &&
[ [ ! -f " .blueprint/tmp/ $n / $dashboard_components / ${ 1 } .js " ] ] ; then
2024-01-02 19:33:07 -05:00
rm -R " .blueprint/tmp/ $n "
throw 'missingComponentFiles'
fi
2023-12-28 18:59:12 -05:00
# remove components
2024-01-05 19:34:31 -05:00
sed -i "s~" " ${ s } @/blueprint/extensions/ ${ identifier } / $1 ${ e } " "~~g" " $co " /" $2 "
sed -i "s~" " < ${ identifier ^ } Component /> " "~~g" " $co " /" $2 "
2023-12-28 18:59:12 -05:00
# add components
2024-01-05 19:34:31 -05:00
sed -i "s~" " $im " "~" " ${ im } ${ s } @/blueprint/extensions/ ${ identifier } / $1 ${ e } " "~g" " $co " /" $2 "
sed -i "s~" " $re " "~" " ${ re } \< ${ identifier ^ } Component /\> " "~g" " $co " /" $2 "
2023-12-28 18:59:12 -05:00
fi
}
2023-12-28 18:05:30 -05:00
2024-01-05 17:58:46 -05:00
# place component items
2024-01-05 19:58:57 -05:00
# -> PLACE_REACT "$Components_" "path/.tsx" "$OldComponents_"
2024-01-06 10:32:17 -05:00
# navigation
2024-01-05 19:34:31 -05:00
PLACE_REACT " $Components_Navigation_NavigationBar_BeforeNavigation " "Navigation/NavigationBar/BeforeNavigation.tsx" " $OldComponents_Navigation_NavigationBar_BeforeNavigation "
PLACE_REACT " $Components_Navigation_NavigationBar_AdditionalItems " "Navigation/NavigationBar/AdditionalItems.tsx" " $OldComponents_Navigation_NavigationBar_AdditionalItems "
PLACE_REACT " $Components_Navigation_NavigationBar_AfterNavigation " "Navigation/NavigationBar/AfterNavigation.tsx" " $OldComponents_Navigation_NavigationBar_AfterNavigation "
2024-01-06 17:07:18 -05:00
PLACE_REACT " $Components_Navigation_SubNavigation_BeforeSubNavigation " "Navigation/SubNavigation/BeforeSubNavigation.tsx" " $OldComponents_Navigation_SubNavigation_BeforeSubNavigation "
PLACE_REACT " $Components_Navigation_SubNavigation_AdditionalServerItems " "Navigation/SubNavigation/AdditionalServerItems.tsx" " $OldComponents_Navigation_SubNavigation_AdditionalServerItems "
PLACE_REACT " $Components_Navigation_SubNavigation_AdditionalAccountItems " "Navigation/SubNavigation/AdditionalAccountItems.tsx" " $OldComponents_Navigation_SubNavigation_AdditionalAccountItems "
PLACE_REACT " $Components_Navigation_SubNavigation_AfterSubNavigation " "Navigation/SubNavigation/AfterSubNavigation.tsx" " $OldComponents_Navigation_SubNavigation_AfterSubNavigation "
2024-01-06 10:32:17 -05:00
2024-01-06 15:24:36 -05:00
# dashboard
PLACE_REACT " $Components_Dashboard_ServerRow_BeforeEntryName " "Dashboard/ServerRow/BeforeEntryName.tsx" " $OldComponents_Dashboard_ServerRow_BeforeEntryName "
PLACE_REACT " $Components_Dashboard_ServerRow_AfterEntryName " "Dashboard/ServerRow/AfterEntryName.tsx" " $OldComponents_Dashboard_ServerRow_AfterEntryName "
PLACE_REACT " $Components_Dashboard_ServerRow_BeforeEntryDescription " "Dashboard/ServerRow/BeforeEntryDescription.tsx" " $OldComponents_Dashboard_ServerRow_BeforeEntryDescription "
PLACE_REACT " $Components_Dashboard_ServerRow_AfterEntryDescription " "Dashboard/ServerRow/AfterEntryDescription.tsx" " $OldComponents_Dashboard_ServerRow_AfterEntryDescription "
PLACE_REACT " $Components_Dashboard_ServerRow_ResourceLimits " "Dashboard/ServerRow/ResourceLimits.tsx" " $OldComponents_Dashboard_ServerRow_ResourceLimits "
2024-01-06 10:32:17 -05:00
# server
2024-01-05 19:34:31 -05:00
PLACE_REACT " $Components_Server_Terminal_BeforeContent " "Server/Terminal/BeforeContent.tsx" " $OldComponents_Server_Terminal_BeforeContent "
PLACE_REACT " $Components_Server_Terminal_AfterContent " "Server/Terminal/AfterContent.tsx" " $OldComponents_Server_Terminal_AfterContent "
2024-01-05 19:58:57 -05:00
2024-01-05 19:34:31 -05:00
PLACE_REACT " $Components_Server_Files_Browse_BeforeContent " "Server/Files/Browse/BeforeContent.tsx" " $OldComponents_Server_Files_Browse_BeforeContent "
PLACE_REACT " $Components_Server_Files_Browse_FileButtons " "Server/Files/Browse/FileButtons.tsx" " $OldComponents_Server_Files_Browse_FileButtons "
2024-01-06 15:40:40 -05:00
PLACE_REACT " $Components_Server_Files_Browse_DropdownItems " "Server/Files/Browse/DropdownItems.tsx" " $OldComponents_Server_Files_Browse_DropdownItems "
2024-01-05 19:34:31 -05:00
PLACE_REACT " $Components_Server_Files_Browse_AfterContent " "Server/Files/Browse/AfterContent.tsx" " $OldComponents_Server_Files_Browse_AfterContent "
PLACE_REACT " $Components_Server_Files_Edit_BeforeEdit " "Server/Files/Edit/BeforeEdit.tsx" " $OldComponents_Server_Files_Edit_BeforeEdit "
PLACE_REACT " $Components_Server_Files_Edit_AfterEdit " "Server/Files/Edit/AfterEdit.tsx" " $OldComponents_Server_Files_Edit_AfterEdit "
2024-01-05 19:58:57 -05:00
PLACE_REACT " $Components_Server_Databases_BeforeContent " "Server/Databases/BeforeContent.tsx" " $OldComponents_Server_Databases_BeforeContent "
PLACE_REACT " $Components_Server_Databases_AfterContent " "Server/Databases/AfterContent.tsx" " $OldComponents_Server_Databases_AfterContent "
PLACE_REACT " $Components_Server_Schedules_List_BeforeContent " "Server/Schedules/List/BeforeContent.tsx" " $OldComponents_Server_Schedules_List_BeforeContent "
PLACE_REACT " $Components_Server_Schedules_List_AfterContent " "Server/Schedules/List/AfterContent.tsx" " $OldComponents_Server_Schedules_List_AfterContent "
PLACE_REACT " $Components_Server_Schedules_Edit_BeforeEdit " "Server/Schedules/Edit/BeforeEdit.tsx" " $OldComponents_Server_Schedules_Edit_BeforeEdit "
PLACE_REACT " $Components_Server_Schedules_Edit_AfterEdit " "Server/Schedules/Edit/AfterEdit.tsx" " $OldComponents_Server_Schedules_Edit_AfterEdit "
2024-01-05 17:58:46 -05:00
2024-01-05 20:48:45 -05:00
PLACE_REACT " $Components_Server_Users_BeforeContent " "Server/Users/BeforeContent.tsx" " $OldComponents_Server_Users_BeforeContent "
PLACE_REACT " $Components_Server_Users_AfterContent " "Server/Users/AfterContent.tsx" " $OldComponents_Server_Users_AfterContent "
PLACE_REACT " $Components_Server_Backups_BeforeContent " "Server/Backups/BeforeContent.tsx" " $OldComponents_Server_Backups_BeforeContent "
2024-01-06 15:40:40 -05:00
PLACE_REACT " $Components_Server_Backups_DropdownItems " "Server/Backups/DropdownItems.tsx" " $OldComponents_Server_Backups_DropdownItems "
2024-01-05 20:48:45 -05:00
PLACE_REACT " $Components_Server_Backups_AfterContent " "Server/Backups/AfterContent.tsx" " $OldComponents_Server_Backups_AfterContent "
PLACE_REACT " $Components_Server_Network_BeforeContent " "Server/Network/BeforeContent.tsx" " $OldComponents_Server_Network_BeforeContent "
PLACE_REACT " $Components_Server_Network_AfterContent " "Server/Network/AfterContent.tsx" " $OldComponents_Server_Network_AfterContent "
PLACE_REACT " $Components_Server_Startup_BeforeContent " "Server/Startup/BeforeContent.tsx" " $OldComponents_Server_Startup_BeforeContent "
PLACE_REACT " $Components_Server_Startup_AfterContent " "Server/Startup/AfterContent.tsx" " $OldComponents_Server_Startup_AfterContent "
PLACE_REACT " $Components_Server_Settings_BeforeContent " "Server/Settings/BeforeContent.tsx" " $OldComponents_Server_Settings_BeforeContent "
PLACE_REACT " $Components_Server_Settings_AfterContent " "Server/Settings/AfterContent.tsx" " $OldComponents_Server_Settings_AfterContent "
2024-01-06 10:32:17 -05:00
# account
PLACE_REACT " $Components_Account_Overview_BeforeContent " "Account/Overview/BeforeContent.tsx" " $OldComponents_Account_Overview_BeforeContent "
PLACE_REACT " $Components_Account_Overview_AfterContent " "Account/Overview/AfterContent.tsx" " $OldComponents_Account_Overview_AfterContent "
PLACE_REACT " $Components_Account_API_BeforeContent " "Account/API/BeforeContent.tsx" " $OldComponents_Account_API_BeforeContent "
PLACE_REACT " $Components_Account_API_AfterContent " "Account/API/AfterContent.tsx" " $OldComponents_Account_API_AfterContent "
PLACE_REACT " $Components_Account_SSH_BeforeContent " "Account/SSH/BeforeContent.tsx" " $OldComponents_Account_SSH_BeforeContent "
PLACE_REACT " $Components_Account_SSH_AfterContent " "Account/SSH/AfterContent.tsx" " $OldComponents_Account_SSH_AfterContent "
2023-12-28 15:03:05 -05:00
else
2023-12-28 15:24:17 -05:00
# warn about missing components.yml file
2024-01-15 11:40:12 -05:00
PRINT WARNING " Could not find ' $dashboard_components /Components.yml', component extendability might be limited. "
2023-12-28 15:03:05 -05:00
fi
fi
# Create and link public directory.
2023-06-11 14:58:20 -04:00
if [ [ $data_public != "" ] ] ; then
2024-01-15 11:40:12 -05:00
PRINT INFO "Cloning and linking public directory.."
2023-11-08 10:01:39 -05:00
mkdir -p " .blueprint/extensions/ $identifier /public "
2023-12-17 06:51:06 -05:00
cd $FOLDER /public/extensions || throw 'cdMissingDirectory'
2023-12-22 10:06:02 -05:00
ln -s -T $FOLDER /.blueprint/extensions/" $identifier " /public " $identifier " 2>> $BLUEPRINT__DEBUG
2023-12-17 06:51:06 -05:00
cd $FOLDER || throw 'cdMissingDirectory'
2023-10-24 09:13:09 -04:00
log_bright "[INFO] Placing public directory contents.."
2023-12-22 10:06:02 -05:00
cp -R " .blueprint/tmp/ $n / $data_public / " * " .blueprint/extensions/ $identifier /public/ " 2>> $BLUEPRINT__DEBUG
2023-08-15 06:23:40 -04:00
fi
2023-06-02 10:37:38 -04:00
2024-01-15 11:40:12 -05:00
if [ [ $admin_controller = = "" ] ] ; then
controller_type = "default"
else
controller_type = "custom"
fi
2023-12-28 15:03:05 -05:00
# Prepare build files.
2023-12-22 10:06:02 -05:00
cp ".blueprint/extensions/blueprint/private/build/extensions/admin.blade.php" ".blueprint/extensions/blueprint/private/build/extensions/admin.blade.php.bak" 2>> $BLUEPRINT__DEBUG
2023-12-17 06:51:06 -05:00
if [ [ $controller_type = = "default" ] ] ; then # use default controller when admin_controller is left blank
2023-12-22 10:06:02 -05:00
cp ".blueprint/extensions/blueprint/private/build/extensions/controller.php" ".blueprint/extensions/blueprint/private/build/extensions/controller.php.bak" 2>> $BLUEPRINT__DEBUG
2023-08-15 06:23:40 -04:00
fi
2023-12-22 10:06:02 -05:00
cp ".blueprint/extensions/blueprint/private/build/extensions/route.php" ".blueprint/extensions/blueprint/private/build/extensions/route.php.bak" 2>> $BLUEPRINT__DEBUG
cp ".blueprint/extensions/blueprint/private/build/extensions/button.blade.php" ".blueprint/extensions/blueprint/private/build/extensions/button.blade.php.bak" 2>> $BLUEPRINT__DEBUG
2023-06-02 10:37:38 -04:00
2023-12-28 15:03:05 -05:00
2023-07-12 08:18:43 -04:00
# Start creating data directory.
2023-10-24 09:13:09 -04:00
log_bright "[INFO] Creating data directory.."
2023-11-08 10:01:39 -05:00
mkdir -p " .blueprint/extensions/ $identifier /private "
mkdir -p " .blueprint/extensions/ $identifier /private/.store "
2023-07-12 08:18:43 -04:00
2023-10-24 09:13:09 -04:00
log_bright "[INFO] Caching extension config inside of data directory.."
2024-01-05 18:43:46 -05:00
cp " .blueprint/tmp/ $n /conf.yml " " .blueprint/extensions/ $identifier /private/.store/conf.yml " #backup conf.yml
if [ [ -f " .blueprint/tmp/ $n / $dashboard_components /Components.yml " ] ] ; then
cp " .blueprint/tmp/ $n / $dashboard_components /Components.yml " " .blueprint/extensions/ $identifier /private/.store/Components.yml " #backup Components.yml
fi
2023-07-12 08:18:43 -04:00
2023-06-11 14:58:20 -04:00
if [ [ $data_directory != "" ] ] ; then
2023-10-24 09:13:09 -04:00
log_bright "[INFO] Placing private directory contents.."
2023-11-08 10:01:39 -05:00
cp -R " .blueprint/tmp/ $n / $data_directory / " * " .blueprint/extensions/ $identifier /private/ "
2023-08-15 06:23:40 -04:00
fi
2023-07-12 08:18:43 -04:00
# End creating data directory.
2023-06-02 10:37:38 -04:00
2023-12-28 15:03:05 -05:00
2023-11-08 10:51:32 -05:00
# Link and create assets folder.
2023-11-24 06:11:55 -05:00
if [ [ $DUPLICATE != "y" ] ] ; then
# Create assets folder if the extension is not updating.
2023-12-17 06:51:06 -05:00
mkdir .blueprint/extensions/" $identifier " /assets
2023-11-24 06:11:55 -05:00
fi
2023-12-17 06:51:06 -05:00
cd $FOLDER /public/assets/extensions || throw 'cdMissingDirectory'
2023-12-22 10:06:02 -05:00
ln -s -T $FOLDER /.blueprint/extensions/" $identifier " /assets " $identifier " 2>> $BLUEPRINT__DEBUG
2023-12-17 06:51:06 -05:00
cd $FOLDER || throw 'cdMissingDirectory'
2023-08-31 11:19:50 -04:00
if [ [ $icon = = "" ] ] ; then
# use random placeholder icon if extension does not
# come with an icon.
2023-12-22 11:51:20 -05:00
icnNUM = $(( 1 + RANDOM % 9 ))
2023-11-08 10:01:39 -05:00
cp " .blueprint/assets/defaultExtensionLogo $icnNUM .jpg " " .blueprint/extensions/ $identifier /assets/icon.jpg "
2023-08-31 11:19:50 -04:00
else
2023-11-08 10:01:39 -05:00
cp " .blueprint/tmp/ $n / $icon " " .blueprint/extensions/ $identifier /assets/icon.jpg "
2023-08-31 11:19:50 -04:00
fi ;
2023-08-15 06:23:40 -04:00
ICON = " /assets/extensions/ $identifier /icon.jpg "
2023-12-17 06:51:06 -05:00
CONTENT = $( cat .blueprint/tmp/" $n " /" $admin_view " )
2023-06-02 10:37:38 -04:00
2023-07-21 10:00:56 -04:00
if [ [ $admin_css != "" ] ] ; then
2023-10-24 09:13:09 -04:00
log_bright "[INFO] Placing admin css.."
2023-08-15 06:23:40 -04:00
updateCacheReminder
2023-12-03 12:48:41 -05:00
sed -i " s~@import url(/assets/extensions/ $identifier /admin.style.css);~~g " ".blueprint/extensions/blueprint/assets/admin.extensions.css"
echo -e " @import url(/assets/extensions/ $identifier /admin.style.css); " >> ".blueprint/extensions/blueprint/assets/admin.extensions.css"
2023-11-08 10:01:39 -05:00
cp " .blueprint/tmp/ $n / $admin_css " " .blueprint/extensions/ $identifier /assets/admin.style.css "
2023-08-15 06:23:40 -04:00
fi
2023-07-28 08:04:46 -04:00
if [ [ $dashboard_css != "" ] ] ; then
2023-10-24 09:13:09 -04:00
log_bright "[INFO] Placing dashboard css.."
2023-08-15 06:23:40 -04:00
YARN = "y"
2024-01-05 10:55:56 -05:00
sed -i " s~@import url(./imported/ $identifier .css);~~g " "resources/scripts/blueprint/css/extensions.css"
echo -e " @import url(./imported/ $identifier .css); " >> "resources/scripts/blueprint/css/extensions.css"
2023-12-28 11:56:33 -05:00
cp " .blueprint/tmp/ $n / $dashboard_css " " resources/scripts/blueprint/css/imported/ $identifier .css "
2023-08-15 06:23:40 -04:00
fi
2023-06-02 10:37:38 -04:00
2023-10-01 08:25:10 -04:00
if [ [ $name = = *"~" * ] ] ; then log_yellow "[WARNING] 'name' contains '~' and may result in an error." ; fi
2023-08-15 06:23:40 -04:00
if [ [ $description = = *"~" * ] ] ; then log_yellow "[WARNING] 'description' contains '~' and may result in an error." ; fi
2023-10-01 08:25:10 -04:00
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
2023-10-01 08:25:10 -04:00
# Replace $name variables.
2023-11-08 10:01:39 -05:00
sed -i " s~␀title␀~ $name ~g " ".blueprint/extensions/blueprint/private/build/extensions/admin.blade.php.bak"
sed -i " s~␀name␀~ $name ~g " ".blueprint/extensions/blueprint/private/build/extensions/admin.blade.php.bak"
sed -i " s~␀name␀~ $name ~g " ".blueprint/extensions/blueprint/private/build/extensions/button.blade.php.bak"
2023-06-02 10:37:38 -04:00
2023-10-01 08:25:10 -04:00
# Replace $description variables.
2023-11-08 10:01:39 -05:00
sed -i " s~␀description␀~ $description ~g " ".blueprint/extensions/blueprint/private/build/extensions/admin.blade.php.bak"
2023-06-02 10:37:38 -04:00
2023-10-01 08:25:10 -04:00
# Replace $version variables.
2023-11-08 10:01:39 -05:00
sed -i " s~␀version␀~ $version ~g " ".blueprint/extensions/blueprint/private/build/extensions/admin.blade.php.bak"
sed -i " s~␀version␀~ $version ~g " ".blueprint/extensions/blueprint/private/build/extensions/button.blade.php.bak"
2023-06-02 10:37:38 -04:00
2023-10-01 08:25:10 -04:00
# Replace $ICON variables.
2023-11-08 10:01:39 -05:00
sed -i " s~␀icon␀~ $ICON ~g " ".blueprint/extensions/blueprint/private/build/extensions/admin.blade.php.bak"
2023-06-02 10:37:38 -04:00
2023-10-01 08:25:10 -04:00
# Replace $website variables.
2023-06-19 15:04:06 -04:00
if [ [ $website != "" ] ] ; then
2023-11-08 10:01:39 -05:00
sed -i " s~␀website␀~ $website ~g " ".blueprint/extensions/blueprint/private/build/extensions/admin.blade.php.bak"
sed -i "s~<!--websitecomment␀ ~~g" ".blueprint/extensions/blueprint/private/build/extensions/admin.blade.php.bak"
sed -i "s~ ␀websitecomment-->~~g" ".blueprint/extensions/blueprint/private/build/extensions/admin.blade.php.bak"
sed -i " s~␀weblinkicon␀~ $websiteiconclass ~g " ".blueprint/extensions/blueprint/private/build/extensions/admin.blade.php.bak"
2023-08-15 06:23:40 -04:00
fi
2023-06-19 15:04:06 -04:00
2023-10-01 08:25:10 -04:00
# Replace $identifier variables.
2023-12-17 06:51:06 -05:00
if [ [ $controller_type = = "default" ] ] ; then
2023-11-08 10:01:39 -05:00
sed -i " s~␀id␀~ $identifier ~g " ".blueprint/extensions/blueprint/private/build/extensions/controller.php.bak"
2023-08-15 06:23:40 -04:00
fi
2023-11-08 10:01:39 -05:00
sed -i " s~␀id␀~ $identifier ~g " ".blueprint/extensions/blueprint/private/build/extensions/route.php.bak"
sed -i " s~␀id␀~ $identifier ~g " ".blueprint/extensions/blueprint/private/build/extensions/button.blade.php.bak"
2023-08-15 06:23:40 -04:00
2023-10-01 08:25:10 -04:00
# Place extension admin view content into template.
2023-11-08 10:01:39 -05:00
echo -e " $CONTENT \n@endsection " >> ".blueprint/extensions/blueprint/private/build/extensions/admin.blade.php.bak"
2023-10-01 08:25:10 -04:00
# Read final results.
2023-11-08 10:01:39 -05:00
ADMINVIEW_RESULT = $( <.blueprint/extensions/blueprint/private/build/extensions/admin.blade.php.bak)
ADMINROUTE_RESULT = $( <.blueprint/extensions/blueprint/private/build/extensions/route.php.bak)
ADMINBUTTON_RESULT = $( <.blueprint/extensions/blueprint/private/build/extensions/button.blade.php.bak)
2023-12-17 06:51:06 -05:00
if [ [ $controller_type = = "default" ] ] ; then
2023-11-08 10:01:39 -05:00
ADMINCONTROLLER_RESULT = $( <.blueprint/extensions/blueprint/private/build/extensions/controller.php.bak)
2023-08-15 06:23:40 -04:00
fi
2023-10-25 16:28:52 -04:00
ADMINCONTROLLER_NAME = " ${ identifier } ExtensionController.php "
2023-06-02 10:37:38 -04:00
2023-10-01 08:25:10 -04:00
# Place admin extension view.
2023-10-25 16:28:52 -04:00
mkdir -p " resources/views/admin/extensions/ $identifier "
touch " resources/views/admin/extensions/ $identifier /index.blade.php "
2023-12-17 06:51:06 -05:00
echo " $ADMINVIEW_RESULT " > " resources/views/admin/extensions/ $identifier /index.blade.php "
2023-06-02 10:37:38 -04:00
2023-10-01 08:25:10 -04:00
# Place admin extension view controller.
2023-10-25 16:28:52 -04:00
mkdir -p " app/Http/Controllers/Admin/Extensions/ $identifier "
touch " app/Http/Controllers/Admin/Extensions/ $identifier / $ADMINCONTROLLER_NAME "
2023-12-17 06:51:06 -05:00
if [ [ $controller_type = = "default" ] ] ; then
2023-10-01 08:25:10 -04:00
# Use custom view controller.
2023-10-25 16:28:52 -04:00
touch " app/Http/Controllers/Admin/Extensions/ $identifier / $ADMINCONTROLLER_NAME "
2023-12-17 06:51:06 -05:00
echo " $ADMINCONTROLLER_RESULT " > " app/Http/Controllers/Admin/Extensions/ $identifier / $ADMINCONTROLLER_NAME "
2023-06-02 10:37:38 -04:00
else
2023-10-01 08:25:10 -04:00
# Use default extension controller.
2023-12-17 06:51:06 -05:00
cp .blueprint/tmp/" $n " /" $admin_controller " " app/Http/Controllers/Admin/Extensions/ $identifier / $ADMINCONTROLLER_NAME "
2023-08-15 06:23:40 -04:00
fi
2023-06-02 10:37:38 -04:00
2023-07-20 09:36:58 -04:00
if [ [ $DUPLICATE != "y" ] ] ; then
2023-10-01 08:25:10 -04:00
# Place admin route if extension is not updating.
2023-10-10 15:40:54 -04:00
{ echo "
// $identifier :start" ;
2023-12-17 06:51:06 -05:00
echo " $ADMINROUTE_RESULT " ;
echo // " $identifier " :stop; } >> "routes/admin.php"
2023-10-01 08:25:10 -04:00
else
# Replace old extensions page button if extension is updating.
2023-12-17 06:51:06 -05:00
OLDBUTTON_RESULT = $( <.blueprint/extensions/" $identifier " /private/.store/build/button.blade.php)
2023-10-26 07:01:33 -04:00
sed -i " s~ $OLDBUTTON_RESULT ~~g " "resources/views/admin/extensions.blade.php"
2023-08-15 06:23:40 -04:00
fi
2023-10-26 07:01:33 -04:00
sed -i " s~<!--␀replace␀-->~ $ADMINBUTTON_RESULT \n<!--␀replace␀-->~g " "resources/views/admin/extensions.blade.php"
2023-06-02 10:37:38 -04:00
2023-10-01 08:25:10 -04:00
# Place dashboard wrapper
2023-07-13 15:27:05 -04:00
if [ [ $dashboard_wrapper != "" ] ] ; then
2023-10-24 09:13:09 -04:00
log_bright "[INFO] Placing dashboard wrapper.."
2023-07-22 07:13:00 -04:00
if [ [ $DUPLICATE = = "y" ] ] ; then
2023-10-26 07:01:33 -04:00
sed -n -i " /<!--␀ $identifier :start␀-->/{p; :a; N; /<!--␀ $identifier :stop␀-->/!ba; s/.*\n//}; p " "resources/views/templates/wrapper.blade.php"
2023-12-18 15:39:47 -05:00
sed -i " s~<!--␀ $identifier :start␀-->~~g " "resources/views/templates/wrapper.blade.php"
sed -i " s~<!--␀ $identifier :stop␀-->~~g " "resources/views/templates/wrapper.blade.php"
2023-08-15 06:23:40 -04:00
fi
2023-10-26 07:01:33 -04:00
touch " .blueprint/tmp/ $n / $dashboard_wrapper .BLUEPRINTBAK "
cat <( echo " <!--␀ $identifier :start␀--> " ) " .blueprint/tmp/ $n / $dashboard_wrapper " > " .blueprint/tmp/ $n / $dashboard_wrapper .BLUEPRINTBAK "
cp " .blueprint/tmp/ $n / $dashboard_wrapper .BLUEPRINTBAK " " .blueprint/tmp/ $n / $dashboard_wrapper "
rm " .blueprint/tmp/ $n / $dashboard_wrapper .BLUEPRINTBAK "
echo -e " \n<!--␀ $identifier :stop␀--> " >> " .blueprint/tmp/ $n / $dashboard_wrapper "
sed -i " /<\!-- wrapper:insert -->/r .blueprint/tmp/ $n / $dashboard_wrapper " "resources/views/templates/wrapper.blade.php"
2023-08-15 06:23:40 -04:00
fi
2023-07-13 04:41:44 -04:00
2023-10-01 08:25:10 -04:00
# Place admin wrapper
2023-07-21 11:32:22 -04:00
if [ [ $admin_wrapper != "" ] ] ; then
2023-10-24 09:13:09 -04:00
log_bright "[INFO] Placing admin wrapper.."
2023-07-22 07:13:00 -04:00
if [ [ $DUPLICATE = = "y" ] ] ; then
2023-10-26 07:01:33 -04:00
sed -n -i " /<!--␀ $identifier :start␀-->/{p; :a; N; /<!--␀ $identifier :stop␀-->/!ba; s/.*\n//}; p " "resources/views/layouts/admin.blade.php"
2023-12-18 15:39:47 -05:00
sed -i " s~<!--␀ $identifier :start␀-->~~g " "resources/views/layouts/admin.blade.php"
sed -i " s~<!--␀ $identifier :stop␀-->~~g " "resources/views/layouts/admin.blade.php"
2023-08-15 06:23:40 -04:00
fi
2023-10-26 07:01:33 -04:00
touch " .blueprint/tmp/ $n / $admin_wrapper .BLUEPRINTBAK "
cat <( echo " <!--␀ $identifier :start␀--> " ) " .blueprint/tmp/ $n / $admin_wrapper " > " .blueprint/tmp/ $n / $admin_wrapper .BLUEPRINTBAK "
cp " .blueprint/tmp/ $n / $admin_wrapper .BLUEPRINTBAK " " .blueprint/tmp/ $n / $admin_wrapper "
rm " .blueprint/tmp/ $n / $admin_wrapper .BLUEPRINTBAK "
echo -e " \n<!--␀ $identifier :stop␀--> " >> " .blueprint/tmp/ $n / $admin_wrapper "
sed -i " /<\!-- wrapper:insert -->/r .blueprint/tmp/ $n / $admin_wrapper " "resources/views/layouts/admin.blade.php"
2023-08-15 06:23:40 -04:00
fi
2023-07-20 11:26:09 -04:00
2023-07-22 06:40:00 -04:00
# Create backup of generated values.
2023-08-15 06:23:40 -04:00
log_bright "[INFO] Backing up (some) build files.."
2023-11-08 10:01:39 -05:00
mkdir -p " .blueprint/extensions/ $identifier /private/.store/build "
cp ".blueprint/extensions/blueprint/private/build/extensions/button.blade.php.bak" " .blueprint/extensions/ $identifier /private/.store/build/button.blade.php "
cp ".blueprint/extensions/blueprint/private/build/extensions/route.php.bak" " .blueprint/extensions/ $identifier /private/.store/build/route.php "
2023-07-22 06:40:00 -04:00
2023-10-01 08:25:10 -04:00
# Remove temporary built files.
log_bright "[INFO] Cleaning up temporary built files.."
2023-11-08 10:01:39 -05:00
rm ".blueprint/extensions/blueprint/private/build/extensions/admin.blade.php.bak"
2023-12-17 06:51:06 -05:00
if [ [ $controller_type = = "default" ] ] ; then
2023-11-08 10:01:39 -05:00
rm ".blueprint/extensions/blueprint/private/build/extensions/controller.php.bak"
2023-08-15 06:23:40 -04:00
fi
2023-11-08 10:01:39 -05:00
rm ".blueprint/extensions/blueprint/private/build/extensions/route.php.bak"
rm ".blueprint/extensions/blueprint/private/build/extensions/button.blade.php.bak"
2023-08-15 06:23:40 -04:00
log_bright "[INFO] Cleaning up temp files.."
2023-10-26 07:01:33 -04:00
rm -R " .blueprint/tmp/ $n "
2023-06-02 10:37:38 -04:00
2023-06-11 14:58:20 -04:00
if [ [ $database_migrations != "" ] ] ; then
2023-08-23 15:42:34 -04:00
log_blue "[INPUT] Do you want to migrate your database? (Y/n)"
2023-10-10 15:28:42 -04:00
read -r YN
2023-09-24 09:58:26 -04:00
if [ [ ( $YN = = "y" * ) || ( $YN = = "Y" * ) || ( $YN = = "" ) ] ] ; then
2023-08-23 15:42:34 -04:00
log_bright "[INFO] Running database migrations.."
php artisan migrate --force
else
log_bright "[INFO] Database migrations have been skipped."
fi
2023-08-15 06:23:40 -04:00
fi
2023-06-02 10:37:38 -04:00
2023-09-24 09:58:26 -04:00
if [ [ $YARN = = "y" ] ] ; then
2023-12-28 16:02:55 -05:00
if [ [ ( $F_developerIgnoreRebuild = = true ) && ( $dev = = true ) ] ] ; then
2023-12-28 15:45:00 -05:00
log_yellow "[WARNING] Rebuilding skipped due to 'developerIgnoreRebuild' flag being present."
else
2023-12-11 09:56:05 -05:00
log_bright "[INFO] Rebuilding panel.."
yarn run build:production
fi
2023-09-24 09:58:26 -04:00
fi
log_bright "[INFO] Updating route cache to include recent changes.."
2023-12-22 10:06:02 -05:00
php artisan route:cache & >> $BLUEPRINT__DEBUG
2023-09-24 09:58:26 -04:00
2023-11-08 10:01:39 -05:00
chown -R www-data:www-data " $FOLDER /.blueprint/extensions/ $identifier /private "
2023-12-22 10:06:02 -05:00
chmod --silent -R +x ".blueprint/extensions/" * 2>> $BLUEPRINT__DEBUG
2023-06-02 10:37:38 -04:00
2023-12-11 15:25:44 -05:00
if [ [ ( $F_developerIgnoreInstallScript = = false ) || ( $dev != true ) ] ] ; then
2023-12-11 09:50:54 -05:00
if $F_hasInstallScript ; then
2023-10-16 14:20:25 -04:00
log_yellow "[WARNING] This extension uses a custom installation script, proceed with caution."
2023-11-08 10:01:39 -05:00
chmod +x " .blueprint/extensions/ $identifier /private/install.sh "
2023-11-25 07:38:37 -05:00
2023-11-14 15:17:11 -05:00
# Run script while also parsing some useful variables for the install script to use.
2023-11-25 07:39:35 -05:00
EXTENSION_IDENTIFIER = " $identifier " \
EXTENSION_TARGET = " $target " \
EXTENSION_VERSION = " $version " \
PTERODACTYL_DIRECTORY = " $FOLDER " \
BLUEPRINT_VERSION = " $VERSION " \
BLUEPRINT_DEVELOPER = " $dev " \
2023-11-25 07:38:37 -05:00
bash " .blueprint/extensions/ $identifier /private/install.sh "
2023-10-16 14:20:25 -04:00
echo -e "\e[0m\x1b[0m\033[0m"
fi
else
log_bright "[INFO] Custom installation scripts will be skipped on developer commands due to the 'developerIgnoreInstallScript' flag."
2023-08-15 06:23:40 -04:00
fi
2023-06-02 10:37:38 -04:00
2023-07-20 09:36:58 -04:00
if [ [ $DUPLICATE != "y" ] ] ; then
2023-11-08 10:01:39 -05:00
echo " ${ identifier } , " >> ".blueprint/extensions/blueprint/private/db/installed_extensions"
2023-08-15 06:23:40 -04:00
log_bright " [INFO] Added ' $identifier ' to the list of installed extensions. "
fi
2023-07-20 09:36:58 -04:00
2023-07-28 08:04:46 -04:00
if [ [ $dev != true ] ] ; then
2023-09-24 09:58:26 -04:00
if [ [ $DUPLICATE = = "y" ] ] ; then
2023-11-28 12:31:26 -05:00
log_green " \n\n[SUCCESS] $identifier should now be updated. "
2023-09-24 09:58:26 -04:00
else
2023-11-28 12:31:26 -05:00
log_green " \n\n[SUCCESS] $identifier should now be installed. "
2023-09-24 09:58:26 -04:00
fi
2023-12-22 10:06:02 -05:00
sendTelemetry "FINISH_EXTENSION_INSTALLATION" >> $BLUEPRINT__DEBUG
2023-11-28 12:31:26 -05:00
elif [ [ $dev = = true ] ] ; then
log_green " \n\n[SUCCESS] $identifier should now be built. "
2023-12-22 10:06:02 -05:00
sendTelemetry "BUILD_DEVELOPMENT_EXTENSION" >> $BLUEPRINT__DEBUG
2023-08-15 06:23:40 -04:00
fi
fi
2023-03-22 05:20:59 -04:00
2023-07-30 07:28:03 -04:00
# -r, -remove
2023-08-15 06:23:40 -04:00
if [ [ ( $2 = = "-r" ) || ( $2 = = "-remove" ) ] ] ; then VCMD = "y"
2023-12-22 11:51:20 -05:00
if [ [ $(( $# - 2 )) != 1 ] ] ; then quit_red " [FATAL] Expected 1 argument but got $(( $# - 2 )) . " ; fi
2023-07-30 07:28:03 -04:00
# Check if the extension is installed.
2023-11-08 10:01:39 -05:00
if [ [ $( cat ".blueprint/extensions/blueprint/private/db/installed_extensions" ) != *" $identifier , " * ] ] ; then
2023-08-15 06:23:40 -04:00
quit_red " [FATAL] ' $3 ' is not installed. "
fi
2023-07-30 07:28:03 -04:00
2023-11-08 10:01:39 -05:00
if [ [ -f " .blueprint/extensions/ $3 /private/.store/conf.yml " ] ] ; then
2023-12-22 11:51:20 -05:00
eval " $( parse_yaml " .blueprint/extensions/ $3 /private/.store/conf.yml " conf_) "
2023-07-30 07:28:03 -04:00
# Add aliases for config values to make working with them easier.
2023-07-30 16:22:08 -04:00
name = " $conf_info_name " ;
2023-08-15 06:23:40 -04:00
identifier = " $conf_info_identifier "
description = " $conf_info_description "
2023-10-01 08:25:10 -04:00
flags = " $conf_info_flags " #(optional)
2023-08-15 06:23:40 -04:00
version = " $conf_info_version "
target = " $conf_info_target "
2023-10-01 08:25:10 -04:00
author = " $conf_info_author " #(optional)
icon = " $conf_info_icon " #(optional)
2023-07-30 16:22:08 -04:00
website = " $conf_info_website " ; #(optional)
2023-08-15 06:23:40 -04:00
admin_view = " $conf_admin_view "
2023-07-30 16:22:08 -04:00
admin_controller = " $conf_admin_controller " ; #(optional)
admin_css = " $conf_admin_css " ; #(optional)
admin_wrapper = " $conf_admin_wrapper " ; #(optional)
dashboard_css = " $conf_dashboard_css " ; #(optional)
2023-12-06 15:18:01 -05:00
dashboard_wrapper = " $conf_dashboard_wrapper " ; #(optional)
2023-12-28 19:58:12 -05:00
dashboard_components = " $conf_dashboard_components " ; #(optional)
2023-07-30 16:22:08 -04:00
data_directory = " $conf_data_directory " ; #(optional)
data_public = " $conf_data_public " ; #(optional)
database_migrations = " $conf_database_migrations " ; #(optional)
2023-07-30 07:28:03 -04:00
else
2023-08-15 06:23:40 -04:00
quit_red "[FATAL] Backup conf.yml could not be found."
fi
2023-07-30 07:28:03 -04:00
2023-08-15 06:23:40 -04:00
log_blue "[INPUT] Are you sure you want to continue? Some extension files might not be removed as Blueprint does not keep track of them. (y/N)"
2023-10-10 15:28:42 -04:00
read -r YN
2023-08-16 12:45:50 -04:00
if [ [ ( $YN = = "n" * ) || ( $YN = = "N" * ) || ( $YN = = "" ) ] ] ; then log_bright "[INFO] Extension removal cancelled." ; exit 1; fi
2023-07-31 05:10:39 -04:00
2024-01-14 18:43:11 -05:00
PRINT INFO "Searching and validating framework dependencies.."
2023-12-11 09:34:26 -05:00
depend
2023-12-11 09:33:33 -05:00
# Assign variables to extension flags.
2024-01-15 11:40:12 -05:00
PRINT INFO "Reading and assigning extension flags.."
2023-12-11 09:33:33 -05:00
assignflags
2023-12-11 09:50:54 -05:00
if $F_hasRemovalScript ; then
2023-11-14 15:17:11 -05:00
log_yellow "[WARNING] This extension uses a custom removal script, proceed with caution."
chmod +x " .blueprint/extensions/ $identifier /private/remove.sh "
2023-11-25 07:38:37 -05:00
2023-11-14 15:17:11 -05:00
# Run script while also parsing some useful variables for the uninstall script to use.
2023-11-25 07:40:33 -05:00
EXTENSION_IDENTIFIER = " $identifier " \
EXTENSION_TARGET = " $target " \
EXTENSION_VERSION = " $version " \
PTERODACTYL_DIRECTORY = " $FOLDER " \
BLUEPRINT_VERSION = " $VERSION " \
2023-11-25 07:38:37 -05:00
bash " .blueprint/extensions/ $identifier /private/remove.sh "
2023-11-14 15:17:11 -05:00
echo -e "\e[0m\x1b[0m\033[0m"
fi
2023-07-30 12:22:10 -04:00
# Remove admin button
2023-08-15 06:23:40 -04:00
log_bright "[INFO] Removing admin button.."
2023-11-08 10:01:39 -05:00
OLDBUTTON_RESULT = $( cat " .blueprint/extensions/ $identifier /private/.store/build/button.blade.php " )
2023-10-26 07:05:04 -04:00
sed -i " s~ $OLDBUTTON_RESULT ~~g " "resources/views/admin/extensions.blade.php"
2023-07-30 12:22:10 -04:00
2023-10-01 08:25:10 -04:00
# Remove admin routes
2023-10-01 08:29:33 -04:00
log_bright "[INFO] Removing admin routes.."
2023-10-26 07:05:04 -04:00
sed -n -i " /\/\/ $identifier :start/{p; :a; N; /\/\/ $identifier :stop/!ba; s/.*\n//}; p " "routes/admin.php"
sed -i " s~// $identifier :start~~g " "routes/admin.php"
sed -i " s~// $identifier :stop~~g " "routes/admin.php"
2023-09-30 11:33:38 -04:00
2023-07-30 07:28:03 -04:00
# Remove admin view
2023-08-15 06:23:40 -04:00
log_bright "[INFO] Removing admin view.."
2023-10-26 07:05:04 -04:00
rm -R " resources/views/admin/extensions/ $identifier "
2023-07-30 12:22:10 -04:00
2023-07-30 07:28:03 -04:00
# Remove admin controller
2023-08-15 06:23:40 -04:00
log_bright "[INFO] Removing admin controller.."
2023-10-26 07:05:04 -04:00
rm -R " app/Http/Controllers/Admin/Extensions/ $identifier "
2023-07-30 12:22:10 -04:00
2023-07-30 07:28:03 -04:00
# Remove admin css
2023-07-30 12:22:10 -04:00
if [ [ $admin_css != "" ] ] ; then
2023-08-15 06:23:40 -04:00
log_bright "[INFO] Removing admin css.."
updateCacheReminder
2023-12-03 12:48:41 -05:00
sed -i " s~@import url(/assets/extensions/ $identifier /admin.style.css);~~g " ".blueprint/extensions/blueprint/assets/admin.extensions.css"
2023-08-15 06:23:40 -04:00
fi
2023-07-30 12:22:10 -04:00
2023-07-30 07:28:03 -04:00
# Remove admin wrapper
2023-07-30 12:22:10 -04:00
if [ [ $admin_wrapper != "" ] ] ; then
2023-08-15 06:23:40 -04:00
log_bright "[INFO] Removing admin wrapper.."
2023-10-26 07:05:04 -04:00
sed -n -i " /<!--␀ $identifier :start␀-->/{p; :a; N; /<!--␀ $identifier :stop␀-->/!ba; s/.*\n//}; p " "resources/views/layouts/admin.blade.php"
2023-12-18 15:39:47 -05:00
sed -i " s~<!--␀ $identifier :start␀-->~~g " "resources/views/layouts/admin.blade.php"
sed -i " s~<!--␀ $identifier :stop␀-->~~g " "resources/views/layouts/admin.blade.php"
2023-08-15 06:23:40 -04:00
fi
2023-07-30 12:22:10 -04:00
2023-07-30 07:28:03 -04:00
# Remove dashboard wrapper
2023-07-30 12:22:10 -04:00
if [ [ $dashboard_wrapper != "" ] ] ; then
2023-08-15 06:23:40 -04:00
log_bright "[INFO] Removing dashboard wrapper.."
2023-10-26 07:05:04 -04:00
sed -n -i " /<!--␀ $identifier :start␀-->/{p; :a; N; /<!--␀ $identifier :stop␀-->/!ba; s/.*\n//}; p " "resources/views/templates/wrapper.blade.php"
2023-12-18 15:39:47 -05:00
sed -i " s~<!--␀ $identifier :start␀-->~~g " "resources/views/templates/wrapper.blade.php"
sed -i " s~<!--␀ $identifier :stop␀-->~~g " "resources/views/templates/wrapper.blade.php"
2023-08-15 06:23:40 -04:00
fi
2023-07-30 12:22:10 -04:00
2023-07-30 07:28:03 -04:00
# Remove dashboard css
2023-07-30 12:22:10 -04:00
if [ [ $dashboard_css != "" ] ] ; then
2023-08-15 06:23:40 -04:00
log_bright "[INFO] Removing dashboard css.."
2024-01-05 10:55:56 -05:00
sed -i " s~@import url(./imported/ $identifier .css);~~g " "resources/scripts/blueprint/css/extensions.css"
2023-12-28 11:56:33 -05:00
rm " resources/scripts/blueprint/css/imported/ $identifier .css "
2023-08-15 06:23:40 -04:00
YARN = "y"
fi
2023-07-30 12:22:10 -04:00
2023-12-28 19:58:12 -05:00
# Remove dashboard components
if [ [ $dashboard_components != "" ] ] ; then
log_bright "[INFO] Removing dashboard components.."
rm $FOLDER /resources/scripts/blueprint/extensions/" $identifier "
# fetch component config
eval " $( parse_yaml .blueprint/extensions/" $identifier " /components/Components.yml Components_) "
# define static variables to make stuff a bit easier
im = "\/\* blueprint\/import \*\/" ; re = "{/\* blueprint\/react \*/}" ; co = "resources/scripts/blueprint/components"
s = " import ${ identifier ^ } Component from ' " ; e = "';"
REMOVE_REACT( ) {
2024-01-05 19:34:31 -05:00
if [ [ ! $1 = = "" ] ] ; then
2023-12-28 19:58:12 -05:00
# remove components
2024-01-05 19:34:31 -05:00
sed -i "s~" " ${ s } @/blueprint/extensions/ ${ identifier } / $1 ${ e } " "~~g" " $co " /" $2 "
2023-12-28 19:58:12 -05:00
sed -i "s~" " < ${ identifier ^ } Component /> " "~~g" " $co " /" $2 "
fi
}
2024-01-05 19:34:31 -05:00
# remove component items
2024-01-05 19:58:57 -05:00
# -> REMOVE_REACT "$Components_" "path/.tsx" "$OldComponents_"
2024-01-06 10:32:17 -05:00
# navigation
2024-01-05 19:34:31 -05:00
REMOVE_REACT " $Components_Navigation_NavigationBar_BeforeNavigation " "Navigation/NavigationBar/BeforeNavigation.tsx"
REMOVE_REACT " $Components_Navigation_NavigationBar_AdditionalItems " "Navigation/NavigationBar/AdditionalItems.tsx"
REMOVE_REACT " $Components_Navigation_NavigationBar_AfterNavigation " "Navigation/NavigationBar/AfterNavigation.tsx"
2024-01-06 17:07:18 -05:00
REMOVE_REACT " $Components_Navigation_SubNavigation_BeforeSubNavigation " "Navigation/SubNavigation/BeforeSubNavigation.tsx"
REMOVE_REACT " $Components_Navigation_SubNavigation_AdditionalServerItems " "Navigation/SubNavigation/AdditionalServerItems.tsx"
REMOVE_REACT " $Components_Navigation_SubNavigation_AdditionalAccountItems " "Navigation/SubNavigation/AdditionalAccountItems.tsx"
REMOVE_REACT " $Components_Navigation_SubNavigation_AfterSubNavigation " "Navigation/SubNavigation/AfterSubNavigation.tsx"
2024-01-05 19:34:31 -05:00
2024-01-06 10:32:17 -05:00
2024-01-06 15:24:36 -05:00
# dashboard
REMOVE_REACT " $Components_Dashboard_ServerRow_BeforeEntryName " "Dashboard/ServerRow/BeforeEntryName.tsx"
REMOVE_REACT " $Components_Dashboard_ServerRow_AfterEntryName " "Dashboard/ServerRow/AfterEntryName.tsx"
REMOVE_REACT " $Components_Dashboard_ServerRow_BeforeEntryDescription " "Dashboard/ServerRow/BeforeEntryDescription.tsx"
REMOVE_REACT " $Components_Dashboard_ServerRow_AfterEntryDescription " "Dashboard/ServerRow/AfterEntryDescription.tsx"
REMOVE_REACT " $Components_Dashboard_ServerRow_ResourceLimits " "Dashboard/ServerRow/ResourceLimits.tsx"
2024-01-06 10:32:17 -05:00
# server
2024-01-05 19:34:31 -05:00
REMOVE_REACT " $Components_Server_Terminal_BeforeContent " "Server/Terminal/BeforeContent.tsx"
REMOVE_REACT " $Components_Server_Terminal_AfterContent " "Server/Terminal/AfterContent.tsx"
2024-01-06 15:24:36 -05:00
2024-01-05 19:34:31 -05:00
REMOVE_REACT " $Components_Server_Files_Browse_BeforeContent " "Server/Files/Browse/BeforeContent.tsx"
REMOVE_REACT " $Components_Server_Files_Browse_FileButtons " "Server/Files/Browse/FileButtons.tsx"
2024-01-06 15:40:40 -05:00
REMOVE_REACT " $Components_Server_Files_Browse_DropdownItems " "Server/Files/Browse/DropdownItems.tsx"
2024-01-05 19:34:31 -05:00
REMOVE_REACT " $Components_Server_Files_Browse_AfterContent " "Server/Files/Browse/AfterContent.tsx"
REMOVE_REACT " $Components_Server_Files_Edit_BeforeEdit " "Server/Files/Edit/BeforeEdit.tsx"
REMOVE_REACT " $Components_Server_Files_Edit_AfterEdit " "Server/Files/Edit/AfterEdit.tsx"
2024-01-06 15:24:36 -05:00
2024-01-05 19:58:57 -05:00
REMOVE_REACT " $Components_Server_Databases_BeforeContent " "Server/Databases/BeforeContent.tsx"
REMOVE_REACT " $Components_Server_Databases_AfterContent " "Server/Databases/AfterContent.tsx"
REMOVE_REACT " $Components_Server_Schedules_List_BeforeContent " "Server/Schedules/List/BeforeContent.tsx"
REMOVE_REACT " $Components_Server_Schedules_List_AfterContent " "Server/Schedules/List/AfterContent.tsx"
REMOVE_REACT " $Components_Server_Schedules_Edit_BeforeEdit " "Server/Schedules/Edit/BeforeEdit.tsx"
REMOVE_REACT " $Components_Server_Schedules_Edit_AfterEdit " "Server/Schedules/Edit/AfterEdit.tsx"
2024-01-05 20:48:45 -05:00
REMOVE_REACT " $Components_Server_Users_BeforeContent " "Server/Users/BeforeContent.tsx"
REMOVE_REACT " $Components_Server_Users_AfterContent " "Server/Users/AfterContent.tsx"
REMOVE_REACT " $Components_Server_Backups_BeforeContent " "Server/Backups/BeforeContent.tsx"
2024-01-06 15:40:40 -05:00
REMOVE_REACT " $Components_Server_Backups_DropdownItems " "Server/Backups/DropdownItems.tsx"
2024-01-05 20:48:45 -05:00
REMOVE_REACT " $Components_Server_Backups_AfterContent " "Server/Backups/AfterContent.tsx"
REMOVE_REACT " $Components_Server_Network_BeforeContent " "Server/Network/BeforeContent.tsx"
REMOVE_REACT " $Components_Server_Network_AfterContent " "Server/Network/AfterContent.tsx"
REMOVE_REACT " $Components_Server_Startup_BeforeContent " "Server/Startup/BeforeContent.tsx"
REMOVE_REACT " $Components_Server_Startup_AfterContent " "Server/Startup/AfterContent.tsx"
REMOVE_REACT " $Components_Server_Settings_BeforeContent " "Server/Settings/BeforeContent.tsx"
REMOVE_REACT " $Components_Server_Settings_AfterContent " "Server/Settings/AfterContent.tsx"
2024-01-06 15:24:36 -05:00
# account
REMOVE_REACT " $Components_Account_Overview_BeforeContent " "Account/Overview/BeforeContent.tsx"
REMOVE_REACT " $Components_Account_Overview_AfterContent " "Account/Overview/AfterContent.tsx"
REMOVE_REACT " $Components_Account_API_BeforeContent " "Account/API/BeforeContent.tsx"
REMOVE_REACT " $Components_Account_API_AfterContent " "Account/API/AfterContent.tsx"
REMOVE_REACT " $Components_Account_SSH_BeforeContent " "Account/SSH/BeforeContent.tsx"
REMOVE_REACT " $Components_Account_SSH_AfterContent " "Account/SSH/AfterContent.tsx"
2023-12-28 19:58:12 -05:00
YARN = "y"
fi
2023-07-30 07:28:03 -04:00
# Remove public folder
2023-07-30 12:22:10 -04:00
if [ [ $data_public != "" ] ] ; then
2023-08-15 06:23:40 -04:00
log_bright "[INFO] Removing public folder.."
2023-11-08 10:01:39 -05:00
rm -R " .blueprint/extensions/ $identifier /public "
2023-11-08 11:34:32 -05:00
rm -R " public/extensions/ $identifier "
2023-08-15 06:23:40 -04:00
fi
2023-07-30 12:22:10 -04:00
2023-07-30 07:28:03 -04:00
# Remove assets folder
2023-08-15 06:23:40 -04:00
log_bright "[INFO] Removing assets.."
2023-11-08 10:01:39 -05:00
rm -R " .blueprint/extensions/ $identifier /assets "
2023-11-08 11:34:32 -05:00
rm -R " public/assets/extensions/ $identifier "
2023-07-30 12:22:10 -04:00
2023-07-30 07:28:03 -04:00
# Remove data folder
2023-08-15 06:23:40 -04:00
log_bright "[INFO] Removing data folder.."
2023-11-08 10:01:39 -05:00
rm -R " .blueprint/extensions/ $identifier /private "
2023-07-30 12:22:10 -04:00
2023-07-30 15:02:48 -04:00
# Rebuild panel
if [ [ $YARN = = "y" ] ] ; then
log_bright "[INFO] Rebuilding panel assets.."
2023-08-15 06:23:40 -04:00
yarn run build:production
fi
2023-07-30 15:02:48 -04:00
2023-09-13 08:55:15 -04:00
log_bright "[INFO] Updating route cache to include recent changes.."
2023-12-22 10:06:02 -05:00
php artisan route:cache & >> $BLUEPRINT__DEBUG
2023-09-24 09:58:26 -04:00
# Remove from installed list
log_bright "[INFO] Removing extension from installed extensions list.."
2023-11-08 10:01:39 -05:00
sed -i " s~ $identifier ,~~g " ".blueprint/extensions/blueprint/private/db/installed_extensions"
2023-09-12 13:55:48 -04:00
2023-08-15 06:23:40 -04:00
log_green " [SUCCESS] ' $identifier ' has been removed from your panel. Please note that some files might be left behind. "
2023-12-22 10:06:02 -05:00
sendTelemetry "FINISH_EXTENSION_REMOVAL" >> $BLUEPRINT__DEBUG
2023-08-15 06:23:40 -04:00
fi
2023-07-30 07:28:03 -04:00
2023-08-06 07:41:56 -04:00
2023-10-24 07:23:09 -04:00
# help, -help, --help,
# h, -h, --h
if [ [ ( $2 = = "help" ) || ( $2 = = "-help" ) || ( $2 = = "--help" ) ||
2023-12-22 08:31:31 -05:00
( $2 = = "h" ) || ( $2 = = "-h" ) || ( $2 = = "--h" ) || ( $2 = = "" ) ] ] ; then VCMD = "y"
2023-08-11 10:11:53 -04:00
2023-11-01 09:51:42 -04:00
if dbValidate "blueprint.developerEnabled" ; then
2023-08-15 06:44:10 -04:00
help_dev_status = ""
2023-08-15 06:58:36 -04:00
help_dev_primary = "\e[34;1m"
help_dev_secondary = "\e[34m"
2023-08-15 06:44:10 -04:00
else
help_dev_status = " (disabled)"
2023-10-30 10:49:29 -04:00
help_dev_primary = "\x1b[2;1m"
help_dev_secondary = "\x1b[2m"
2023-08-16 12:45:50 -04:00
fi
2023-08-15 06:44:10 -04:00
echo -e "
\x 1b[ 34; 1mExtensions\x 1b[ 0m\x 1b[ 34m
-install [ name] -i install/update a blueprint extension
-remove [ name] -r remove a blueprint extension
\x 1b[ 0m
2023-10-24 08:53:17 -04:00
${ help_dev_primary } Developer${ help_dev_status } \x 1b[ 0m${ help_dev_secondary }
2023-09-23 11:14:04 -04:00
-init -I initialize development files
-build -b install/update your development files
2023-11-20 17:43:27 -05:00
-export ( expose) -e export/download your development files
2023-09-23 11:14:04 -04:00
-wipe -w remove your development files
2023-08-15 06:44:10 -04:00
\x 1b[ 0m
\x 1b[ 34; 1mMisc\x 1b[ 0m\x 1b[ 34m
-version -v returns the blueprint version
2023-12-22 08:31:31 -05:00
-help -h displays this menu
2023-11-02 14:14:06 -04:00
-info -f show neofetch-like information about blueprint
2023-12-22 10:06:02 -05:00
-debug [ lines] print given amount of debug lines
2023-08-15 06:44:10 -04:00
\x 1b[ 0m
\x 1b[ 34; 1mAdvanced\x 1b[ 0m\x 1b[ 34m
2023-10-31 06:28:47 -04:00
-upgrade ( dev) update/reset to a newer/development version
2023-08-15 06:44:10 -04:00
-rerun-install rerun the blueprint installation script
\x 1b[ 0m
"
2023-08-15 06:23:40 -04:00
fi
2023-03-27 15:17:57 -04:00
2023-08-06 07:41:56 -04:00
2023-06-18 10:37:46 -04:00
# -v, -version
2023-08-15 06:23:40 -04:00
if [ [ ( $2 = = "-v" ) || ( $2 = = "-version" ) ] ] ; then VCMD = "y"
2023-10-24 08:53:17 -04:00
echo -e ${ VERSION }
2023-08-15 06:23:40 -04:00
fi
2023-04-10 10:50:23 -04:00
2023-12-22 10:06:02 -05:00
# -debug
if [ [ $2 = = "-debug" ] ] ; then VCMD = "y"
if [ [ $3 -lt 1 ] ] ; then throw "debugLineCount" ; fi
echo -e "\x1b[30;47;1m --- DEBUG START --- \x1b[0m"
2023-12-22 11:51:20 -05:00
echo -e " $( v = " $( <.blueprint/extensions/blueprint/private/debug/logs.txt) " ; printf -- "%s" " $v " | tail -" $3 " ) "
2023-12-22 10:06:02 -05:00
echo -e "\x1b[30;47;1m --- DEBUG END --- \x1b[0m"
fi
2023-08-06 07:41:56 -04:00
2023-06-18 10:37:46 -04:00
# -init
2023-09-23 11:14:04 -04:00
if [ [ ( $2 = = "-init" || $2 = = "-I" ) ] ] ; then VCMD = "y"
2023-12-30 18:16:40 -05:00
# Check for developer mode through the database library.
2024-01-15 11:40:12 -05:00
if ! dbValidate "blueprint.developerEnabled" ; then PRINT FATAL "Developer mode is not enabled." ; exit 2; fi
2023-07-03 08:42:01 -04:00
2023-08-31 04:51:44 -04:00
# To prevent accidental wiping of your dev directory, you are unable to initialize another extension
# until you wipe the contents of the .blueprint/dev directory.
2023-10-13 13:43:33 -04:00
if [ [ -n $( find .blueprint/dev -maxdepth 1 -type f -not -name ".gitkeep" -print -quit) ] ] ; then
2023-08-15 06:23:40 -04:00
quit_red "[FATAL] Your development directory contains files. To protect you against accidental data loss, you are unable to initialize another extension unless you clear your .blueprint/dev folder."
fi
2023-07-28 16:12:59 -04:00
2023-09-23 09:36:32 -04:00
ask_template( ) {
log_blue "[INPUT] Initial Template:"
2023-12-22 10:06:02 -05:00
log_blue " $( curl 'https://raw.githubusercontent.com/teamblueprint/templates/main/repository' 2>> $BLUEPRINT__DEBUG ) "
2023-10-10 15:28:42 -04:00
read -r ASKTEMPLATE
2023-09-23 09:36:32 -04:00
REDO_TEMPLATE = false
2023-10-24 08:53:17 -04:00
# Template should not be empty
if [ [ ${ ASKTEMPLATE } = = "" ] ] ; then
log_yellow "[WARNING] Template should not be empty."
2023-09-23 09:36:32 -04:00
REDO_TEMPLATE = true
fi
# Unknown template.
2023-12-22 10:06:02 -05:00
if [ [ $( echo -e " $( curl " https://raw.githubusercontent.com/teamblueprint/templates/main/ ${ ASKTEMPLATE } /TemplateConfiguration.yml " 2>> $BLUEPRINT__DEBUG ) " ) = = "404: Not Found" ] ] ; then
2023-10-24 08:53:17 -04:00
log_yellow "[WARNING] Unknown template, please choose a valid option."
2023-09-23 09:36:32 -04:00
REDO_TEMPLATE = true
fi
2023-10-24 08:53:17 -04:00
if [ [ ${ REDO_TEMPLATE } = = true ] ] ; then
2023-09-23 09:36:32 -04:00
# Ask again if response does not pass validation.
2023-09-23 10:07:49 -04:00
ASKTEMPLATE = ""
2023-09-23 09:36:32 -04:00
ask_template
fi
}
2023-07-03 08:42:01 -04:00
ask_name( ) {
2023-08-15 06:23:40 -04:00
log_blue "[INPUT] Name (Generic Extension):"
2023-10-10 15:28:42 -04:00
read -r ASKNAME
2023-07-03 08:42:01 -04:00
2023-08-15 06:23:40 -04:00
REDO_NAME = false
2023-07-03 08:42:01 -04:00
# Name should not be empty
2023-10-24 08:53:17 -04:00
if [ [ ${ ASKNAME } = = "" ] ] ; then
log_yellow "[WARNING] Name should not be empty."
2023-08-15 06:23:40 -04:00
REDO_NAME = true
fi
2023-07-03 08:42:01 -04:00
2023-10-24 08:53:17 -04:00
if [ [ ${ REDO_NAME } = = true ] ] ; then
2023-08-31 04:51:44 -04:00
# Ask again if response does not pass validation.
2023-09-23 10:07:49 -04:00
ASKNAME = ""
2023-08-15 06:23:40 -04:00
ask_name
fi
}
2023-07-03 08:42:01 -04:00
ask_identifier( ) {
2023-08-15 06:23:40 -04:00
log_blue "[INPUT] Identifier (genericextension):"
2023-10-10 15:28:42 -04:00
read -r ASKIDENTIFIER
2023-07-03 08:42:01 -04:00
2023-08-15 06:23:40 -04:00
REDO_IDENTIFIER = false
2023-07-03 08:42:01 -04:00
# Identifier should not be empty
2023-10-24 08:53:17 -04:00
if [ [ ${ ASKIDENTIFIER } = = "" ] ] ; then
log_yellow "[WARNING] Identifier should not be empty."
2023-08-15 06:23:40 -04:00
REDO_IDENTIFIER = true
fi
2023-07-03 08:42:01 -04:00
# Identifier should be a-z.
2023-10-24 08:53:17 -04:00
if [ [ ${ ASKIDENTIFIER } = ~ [ a-z] ] ] ; then
2023-12-22 10:06:02 -05:00
echo ok >> $BLUEPRINT__DEBUG
2023-07-03 08:46:49 -04:00
else
2023-10-24 08:53:17 -04:00
log_yellow "[WARNING] Identifier should only contain a-z characters."
2023-08-15 06:23:40 -04:00
REDO_IDENTIFIER = true
fi
2023-07-03 08:42:01 -04:00
2023-10-24 08:53:17 -04:00
if [ [ ${ REDO_IDENTIFIER } = = true ] ] ; then
2023-08-31 04:51:44 -04:00
# Ask again if response does not pass validation.
2023-09-23 10:07:49 -04:00
ASKIDENTIFIER = ""
2023-08-15 06:23:40 -04:00
ask_identifier
fi
}
2023-07-03 08:42:01 -04:00
ask_description( ) {
2023-10-01 08:55:17 -04:00
log_blue "[INPUT] Description (My awesome description):"
2023-10-10 15:28:42 -04:00
read -r ASKDESCRIPTION
2023-07-03 08:42:01 -04:00
2023-08-15 06:23:40 -04:00
REDO_DESCRIPTION = false
2023-07-03 08:42:01 -04:00
# Description should not be empty
2023-10-24 08:53:17 -04:00
if [ [ ${ ASKDESCRIPTION } = = "" ] ] ; then
log_yellow "[WARNING] Description should not be empty."
2023-08-15 06:23:40 -04:00
REDO_DESCRIPTION = true
fi
2023-07-03 08:42:01 -04:00
2023-10-24 08:53:17 -04:00
if [ [ ${ REDO_DESCRIPTION } = = true ] ] ; then
2023-08-31 04:51:44 -04:00
# Ask again if response does not pass validation.
2023-09-23 10:07:49 -04:00
ASKDESCRIPTION = ""
2023-08-15 06:23:40 -04:00
ask_description
fi
}
2023-07-03 08:42:01 -04:00
ask_version( ) {
2023-08-15 06:23:40 -04:00
log_blue "[INPUT] Version (indev):"
2023-10-10 15:28:42 -04:00
read -r ASKVERSION
2023-07-03 08:42:01 -04:00
2023-08-15 06:23:40 -04:00
REDO_VERSION = false
2023-07-03 08:42:01 -04:00
# Version should not be empty
2023-10-24 08:53:17 -04:00
if [ [ ${ ASKVERSION } = = "" ] ] ; then
log_yellow "[WARNING] Version should not be empty."
2023-08-15 06:23:40 -04:00
REDO_VERSION = true
fi
2023-07-03 08:42:01 -04:00
2023-10-24 08:53:17 -04:00
if [ [ ${ REDO_VERSION } = = true ] ] ; then
2023-08-31 04:51:44 -04:00
# Ask again if response does not pass validation.
2023-09-23 10:07:49 -04:00
ASKVERSION = ""
2023-08-15 06:23:40 -04:00
ask_version
fi
}
2023-07-03 08:42:01 -04:00
ask_author( ) {
2023-08-15 06:23:40 -04:00
log_blue "[INPUT] Author (prplwtf):"
2023-10-10 15:28:42 -04:00
read -r ASKAUTHOR
2023-07-03 08:42:01 -04:00
2023-08-15 06:23:40 -04:00
REDO_AUTHOR = false
2023-07-03 08:42:01 -04:00
# Author should not be empty
2023-10-24 08:53:17 -04:00
if [ [ ${ ASKAUTHOR } = = "" ] ] ; then
log_yellow "[WARNING] Author should not be empty."
2023-08-15 06:23:40 -04:00
REDO_AUTHOR = true
fi
2023-07-03 08:42:01 -04:00
2023-10-24 08:53:17 -04:00
if [ [ ${ REDO_AUTHOR } = = true ] ] ; then
2023-08-31 04:51:44 -04:00
# Ask again if response does not pass validation.
2023-09-23 10:07:49 -04:00
ASKAUTHOR = ""
2023-08-15 06:23:40 -04:00
ask_author
fi
}
2023-07-03 08:42:01 -04:00
2023-09-23 10:07:49 -04:00
ask_template
2023-08-15 06:23:40 -04:00
ask_name
ask_identifier
ask_description
ask_version
ask_author
2023-06-02 10:37:38 -04:00
2023-10-24 09:00:28 -04:00
tnum = ${ ASKTEMPLATE }
2023-10-13 14:13:35 -04:00
log_bright "[INFO] Downloading templates from 'teamblueprint/templates'.."
2023-11-23 08:27:30 -05:00
if [ [ $( php artisan bp:latest) != " $VERSION " ] ] ; then log_yellow "[WARNING] Your Blueprint installation version is outdated, some templates might break or show random bugs." ; fi
2023-11-23 09:59:30 -05:00
cd .blueprint/tmp || throw 'cdMissingDirectory'
2023-10-13 14:13:35 -04:00
git clone "https://github.com/teamblueprint/templates.git"
2023-11-23 09:59:30 -05:00
cd ${ FOLDER } /.blueprint || throw 'cdMissingDirectory'
2023-11-08 10:01:39 -05:00
cp -R tmp/templates/* extensions/blueprint/private/build/templates/
2023-10-13 14:25:35 -04:00
rm -R tmp/templates
2023-11-23 09:59:30 -05:00
cd ${ FOLDER } || throw 'cdMissingDirectory'
2023-10-13 14:13:35 -04:00
2023-12-22 07:15:54 -05:00
eval " $( parse_yaml .blueprint/extensions/blueprint/private/build/templates/" ${ tnum } " /TemplateConfiguration.yml t_) "
2023-09-23 10:07:49 -04:00
log_bright "[INFO] Copying template contents to the tmp directory.."
2023-08-15 06:23:40 -04:00
mkdir -p .blueprint/tmp/init
2023-12-17 06:57:26 -05:00
cp -R .blueprint/extensions/blueprint/private/build/templates/" ${ tnum } " /contents/* .blueprint/tmp/init/
2023-06-02 10:37:38 -04:00
2023-06-10 08:52:00 -04:00
log_bright "[INFO] Applying variables.."
2023-10-24 09:00:28 -04:00
sed -i " s~␀name␀~ ${ ASKNAME } ~g " .blueprint/tmp/init/conf.yml; #NAME
sed -i " s~␀identifier␀~ ${ ASKIDENTIFIER } ~g " .blueprint/tmp/init/conf.yml; #IDENTIFIER
sed -i " s~␀description␀~ ${ ASKDESCRIPTION } ~g " .blueprint/tmp/init/conf.yml; #DESCRIPTION
sed -i " s~␀ver␀~ ${ ASKVERSION } ~g " .blueprint/tmp/init/conf.yml; #VERSION
sed -i " s~␀author␀~ ${ ASKAUTHOR } ~g " .blueprint/tmp/init/conf.yml; #AUTHOR
2023-06-02 10:37:38 -04:00
2023-12-17 06:57:26 -05:00
if [ [ " ${ t_template_files_icon } " != "" ] ] ; then
2023-09-23 10:19:28 -04:00
log_bright "[INFO] Rolling (and applying) extension placeholder icon.."
2023-12-22 11:51:20 -05:00
icnNUM = $(( 1 + RANDOM % 9 ))
2023-12-17 06:57:26 -05:00
cp .blueprint/assets/defaultExtensionLogo" ${ icnNUM } " .jpg .blueprint/tmp/init/" ${ t_template_files_icon } "
2023-10-24 09:00:28 -04:00
sed -i " s~␀icon␀~ ${ t_template_files_icon } ~g " .blueprint/tmp/init/conf.yml; #ICON
2023-11-23 08:27:30 -05:00
fi
2023-09-23 10:07:49 -04:00
log_bright "[INFO] Applying core variables.."
2023-10-24 09:00:28 -04:00
sed -i " s~␀version␀~ ${ VERSION } ~g " .blueprint/tmp/init/conf.yml #BLUEPRINT-VERSION
2023-06-02 10:37:38 -04:00
# Return files to folder.
2023-09-23 10:07:49 -04:00
log_bright "[INFO] Copying output to extension development directory."
2023-08-15 06:23:40 -04:00
cp -R .blueprint/tmp/init/* .blueprint/dev/
2023-06-02 10:37:38 -04:00
2023-06-10 08:52:00 -04:00
# Remove tmp files.
2023-09-23 10:07:49 -04:00
log_bright "[INFO] Purging contents of tmp folder."
2023-08-15 06:23:40 -04:00
rm -R .blueprint/tmp
mkdir -p .blueprint/tmp
2023-06-02 10:37:38 -04:00
2023-10-13 14:13:35 -04:00
# Wipe templates from disk.
log_bright "[INFO] Wiping downloaded templates from disk.."
2023-11-08 10:01:39 -05:00
rm -R .blueprint/extensions/blueprint/private/build/templates/*
2023-10-13 14:13:35 -04:00
2023-12-22 10:06:02 -05:00
sendTelemetry "INITIALIZE_DEVELOPMENT_EXTENSION" >> $BLUEPRINT__DEBUG
2023-09-19 13:30:46 -04:00
2023-08-15 06:23:40 -04:00
log_green "[SUCCESS] Your extension files have been generated and exported to '.blueprint/dev'."
fi
2023-05-17 03:55:16 -04:00
2023-08-06 07:41:56 -04:00
2023-06-28 15:31:22 -04:00
# -build
2023-09-23 11:14:04 -04:00
if [ [ ( $2 = = "-build" || $2 = = "-b" ) ] ] ; then VCMD = "y"
2023-12-30 18:16:40 -05:00
# Check for developer mode through the database library.
2024-01-15 11:40:12 -05:00
if ! dbValidate "blueprint.developerEnabled" ; then PRINT FATAL "Developer mode is not enabled." ; exit 2; fi
2023-08-07 09:53:49 -04:00
2023-10-13 13:43:33 -04:00
if [ [ -z $( find .blueprint/dev -maxdepth 1 -type f -not -name ".gitkeep" -print -quit) ] ] ; then
2024-01-15 11:40:12 -05:00
PRINT FATAL "You do not have any development files."
exit 2
2023-08-15 06:23:40 -04:00
fi
2024-01-15 11:40:12 -05:00
PRINT INFO "Starting developer extension installation.."
2023-08-15 06:23:40 -04:00
blueprint -i test␀
fi
2023-05-04 16:01:35 -04:00
2023-08-06 07:41:56 -04:00
2023-06-24 04:55:21 -04:00
# -export
2023-09-23 11:14:04 -04:00
if [ [ ( $2 = = "-export" || $2 = = "-e" ) ] ] ; then VCMD = "y"
2023-12-30 18:16:40 -05:00
# Check for developer mode through the database library.
2024-01-15 11:40:12 -05:00
if ! dbValidate "blueprint.developerEnabled" ; then PRINT FATAL "Developer mode is not enabled." ; exit 2; fi
2023-08-15 06:05:59 -04:00
2023-10-13 13:43:33 -04:00
if [ [ -z $( find .blueprint/dev -maxdepth 1 -type f -not -name ".gitkeep" -print -quit) ] ] ; then
2024-01-15 11:40:12 -05:00
PRINT FATAL "You do not have any development files."
exit 2
2023-08-15 06:23:40 -04:00
fi
2023-08-04 06:47:25 -04:00
2024-01-15 11:40:12 -05:00
PRINT INFO "Start packaging extension.."
2023-05-29 14:33:01 -04:00
2023-11-23 09:59:30 -05:00
cd .blueprint || throw 'cdMissingDirectory'
2023-12-22 10:06:02 -05:00
rm dev/.gitkeep 2>> $BLUEPRINT__DEBUG
2023-11-23 13:02:33 -05:00
2023-11-23 09:52:16 -05:00
eval " $( parse_yaml dev/conf.yml conf_) " ; identifier = " ${ conf_info_identifier } "
2023-11-23 13:02:33 -05:00
2023-08-15 06:23:40 -04:00
cp -R dev/* tmp/
2023-11-23 09:59:30 -05:00
cd tmp || throw 'cdMissingDirectory'
2023-11-23 13:02:33 -05:00
2023-12-11 09:50:54 -05:00
# Assign variables to extension flags.
flags = " $conf_info_flags "
2024-01-15 11:40:12 -05:00
PRINT INFO "Reading and assigning extension flags.."
2023-12-11 09:50:54 -05:00
assignflags
if $F_hasExportScript ; then
2023-11-23 13:12:53 -05:00
chmod +x " ${ conf_data_directory } " "/export.sh"
2023-11-25 07:38:37 -05:00
2023-11-23 13:12:53 -05:00
# Run script while also parsing some useful variables for the export script to use.
2023-11-25 07:38:37 -05:00
EXTENSION_IDENTIFIER = " $conf_info_identifier " \
EXTENSION_TARGET = " $conf_info_target " \
EXTENSION_VERSION = " $conf_info_version " \
PTERODACTYL_DIRECTORY = " $FOLDER " \
BLUEPRINT_EXPORT_DIRECTORY = " $FOLDER /.blueprint/tmp " \
BLUEPRINT_VERSION = " $VERSION " \
bash " ${ conf_data_directory } " "/export.sh"
2023-11-23 13:12:53 -05:00
echo -e "\e[0m\x1b[0m\033[0m"
fi
2023-11-23 13:02:33 -05:00
2023-12-22 11:51:20 -05:00
zip -r extension.zip ./*
2023-11-23 09:59:30 -05:00
cd ${ FOLDER } || throw 'cdMissingDirectory'
2023-12-17 06:40:57 -05:00
cp .blueprint/tmp/extension.zip " ${ identifier } .blueprint "
2023-08-15 06:23:40 -04:00
rm -R .blueprint/tmp
mkdir -p .blueprint/tmp
2023-06-26 08:42:31 -04:00
2023-10-31 06:28:47 -04:00
if [ [ $3 = = "expose" * ] ] ; then
log_bright "[INFO] Generating download url.."
2023-11-01 05:54:10 -04:00
randstr = ${ RANDOM } ${ RANDOM } ${ RANDOM } ${ RANDOM } ${ RANDOM }
2023-11-08 10:01:39 -05:00
mkdir .blueprint/extensions/blueprint/assets/exports/${ randstr }
2023-12-17 06:57:26 -05:00
cp " ${ identifier } " .blueprint .blueprint/extensions/blueprint/assets/exports/${ randstr } /" ${ identifier } " .blueprint
2023-10-31 06:50:41 -04:00
log_bright "[INFO] Download url will expire after 2 minutes."
2023-12-22 10:06:02 -05:00
sendTelemetry "EXPOSE_DEVELOPMENT_EXTENSION" >> $BLUEPRINT__DEBUG
2023-10-31 06:50:41 -04:00
log_green log_bold "\n[SUCCESS] Your extension has been exported successfully."
2023-11-01 08:43:23 -04:00
log_green " - $( grabAppUrl) /assets/extensions/blueprint/exports/ ${ randstr } / ${ identifier } .blueprint "
2023-10-31 06:50:41 -04:00
log_green " - ${ FOLDER } / ${ identifier } .blueprint "
2023-12-22 11:51:20 -05:00
eval " $( sleep 120 && rm -R .blueprint/extensions/blueprint/assets/exports/${ randstr } 2>> $BLUEPRINT__DEBUG ) " &
2023-10-31 06:28:47 -04:00
else
2023-12-22 10:06:02 -05:00
sendTelemetry "EXPORT_DEVELOPMENT_EXTENSION" >> $BLUEPRINT__DEBUG
2023-10-31 06:50:41 -04:00
log_green log_bold "\n[SUCCESS] Your extension has been exported successfully."
log_green " - ${ FOLDER } / ${ identifier } .blueprint "
2023-10-31 06:28:47 -04:00
fi
2023-09-23 11:14:04 -04:00
fi
# -wipe
if [ [ ( $2 = = "-wipe" || $2 = = "-w" ) ] ] ; then VCMD = "y"
2023-12-30 18:16:40 -05:00
# Check for developer mode through the database library.
2024-01-15 11:40:12 -05:00
if ! dbValidate "blueprint.developerEnabled" ; then PRINT FATAL "Developer mode is not enabled." ; exit 2; fi
2023-10-25 13:02:33 -04:00
2023-10-13 13:43:33 -04:00
if [ [ -z $( find .blueprint/dev -maxdepth 1 -type f -not -name ".gitkeep" -print -quit) ] ] ; then
2023-09-24 09:58:26 -04:00
quit_red "[FATAL] You do not have any development files."
fi
2023-12-01 09:33:27 -05:00
log_blue "[INPUT] You are about to wipe all of your development files, are you sure you want to continue? This cannot be undone. (y/N)"
2023-10-10 15:28:42 -04:00
read -r YN
2023-10-24 09:04:22 -04:00
if [ [ ( ( ${ YN } != "y" * ) && ( ${ YN } != "Y" * ) ) || ( ( ${ YN } = = "" ) ) ] ] ; then log_bright "[INFO] Development files removal cancelled." ; exit 1; fi
2023-09-23 11:14:04 -04:00
log_bright "[INFO] Wiping development folder.."
2023-12-22 10:06:02 -05:00
rm -R .blueprint/dev/* 2>> $BLUEPRINT__DEBUG
rm -R .blueprint/dev/.* 2>> $BLUEPRINT__DEBUG
2023-09-23 11:14:04 -04:00
log_green "[SUCCESS] Your development files have been removed."
2023-08-15 06:23:40 -04:00
fi
2023-05-29 14:33:01 -04:00
2023-11-02 14:14:06 -04:00
# -info
if [ [ ( $2 = = "-info" || $2 = = "-f" ) ] ] ; then VCMD = "y"
2023-12-07 16:13:06 -05:00
fetchversion( ) { if [ [ $VERSION != "" ] ] ; then log_reset log_white $VERSION ; else echo "none" ; fi }
fetchfolder( ) { if [ [ $FOLDER != "" ] ] ; then log_reset log_white $FOLDER ; else echo "none" ; fi }
2023-12-22 11:51:20 -05:00
fetchurl( ) { if [ [ $( grabAppUrl) != "" ] ] ; then log_reset log_white " $( grabAppUrl) " ; else echo "none" ; fi }
fetchlocale( ) { if [ [ $( grabAppLocale) != "" ] ] ; then log_reset log_white " $( grabAppLocale) " ; else echo "none" ; fi }
fetchtimezone( ) { if [ [ $( grabAppTimezone) != "" ] ] ; then log_reset log_white " $( grabAppTimezone) " ; else echo "none" ; fi }
fetchextensions( ) { log_reset log_white " $( echo " $( <.blueprint/extensions/blueprint/private/db/installed_extensions) " | tr -cd ',' | wc -c | tr -d ' ' ) " ; }
fetchdeveloper( ) { log_reset log_white " $( if dbValidate "blueprint.developerEnabled" ; then echo "true" ; else echo "false" ; fi ; ) " ; }
fetchtelemetry( ) { log_reset log_white " $( telemetrykey = $( cat .blueprint/extensions/blueprint/private/db/telemetry_id) ; if [ [ $telemetrykey = = "KEY_NOT_UPDATED" ] ] ; then echo "false" ; else echo "true" ; fi ; ) " ; }
fetchnode( ) { if [ [ $( node -v) != "" ] ] ; then log_reset log_white " $( node -v) " ; else echo "none" ; fi }
fetchyarn( ) { if [ [ $( yarn -v) != "" ] ] ; then log_reset log_white " $( yarn -v) " ; else echo "none" ; fi }
2023-11-02 14:14:06 -04:00
2023-11-02 14:55:03 -04:00
log_bright " "
log_blue log_bold " ⣿⣿ $( log_reset log_bold log_blue "Version:" ) $( fetchversion) "
log_blue log_bold " ⣿⣿ ⣿⣿ $( log_reset log_bold log_blue "Folder:" ) $( fetchfolder) "
log_blue log_bold " ⣿⣿⣿⣿ $( log_reset log_bold log_blue "URL:" ) $( fetchurl) "
log_blue " $( log_reset log_bold log_blue "Locale:" ) $( fetchlocale) "
log_blue " $( log_reset log_bold log_blue "Timezone:" ) $( fetchtimezone) "
log_blue " $( log_reset log_bold log_blue "Extensions:" ) $( fetchextensions) "
log_blue " $( log_reset log_bold log_blue "Developer:" ) $( fetchdeveloper) "
log_blue " $( log_reset log_bold log_blue "Telemetry:" ) $( fetchtelemetry) "
log_blue " $( log_reset log_bold log_blue "Node:" ) $( fetchnode) "
log_blue " $( log_reset log_bold log_blue "Yarn:" ) $( fetchyarn) "
2023-11-02 14:14:06 -04:00
log_bright " "
fi
2023-08-06 07:41:56 -04:00
2023-08-14 07:28:15 -04:00
# -rerun-install
2023-11-02 14:14:06 -04:00
if [ [ $2 = = "-rerun-install" ] ] ; then VCMD = "y"
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-08-15 06:23:40 -04:00
dbRemove "blueprint.setupFinished"
2023-11-23 09:59:30 -05:00
cd ${ FOLDER } || throw 'cdMissingDirectory'
2023-08-15 06:23:40 -04:00
bash blueprint.sh
fi
2023-06-01 15:25:15 -04:00
2023-06-18 10:37:46 -04:00
# -upgrade
2023-08-15 06:23:40 -04:00
if [ [ $2 = = "-upgrade" ] ] ; then VCMD = "y"
log_yellow "[WARNING] This is an advanced feature, only proceed if you know what you are doing.\n"
2023-07-14 04:39:26 -04:00
2023-10-13 13:43:33 -04:00
if [ [ -n $( find .blueprint/dev -maxdepth 1 -type f -not -name ".gitkeep" -print -quit) ] ] ; then
2023-08-15 06:23:40 -04:00
quit_red "[FATAL] Your development directory contains files. To protect you against accidental data loss, you are unable to upgrade unless you clear your .blueprint/dev folder."
fi
2023-07-14 04:39:26 -04:00
2023-12-22 07:31:44 -05:00
# Confirmation question for developer upgrade.
if [ [ $3 = = "dev" ] ] ; then
2023-08-15 06:23:40 -04:00
log_blue "[INPUT] Upgrading to the latest dev build will update Blueprint to an unstable work-in-progress preview of the next version. Continue? (y/N)"
2023-12-22 07:31:44 -05:00
read -r YN
if [ [ ( ${ YN } != "y" * ) && ( ${ YN } != "Y" * ) ] ] ; then log_bright "[INFO] Upgrade cancelled." ; exit 1; fi
YN = ""
2023-08-15 06:23:40 -04:00
fi
2023-12-22 07:31:44 -05:00
# Confirmation question for both developer and stable upgrade.
2023-08-15 06:23:40 -04:00
log_blue "[INPUT] Upgrading will wipe your .blueprint folder and will overwrite your extensions. Continue? (y/N)"
2023-12-22 07:31:44 -05:00
read -r YN
if [ [ ( ${ YN } != "y" * ) && ( ${ YN } != "Y" * ) ] ] ; then log_bright "[INFO] Upgrade cancelled." ; exit 1; fi
YN = ""
# Last confirmation question for both developer and stable upgrade.
2023-08-15 06:23:40 -04:00
log_blue "[INPUT] This is the last warning before upgrading/wiping Blueprint. Type 'continue' to continue, all other input will be taken as 'no'."
2023-12-22 07:31:44 -05:00
read -r YN
if [ [ ${ YN } != "continue" ] ] ; then log_bright "[INFO] Upgrade cancelled." ; exit 1; fi
YN = ""
2023-08-15 06:23:40 -04:00
log_bright "[INFO] Blueprint is upgrading.. Please do not turn off your machine."
cp blueprint.sh .blueprint.sh.bak
2023-12-22 07:31:44 -05:00
if [ [ $3 = = "dev" ] ] ; then bash tools/update.sh ${ FOLDER } dev
else bash tools/update.sh ${ FOLDER } ; fi
2023-08-15 06:23:40 -04:00
chmod +x blueprint.sh
2023-11-28 11:40:08 -05:00
sed -i -E " s|FOLDER=\"/var/www/pterodactyl\" #;|FOLDER=\" $FOLDER \" #;|g " $FOLDER /blueprint.sh
mv $FOLDER /blueprint $FOLDER /.blueprint;
bash blueprint.sh --post-upgrade
2023-12-22 07:31:44 -05:00
# Ask user if they'd like to migrate their database.
2023-08-17 05:44:09 -04:00
log_blue "[INPUT] Do you want to migrate your database? (Y/n)"
2023-12-22 07:31:44 -05:00
read -r YN
if [ [ ( ${ YN } = = "y" ) || ( ${ YN } = = "Y" ) || ( ${ YN } = = "" ) ] ] ; then
2023-08-15 06:23:40 -04:00
log_bright "[INFO] Running database migrations.."
2023-08-16 12:45:50 -04:00
php artisan migrate --force
2023-06-10 08:52:00 -04:00
else
2023-08-15 06:23:40 -04:00
log_bright "[INFO] Database migrations have been skipped."
fi
2023-12-22 07:31:44 -05:00
YN = ""
2023-06-12 09:21:38 -04:00
2023-07-28 16:12:59 -04:00
# Post-upgrade checks.
2023-08-15 06:23:40 -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
2023-08-15 06:23:40 -04:00
score = $(( score+1))
2023-06-10 08:52:00 -04:00
else
2023-08-15 06:23:40 -04:00
log_yellow "[WARNING] 'blueprint.setupFinished' could not be found."
fi
2023-06-12 09:21:38 -04:00
2023-07-28 16:12:59 -04:00
# Finalize upgrade.
2023-10-24 09:04:22 -04:00
if [ [ ${ score } = = 1 ] ] ; then
2023-08-15 06:23:40 -04:00
log_green "[SUCCESS] Blueprint has upgraded successfully."
rm .blueprint.sh.bak
exit 1
2023-10-24 09:04:22 -04:00
elif [ [ ${ score } = = 0 ] ] ; then
2023-08-15 06:23:40 -04:00
log_red "[FATAL] All checks have failed."
rm blueprint.sh
mv .blueprint.sh.bak blueprint.sh
exit 1
2023-06-10 08:52:00 -04:00
else
2023-08-15 06:23:40 -04:00
log_yellow "[WARNING] Some post-upgrade checks have failed."
rm blueprint.sh
mv .blueprint.sh.bak blueprint.sh
exit 1
fi
fi
2023-08-09 06:57:18 -04:00
# When the users attempts to run an invalid command.
2023-10-24 09:04:22 -04:00
if [ [ ${ VCMD } != "y" && $1 = = "-bash" ] ] ; then
2023-08-15 06:10:30 -04:00
# This is logged as a "fatal" error since it's something that is making Blueprint run unsuccessfully.
2023-08-15 06:23:40 -04:00
quit_red " [FATAL] ' $2 ' is not a valid command or argument. Use argument '-help' for a list of commands. "
2023-11-24 11:00:08 -05:00
fi