diff --git a/Helper/findMissingApiFunctions.php b/Helper/findMissingApiFunctions.php
index 4e49180..456623d 100644
--- a/Helper/findMissingApiFunctions.php
+++ b/Helper/findMissingApiFunctions.php
@@ -16,7 +16,7 @@ declare(strict_types=1);
$modules = \scandir(__DIR__ . '/../../Modules');
-$allowed = ['ClientManagement'];
+$allowed = ['Organization'];
function createFunction($module, $modelName)
{
@@ -41,8 +41,8 @@ function createFunction($module, $modelName)
public function api{$modelName}Create(RequestAbstract \$request, ResponseAbstract \$response, mixed \$data = null) : void
{
if (!empty(\$val = \$this->validate{$modelName}Create(\$request))) {
- \$response->data['{$snakeCase}_create'] = new FormValidation(\$val);
- \$response->header->status = RequestStatusCode::R_400;
+ \$response->header->status = RequestStatusCode::R_400;
+ \$this->createInvalidCreateResponse(\$request, \$response, \$val);
return;
}
@@ -121,8 +121,8 @@ function updateFunction($module, $modelName, $helperName = '')
public function api{$modelName}Update(RequestAbstract \$request, ResponseAbstract \$response, mixed \$data = null) : void
{
if (!empty(\$val = \$this->validate{$modelName}Update(\$request))) {
- \$response->data[\$request->uri->__toString()] = new FormValidation(\$val);
- \$response->header->status = RequestStatusCode::R_400;
+ \$response->header->status = RequestStatusCode::R_400;
+ \$this->createInvalidUpdateResponse(\$request, \$response, \$val);
return;
}
@@ -201,8 +201,8 @@ function deleteFunction($module, $modelName)
public function api{$modelName}Delete(RequestAbstract \$request, ResponseAbstract \$response, mixed \$data = null) : void
{
if (!empty(\$val = \$this->validate{$modelName}Delete(\$request))) {
- \$response->data[\$request->uri->__toString()] = new FormValidation(\$val);
- \$response->header->status = RequestStatusCode::R_400;
+ \$response->header->status = RequestStatusCode::R_400;
+ \$this->createInvalidDeleteResponse(\$request, \$response, \$val);
return;
}
@@ -266,7 +266,12 @@ foreach ($modules as $module) {
$delete = [];
foreach ($matches[2] as $match) {
- if (\strpos($match, 'event') !== false || \strpos($match, 'api') !== 0) {
+ if (\strpos($match, 'event') !== false
+ || \strpos($match, 'api') !== 0
+ || \strpos($match, 'To') !== false
+ || \strpos($match, 'From') !== false
+ || \strpos($match, 'Setting') !== false
+ ) {
continue;
}
diff --git a/Helper/install.sh b/Helper/install.sh
index 90e84d8..61970e5 100755
--- a/Helper/install.sh
+++ b/Helper/install.sh
@@ -39,7 +39,7 @@ a2enmod headers
## Jingga Server
###############################################################
-apt-get install git borgbackup
+apt-get install borgbackup
### Install borg
borg init -v --encryption=repokey /var/www/html
diff --git a/Helper/reconcileTestReportElements.php b/Helper/reconcileTestReportElements.php
index 35964b4..bd35164 100755
--- a/Helper/reconcileTestReportElements.php
+++ b/Helper/reconcileTestReportElements.php
@@ -40,7 +40,7 @@ foreach ($report as $key => $line) {
$file = \reset($parts);
$function = \end($parts);
- $file = __DIR__ . '/../../' . \str_replace('\\', '/', $file) . '.php';
+ $file = __DIR__ . '/../../' . \strtr($file, '\\', '/') . '.php';
if (!\is_file($file)) {
$noTestFile[] = $key;
@@ -104,7 +104,7 @@ foreach ($directories as $directory) {
$function = \substr($line, 20, $end - 20);
$name = \substr(\realpath($file), \strlen(\realpath(__DIR__ . '/../../')) + 1, -4);
- $name = \str_replace('/', '\\', $name);
+ $name = \strtr($name, '/', '\\');
$reportKey = $name . ':' . $function;
diff --git a/Helper/serverInstall.sh b/Helper/serverInstall.sh
new file mode 100644
index 0000000..d8a73f8
--- /dev/null
+++ b/Helper/serverInstall.sh
@@ -0,0 +1,151 @@
+#!/bin/bash
+
+###############################################################
+## General
+###############################################################
+
+# For every user .bash_profile
+
+export PROMPT_COMMAND='if [ "$(id -u)" -ne 0 ]; then echo "$(date "+%Y-%m-%d.%H:%M:%S") $(pwd) $(history 1)" >> /var/www/html/backup/bash/$(date "+%Y-%m-%d").log; fi'
+
+apt-get update
+
+apt-get install git snapd ufw
+
+# Security
+
+apt-get install ufw
+ufw allow ssh
+ufw allow http
+ufw allow https
+
+apt-get install fail2ban -y
+cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
+service fail2ban restart
+
+# SSH
+
+# TODO: upload ssh key and disable password login if successful
+# https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-on-ubuntu-20-04
+
+###############################################################
+## Web
+###############################################################
+
+apt-get install php8.1 php8.1-dev php8.1-cli php8.1-common php8.1-mysql php8.1-pgsql php8.1-xdebug php8.1-opcache php8.1-pdo php8.1-sqlite php8.1-mbstring php8.1-curl php8.1-imap php8.1-bcmath php8.1-zip php8.1-dom php8.1-xml php8.1-phar php8.1-gd php-pear apache2 mysql-server wkhtmltopdf tesseract-ocr
+
+a2enmod rewrite
+a2enmod headers
+
+# Apache2
+
+cat << EOF > /etc/apache2/sites-available/000-default.conf
+
+ ServerAdmin info@jingga.app
+ DocumentRoot /var/www/html/jingga
+
+ SetEnv OMS_STRIPE_SECRET 1
+ SetEnv OMS_STRIPE_PUBLIC 2
+ SetEnv OMS_STRIPE_WEBHOOK 3
+ SetEnv OMS_PRIVATE_KEY_I 4
+
+
+ Options Indexes FollowSymLinks
+ AllowOverride All
+ Require all granted
+
+
+ ErrorLog \${APACHE_LOG_DIR}/error.log
+ CustomLog \${APACHE_LOG_DIR}/access.log combined
+
+EOF
+
+cat << EOF > /etc/apache2/sites-available/001-saas.conf
+
+ ServerAdmin info@jingga.app
+ DocumentRoot /var/www/html/jingga
+ ServerName orw.jingga.app
+ ServerAlias www.orw.jingga.app
+
+ SetEnv OMS_STRIPE_SECRET 1
+ SetEnv OMS_STRIPE_PUBLIC 2
+ SetEnv OMS_STRIPE_WEBHOOK 3
+ SetEnv OMS_PRIVATE_KEY_I 4
+
+
+ Options Indexes FollowSymLinks
+ AllowOverride All
+ Require all granted
+
+
+ ErrorLog \${APACHE_LOG_DIR}/error.log
+ CustomLog \${APACHE_LOG_DIR}/access.log combined
+
+
+
+ ServerAdmin info@jingga.app
+ DocumentRoot /var/www/html/jingga
+ ServerName invoicing.jingga.app
+ ServerAlias www.invoicing.jingga.app
+
+ SetEnv OMS_STRIPE_SECRET 1
+ SetEnv OMS_STRIPE_PUBLIC 2
+ SetEnv OMS_STRIPE_WEBHOOK 3
+ SetEnv OMS_PRIVATE_KEY_I 4
+
+
+ Options Indexes FollowSymLinks
+ AllowOverride All
+ Require all granted
+
+
+ ErrorLog \${APACHE_LOG_DIR}/error.log
+ CustomLog \${APACHE_LOG_DIR}/access.log combined
+
+
+
+ ServerAdmin info@jingga.app
+ DocumentRoot /var/www/html/jingga
+ ServerName fleetmanagement.jingga.app
+ ServerAlias www.fleetmanagement.jingga.app
+
+ SetEnv OMS_STRIPE_SECRET 1
+ SetEnv OMS_STRIPE_PUBLIC 2
+ SetEnv OMS_STRIPE_WEBHOOK 3
+ SetEnv OMS_PRIVATE_KEY_I 4
+
+
+ Options Indexes FollowSymLinks
+ AllowOverride All
+ Require all granted
+
+
+ ErrorLog \${APACHE_LOG_DIR}/error.log
+ CustomLog \${APACHE_LOG_DIR}/access.log combined
+
+EOF
+
+a2ensite 001-saas.conf
+a2ensite 000-saas.conf
+service apache2 reload
+service apache2 restart
+
+snap install --classic certbot
+ln -s /snap/bin/certbot /usr/bin/certbot
+certbot --apache
+certbot renew --dry-run
+
+###############################################################
+## Security
+###############################################################
+
+### Install borg
+
+apt-get install borgbackup
+
+borg init -v --encryption=repokey /var/www/html
+borg key export /var/www/html repokey
+
+###############################################################
+## Content
+###############################################################
diff --git a/Tools/AutoGpt/GptHelper.php b/Tools/AutoGpt/GptHelper.php
index e83b616..0077f21 100644
--- a/Tools/AutoGpt/GptHelper.php
+++ b/Tools/AutoGpt/GptHelper.php
@@ -69,7 +69,7 @@ class GptHelper
return $response->getBody();
}
- public static function handleFile(string $inPath, string $outPath, string $behavior, \Closure $fileReader, bool $bulk = true) : string
+ public static function handleFile(string $inPath, string $outPath, string $behavior, Callable $fileReader, bool $bulk = true) : string
{
$response = '';