diff --git a/.github/workflows/greetings.yml b/.github/workflows/greetings.yml index adb8716..75cb759 100755 --- a/.github/workflows/greetings.yml +++ b/.github/workflows/greetings.yml @@ -9,5 +9,5 @@ jobs: - uses: actions/first-interaction@v1 with: repo-token: ${{ secrets.GITHUB_TOKEN }} - issue-message: 'Thank you for createing this issue. We will check it as soon as possible.' + issue-message: 'Thank you for creating this issue. We will check it as soon as possible.' pr-message: 'Thank you for your pull request. We will check it as soon as possible.' diff --git a/Config/reportLang.php b/Config/reportLang.php index 884e4a6..d740c99 100755 --- a/Config/reportLang.php +++ b/Config/reportLang.php @@ -2438,39 +2438,39 @@ return [ 'Modules\News\tests\Models\NewsArticleMapperTest:testDefault' => ['description' => 'The model can be created and read from the database', 'type' => 'module'], // models - 'Modules\Helper\tests\Models\ReportTest' => ['description' => 'Report model', 'type' => 'module'], - 'Modules\Helper\tests\Models\ReportTest:testDefault' => ['description' => 'The model has the expected default values after initialization', 'type' => 'module'], - 'Modules\Helper\tests\Models\ReportTest:testCreatedByInputOutput' => ['description' => 'The creator can be set and returned correctly', 'type' => 'module'], - 'Modules\Helper\tests\Models\ReportTest:testTitleInputOutput' => ['description' => 'The title can be set and returned correctly', 'type' => 'module'], - 'Modules\Helper\tests\Models\ReportTest:testStatusInputOutput' => ['description' => 'The status can be set and returned correctly', 'type' => 'module'], - 'Modules\Helper\tests\Models\ReportTest:testDescriptionInputOutput' => ['description' => 'The description can be set and returned correctly', 'type' => 'module'], - 'Modules\Helper\tests\Models\ReportTest:testDescriptionRawInputOutput' => ['description' => 'The raw description can be set and returned correctly', 'type' => 'module'], - 'Modules\Helper\tests\Models\ReportTest:testTemplateInputOutput' => ['description' => 'The template can be set and returned correctly', 'type' => 'module'], - 'Modules\Helper\tests\Models\ReportTest:testSourceInputOutput' => ['description' => 'The source can be set and returned correctly', 'type' => 'module'], - 'Modules\Helper\tests\Models\ReportTest:testToArray' => ['description' => 'Report data can be turned into an array', 'type' => 'module'], - 'Modules\Helper\tests\Models\ReportTest:testJsonSerialize' => ['description' => 'Report data can be json serialized', 'type' => 'module'], + 'Modules\Script\tests\Models\ReportTest' => ['description' => 'Report model', 'type' => 'module'], + 'Modules\Script\tests\Models\ReportTest:testDefault' => ['description' => 'The model has the expected default values after initialization', 'type' => 'module'], + 'Modules\Script\tests\Models\ReportTest:testCreatedByInputOutput' => ['description' => 'The creator can be set and returned correctly', 'type' => 'module'], + 'Modules\Script\tests\Models\ReportTest:testTitleInputOutput' => ['description' => 'The title can be set and returned correctly', 'type' => 'module'], + 'Modules\Script\tests\Models\ReportTest:testStatusInputOutput' => ['description' => 'The status can be set and returned correctly', 'type' => 'module'], + 'Modules\Script\tests\Models\ReportTest:testDescriptionInputOutput' => ['description' => 'The description can be set and returned correctly', 'type' => 'module'], + 'Modules\Script\tests\Models\ReportTest:testDescriptionRawInputOutput' => ['description' => 'The raw description can be set and returned correctly', 'type' => 'module'], + 'Modules\Script\tests\Models\ReportTest:testTemplateInputOutput' => ['description' => 'The template can be set and returned correctly', 'type' => 'module'], + 'Modules\Script\tests\Models\ReportTest:testSourceInputOutput' => ['description' => 'The source can be set and returned correctly', 'type' => 'module'], + 'Modules\Script\tests\Models\ReportTest:testToArray' => ['description' => 'Report data can be turned into an array', 'type' => 'module'], + 'Modules\Script\tests\Models\ReportTest:testJsonSerialize' => ['description' => 'Report data can be json serialized', 'type' => 'module'], - 'Modules\Helper\tests\Models\ReportMapperTest' => ['description' => 'Report database mapper', 'type' => 'module'], - 'Modules\Helper\tests\Models\ReportMapperTest:testCR' => ['description' => 'The model can be created and read from the database', 'type' => 'module'], + 'Modules\Script\tests\Models\ReportMapperTest' => ['description' => 'Report database mapper', 'type' => 'module'], + 'Modules\Script\tests\Models\ReportMapperTest:testCR' => ['description' => 'The model can be created and read from the database', 'type' => 'module'], - 'Modules\Helper\tests\Models\TemplateTest' => ['description' => 'Template model', 'type' => 'module'], - 'Modules\Helper\tests\Models\TemplateTest:testDefault' => ['description' => 'The model has the expected default values after initialization', 'type' => 'module'], - 'Modules\Helper\tests\Models\TemplateTest:testUnitInputOutput' => ['description' => 'The unit can be set and returned correctly', 'type' => 'module'], - 'Modules\Helper\tests\Models\TemplateTest:testCreatedByInputOutput' => ['description' => 'The creator can be set and returned correctly', 'type' => 'module'], - 'Modules\Helper\tests\Models\TemplateTest:testNameInputOutput' => ['description' => 'The title can be set and returned correctly', 'type' => 'module'], - 'Modules\Helper\tests\Models\TemplateTest:testStatusInputOutput' => ['description' => 'The status can be set and returned correctly', 'type' => 'module'], - 'Modules\Helper\tests\Models\TemplateTest:testStandalonInputOutput' => ['description' => 'The template can be set as standalone and returned correctly', 'type' => 'module'], - 'Modules\Helper\tests\Models\TemplateTest:testDescriptionInputOutput' => ['description' => 'The description can be set and returned correctly', 'type' => 'module'], - 'Modules\Helper\tests\Models\TemplateTest:testDescriptionRawInputOutput' => ['description' => 'The raw description can be set and returned correctly', 'type' => 'module'], - 'Modules\Helper\tests\Models\TemplateTest:testExpectedInputOutput' => ['description' => 'The expected report files can be set and returned correctly', 'type' => 'module'], - 'Modules\Helper\tests\Models\TemplateTest:testSourceInputOutput' => ['description' => 'The source can be set and returned correctly', 'type' => 'module'], - 'Modules\Helper\tests\Models\TemplateTest:testDatatypeInputOutput' => ['description' => 'The data storage type can be set and returned correctly', 'type' => 'module'], - 'Modules\Helper\tests\Models\TemplateTest:testToArray' => ['description' => 'Template data can be turned into an array', 'type' => 'module'], - 'Modules\Helper\tests\Models\TemplateTest:testJsonSerialize' => ['description' => 'Template data can be json serialized', 'type' => 'module'], + 'Modules\Script\tests\Models\TemplateTest' => ['description' => 'Template model', 'type' => 'module'], + 'Modules\Script\tests\Models\TemplateTest:testDefault' => ['description' => 'The model has the expected default values after initialization', 'type' => 'module'], + 'Modules\Script\tests\Models\TemplateTest:testUnitInputOutput' => ['description' => 'The unit can be set and returned correctly', 'type' => 'module'], + 'Modules\Script\tests\Models\TemplateTest:testCreatedByInputOutput' => ['description' => 'The creator can be set and returned correctly', 'type' => 'module'], + 'Modules\Script\tests\Models\TemplateTest:testNameInputOutput' => ['description' => 'The title can be set and returned correctly', 'type' => 'module'], + 'Modules\Script\tests\Models\TemplateTest:testStatusInputOutput' => ['description' => 'The status can be set and returned correctly', 'type' => 'module'], + 'Modules\Script\tests\Models\TemplateTest:testStandalonInputOutput' => ['description' => 'The template can be set as standalone and returned correctly', 'type' => 'module'], + 'Modules\Script\tests\Models\TemplateTest:testDescriptionInputOutput' => ['description' => 'The description can be set and returned correctly', 'type' => 'module'], + 'Modules\Script\tests\Models\TemplateTest:testDescriptionRawInputOutput' => ['description' => 'The raw description can be set and returned correctly', 'type' => 'module'], + 'Modules\Script\tests\Models\TemplateTest:testExpectedInputOutput' => ['description' => 'The expected report files can be set and returned correctly', 'type' => 'module'], + 'Modules\Script\tests\Models\TemplateTest:testSourceInputOutput' => ['description' => 'The source can be set and returned correctly', 'type' => 'module'], + 'Modules\Script\tests\Models\TemplateTest:testDatatypeInputOutput' => ['description' => 'The data storage type can be set and returned correctly', 'type' => 'module'], + 'Modules\Script\tests\Models\TemplateTest:testToArray' => ['description' => 'Template data can be turned into an array', 'type' => 'module'], + 'Modules\Script\tests\Models\TemplateTest:testJsonSerialize' => ['description' => 'Template data can be json serialized', 'type' => 'module'], - 'Modules\Helper\tests\Models\TemplateMapperTest' => ['description' => 'Template database mapper', 'type' => 'module'], - 'Modules\Helper\tests\Models\TemplateMapperTest:testCR' => ['description' => 'The model can be created and read from the database', 'type' => 'module'], - 'Modules\Helper\tests\Models\TemplateMapperTest:testNewest' => ['description' => 'The newest model can be read from the database', 'type' => 'module'], + 'Modules\Script\tests\Models\TemplateMapperTest' => ['description' => 'Template database mapper', 'type' => 'module'], + 'Modules\Script\tests\Models\TemplateMapperTest:testCR' => ['description' => 'The model can be created and read from the database', 'type' => 'module'], + 'Modules\Script\tests\Models\TemplateMapperTest:testNewest' => ['description' => 'The newest model can be read from the database', 'type' => 'module'], // models 'Modules\Knowledgebase\tests\Models\WikiAppTest' => ['description' => 'Wiki application', 'type' => 'module'], @@ -3041,29 +3041,29 @@ return [ 'Modules\Help\tests\Controller\SearchControllerTest:testHelpSearch' => ['description' => '', 'group' => 'module'], - 'Modules\Helper\tests\Controller\ApiControllerTest:testStandaloneTemplateCreate' => ['description' => '', 'group' => 'module'], - 'Modules\Helper\tests\Controller\ApiControllerTest:testTemplateCreate' => ['description' => '', 'group' => 'module'], - 'Modules\Helper\tests\Controller\ApiControllerTest:testTemplateCreateInvalidPermission' => ['description' => '', 'group' => 'module'], - 'Modules\Helper\tests\Controller\ApiControllerTest:testExportPdf' => ['description' => '', 'group' => 'module'], - 'Modules\Helper\tests\Controller\ApiControllerTest:testExportXlsx' => ['description' => '', 'group' => 'module'], - 'Modules\Helper\tests\Controller\ApiControllerTest:testExportDocx' => ['description' => '', 'group' => 'module'], - 'Modules\Helper\tests\Controller\ApiControllerTest:testExportPptx' => ['description' => '', 'group' => 'module'], - 'Modules\Helper\tests\Controller\ApiControllerTest:testExportCsv' => ['description' => '', 'group' => 'module'], - 'Modules\Helper\tests\Controller\ApiControllerTest:testExportJson' => ['description' => '', 'group' => 'module'], - 'Modules\Helper\tests\Controller\ApiControllerTest:testExportInvalidPermission' => ['description' => '', 'group' => 'module'], - 'Modules\Helper\tests\Controller\ApiControllerTest:testExportOtherType' => ['description' => '', 'group' => 'module'], - 'Modules\Helper\tests\Controller\ApiControllerTest:testExportInvalidData' => ['description' => '', 'group' => 'module'], - 'Modules\Helper\tests\Controller\ApiControllerTest:testApiTemplateCreateInvalidData' => ['description' => '', 'group' => 'module'], - 'Modules\Helper\tests\Controller\ApiControllerTest:testReportCreate' => ['description' => '', 'group' => 'module'], - 'Modules\Helper\tests\Controller\ApiControllerTest:testExportOtherTypeNotStandalone' => ['description' => '', 'group' => 'module'], - 'Modules\Helper\tests\Controller\ApiControllerTest:testReportCreateInvalidPermission' => ['description' => '', 'group' => 'module'], - 'Modules\Helper\tests\Controller\ApiControllerTest:testApiReportCreateInvalidData' => ['description' => '', 'group' => 'module'], - 'Modules\Helper\tests\Models\NullReportTest:testNull' => ['description' => '', 'group' => 'module'], - 'Modules\Helper\tests\Models\NullReportTest:testId' => ['description' => '', 'group' => 'module'], - 'Modules\Helper\tests\Models\NullTemplateTest:testNull' => ['description' => '', 'group' => 'module'], - 'Modules\Helper\tests\Models\NullTemplateTest:testId' => ['description' => '', 'group' => 'module'], - 'Modules\Helper\tests\Models\TemplateTest:testTagInputOutput' => ['description' => '', 'group' => 'module'], - 'Modules\Helper\tests\Models\TemplateTest:testNewestReportOutput' => ['description' => '', 'group' => 'module'], + 'Modules\Script\tests\Controller\ApiControllerTest:testStandaloneTemplateCreate' => ['description' => '', 'group' => 'module'], + 'Modules\Script\tests\Controller\ApiControllerTest:testTemplateCreate' => ['description' => '', 'group' => 'module'], + 'Modules\Script\tests\Controller\ApiControllerTest:testTemplateCreateInvalidPermission' => ['description' => '', 'group' => 'module'], + 'Modules\Script\tests\Controller\ApiControllerTest:testExportPdf' => ['description' => '', 'group' => 'module'], + 'Modules\Script\tests\Controller\ApiControllerTest:testExportXlsx' => ['description' => '', 'group' => 'module'], + 'Modules\Script\tests\Controller\ApiControllerTest:testExportDocx' => ['description' => '', 'group' => 'module'], + 'Modules\Script\tests\Controller\ApiControllerTest:testExportPptx' => ['description' => '', 'group' => 'module'], + 'Modules\Script\tests\Controller\ApiControllerTest:testExportCsv' => ['description' => '', 'group' => 'module'], + 'Modules\Script\tests\Controller\ApiControllerTest:testExportJson' => ['description' => '', 'group' => 'module'], + 'Modules\Script\tests\Controller\ApiControllerTest:testExportInvalidPermission' => ['description' => '', 'group' => 'module'], + 'Modules\Script\tests\Controller\ApiControllerTest:testExportOtherType' => ['description' => '', 'group' => 'module'], + 'Modules\Script\tests\Controller\ApiControllerTest:testExportInvalidData' => ['description' => '', 'group' => 'module'], + 'Modules\Script\tests\Controller\ApiControllerTest:testApiTemplateCreateInvalidData' => ['description' => '', 'group' => 'module'], + 'Modules\Script\tests\Controller\ApiControllerTest:testReportCreate' => ['description' => '', 'group' => 'module'], + 'Modules\Script\tests\Controller\ApiControllerTest:testExportOtherTypeNotStandalone' => ['description' => '', 'group' => 'module'], + 'Modules\Script\tests\Controller\ApiControllerTest:testReportCreateInvalidPermission' => ['description' => '', 'group' => 'module'], + 'Modules\Script\tests\Controller\ApiControllerTest:testApiReportCreateInvalidData' => ['description' => '', 'group' => 'module'], + 'Modules\Script\tests\Models\NullReportTest:testNull' => ['description' => '', 'group' => 'module'], + 'Modules\Script\tests\Models\NullReportTest:testId' => ['description' => '', 'group' => 'module'], + 'Modules\Script\tests\Models\NullTemplateTest:testNull' => ['description' => '', 'group' => 'module'], + 'Modules\Script\tests\Models\NullTemplateTest:testId' => ['description' => '', 'group' => 'module'], + 'Modules\Script\tests\Models\TemplateTest:testTagInputOutput' => ['description' => '', 'group' => 'module'], + 'Modules\Script\tests\Models\TemplateTest:testNewestReportOutput' => ['description' => '', 'group' => 'module'], 'Modules\HumanResourceManagement\tests\Controller\ApiControllerTest:testEmployeeFromAccountCreate' => ['description' => '', 'group' => 'module'], 'Modules\HumanResourceManagement\tests\Controller\ApiControllerTest:testNewEmployeeCreate' => ['description' => '', 'group' => 'module'], @@ -3258,15 +3258,10 @@ return [ 'Modules\Media\tests\Models\MediaTest:testTagInputOutput' => ['description' => '', 'group' => 'module'], 'Modules\Media\tests\Models\MediaTest:testTagRemove' => ['description' => '', 'group' => 'module'], 'Modules\Media\tests\Models\MediaTest:testSerialize' => ['description' => '', 'group' => 'module'], - 'Modules\Media\tests\Models\MediaTypeTest:testDefault' => ['description' => '', 'group' => 'module'], - 'Modules\Media\tests\Models\MediaTypeTest:testL11nInputOutput' => ['description' => '', 'group' => 'module'], - 'Modules\Media\tests\Models\MediaTypeTest:testSerialize' => ['description' => '', 'group' => 'module'], 'Modules\Media\tests\Models\NullCollectionTest:testNull' => ['description' => '', 'group' => 'module'], 'Modules\Media\tests\Models\NullCollectionTest:testId' => ['description' => '', 'group' => 'module'], 'Modules\Media\tests\Models\NullMediaTest:testNull' => ['description' => '', 'group' => 'module'], 'Modules\Media\tests\Models\NullMediaTest:testId' => ['description' => '', 'group' => 'module'], - 'Modules\Media\tests\Models\NullMediaTypeTest:testNull' => ['description' => '', 'group' => 'module'], - 'Modules\Media\tests\Models\NullMediaTypeTest:testId' => ['description' => '', 'group' => 'module'], 'Modules\Media\tests\Views\MediaViewTest:testFilePath' => ['description' => '', 'group' => 'module'], 'Modules\Media\tests\Views\MediaViewTest:testDirPath' => ['description' => '', 'group' => 'module'], 'Modules\Media\tests\Views\MediaViewTest:testIscollection' => ['description' => '', 'group' => 'module'], diff --git a/Helper/Php/buildER.php b/Helper/Php/buildER.php new file mode 100644 index 0000000..a348a85 --- /dev/null +++ b/Helper/Php/buildER.php @@ -0,0 +1,67 @@ + $data) { + echo \str_repeat(' ', $indent + 4), $data['type'], ' ', $data['internal'] . "\n"; + } + + foreach ($class::HAS_MANY as $name => $data) { + echo \str_repeat(' ', $indent + 4), 'array ', $name . "\n"; + } + + echo \str_repeat(' ', $indent), "}\n"; + + foreach ($class::BELONGS_TO as $name => $data) { + $childMapper = \substr($data['mapper'], \strrpos($data['mapper'], '\\') + 1, -6); + + echo \str_repeat(' ', $indent), \substr($mapper, 0, -10), ' }|--o| ', $childMapper, " : contains\n"; + } + + foreach ($class::OWNS_ONE as $name => $data) { + $childMapper = \substr($data['mapper'], \strrpos($data['mapper'], '\\') + 1, -6); + + echo \str_repeat(' ', $indent), \substr($mapper, 0, -10), ' }|--o| ', $childMapper, " : contains\n"; + } + + foreach ($class::HAS_MANY as $name => $data) { + $childMapper = \substr($data['mapper'], \strrpos($data['mapper'], '\\') + 1, -6); + + echo \str_repeat(' ', $indent), \substr($mapper, 0, -10), ' }|--|{ ', $childMapper, " : contains\n"; + } +} \ No newline at end of file diff --git a/Helper/Scripts/serverInstall.sh b/Helper/Scripts/serverInstall.sh index 00ee096..a54ebe8 100644 --- a/Helper/Scripts/serverInstall.sh +++ b/Helper/Scripts/serverInstall.sh @@ -15,7 +15,7 @@ apt-get install git snapd ufw software-properties-common composer nodejs npm # Security -apt-get install ufw +apt-get install ufw libpam-google-authenticator ufw allow ssh ufw allow http ufw allow https @@ -34,11 +34,15 @@ service fail2ban restart # change /etc/ssh/sshd_config PasswordAuthentication no # systemctl restart ssh +# google-authenticator +# nano /etc/pam.d/sshd -> auth required pam_google_authenticator.so + comment out @include common-auth +# naon /etc/ssh/sshd_config > ChallengeResponseAuthentication yes + KbdInteractiveAuthentication yes + AuthenticationMethods publickey,keyboard-interactive + ############################################################### ## Web ############################################################### -apt-get install php8.2 php8.2-dev php8.2-cli php8.2-common php8.2-intl php8.2-mysql php8.2-pgsql php8.2-xdebug php8.2-opcache php8.2-pdo php8.2-sqlite php8.2-mbstring php8.2-curl php8.2-imap php8.2-bcmath php8.2-zip php8.2-dom php8.2-xml php8.2-phar php8.2-gd php-pear apache2 libapache2-mpm-itk apache2-utils mariadb-server mariadb-client wkhtmltopdf tesseract-ocr poppler-utils imagemagick +apt-get install php8.3 php8.3-dev php8.3-cli php8.3-common php8.3-intl php8.3-mysql php8.3-pgsql php8.3-xdebug php8.3-opcache php8.3-pdo php8.3-sqlite php8.3-mbstring php8.3-curl php8.3-imap php8.3-bcmath php8.3-zip php8.3-dom php8.3-xml php8.3-phar php8.3-gd php-pear apache2 libapache2-mpm-itk apache2-utils mariadb-server mariadb-client wkhtmltopdf tesseract-ocr poppler-utils imagemagick pecl install pcov #echo "extension=pcov.so" > /etc/php/cli/conf.d/20-xdebug.ini