diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..bc3ab5c1 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,6 @@ +version: 2 +updates: + - package-ecosystem: "composer" + directory: "/" + schedule: + interval: "daily" diff --git a/README.rst b/README.rst index 26e51041..45b1685f 100644 --- a/README.rst +++ b/README.rst @@ -46,23 +46,24 @@ The following SMS gateways are currently available: * Inetworx - * Messagebird - * Mosms - -* Smsglobal - -* SMSit - +* Smsglobal - +* SMSit - * Spryng - * Textmarketer - * FreeVoipDeal - -* Nexmo - -* OctoPush - -* FreeMobile (FR) - +* Nexmo - +* OctoPush - +* FreeMobile (FR) - * Twilio - -* CM Telecom - -* GatewayAPI - -* SolutionsInfini - -* Plivo - -* Callr - +* CM Telecom - +* GatewayAPI - +* SolutionsInfini - +* Plivo - +* Callr - * SMSAPI - -* OVH SMS PRO - - +* OVH SMS PRO - +* PromoSMS - +* Infobip - Please note: for these gateways you will need an account with sufficient credits. diff --git a/composer.json b/composer.json index 0498c033..3c30fe5e 100644 --- a/composer.json +++ b/composer.json @@ -9,7 +9,7 @@ "ext-json": "*", "ext-pdo": "*", "ext-xml": "*", - "phpmailer/phpmailer": ">=6.0.6 ~6.0", + "phpmailer/phpmailer": ">=6.4.1 ~6.0", "symfony/config": "~3.4", "symfony/dependency-injection": "~3.4", "symfony/event-dispatcher": "~3.4", @@ -18,7 +18,8 @@ "php-pushover/php-pushover": "dev-master", "paragonie/random_compat": "^2.0", "twig/twig": "~1.35", - "jaxl/jaxl": "^3.1" + "jaxl/jaxl": "^3.1", + "viharm/psm-ldap-auth": "^1.1" }, "autoload": { "files": [ diff --git a/composer.lock b/composer.lock index 6ce79bb8..4a08830b 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "f78e950e2dfef7debe88d7b64e2b4aec", + "content-hash": "21bf20f2a7d6602e659723ca99c80d66", "packages": [ { "name": "jaxl/jaxl", @@ -80,17 +80,69 @@ "time": "2016-09-13T01:59:35+00:00" }, { - "name": "paragonie/random_compat", - "version": "v2.0.18", + "name": "mnsami/composer-custom-directory-installer", + "version": "1.1.1", "source": { "type": "git", - "url": "https://github.com/paragonie/random_compat.git", - "reference": "0a58ef6e3146256cc3dc7cc393927bcc7d1b72db" + "url": "https://github.com/mnsami/composer-custom-directory-installer.git", + "reference": "8cc82e0c5801cc3bf53ba452afdcaa5c6ff645a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/0a58ef6e3146256cc3dc7cc393927bcc7d1b72db", - "reference": "0a58ef6e3146256cc3dc7cc393927bcc7d1b72db", + "url": "https://api.github.com/repos/mnsami/composer-custom-directory-installer/zipball/8cc82e0c5801cc3bf53ba452afdcaa5c6ff645a5", + "reference": "8cc82e0c5801cc3bf53ba452afdcaa5c6ff645a5", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0", + "php": ">=5.3" + }, + "type": "composer-plugin", + "extra": { + "class": [ + "Composer\\CustomDirectoryInstaller\\LibraryPlugin", + "Composer\\CustomDirectoryInstaller\\PearPlugin", + "Composer\\CustomDirectoryInstaller\\PluginPlugin" + ], + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-0": { + "Composer\\CustomDirectoryInstaller": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mina Nabil Sami", + "email": "mina.nsami@gmail.com" + } + ], + "description": "A composer plugin, to help install packages of different types in custom paths.", + "keywords": [ + "composer", + "composer-installer", + "composer-plugin" + ], + "time": "2016-05-25T08:26:02+00:00" + }, + { + "name": "paragonie/random_compat", + "version": "v2.0.20", + "source": { + "type": "git", + "url": "https://github.com/paragonie/random_compat.git", + "reference": "0f1f60250fccffeaf5dda91eea1c018aed1adc2a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/0f1f60250fccffeaf5dda91eea1c018aed1adc2a", + "reference": "0f1f60250fccffeaf5dda91eea1c018aed1adc2a", "shasum": "" }, "require": { @@ -126,7 +178,7 @@ "pseudorandom", "random" ], - "time": "2019-01-03T20:59:08+00:00" + "time": "2021-04-17T09:33:01+00:00" }, { "name": "php-pushover/php-pushover", @@ -134,12 +186,12 @@ "source": { "type": "git", "url": "https://github.com/cschalenborgh/php-pushover.git", - "reference": "b2d060efacf48e4c6821427691b19db0315ccedd" + "reference": "ef1df985bf3acb17b1f1f8fe2df2c3c9a16bef32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cschalenborgh/php-pushover/zipball/b2d060efacf48e4c6821427691b19db0315ccedd", - "reference": "b2d060efacf48e4c6821427691b19db0315ccedd", + "url": "https://api.github.com/repos/cschalenborgh/php-pushover/zipball/ef1df985bf3acb17b1f1f8fe2df2c3c9a16bef32", + "reference": "ef1df985bf3acb17b1f1f8fe2df2c3c9a16bef32", "shasum": "" }, "type": "library", @@ -156,34 +208,38 @@ } ], "description": "PHP class for the Pushover.net project", - "time": "2019-09-26T19:38:11+00:00" + "time": "2021-01-12T12:43:39+00:00" }, { "name": "phpmailer/phpmailer", - "version": "v6.1.6", + "version": "v6.4.1", "source": { "type": "git", "url": "https://github.com/PHPMailer/PHPMailer.git", - "reference": "c2796cb1cb99d7717290b48c4e6f32cb6c60b7b3" + "reference": "9256f12d8fb0cd0500f93b19e18c356906cbed3d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/c2796cb1cb99d7717290b48c4e6f32cb6c60b7b3", - "reference": "c2796cb1cb99d7717290b48c4e6f32cb6c60b7b3", + "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/9256f12d8fb0cd0500f93b19e18c356906cbed3d", + "reference": "9256f12d8fb0cd0500f93b19e18c356906cbed3d", "shasum": "" }, "require": { "ext-ctype": "*", "ext-filter": "*", + "ext-hash": "*", "php": ">=5.5.0" }, "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", "doctrine/annotations": "^1.2", - "friendsofphp/php-cs-fixer": "^2.2", - "phpunit/phpunit": "^4.8 || ^5.7" + "phpcompatibility/php-compatibility": "^9.3.5", + "roave/security-advisories": "dev-latest", + "squizlabs/php_codesniffer": "^3.5.6", + "yoast/phpunit-polyfills": "^0.2.0" }, "suggest": { - "ext-mbstring": "Needed to send email in multibyte encoding charset", + "ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses", "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication", "league/oauth2-google": "Needed for Google XOAUTH2 authentication", "psr/log": "For optional PSR-3 debug logging", @@ -218,31 +274,26 @@ } ], "description": "PHPMailer is a full-featured email creation and transfer class for PHP", - "time": "2020-05-27T12:24:03+00:00" + "time": "2021-04-29T12:25:04+00:00" }, { "name": "psr/container", - "version": "1.0.0", + "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=7.2.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, "autoload": { "psr-4": { "Psr\\Container\\": "src/" @@ -255,7 +306,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common Container Interface (PHP FIG PSR-11)", @@ -267,20 +318,20 @@ "container-interop", "psr" ], - "time": "2017-02-14T16:28:37+00:00" + "time": "2021-03-05T17:36:06+00:00" }, { "name": "symfony/config", - "version": "v3.4.36", + "version": "v3.4.47", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "a599a867d0e4a07c342b5f1e656b3915a540ddbe" + "reference": "bc6b3fd3930d4b53a60b42fe2ed6fc466b75f03f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/a599a867d0e4a07c342b5f1e656b3915a540ddbe", - "reference": "a599a867d0e4a07c342b5f1e656b3915a540ddbe", + "url": "https://api.github.com/repos/symfony/config/zipball/bc6b3fd3930d4b53a60b42fe2ed6fc466b75f03f", + "reference": "bc6b3fd3930d4b53a60b42fe2ed6fc466b75f03f", "shasum": "" }, "require": { @@ -302,11 +353,6 @@ "symfony/yaml": "To use the yaml reference dumper" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Config\\": "" @@ -331,20 +377,20 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2019-12-01T10:45:41+00:00" + "time": "2020-10-24T10:57:07+00:00" }, { "name": "symfony/dependency-injection", - "version": "v3.4.36", + "version": "v3.4.47", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "0d201916bfb3af939fec3c0c8815ea16c60ac1a2" + "reference": "51d2a2708c6ceadad84393f8581df1dcf9e5e84b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/0d201916bfb3af939fec3c0c8815ea16c60ac1a2", - "reference": "0d201916bfb3af939fec3c0c8815ea16c60ac1a2", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/51d2a2708c6ceadad84393f8581df1dcf9e5e84b", + "reference": "51d2a2708c6ceadad84393f8581df1dcf9e5e84b", "shasum": "" }, "require": { @@ -373,11 +419,6 @@ "symfony/yaml": "" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\DependencyInjection\\": "" @@ -402,20 +443,20 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2019-12-01T08:33:36+00:00" + "time": "2020-10-24T10:57:07+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v3.4.36", + "version": "v3.4.47", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "f9031c22ec127d4a2450760f81a8677fe8a10177" + "reference": "31fde73757b6bad247c54597beef974919ec6860" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/f9031c22ec127d4a2450760f81a8677fe8a10177", - "reference": "f9031c22ec127d4a2450760f81a8677fe8a10177", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/31fde73757b6bad247c54597beef974919ec6860", + "reference": "31fde73757b6bad247c54597beef974919ec6860", "shasum": "" }, "require": { @@ -427,6 +468,7 @@ "require-dev": { "psr/log": "~1.0", "symfony/config": "~2.8|~3.0|~4.0", + "symfony/debug": "~3.4|~4.4", "symfony/dependency-injection": "~3.3|~4.0", "symfony/expression-language": "~2.8|~3.0|~4.0", "symfony/stopwatch": "~2.8|~3.0|~4.0" @@ -436,11 +478,6 @@ "symfony/http-kernel": "" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\EventDispatcher\\": "" @@ -465,20 +502,20 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2019-10-24T15:33:53+00:00" + "time": "2020-10-24T10:57:07+00:00" }, { "name": "symfony/filesystem", - "version": "v3.4.36", + "version": "v3.4.47", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "00cdad0936d06fab136944bc2342b762b1c3a4a2" + "reference": "e58d7841cddfed6e846829040dca2cca0ebbbbb3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/00cdad0936d06fab136944bc2342b762b1c3a4a2", - "reference": "00cdad0936d06fab136944bc2342b762b1c3a4a2", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/e58d7841cddfed6e846829040dca2cca0ebbbbb3", + "reference": "e58d7841cddfed6e846829040dca2cca0ebbbbb3", "shasum": "" }, "require": { @@ -486,11 +523,6 @@ "symfony/polyfill-ctype": "~1.8" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Filesystem\\": "" @@ -515,20 +547,20 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2019-11-25T16:36:22+00:00" + "time": "2020-10-24T10:57:07+00:00" }, { "name": "symfony/http-foundation", - "version": "v3.4.36", + "version": "v3.4.47", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "d2d0cfe8e319d9df44c4cca570710fcf221d4593" + "reference": "b9885fcce6fe494201da4f70a9309770e9d13dc8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/d2d0cfe8e319d9df44c4cca570710fcf221d4593", - "reference": "d2d0cfe8e319d9df44c4cca570710fcf221d4593", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/b9885fcce6fe494201da4f70a9309770e9d13dc8", + "reference": "b9885fcce6fe494201da4f70a9309770e9d13dc8", "shasum": "" }, "require": { @@ -540,11 +572,6 @@ "symfony/expression-language": "~2.8|~3.0|~4.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\HttpFoundation\\": "" @@ -569,24 +596,24 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2019-11-28T12:52:59+00:00" + "time": "2020-10-24T10:57:07+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.13.1", + "version": "v1.22.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "f8f0b461be3385e56d6de3dbb5a0df24c0c275e3" + "reference": "c6c942b1ac76c82448322025e084cadc56048b4e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/f8f0b461be3385e56d6de3dbb5a0df24c0c275e3", - "reference": "f8f0b461be3385e56d6de3dbb5a0df24c0c275e3", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/c6c942b1ac76c82448322025e084cadc56048b4e", + "reference": "c6c942b1ac76c82448322025e084cadc56048b4e", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" }, "suggest": { "ext-ctype": "For best performance" @@ -594,7 +621,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.13-dev" + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { @@ -627,24 +658,24 @@ "polyfill", "portable" ], - "time": "2019-11-27T13:56:44+00:00" + "time": "2021-01-07T16:49:33+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.13.1", + "version": "v1.22.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "7b4aab9743c30be783b73de055d24a39cf4b954f" + "reference": "5232de97ee3b75b0360528dae24e73db49566ab1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/7b4aab9743c30be783b73de055d24a39cf4b954f", - "reference": "7b4aab9743c30be783b73de055d24a39cf4b954f", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/5232de97ee3b75b0360528dae24e73db49566ab1", + "reference": "5232de97ee3b75b0360528dae24e73db49566ab1", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" }, "suggest": { "ext-mbstring": "For best performance" @@ -652,7 +683,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.13-dev" + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { @@ -686,42 +721,34 @@ "portable", "shim" ], - "time": "2019-11-27T14:18:11+00:00" + "time": "2021-01-22T09:19:47+00:00" }, { "name": "symfony/polyfill-php70", - "version": "v1.13.1", + "version": "v1.20.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php70.git", - "reference": "af23c7bb26a73b850840823662dda371484926c4" + "reference": "5f03a781d984aae42cebd18e7912fa80f02ee644" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/af23c7bb26a73b850840823662dda371484926c4", - "reference": "af23c7bb26a73b850840823662dda371484926c4", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/5f03a781d984aae42cebd18e7912fa80f02ee644", + "reference": "5f03a781d984aae42cebd18e7912fa80f02ee644", "shasum": "" }, "require": { - "paragonie/random_compat": "~1.0|~2.0|~9.99", - "php": ">=5.3.3" + "php": ">=7.1" }, - "type": "library", + "type": "metapackage", "extra": { "branch-alias": { - "dev-master": "1.13-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php70\\": "" + "dev-main": "1.20-dev" }, - "files": [ - "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" - ] + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -745,35 +772,34 @@ "portable", "shim" ], - "time": "2019-11-27T13:56:44+00:00" + "time": "2020-10-23T14:02:19+00:00" }, { "name": "twig/twig", - "version": "v1.42.4", + "version": "v1.44.2", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "e587180584c3d2d6cb864a0454e777bb6dcb6152" + "reference": "138c493c5b8ee7cff3821f80b8896d371366b5fe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/e587180584c3d2d6cb864a0454e777bb6dcb6152", - "reference": "e587180584c3d2d6cb864a0454e777bb6dcb6152", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/138c493c5b8ee7cff3821f80b8896d371366b5fe", + "reference": "138c493c5b8ee7cff3821f80b8896d371366b5fe", "shasum": "" }, "require": { - "php": ">=5.5.0", + "php": ">=7.2.5", "symfony/polyfill-ctype": "^1.8" }, "require-dev": { "psr/container": "^1.0", - "symfony/debug": "^3.4|^4.2", - "symfony/phpunit-bridge": "^4.4@dev|^5.0" + "symfony/phpunit-bridge": "^4.4.9|^5.0.9" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.42-dev" + "dev-master": "1.44-dev" } }, "autoload": { @@ -797,7 +823,6 @@ }, { "name": "Twig Team", - "homepage": "https://twig.symfony.com/contributors", "role": "Contributors" }, { @@ -811,7 +836,189 @@ "keywords": [ "templating" ], - "time": "2019-11-11T16:49:32+00:00" + "time": "2021-01-05T10:10:05+00:00" + }, + { + "name": "viharm/php-db-auth", + "version": "v2.7.0", + "source": { + "type": "git", + "url": "https://bitbucket.org/viharm/phpdbauth.git", + "reference": "60c1b0a28d26178d5e4960d49185af85734643c6" + }, + "dist": { + "type": "zip", + "url": "https://bitbucket.org/viharm/phpdbauth/get/60c1b0a28d26178d5e4960d49185af85734643c6.zip", + "reference": "60c1b0a28d26178d5e4960d49185af85734643c6", + "shasum": "" + }, + "require": { + "mnsami/composer-custom-directory-installer": "1.1.*", + "php": ">=5.3.0", + "viharm/php-khelper": "^1.4.1" + }, + "type": "library", + "extra": { + "installer-paths": { + "./Lib/phpKhelper": [ + "viharm/php-khelper" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Viharm", + "email": "viharm@malviya.net", + "homepage": "http://viharm.malviya.net", + "role": "Developer" + } + ], + "description": "PHP library for looking up users in a database table field", + "homepage": "https://bitbucket.org/viharm/phpdbauth", + "keywords": [ + "auth", + "database", + "php" + ], + "time": "2020-01-05T11:48:12+00:00" + }, + { + "name": "viharm/php-khelper", + "version": "v1.4.1", + "source": { + "type": "git", + "url": "https://gitlab.com/viharm/phpKhelper.git", + "reference": "92aea82d609d3c9dc39952c9e386578f532e7140" + }, + "dist": { + "type": "zip", + "url": "https://gitlab.com/api/v4/projects/viharm%2FphpKhelper/repository/archive.zip?sha=92aea82d609d3c9dc39952c9e386578f532e7140", + "reference": "92aea82d609d3c9dc39952c9e386578f532e7140", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Viharm", + "email": "viharm@malviya.net", + "homepage": "http://viharm.malviya.net", + "role": "Developer" + } + ], + "description": "A companion PHP library to accompany Kint (http://kint-php.github.io/kint/)", + "homepage": "https://gitlab.com/viharm/phpKhelper", + "keywords": [ + "debug", + "kint", + "php" + ], + "time": "2018-09-15T08:27:02+00:00" + }, + { + "name": "viharm/php-ldap-auth", + "version": "v2.5.1", + "source": { + "type": "git", + "url": "https://bitbucket.org/viharm/phpldapauth.git", + "reference": "3a60e626bfb63eda786dad30f09bd75fd5172cb1" + }, + "dist": { + "type": "zip", + "url": "https://bitbucket.org/viharm/phpldapauth/get/3a60e626bfb63eda786dad30f09bd75fd5172cb1.zip", + "reference": "3a60e626bfb63eda786dad30f09bd75fd5172cb1", + "shasum": "" + }, + "require": { + "mnsami/composer-custom-directory-installer": "1.1.*", + "php": ">=5.3.0", + "viharm/php-khelper": "^1.4.1" + }, + "type": "library", + "extra": { + "installer-paths": { + "./Lib/phpKhelper": [ + "viharm/php-khelper" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Viharm", + "email": "viharm@malviya.net", + "homepage": "http://viharm.malviya.net", + "role": "Developer" + } + ], + "description": "PHP library for authenticating with a directory server", + "homepage": "https://bitbucket.org/viharm/phpldapauth", + "keywords": [ + "ad", + "auth", + "ldap", + "openldap", + "php" + ], + "time": "2020-11-24T21:56:47+00:00" + }, + { + "name": "viharm/psm-ldap-auth", + "version": "v1.1.3", + "source": { + "type": "git", + "url": "https://gitlab.com/viharm/PsmLDAPauth.git", + "reference": "1addeb0403a19e457f2c622a67156f52568da308" + }, + "dist": { + "type": "zip", + "url": "https://gitlab.com/api/v4/projects/viharm%2FPsmLDAPauth/repository/archive.zip?sha=1addeb0403a19e457f2c622a67156f52568da308", + "reference": "1addeb0403a19e457f2c622a67156f52568da308", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "viharm/php-db-auth": "^2.6.0", + "viharm/php-ldap-auth": "^2.4.0" + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-3.0-only" + ], + "authors": [ + { + "name": "Viharm", + "email": "viharm@malviya.net", + "homepage": "http://viharm.malviya.net", + "role": "Developer" + } + ], + "description": "Module for authenticating PHP Server Monitor users against a directory", + "homepage": "https://gitlab.com/viharm/PsmLDAPauth", + "keywords": [ + "ad", + "auth", + "ldap", + "openldap", + "php", + "php server monitor", + "psm" + ], + "time": "2020-11-24T22:57:57+00:00" } ], "packages-dev": [], @@ -825,6 +1032,7 @@ "platform": { "php": "^5.5.9|>=7.0.8", "ext-curl": "*", + "ext-json": "*", "ext-pdo": "*", "ext-xml": "*" }, diff --git a/config.php.sample b/config.php.sample index bf902aaa..a9537ed0 100644 --- a/config.php.sample +++ b/config.php.sample @@ -7,3 +7,4 @@ define('PSM_DB_HOST', 'localhost'); define('PSM_DB_PORT', '3306'); //3306 is the default port for MySQL. If no specfic port is used, leave it empty. define('PSM_BASE_URL', ''); define('PSM_WEBCRON_KEY', ''); +define('PSM_PUBLIC', false); diff --git a/docs/credits.rst b/docs/credits.rst index 83ee5bf7..e34fee17 100644 --- a/docs/credits.rst +++ b/docs/credits.rst @@ -93,6 +93,10 @@ The following people have contributed to the development of PHP Server Monitor: * Discord webhook support +* Łukasz Szczepański - https://github.com/NixNotCastey + + * PromoSMS gateway + Translators +++++++++++ diff --git a/docs/faq.rst b/docs/faq.rst index 04f6e05a..13c8454f 100644 --- a/docs/faq.rst +++ b/docs/faq.rst @@ -10,7 +10,7 @@ Users What are the differences between the user levels? ------------------------------------------------- -There are 2 user levels available: regular user and administrator. +There are 3 user levels available: anonymous, regular user and administrator. Administrators: @@ -24,6 +24,16 @@ Regular users: * View the history and logs of their assigned servers. * Run the updater on their assigned servers. +Anonymous: +Only meant for user '__PUBLIC__' and can't be assigned to any other user. + +* View the status of their assigned servers without password. + +I removed user '__PUBLIC__', what now? +-------------------------------------- + +* Go to users -> create new user. +* Set the username to '__PUBLIC__', level to 'anonymous' and the rest is up to you. Servers +++++++ @@ -101,6 +111,14 @@ After upgrading, my email stopped working. Run 'php composer.phar update' and you should be good to go! +Setting up a public page. +------------------------- + +1. Set PSM_PUBLIC to true in config.php. +2. If not yet existing, create a user with username '__PUBLIC__'. See Users -> "I removed user '__PUBLIC__', what now?" for help. +3. Add servers to user '__PUBLIC__'. +4. Go to /public.php. + Notifications +++++++++++++ diff --git a/public.php b/public.php new file mode 100644 index 00000000..9848ffbd --- /dev/null +++ b/public.php @@ -0,0 +1,40 @@ +. + * + * @package phpservermon + * @author Tim Zandbergen + * @copyright Copyright (c) 2008-2017 Pepijn Over + * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 + * @version Release: @package_version@ + * @link http://www.phpservermonitor.org/ + * @since phpservermon 3.6.0 + **/ + +namespace { + define('PSM_PUBLIC_PAGE', true); + + require __DIR__ . '/src/bootstrap.php'; + + $router->run('server_status'); + + // By destroying the session the login will show when going to another page + session_destroy(); + +} diff --git a/src/bootstrap.php b/src/bootstrap.php index 9037beef..e6dd3338 100644 --- a/src/bootstrap.php +++ b/src/bootstrap.php @@ -108,6 +108,19 @@ namespace { } } + // check for a public page var + // This should be defined in the config + if (!defined('PSM_PUBLIC')) { + define('PSM_PUBLIC', false); + } + + // check for a public page + // This variable is for internal use + // and should not be changed by the user manualy + if (!defined('PSM_PUBLIC_PAGE')) { + define('PSM_PUBLIC_PAGE', false); + } + $lang = psm_get_conf('language', 'en_US'); psm_load_lang($lang); } diff --git a/src/includes/functions.inc.php b/src/includes/functions.inc.php index 59717599..f0560f17 100644 --- a/src/includes/functions.inc.php +++ b/src/includes/functions.inc.php @@ -419,6 +419,7 @@ namespace { curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); curl_setopt($ch, CURLOPT_ENCODING, ''); curl_setopt($ch, CURLOPT_CERTINFO, 1); + curl_setopt($ch, CURLOPT_COOKIEFILE, ''); if (!empty($request_method)) { curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $request_method); @@ -755,6 +756,9 @@ namespace { case 'smsglobal': $sms = new \psm\Txtmsg\Smsglobal(); break; + case 'infobip': + $sms = new \psm\Txtmsg\Infobip(); + break; case 'freevoipdeal': $sms = new \psm\Txtmsg\FreeVoipDeal(); break; @@ -799,6 +803,9 @@ namespace { case 'smsapi': $sms = new \psm\Txtmsg\SMSAPI(); break; + case 'promosms': + $sms = new \psm\Txtmsg\PromoSMS(); + break; } // copy login information from the config file @@ -1068,23 +1075,22 @@ namespace { { protected $url; protected $json; - protected $message; /** * Send Webhook * * @return bool|string - * @var string $message + * @var array $replacements an array of the replacements * */ - public function sendWebhook($message) + public function sendWebhook($replacements) { $error = ""; $success = 1; - $this->setMessage($message); - $jsonMessage = strtr($this->json, array('#message' => $this->message)); + $replacements['#message'] = $this->stripTagsFromMessage($replacements['#message']); + $jsonMessage = strtr($this->json, $replacements); $curl = curl_init($this->url); curl_setopt($curl, CURLOPT_POST, 1); @@ -1160,7 +1166,7 @@ namespace { * @var string $message * */ - public function setMessage($message) + public function stripTagsFromMessage($message) { $message = str_replace("
    ", "", $message); $message = str_replace("
", "\n", $message); @@ -1171,7 +1177,7 @@ namespace { $message = str_replace("", "", $message); $message = str_replace("", "", $message); $message = strip_tags($message); - $this->message = (string)$message; + return (string)$message; } } } diff --git a/src/lang/de_DE.lang.php b/src/lang/de_DE.lang.php index 9f0473de..2d711bd2 100644 --- a/src/lang/de_DE.lang.php +++ b/src/lang/de_DE.lang.php @@ -59,7 +59,7 @@ $sm_lang = array( 'long_day_format' => '%B %e, %Y', 'yesterday_format' => 'Gestern um %k:%M Uhr', 'other_day_format' => '%A um %k:%M Uhr', - 'never' => 'Never', + 'never' => 'Nie', 'hours_ago' => 'vor %d Stunden', 'an_hour_ago' => 'vor über einer Stunde', 'minutes_ago' => 'vor %d Minuten', @@ -125,10 +125,10 @@ $sm_lang = array( 'email' => 'E-Mail', 'sms' => 'SMS', 'pushover' => 'Pushover', - 'no_logs' => 'Keine Logs vorhanden.', - 'clear' => 'Protokoll Logs', - 'delete_title' => 'Protokoll Logs', - 'delete_message' => 'Bist du sicher, dass du alle logs löschen möchtest?', + 'no_logs' => 'Keine Protokolle vorhanden.', + 'clear' => 'Protokoll löschen', + 'delete_title' => 'Protokoll löschen', + 'delete_message' => 'Bist du sicher, dass du alle Protokolle löschen möchtest?', ), 'servers' => array( 'server' => 'Server', @@ -196,14 +196,15 @@ $sm_lang = array( 'general' => 'Allgemein', 'language' => 'Sprache', 'show_update' => 'Wöchentlich auf Aktualisierungen prüfen?', + 'email_add_url' => 'Server URL an E-Mail anhängen?', 'email_status' => 'E-Mail-Versand erlauben?', 'email_from_email' => 'Absenderadresse', 'email_from_name' => 'Name des Absenders', 'email_smtp' => 'SMTP-Versand aktivieren', 'email_smtp_host' => 'SMTP Server/Host', 'email_smtp_port' => 'SMTP Port', - 'email_smtp_security' => 'SMTP security', - 'email_smtp_security_none' => 'None', + 'email_smtp_security' => 'SMTP Authentifizierung', + 'email_smtp_security_none' => 'Keine', 'email_smtp_username' => 'SMTP Benutzername', 'email_smtp_password' => 'SMTP Passwort', 'email_smtp_noauth' => 'Feld leer lassen, bei fehlender Authentifizierung', @@ -221,6 +222,9 @@ $sm_lang = array( 'pushover_api_token_description' => 'Bevor Sie Pushover verwenden können, müssen Sie Ihre Anwendung hier registrieren und Ihren Anwendungs-API-Token hier eingeben.', + 'telegram_status' => 'Telegram Nachrichten erlauben?', + 'telegram_add_url' => 'Server URL an Nachricht anhängen?', + 'jabber_status' => 'Allow sending Jabber (XMPP) messages', 'alert_type' => 'Wann möchten Sie benachrichtigt werden?', 'alert_type_description' => 'Status geändert: ... wenn sich der Status ändert
z. B. online -> offline oder offline -> online.

Offline: Sie bekommen eine @@ -237,6 +241,7 @@ $sm_lang = array( 'log_email' => 'E-Mail-Versand protokollieren?', 'log_sms' => 'SMS-Versand protokollieren?', 'log_pushover' => 'Pushover-Versand protokollieren?', + 'log_telegram' => 'Telegram-Versand protokollieren?', 'updated' => 'Die Einstellungen wurden gespeichert.', 'tab_email' => 'E-Mail', 'tab_sms' => 'SMS', @@ -286,14 +291,14 @@ $sm_lang = array( 'off_pushover_message' => 'Kann keine funktionierende Verbindung zum Dienst bzw. der Webseite aufbauen:

Dienst/Webseite: %LABEL%
IP: %IP%
Port: %PORT%
Fehler: %ERROR%
Datum: %DATE% Uhr', - 'on_sms' => 'Dienst/Webseite \'%LABEL%\' ist wieder online: ip=%IP%, port=%PORT%, it was down for + 'on_sms' => 'Dienst/Webseite \'%LABEL%\' ist wieder online: ip=%IP%, port=%PORT%, offline für %LAST_OFFLINE_DURATION%', 'on_email_subject' => 'Hinweis: Dienst/Webseite \'%LABEL%\' ist wieder online.', - 'on_email_body' => 'Dienst/Webseite \'%LABEL%\' ist wieder erreichbar, it was down for + 'on_email_body' => 'Dienst/Webseite \'%LABEL%\' ist wieder erreichbar, offline für %LAST_OFFLINE_DURATION%:

Server: %LABEL%
IP: %IP%
Port: %PORT%
Datum: %DATE% Uhr', 'on_pushover_title' => 'Dienst/Webseite \'%LABEL%\' ist wieder online.', - 'on_pushover_message' => 'Dienst/Webseite \'%LABEL%\' ist wieder erreichbar, it was down for + 'on_pushover_message' => 'Dienst/Webseite \'%LABEL%\' ist wieder erreichbar, offline für %LAST_OFFLINE_DURATION%:

Server: %LABEL%
IP: %IP%
Port: %PORT%
Datum: %DATE% Uhr', ), @@ -313,7 +318,7 @@ $sm_lang = array( 'password_reset' => 'Passwort zurücksetzen', 'password_reset_email_subject' => 'Setzen Sie Ihr Zugangspasswort für den Server Monitor', 'password_reset_email_body' => 'Benutzen Sie bitte den folgenden Link, um Ihr Zugangspasswort zurückzusetzen. - Bitte beachten Sie: Der Link verfällt in 1 Stunde.

%link%', + Bitte beachten Sie: Der Link verfällt in einer Stunde.

%link%', 'error_user_incorrect' => 'Der angegebene Benutzername konnte nicht gefunden werden.', 'error_login_incorrect' => 'Die angegebenen Informationen sind leider nicht korrekt.', 'error_login_passwords_nomatch' => 'Die angegebenen Passwörter stimmen nicht überein.', diff --git a/src/lang/en_US.lang.php b/src/lang/en_US.lang.php index e6c412e7..856fd14c 100644 --- a/src/lang/en_US.lang.php +++ b/src/lang/en_US.lang.php @@ -106,7 +106,10 @@ $sm_lang = array( 'level' => 'Level', 'level_10' => 'Administrator', 'level_20' => 'User', - 'level_description' => 'Administrators have full access: they can manage servers, users and edit the global configuration.
Users can only view and run the updater for the servers that have been assigned to them.', + 'level_30' => 'Anonymous', + 'level_description' => 'Administrators have full access: they can manage servers, users and edit the + global configuration.
Users can only view and run the updater for the + servers that have been assigned to them.', 'mobile' => 'Mobile', 'email' => 'Email', 'pushover' => 'Pushover', @@ -131,12 +134,11 @@ $sm_lang = array( 'jabber_label' => 'Jabber', 'jabber_description' => 'You Jabber account', 'webhook' => 'Webhook', - 'webhook_description' => 'Send a json webhook to a certain endpoint.
The json can be customized, e.g. { -"text":"servermon: #message"}', + 'webhook_description' => 'Send a json webhook to a certain endpoint.', 'webhook_url' => 'Webhook Url', 'webhook_url_description' => 'Webhook public endpoint url, should start with https://.', 'webhook_json' => 'Webhook JSON', - 'webhook_json_description' => 'Define a custom json, use #message as message variable.', + 'webhook_json_description' => 'Define a custom json, e.g. {"username": "servermon: #server_label" "text": "#server_ip is **#status**"}.
Available variables: #message, #server_error, #server_ip, #server_label, #server_last_offline_duration and #status', 'delete_title' => 'Delete User', 'delete_message' => 'Are you sure you want to delete user \'%1\'?', 'deleted' => 'User deleted.', @@ -154,6 +156,7 @@ $sm_lang = array( 'error_user_password_invalid' => 'The entered password is invalid.', 'error_user_password_no_match' => 'The entered passwords do not match.', 'error_user_admin_cant_be_deleted' => 'You can\'t remove the last administrator.', + 'error_user_cant_be_anonymous' => 'Only user \'__public__\' can have the level anonymous.' ), 'log' => array( 'title' => 'Log entries', @@ -293,6 +296,7 @@ $sm_lang = array( 'proxy_user' => 'Proxy username', 'proxy_password' => 'Proxy password', 'email_status' => 'Allow sending email', + 'email_add_url' => 'Add url to the monitor in email', 'email_from_email' => 'Email from address', 'email_from_name' => 'Email from name', 'email_smtp' => 'Enable SMTP', @@ -315,13 +319,14 @@ $sm_lang = array( 'webhook_url' => 'Webhook Url', 'webhook_url_description' => 'Url to webhook endpoint', 'webhook_json' => 'Webhook Json', - 'webhook_json_description' => 'Customized Json, use #message as message variable.', + 'webhook_json_description' => 'Define a custom json. Available variables: #message, #server_error, #server_ip, #server_label, #server_last_offline_duration and #status', 'pushover_status' => 'Allow sending Pushover messages', 'pushover_description' => 'Pushover is a service that makes it easy to get real-time notifications. See their website for more info.', 'pushover_clone_app' => 'Click here to create your Pushover app', 'pushover_api_token' => 'Pushover App API Token', 'pushover_api_token_description' => 'Before you can use Pushover, you need to register an App at their website and enter the App API Token here.', 'telegram_status' => 'Allow sending Telegram messages', + 'telegram_add_url' => 'Add url to the monitor in the message', 'telegram_description' => 'Telegram is a chat app that makes it easy to get real-time notifications. Visit the documentation for more info and an install guide.', 'telegram_api_token' => 'Telegram API Token', 'telegram_api_token_description' => 'Before you can use Telegram, you need to get a API token. Visit the documentation for help.', @@ -338,6 +343,53 @@ $sm_lang = array( 'jabber_password' => 'Password', 'jabber_password_description' => 'Fill only to set or change.', 'jabber_check' => 'Check your Jabber account if message was received.', + 'dirauth_status' => 'Authenticate with directory service', + 'authdir_host_locn' => 'Directory host', + 'authdir_host_port' => 'Directory port', + 'authdir_type' => 'Service type', + 'authdir_type_description' => 'OpenLDAP: Directory is an OpenLDAP service.
AD + DS: Directory is an Active Directory Domain Service.
AD + LDS: Directory is an Active Directory Lightweight Directory + Service.', + 'authdir_type_openldap' => 'OpenLDAP', + 'authdir_type_adds' => 'AD DS', + 'authdir_type_adlds' => 'AD LDS', + 'authdir_userdomain' => 'Active Directory domain', + 'authdir_userdomain_description' => 'User domain for Active Directory. This is typically the NETBIOS domain + for AD DS and the DNS domain for AD LDS. Not used for OpenLDAP + directories.', + 'authdir_ldapver' => 'LDAP protocol version', + 'authdir_ldapver_description' => 'Version of the LDAP specification. This is typically Version 3 (default). + Version 2 was deprecated in 2003 (RFC3494).', + 'authdir_ldapfollowref' => 'Follow referrals', + 'authdir_ldapfollowref_description' => 'Follow referrals if the specified server refers to another server for + the required information. Leave unchecked if you are unaware of this + functionality.', + 'authdir_basedn' => 'Base DN*', + 'authdir_basedn_description' => 'Base distinguished name (DN) of the directory service. E.g., + dc=domain,dc=tld. This is a required field.', + 'authdir_usernameattrib' => 'Username attribute', + 'authdir_usernameattrib_description' => 'Attribute used by the directory service to refer to the username of + the user.', + 'authdir_groupnameattrib' => 'Group name attribute', + 'authdir_groupnameattrib_description' => 'Attribute used by the directory service to refer to the group name + of a group. This is used to check for group membership.', + 'authdir_groupmemattrib' => 'Group member attribute', + 'authdir_groupmemattrib_description' => 'Attribute used by the directory service to refer to the group(s) of + which the user is a member. This is used to check for group + membership.', + 'authdir_usercontainerrdn' => 'User container RDN', + 'authdir_usercontainerrdn_description' => 'Relative distinguished name of the users container in the + directory. E.g., ou=Users', + 'authdir_groupcontainerrdn' => 'Group container RDN', + 'authdir_groupcontainerrdn_description' => 'Relative distinguished name of the groups container in the + directory. E.g., ou=Groups', + 'authdir_groupname' => 'Authorised directory group', + 'authdir_groupname_description' => 'Directory group authorised to access application. Directory users not + members of this group will not be authenticated (currently not available + for AD).', + 'authdir_defaultrole' => 'Default role', + 'authdir_defaultrole_description' => 'Default role to be assigned to users logging in for the first time.', 'alert_type' => 'Select when you\'d like to be notified.', 'alert_type_description' => 'Status change: You will receive a notification when a server has a change in status. So from online -> offline or offline -> online.

Offline: You will receive a notification when a server goes offline for the *FIRST TIME ONLY*. For example, your cronjob is every 15 minutes and your server goes down at 1 am and stays down till 6 am. You will get 1 notification at 1 am and that\'s it.

Always: You will receive a notification every time the script runs and a site is down, even if the site has been offline for hours.', 'alert_type_status' => 'Status change', @@ -364,6 +416,7 @@ $sm_lang = array( 'tab_webhook' => 'Webhook', 'tab_telegram' => 'Telegram', 'tab_jabber' => 'Jabber', + 'tab_auth' => 'Authentication', 'settings_email' => 'Email settings', 'settings_sms' => 'Text message settings', 'settings_discord' => 'Discord settings', @@ -374,6 +427,7 @@ $sm_lang = array( 'settings_notification' => 'Notification settings', 'settings_log' => 'Log settings', 'settings_proxy' => 'Proxy settings', + 'settings_dirauth' => 'LDAP settings', 'auto_refresh' => 'Auto-refresh', 'auto_refresh_description' => 'Auto-refresh servers page.
Time in seconds, if 0 the page won\'t refresh.', 'test' => 'Test', @@ -409,8 +463,8 @@ $sm_lang = array( 'telegram_error' => 'An error has occurred while sending the Telegram notification: %s', 'telegram_error_notoken' => 'Unable to send test notification: no Telegram API token found in the global configuration.', 'telegram_error_noid' => 'Unable to send test notification: no chat id found in your profile.', - 'jabber_sent' => 'Telegram notification sent', - 'jabber_error' => 'An error has occurred while sending the Telegram notification: %s', + 'jabber_sent' => 'Jabber notification sent', + 'jabber_error' => 'An error has occurred while sending the Jabber notification: %s', 'jabber_error_noconfig' => 'Unable to send test notification: no Jabber account set in the global configuration.', 'jabber_error_noaccount' => 'Unable to send test notification: no Jabber account found in your profile.', 'log_retention_period' => 'Log retention period', diff --git a/src/lang/fr_FR.lang.php b/src/lang/fr_FR.lang.php index e2bac203..35ca0f36 100644 --- a/src/lang/fr_FR.lang.php +++ b/src/lang/fr_FR.lang.php @@ -136,7 +136,7 @@ $sm_lang = array( rel="noopener">
Cela va ouvrir une conversation avec le BOT. Vous devez appuyer sur \'/start\' ou le saisir.', - 'telegram_bot_username_error_token' => '401 - Unauthorized. Assuez-vous que le Token API soit valide.', + 'telegram_bot_username_error_token' => '401 - Unauthorized. Assurez-vous que le Token API soit valide.', 'telegram_bot_error' => 'Une erreur s\'est produite en tentant d\'activer les notifications Telegram : %s', 'delete_title' => 'Supprimer un utilisateur', 'delete_message' => 'Êtes-vous sûr de vouloir supprimer l\'utilisateur \'%1\' ?', @@ -194,7 +194,7 @@ $sm_lang = array( 'custom_request_method' => 'Type de requête personalisée', 'popular_request_methods' => 'Type de requête prédéfinie', 'post_field' => 'Champ POST', - 'post_field_description' => 'Les données qui seront envoyés en utilisant le type de requête choisi.', + 'post_field_description' => 'Les données qui seront envoyées en utilisant le type de requête choisi.', 'please_select' => 'Veuillez choisir', 'type' => 'Type', 'type_website' => 'Site Web', @@ -209,14 +209,14 @@ $sm_lang = array( site, le serveur sera considéré hors-ligne.', 'redirect_check' => 'La redirection vers un autre domaine est', 'redirect_check_description' => 'Une redirection vers un autre domaine est généralement mauvais signe.', - 'allow_http_status' => 'Autoriser les codes de status HTTP', - 'allow_http_status_description' => 'Marquer le serveur en ligne. Les codes de status HTTP inférieur à 400 - sont considérés comme en ligne par défaut. Séparés les valeurs avec + 'allow_http_status' => 'Autoriser Les codes de statuts HTTP', + 'allow_http_status_description' => 'Marquer le serveur en ligne. Les codes de statuts HTTP inférieur à 400 + sont considérés comme en ligne par défaut. Séparer les valeurs avec |.', 'header_name' => 'Nom d\'en-têtes', 'header_value' => 'Valeur d\'en-tête', 'header_name_description' => 'Sensible à la casse.', - 'header_value_description' => 'Les expréssions régulières sont autorisées.', + 'header_value_description' => 'Les expressions régulières sont autorisées.', 'last_check' => 'Dernière vérification', 'last_online' => 'Dernière fois OK', 'last_offline' => 'Dernière fois hors-ligne', @@ -277,11 +277,10 @@ $sm_lang = array( 'general' => 'Général', 'language' => 'Langue', 'show_update' => 'Vérifier les nouvelles mises à jour chaque semaine', - 'password_encrypt_key' => 'Clée de cryptage des mots de passe', - 'password_encrypt_key_note' => 'Cette clée est utilisée pour crypter les mots de passe qui sont enregistrés - dans la base de donnée pour les serveurs qui requiert une authentification. - Si la clé est modifié, les mots de passe enregistré ne seront plus - valide !', + 'password_encrypt_key' => 'Clé de chiffrement des mots de passe', + 'password_encrypt_key_note' => 'Cette clé est utilisée pour chiffrer les mots +de passe qui sont enregistrés dans la base de données pour les serveurs qui requierent une authentification. Si la clé +est modifiée, les mots de passe enregistrés ne seront plus valide !', 'proxy' => 'Activer le proxy', 'proxy_url' => 'URL du proxy', 'proxy_user' => 'Nom d\'utilisateur du proxy', @@ -358,8 +357,8 @@ $sm_lang = array( 'settings_notification' => 'Configuration des notifications', 'settings_log' => 'Configuration des événements', 'settings_proxy' => 'Configuration du proxy', - 'auto_refresh' => 'Auto-rachaîchissement', - 'auto_refresh_description' => 'Auto-rachaîchissement de la page serveurs.
Temps en + 'auto_refresh' => 'Auto-rafraîchissement', + 'auto_refresh_description' => 'Auto-rafraîchissement de la page serveurs.
Temps en secondes. Si 0, la page n\'est pas rafraîchie.', 'test' => 'Tester', 'test_email' => 'Un email va vous être envoyé à l\'adresse définie dans votre profil utilisateur.', @@ -385,9 +384,9 @@ $sm_lang = array( définie dans votre profil.', 'telegram_sent' => 'Notification Telegram envoyée', 'telegram_error' => 'Une erreur s\'est produite lors de l\'envoi de la notification : %s', - 'telegram_error_notoken' => 'Impossible d\'envoyé la notification de test : aucun token APII token + 'telegram_error_notoken' => 'Impossible d\'envoyer la notification de test : aucun token APII token trouvé dans la configuration.', - 'telegram_error_noid' => 'Impossible d\'envoyé la notification de test : aucun ID de conversation + 'telegram_error_noid' => 'Impossible d\'envoyer la notification de test : aucun ID de conversation trouvé dans votre profil utilisateur.', 'log_retention_period' => 'Durée de conservation', 'log_retention_period_description' => 'Nombre de jours de conservation des événements envoyés et des temps @@ -416,7 +415,7 @@ $sm_lang = array( 'on_pushover_message' => 'Le Serveur \'%LABEL%\' est de nouveau OK, il était hors-ligne pendant %LAST_OFFLINE_DURATION%:

Serveur: %LABEL%
IP: %IP%
Port: %PORT%
Date: %DATE%', - 'on_telegram_message' => 'Server \'%LABEL%\' is running again, it was down for: + 'on_telegram_message' => 'Server \'%LABEL%\' est de nouveau OK, il était hors-ligne pendant: %LAST_OFFLINE_DURATION%

Server: %LABEL%
IP: %IP%
Port: %PORT%
Date: %DATE%', 'combi_off_email_message' => '
  • Serveur : %LABEL%
  • IP : %IP%
  • Port : @@ -433,15 +432,15 @@ $sm_lang = array( %DATE%
', 'combi_on_telegram_message' => '- Serveur : %LABEL%
- IP: %IP%
- Port : %PORT%
- Durée : %LAST_OFFLINE_DURATION%
- Date : %DATE%

', - 'combi_email_subject' => 'IMPORTANT : \'%UP%\' serveurs de nouveaux en ligne, \'%DOWN%\' serveurs + 'combi_email_subject' => 'IMPORTANT : \'%UP%\' serveur(s) de nouveau en ligne, \'%DOWN%\' hors-ligne', - 'combi_pushover_subject' => '\'%UP%\' serveurs de nouveaux en ligne, \'%DOWN%\' serveurs hors-ligne', - 'combi_email_message' => 'Les serveurs suivants sont hors-ligne :
%DOWN_SERVERS%
Les - serveurs suivants sont en ligne :
%UP_SERVERS%', - 'combi_pushover_message' => 'Les serveurs suivants sont hors-ligne :
%DOWN_SERVERS%
Les - serveurs suivants sont en ligne :
%UP_SERVERS%', - 'combi_telegram_message' => 'Les serveurs suivants sont hors-ligne :
%DOWN_SERVERS%
Les - serveurs suivants sont en ligne :
%UP_SERVERS%', + 'combi_pushover_subject' => '\'%UP%\' serveur(s) de nouveaux en ligne, \'%DOWN%\' serveur(s) hors-ligne', + 'combi_email_message' => 'Le(s) serveur(s) suivant(s) hors-ligne :
%DOWN_SERVERS%
Le(s) + serveur(s) suivant(s) en ligne :
%UP_SERVERS%', + 'combi_pushover_message' => 'Le(s) serveur(s) suivant(s) hors-ligne :
%DOWN_SERVERS%
Le(s) + serveur(s) suivant(s) en ligne :
%UP_SERVERS%', + 'combi_telegram_message' => 'Le(s) serveur(s) suivant(s) hors-ligne :
%DOWN_SERVERS%
Le(s) + serveur(s) suivant(s) en ligne :
%UP_SERVERS%', ), 'login' => array( 'welcome_usermenu' => 'Bonjour %user_name%', diff --git a/src/lang/nl_NL.lang.php b/src/lang/nl_NL.lang.php index a5a1c728..7179bbcf 100644 --- a/src/lang/nl_NL.lang.php +++ b/src/lang/nl_NL.lang.php @@ -250,6 +250,7 @@ $sm_lang = array( 'language' => 'Taal', 'show_update' => 'Controleer wekelijks voor updates?', 'email_status' => 'Sta email berichten toe?', + 'email_add_url' => 'Voeg url van de monitor toe aan de email', 'email_from_email' => 'Email van adres', 'email_from_name' => 'Email van naam', 'email_smtp' => 'SMTP gebruiken', @@ -275,6 +276,7 @@ $sm_lang = array( target="_blank" rel="noopener">App registreren via hun website, en daarvan de App API Token hier invullen.', 'telegram_status' => 'Sta Telegram berichten toe?', + 'telegram_add_url' => 'voeg url van de monitor toe aan het bericht', 'telegram_api_token' => 'Telegram API Token', 'alert_type' => 'Selecteer wanneer je een notificatie wilt', 'alert_type_description' => 'Status verandert: Je ontvangt alleen bericht wanneer een server van status diff --git a/src/lang/pl_PL.lang.php b/src/lang/pl_PL.lang.php index 1fa25092..c7cfbac1 100644 --- a/src/lang/pl_PL.lang.php +++ b/src/lang/pl_PL.lang.php @@ -22,7 +22,7 @@ * @author Arkadiusz Klenczar * @copyright Copyright (c) 2008-2017 Pepijn Over * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 - * @version Release: @package_version@ + * @version Release: v3.5.2 * @link http://www.phpservermonitor.org/ **/ @@ -43,6 +43,7 @@ $sm_lang = array( 'save' => 'Zapisz', 'edit' => 'Edycja', 'delete' => 'Usuń', + 'view' => 'Zobacz', 'date' => 'Data', 'message' => 'Wiadomość', 'yes' => 'Tak', @@ -54,8 +55,11 @@ $sm_lang = array( rel="noopener">http://www.phpservermonitor.org.', 'back_to_top' => 'Do góry', 'go_back' => 'Wstecz', - 'ok' => 'OK', + 'ok' => 'pożądane', + 'bad' => 'niepożądane', 'cancel' => 'Anuluj', + 'none' => 'Brak', + 'activate' => 'Aktywny', 'short_day_format' => '%B %e', 'long_day_format' => '%B %e, %Y', 'yesterday_format' => 'Wczoraj o %k:%M', @@ -67,7 +71,23 @@ $sm_lang = array( 'a_minute_ago' => 'minutę temu', 'seconds_ago' => '%d sekund temu', 'a_second_ago' => 'sekundę temu', - 'seconds' => 'sekund', + 'year' => 'rok', + 'years' => 'lata', + 'month' => 'miesiąc', + 'months' => 'miesiące', + 'day' => 'dzień', + 'days' => 'dni', + 'hour' => 'godzina', + 'hours' => 'godziny', + 'minute' => 'minuta', + 'minutes' => 'minut', + 'second' => 'sekunda', + 'seconds' => 'sekundy', + 'millisecond' => 'milisekunka', + 'milliseconds' => 'milisekundy', + 'current' => 'aktualnie', + 'settings' => 'Ustawienia', + 'search' => 'Szukaj', ), 'menu' => array( 'config' => 'Konfiguracja', @@ -101,6 +121,39 @@ $sm_lang = array( 'pushover_device' => 'Urządzenie dla Pushover', 'pushover_device_description' => 'Nazwa urządzenia do którego wysłać powiadomienie. Pozostaw puste aby wysłać do wszystkich urządzeń.', + 'discord' => 'Discord', + 'discord_label' => 'Discord', + 'discord_description' => 'Podaj swoje webhook tutaj.', + 'telegram' => 'Telegram', + 'telegram_description' => 'Telegram jest komunikatorem + internetowym, który umożliwa notyfikacje w czasie rzeczywistym. Odwiedź stronę + z documentacja aby + uzyskać więcej informacji.', + 'telegram_chat_id' => 'Telegram chat id', + 'telegram_chat_id_description' => 'Wiadomość zostanie wysłana do odpowiedniej rozmowy.', + 'telegram_get_chat_id' => 'Kliknij tutaj żeby otrzywać swój chat id', + 'activate_telegram' => 'Aktywuj notyfikacje Telegram', + 'activate_telegram_description' => 'Zezwól na wysyłanie notyfikacji Telegram do podanego chat id. Bez tej + zgodny Telegram nie zezwoli na wysyłanie notyfikacji do Ciebie.', + 'telegram_bot_username_found' => 'Bot został odnaleziony!
+
Następnie otworzy się okno rozmowy z botem. Musisz nacisnąć start + lub wpisać /start.', + 'telegram_bot_username_error_token' => '401 - Błąd autoryzacji. Proszę sprawdzić czy API token jest + prawidłowy.', + 'telegram_bot_error' => 'Wystąpił błąd podczas aktywowania notyfikacji Telegram: %s', + 'jabber' => 'Jabber', + 'jabber_label' => 'Jabber', + 'jabber_description' => 'Twoje konto Jabber', + 'webhook' => 'Webhook', + 'webhook_description' => 'Wyślij json webhook do wybranego endpoint.
Zapytanie json może być dowolnie + dostosowane np. {"text":"servermon: #message"}', + 'webhook_url' => 'Webhook URL', + 'webhook_url_description' => 'Publiczne webhook endpoint URL powinny się zaczynać od https://.', + 'webhook_json' => 'Webhook JSON', + 'webhook_json_description' => 'Zdefiniuj niestandardowy json, użyj #message jak zmienną z treścią + wiadomości.', 'delete_title' => 'Usuń użytkownika', 'delete_message' => 'Czy jesteś pewny że chcesz usunąć użytkownika \'%1\'?', 'deleted' => 'Użytkownik usunięty.', @@ -118,6 +171,7 @@ $sm_lang = array( 'error_user_no_match' => 'Użytkownik nie został odnaleziony.', 'error_user_password_invalid' => 'Wprowadzone hasło jest nieprawidłowe.', 'error_user_password_no_match' => 'Wprowadzone hasła są różne.', + 'error_user_admin_cant_be_deleted' => 'Nie można usunąć jedynego konta administratora.', ), 'log' => array( 'title' => 'Logi', @@ -125,7 +179,11 @@ $sm_lang = array( 'status' => 'Status', 'email' => 'Email', 'sms' => 'SMS', + 'discord' => 'Discord', 'pushover' => 'Pushover', + 'webhook' => 'Webhook', + 'telegram' => 'Telegram', + 'jabber' => 'Jabber', 'no_logs' => 'Brak logów', 'clear' => 'Wyczyść log', 'delete_title' => 'Wyczyść log', @@ -138,23 +196,70 @@ $sm_lang = array( 'domain' => 'Domena/IP', 'timeout' => 'Timeout', 'timeout_description' => 'Liczba sekund do odczekania na odpowiedź serwera.', + 'authentication_settings' => 'Ustawienia uwierzytelniania', + 'optional' => 'Opcjonalne', + 'website_username' => 'Nazwa użytkownika', + 'website_username_description' => 'Nazwa użytkownika z dostępem do strony (tylko uwierzytelnianie Apache + jest wspierana).', + 'website_password' => 'Hasło', + 'website_password_description' => 'Hasło dostęput do strony. Hasło zostanie zaszyfrowane i zapisane w + badzie danych.', + 'fieldset_monitoring' => 'Monitoring', + 'fieldset_permissions' => 'Uprawnienia', + 'permissions' => 'Serwer będzie widoczny dla następujących użytkowników', 'port' => 'Port', + 'custom_port' => 'Niestandardowy port', + 'popular_ports' => 'Popularne porty', + 'request_method' => 'Metoda HTTP', + 'custom_request_method' => 'Niestandardowe metoda HTTP', + 'popular_request_methods' => 'Popularne metody HTTP', + 'post_field' => 'Pole Post', + 'post_field_description' => 'Dane zostaną wysłane za pomocą wyżej wybranej metody.', + 'please_select' => 'Proszę wybrać', 'type' => 'Typ', 'type_website' => 'Strona', 'type_service' => 'Usługa', + 'type_ping' => 'Ping', 'pattern' => 'Wyszukiwane wyrażenie/wzorzec', - 'pattern_description' => 'Jeśli wzorzec nie zostanie odnaleziony, status zostanie ustawiony na offline. - Wyrażenia regularne są dozwolone.', + 'pattern_description' => 'Jeśli wzorzec nie zostanie odnaleziony, status zostanie zmieniony. Dozwolone są + wyrażenia regularne.', + 'pattern_online' => 'Wykrycie wzorca oznacza, że strona jest', + 'pattern_online_description' => 'Online: jeżeli wzorzec zostanie wykryty na stronie to server zostanie + oznaczony jako online. Offline: jeżeli wzorzec nie zostanie wykryty na + stronie to serwer zostanie oznaczony jako offline.', + 'redirect_check' => 'Przekierowanie na inną domenę jest', + 'redirect_check_description' => 'Przekierowanie na inną domenę zazwyczaj jest niepożądanym zachowaniem.', + 'allow_http_status' => 'Dozwolone kody odpowiedzi HTTP', + 'allow_http_status_description' => 'Podaj listę dozwolonych kodów odpowiedzi HTTP, kolejne wartości + oddzielone za pomocą |. Domyślnie odpowiedzi o wartości poniżej 400 + zostaną uznane jako prawidłowe.', + 'header_name' => 'Nazwa nagłówka', + 'header_value' => 'Wartość nagłówka', + 'header_name_description' => 'Wielkość liter ma znaczenie.', + 'header_value_description' => 'Dozwolone są wyrażenia regularne.', 'last_check' => 'Ostatnie sprawdzenie', 'last_online' => 'Ostatnio online', 'last_offline' => 'Ostatnio offline', + 'last_output' => 'Ostatni prawidłowy wynik', + 'last_error' => 'Ostatni bląd', + 'last_error_output' => 'Ostatni wynik blądu', + 'output' => 'Wynik', 'monitoring' => 'Monitorowany', 'no_monitoring' => 'Brak monitoringu', 'email' => 'Email', 'send_email' => 'Wyślij Email', 'sms' => 'SMS', 'send_sms' => 'Wyślij SMS', + 'discord' => 'Discord', + 'send_discord' => 'Wyślij powiadomienie Discord', + 'webhook' => 'Webook', + 'send_webhook' => 'Wyślij powiadomienie Webhook', 'pushover' => 'Pushover', + 'send_pushover' => 'Wyślij powiadomienie Pushover', + 'telegram' => 'Telegram', + 'send_telegram' => 'Wyślij powiadomienie Telegram', + 'jabber' => 'Jabber', + 'send_jabber' => 'Wyślij powiadomienie Jabber', 'users' => 'Użytkownicy', 'delete_title' => 'Usuń serwer', 'delete_message' => 'Czy jesteś pewny że chcesz usunąć serwer \'%1\'?', @@ -165,6 +270,8 @@ $sm_lang = array( 'latency_max' => 'Opóźnienie (maksymalne)', 'latency_min' => 'Opóźnienie (minimalne)', 'latency_avg' => 'Opóźnienie (średnie)', + 'online' => 'online', + 'offline' => 'offline', 'uptime' => 'Czas dostępności', 'year' => 'Rok', 'month' => 'Miesiąc', @@ -173,6 +280,12 @@ $sm_lang = array( 'hour' => 'Godzina', 'warning_threshold' => 'Próg ostrzeżeń', 'warning_threshold_description' => 'Ilość wymaganych niepowodzeń przed oznaczeniem serwera jako offline.', + 'ssl_cert_expiry_days' => 'Ważność certyfikatu SSL', + 'ssl_cert_expiry_days_description' => 'Minimalna ilość dni, których certyfikat SSL musi być ważny. + Ustawienie wartości 0 spowoduje, że ważność certyfikatu nie + będzie sprawdzana.', + 'ssl_cert_expired' => 'Certyfikat SSL wygasł', + 'ssl_cert_expiring' => 'Certyfikat SSL wygaśnie:', 'chart_last_week' => 'Ostatni tydzień', 'chart_history' => 'Historia', 'chart_day_format' => '%Y-%m-%d', @@ -181,7 +294,11 @@ $sm_lang = array( 'chart_short_time_format' => '%H:%M', 'warning_notifications_disabled_sms' => 'Powiadomienia SMS są wyłączone.', 'warning_notifications_disabled_email' => 'Powiadomienia Email są wyłączone.', + 'warning_notifications_disabled_discord' => 'Powiadomienia Discord są wyłączone.', + 'warning_notifications_disabled_webhook' => 'Powiadomienia Webhook są wyłączone.', 'warning_notifications_disabled_pushover' => 'Powiadomienia Pushover są wyłączone.', + 'warning_notifications_disabled_telegram' => 'Powiadomienia Telegram są wyłączone.', + 'warning_notifications_disabled_jabber' => 'Powiadomienia Jabber są wyłączone.', 'error_server_no_match' => 'Nie odnaleziono serwera.', 'error_server_label_bad_length' => 'Etykieta musi mieć pomiędzy 1 a 255 znaków.', 'error_server_ip_bad_length' => 'Domena/IP musi mieć pomiędzy 1 a 255 znaków.', @@ -189,12 +306,22 @@ $sm_lang = array( 'error_server_ip_bad_website' => 'Adres URL jest nieprawidłowy.', 'error_server_type_invalid' => 'Wybrany typ serwera jest nieprawidłowy.', 'error_server_warning_threshold_invalid' => 'Próg ostrzeżeń musi być liczbą całkowitą większą od 0.', + 'error_server_ssl_cert_expiry_days' => 'Minimalna ilość dla ważności certyfikatu SSL musi być liczbą + całkowitą większą lub równą 0.', ), 'config' => array( 'general' => 'Ogólne', 'site_title' => 'Tytuł strony', 'language' => 'Język', 'show_update' => 'Sprawdzić aktualizacje?', + 'password_encrypt_key' => 'Klucz szyfrowania haseł', + 'password_encrypt_key_note' => 'Klucz będzie użyty do szyfrowania haseł, które są zapisane w ustawieniach + serwerów żeby mieć dostęp do stron. Jeżeli klucz zostanie zmienione to + zapisane hasła będą nieprawidłowe!', + 'proxy' => 'Włącz proxy', + 'proxy_url' => 'Proxy ULR', + 'proxy_user' => 'Użytkownik proxy', + 'proxy_password' => 'Hasło proxy', 'email_status' => 'Pozwól na wysyłkę email', 'email_from_email' => 'Email z adresu', 'email_from_name' => 'Email od(nazwa)', @@ -205,13 +332,24 @@ $sm_lang = array( 'email_smtp_security_none' => 'None', 'email_smtp_username' => 'SMTP login', 'email_smtp_password' => 'SMTP hasło', - 'email_smtp_noauth' => 'Pozostaw puste dla braku autentykacji', + 'email_smtp_noauth' => 'Pozostaw puste dla braku uwierzytelniania', 'sms_status' => 'Pozwól na wysyłkę SMS', 'sms_gateway' => 'Bramka SMS', 'sms_gateway_username' => 'Login do bramki', 'sms_gateway_password' => 'Hasło do bramki', 'sms_from' => 'Numer nadawcy', - 'pushover_status' => 'Pozwól na wysyłkę notyfikacji Pushover', + 'discord_status' => 'Zezwól na wysyłanie powiadomień Discord', + 'discord_description' => 'Discord jest serwisem, który umożliwia wysyłania powiadomień w czasie + rzeczywistym. Odwiedź stronę + serwisu żeby otrzymać więcej informacji.', + 'webhook_status' => 'Zezwól na wysyłanie powiadomień webhooks.', + 'webhook_description' => 'Zezwól na wysyłanie powiadomień webhooks do serwisów takich jak Slack. Endpoint + dla payload wiadomości jest zdefiniowany w ustawieniach profilu użytkownika.', + 'webhook_url' => 'Webhook URL', + 'webhook_url_description' => 'URL dla webhook endpoint', + 'webhook_json' => 'Webhook Json', + 'webhook_json_description' => 'Niestandardowsy Json, użyj #message jak zmienną z treścią wiadomości.', + 'pushover_status' => 'Zezwól na wysyłanie powiadomień Pushover', 'pushover_description' => 'Pushover jest usługą ułatwiającą otrzymywanie powiadomień w czasie rzeczywistym. Sprawdź ich stronę aby uzyskać więcej informacji.', @@ -220,6 +358,30 @@ $sm_lang = array( 'pushover_api_token_description' => 'Zanim zaczniesz używać Pushover, musisz zarejestrować aplikację na ich stronie internetowej i wpisać tutaj App API Token.', + 'telegram_status' => 'Zezwól na wysyłanie powiadomień Telegram', + 'telegram_description' => 'Telegram jest komunikatorem + internetowym, który umożliwa notyfikacje w czasie rzeczywistym. Odwiedź stronę + z documentacja aby + uzyskać więcej informacji.', + 'telegram_api_token' => 'Telegram API Token', + 'telegram_api_token_description' => 'Zanim zaczniesz używać Telegram, potrzebujesz uzyskać API Token. + Odwiedź strone z dokumentacją żeby uzyskać pomocy.', + 'jabber_status' => 'Zezwól na wysyłanie powiadomień Jabber (XMPP)', + 'jabber_description' => 'Odwiedź stronę dokumentacją aby + uzyskać więcej informaji oraz przewodnik po instalacji.', + 'jabber_host' => 'Host', + 'jabber_host_description' => 'Adres host dostawcy Twojego konta Jabber. Dla konta Google użyj + talk.google.com.', + 'jabber_port' => 'Port', + 'jabber_port_description' => 'Port Twojego dostawcy Jabber. Domyślnie 5222. Dla konta Google użyj 5223.', + 'jabber_username' => 'Nazwa użytkownika', + 'jabber_username_description' => 'Dla konta Google użyj razem z domeną np. example@google.com.', + 'jabber_domain' => 'Domena', + 'jabber_domain_description' => 'Domena Twojego dostawy Jabber. Zostaw puste dla konta Google.', + 'jabber_password' => 'Hasło', + 'jabber_password_description' => 'Wypełnij tylko żeby ustawić lub zmienić.', + 'jabber_check' => 'Sprawdź swoje konto Jabber czy powiadomienie zostało odebrane.', 'alert_type' => 'Wybierz kiedy chcesz być powiadomiony.', 'alert_type_description' => 'Zmiana statusu: Otrzymasz powiadomienie gdy serwer zmieni status. Z online -> offline lub offline -> online.

Offline: Otrzymasz @@ -231,29 +393,53 @@ $sm_lang = array( 'alert_type_status' => 'Zmiana statusu', 'alert_type_offline' => 'Offline', 'alert_type_always' => 'Zawsze', + 'combine_notifications' => 'Scalanie powiadomień', + 'combine_notifications_description' => 'Ogranicza ilość wysyłanych powiadomień poprzez scalanie wszystkich + powiadomień w jedną wiadomość (nie dotyczy powiadomień SMS).', + 'alert_proxy' => 'Jeżeli włączone to proxy nigdy nie bedzie użyte dla serwisów', + 'alert_proxy_url' => 'Fomat: host:port', 'log_status' => 'Status logowania', 'log_status_description' => 'Jeśli status logowania ustawiony jest na TRUE, monitor będzie logował wydarzenia.', 'log_email' => 'Emaile wysłane przez skrypt', 'log_sms' => 'SMS wysłane przez skrypt', + 'log_discord' => 'Notyfikacje Discord wysłane przez skrypt', 'log_pushover' => 'Notyfikacje Pushover wysłane przez skrypt', + 'log_webhook' => 'Notyfikacje Webhook wysłane przez skrypt', + 'log_telegram' => 'Notyfikacje Telegram wysłane przez skrypt', + 'log_jabber' => 'Notyfikacje Jabber wysłane przez skrypt', 'updated' => 'Konfiguracja została zaktualizowana.', 'tab_email' => 'Email', 'tab_sms' => 'SMS', + 'tab_discord' => 'Discord', 'tab_pushover' => 'Pushover', + 'tab_webhook' => 'Webhook', + 'tab_telegram' => 'Telegram', + 'tab_jabber' => 'Jabber', 'settings_email' => 'Ustawienia Email', 'settings_sms' => 'Ustawienia SMS', + 'settings_discord' => 'Ustawienie Discord', 'settings_pushover' => 'Ustawienia Pushover', + 'settings_webhook' => 'Ustawienia Webhook', + 'settings_telegram' => 'Ustawienia Telegram', + 'settings_jabber' => 'Ustawienia Jabber', 'settings_notification' => 'Ustawienia powiadomień', 'settings_log' => 'Ustawienia Logowania', + 'settings_proxy' => 'Ustawienia serwera Proxy', 'auto_refresh' => 'Auto-odświeżanie', 'auto_refresh_description' => 'Auto-odświeżanie strony serwera.
Czas w sekundach, dla czasu 0 strona nie będzie odświeżana.', 'test' => 'Test', 'test_email' => 'Email zostanie wysłany na adres podany w Twoim profilu.', 'test_sms' => 'SMS zostanie wysłany na numer podany w Twoim profilu.', - 'test_pushover' => 'Powiadomienie Pushover zostanie wysłany na klucz użytkownika/urządzenie podane w Twoim - profilu..', + 'test_discord' => 'Powiadomienie Discord zostanie wysłane do webhook, który został podany w Twoim profilu + użytkownika.', + 'test_pushover' => 'Powiadomienie Pushover zostanie wysłane na klucz użytkownika/urządzenie podane w Twoim + profilu użytkownika.', + 'test_webhook' => 'Powiadomienia Webhook zostanie wysłane do endpoint o podanym URL.', + 'test_telegram' => 'Powiadomienie Telegram zostanie wysłane na chat id podane w Twoim profilu użytkownika.', + 'test_jabber' => 'Powiadomienie Telegram zostanie wysłane na konto Jabber podane w Twoim profilu + użytkownika.', 'send' => 'Wyślij', 'test_subject' => 'Test', 'test_message' => 'Testowa wiadomość', @@ -262,38 +448,123 @@ $sm_lang = array( 'sms_sent' => 'Sms wysłany', 'sms_error' => 'Błąd podczas wysyłania sms. %s', 'sms_error_nomobile' => 'Nie udało się wysłać testowego SMS: brak poprawnego telefonu w Twoim profilu.', + 'discord_sent' => 'Powiadomienie Discord wysłane', + 'discord_error' => 'Błąd podczas wysyłania powiadomienia Pushover: %s', + 'discord_error_nowebhook' => 'Błąd podczas wysyłania powiadomienia Discord: brak prawidłowego Discord + webhook w profilu użytkownika.', + 'webhook_sent' => 'Powiadomienie Webhook wysłane', + 'webhook_error' => 'Błąd podczas wysyłania powiadomienia Webhook: %s', + 'webhook_error_nourl' => 'Błąd podczas wysyłania testowego powiadomienia: brak Webhook URL w profilu + użytkownika.', + 'webhook_error_nojson' => 'Błąd podczas wysyłania testowego powiadomienia: brak json w profilu + użytkownika.', 'pushover_sent' => 'Powiadomienie Pushover wysłane.', 'pushover_error' => 'Błąd podczas wysyłania powiadomienia Pushover: %s', 'pushover_error_noapp' => 'Błąd podczas wysyłania testowego powiadomienia: brak Pushover App API token w - konfuguracji globalnej.', + konfiguracji globalnej.', 'pushover_error_nokey' => 'Błąd podczas wysyłania testowego powiadomienia: brak Pushover key na Twoim profilu.', + 'telegram_sent' => 'Powiadomienie Telegram zostało wysłane', + 'telegram_error' => 'Wystąpił błąd podczas wysyłania powiadomienia Telegram: %s', + 'telegram_error_notoken' => 'Nie można wysłać testowego powiadomienia: brak Telegram API token w głównych + ustawieniach systemu.', + 'telegram_error_noid' => 'Nie można wysłać testowego powiadomienia: brak chat id w ustawieniach profilu + Twojego użytkownika.', + 'jabber_sent' => 'Powiadomienie Jabber zostało wysłane', + 'jabber_error' => 'Wystąpił błąd podczas wysyłania powiadomienia Jabber: %s', + 'jabber_error_noconfig' => 'Nie można wysłać testowego powiadomienia: brak konfiguracji konta Jabber w + głównych ustawieniach systemu.', + 'jabber_error_noaccount' => 'Nie można wysłać testowego powiadomienia: brak konfiguracji konta Jabber w + ustawieniach profilu Twojego użytkownika.', 'log_retention_period' => 'Czas rotacji logów', 'log_retention_period_description' => 'Liczba dni przez którą należy przetrzymywać logi powiadomień i archiwizować uptime serwera. Wpisz 0 aby wyłączyć czyszczenie logów.', 'log_retention_days' => 'dni', 'user_agent' => 'User Agent', - 'user_agent_key_note' => 'Nazwa używana przez monitoring do identyfikacji ze sprawdzaną usługą.', + 'user_agent_key_note' => 'Niestandardowy user agent używany przez monitor do komunikacji z zewnętrznymi + serwisami.', ), 'notifications' => array( 'off_sms' => 'Serwer \'%LABEL%\' przestał odpowiadać: ip=%IP%, port=%PORT%. Błąd=%ERROR%', 'off_email_subject' => 'Uwaga: Serwer \'%LABEL%\' nie odpowiada', 'off_email_body' => 'Błąd połączenia do serwera:

Serwer: %LABEL%
IP: %IP%
Port: + %PORT%
Błąd: %ERROR%
Data: %DATE%', + 'off_discord_message' => 'Błąd połączenia do serwera:

Serwer: %LABEL%
IP: %IP%
Port: + %PORT%
Błąd: %ERROR%
Data: %DATE%', + 'off_webhook_title' => 'Serwer \'%LABEL%\' nie odpowiada', + 'off_webhook_message' => 'Błąd połączenia do serwera:

Serwer: %LABEL%
IP: %IP%
Port: %PORT%
Błąd: %ERROR%
Data: %DATE%', 'off_pushover_title' => 'Serwer \'%LABEL%\' nie odpowiada', 'off_pushover_message' => 'Błąd połączenia do serwera:

Serwer: %LABEL%
IP: %IP%
Port: + %PORT%
Błąd: %ERROR%
Data: %DATE%', + 'off_telegram_message' => 'Błąd połączenia do serwera:

Serwer: %LABEL%
IP: %IP%
Port: + %PORT%
Błąd: %ERROR%
Data: %DATE%', + 'off_jabber_message' => 'Błąd połączenia do serwera:

Serwer: %LABEL%
IP: %IP%
Port: %PORT%
Błąd: %ERROR%
Data: %DATE%', 'on_sms' => 'Serwer \'%LABEL%\' działa poprawnie: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'on_email_subject' => 'Uwaga: Serwer \'%LABEL%\' działa poprawnie', - 'on_email_body' => 'Serwer \'%LABEL%\' znów odpowiada, it was down for + 'on_email_body' => 'Serwer \'%LABEL%\' znów odpowiada, był offline przez + %LAST_OFFLINE_DURATION%:

Serwer: %LABEL%
IP: %IP%
Port: %PORT%
Data: + %DATE%', + 'on_discord_message' => 'Serwer \'%LABEL%\' znów odpowiada, był offline przez + %LAST_OFFLINE_DURATION%:

Serwer: %LABEL%
IP: %IP%
Port: %PORT%
Data: + %DATE%', + 'on_webhook_title' => 'Serwer \'%LABEL%\' działa poprawnie', + 'on_webhook_message' => 'Serwer \'%LABEL%\' znów odpowiada, był offline przez %LAST_OFFLINE_DURATION%:

Serwer: %LABEL%
IP: %IP%
Port: %PORT%
Data: %DATE%', 'on_pushover_title' => 'Serwer \'%LABEL%\' działa poprawnie', - 'on_pushover_message' => 'Serwer \'%LABEL%\' znów działa poprawnie, it was down for + 'on_pushover_message' => 'Serwer \'%LABEL%\' znów działa poprawnie, był offline przez %LAST_OFFLINE_DURATION%:

Serwer: %LABEL%
IP: %IP%
Port: %PORT%
Data: %DATE%', + 'on_telegram_message' => 'Serwer \'%LABEL%\' znów działa poprawnie, był offline przez + %LAST_OFFLINE_DURATION%:

Serwer: %LABEL%
IP: %IP%
Port: %PORT%
Data: + %DATE%', + 'on_jabber_message' => 'Serwer \'%LABEL%\' znów działa poprawnie, był offline przez + %LAST_OFFLINE_DURATION%:

Serwer: %LABEL%
IP: %IP%
Port: %PORT%
Data: + %DATE%', + 'combi_off_email_message' => '
  • Server: %LABEL%
  • IP: %IP%
  • Port: %PORT%
  • Error: + %ERROR%
  • Date: %DATE%
', + 'combi_off_discord_message' => '- Server: %LABEL%
- IP: %IP%
- Port: %PORT%
- Error: %ERROR%
- + Date: %DATE%

', + 'combi_off_webhook_message' => '
  • Server: %LABEL%
  • IP: %IP%
  • Port: %PORT%
  • Error: + %ERROR%
  • Date: %DATE%
', + 'combi_off_pushover_message' => '
  • Server: %LABEL%
  • IP: %IP%
  • Port: %PORT%
  • Error: + %ERROR%
  • Date: %DATE%
', + 'combi_off_telegram_message' => '- Server: %LABEL%
- IP: %IP%
- Port: %PORT%
- Error: %ERROR%
- + Date: %DATE%

', + 'combi_off_jabber_message' => '- Server: %LABEL%
- IP: %IP%
- Port: %PORT%
- Error: %ERROR%
- + Date: %DATE%

', + 'combi_on_email_message' => '
  • Server: %LABEL%
  • IP: %IP%
  • Port: %PORT%
  • Downtime: + %LAST_OFFLINE_DURATION%
  • Date: %DATE%
', + 'combi_on_webhook_message' => '
  • Server: %LABEL%
  • IP: %IP%
  • Port: %PORT%
  • Downtime: + %LAST_OFFLINE_DURATION%
  • Date: %DATE%
', + 'combi_on_discord_message' => '- Server: %LABEL%
- IP: %IP%
- Port: %PORT%
- Downtime: + %LAST_OFFLINE_DURATION%
- Date: %DATE%

', + 'combi_on_pushover_message' => '
  • Server: %LABEL%
  • IP: %IP%
  • Port: + %PORT%
  • Downtime: %LAST_OFFLINE_DURATION%
  • Date: + %DATE%
', + 'combi_on_telegram_message' => '- Server: %LABEL%
- IP: %IP%
- Port: %PORT%
- Downtime: + %LAST_OFFLINE_DURATION%
- Date: %DATE%

', + 'combi_on_jabber_message' => '- Server: %LABEL%
- IP: %IP%
- Port: %PORT%
- Downtime: + %LAST_OFFLINE_DURATION%
- Date: %DATE%

', + 'combi_email_subject' => 'WAŻNE: \'%UP%\' serverów znowu ONLINE, \'%DOWN%\' serverów jest OFFLINE', + 'combi_webhook_subject' => '\'%UP%\' serverów jest znowu ONLINE UP, \'%DOWN%\' serverów jest OFFLINE', + 'combi_pushover_subject' => '\'%UP%\' serverów jest znowu ONLINE UP, \'%DOWN%\' serverów jest OFFLINE', + 'combi_email_message' => 'Następujące serwery są offline:
%DOWN_SERVERS%
Następujące + serwery są znowu online:
%UP_SERVERS%', + 'combi_discord_message' => 'Następujące serwery są offline:
%DOWN_SERVERS%
Następujące + serwery są znowu online:
%UP_SERVERS%', + 'combi_webhook_message' => 'Następujące serwery są offline:
%DOWN_SERVERS%
Następujące + serwery są znowu online:
%UP_SERVERS%', + 'combi_pushover_message' => 'Następujące serwery są offline:
%DOWN_SERVERS%
Następujące + serwery są znowu online:
%UP_SERVERS%', + 'combi_telegram_message' => 'Następujące serwery są offline:
%DOWN_SERVERS%
Następujące + serwery są znowu online:
%UP_SERVERS%', + 'combi_jabber_message' => 'Następujące serwery są offline:
%DOWN_SERVERS%
Następujące + serwery są znowu online:
%UP_SERVERS%', ), 'login' => array( 'welcome_usermenu' => 'Witaj, %user_name%', diff --git a/src/psm/Module/AbstractController.php b/src/psm/Module/AbstractController.php index 284a0fef..d5cc0187 100644 --- a/src/psm/Module/AbstractController.php +++ b/src/psm/Module/AbstractController.php @@ -124,7 +124,7 @@ abstract class AbstractController implements ControllerInterface * @var int $user_level_required * @see setMinUserLevelRequired() */ - protected $user_level_required = PSM_USER_USER; + protected $user_level_required = (PSM_PUBLIC && PSM_PUBLIC_PAGE) ? PSM_USER_ANONYMOUS : PSM_USER_USER; /** * Required user level for certain actions diff --git a/src/psm/Module/Config/Controller/ConfigController.php b/src/psm/Module/Config/Controller/ConfigController.php index df524c4d..5285ea70 100644 --- a/src/psm/Module/Config/Controller/ConfigController.php +++ b/src/psm/Module/Config/Controller/ConfigController.php @@ -41,12 +41,14 @@ class ConfigController extends AbstractController protected $checkboxes = array( 'proxy', 'email_status', + 'email_add_url', 'email_smtp', 'sms_status', 'discord_status', 'pushover_status', 'webhook_status', 'telegram_status', + 'telegram_add_url', 'jabber_status', 'log_status', 'log_email', @@ -58,6 +60,8 @@ class ConfigController extends AbstractController 'log_jabber', 'show_update', 'combine_notifications', + 'dirauth_status', + 'authdir_ldapfollowref', ); /** @@ -85,7 +89,18 @@ class ConfigController extends AbstractController 'jabber_username', 'jabber_domain', 'user_agent', - 'site_title' + 'site_title', + 'authdir_host_locn', + 'authdir_host_port', + 'authdir_userdomain', + 'authdir_ldapver', + 'authdir_basedn', + 'authdir_usernameattrib', + 'authdir_groupnameattrib', + 'authdir_groupmemattrib', + 'authdir_usercontainerrdn', + 'authdir_groupcontainerrdn', + 'authdir_groupname', ); /** @@ -162,6 +177,20 @@ class ConfigController extends AbstractController ); } + foreach (array("20", "10") as $authdir_defaultrole) { + $tpl_data['authdir_defaultroles'][] = array( + 'value' => $authdir_defaultrole, + 'label' => psm_get_lang('users', 'level_' . $authdir_defaultrole), + ); + } + + foreach (array("openldap", "adds", "adlds") as $authdir_type) { + $tpl_data['authdir_type'][] = array( + 'value' => $authdir_type, + 'label' => psm_get_lang('config', 'authdir_type_' . $authdir_type), + ); + } + $tpl_data['email_smtp_security'] = array( array( 'value' => '', @@ -181,6 +210,10 @@ class ConfigController extends AbstractController $config['sms_gateway'] : current($sms_gateways); $tpl_data['alert_type_selected'] = isset($config['alert_type']) ? $config['alert_type'] : ''; + $tpl_data['authdir_type_selected'] = isset($config['authdir_type']) ? + $config['authdir_type'] : ''; + $tpl_data['authdir_defaultrole_selected'] = isset($config['authdir_defaultrole']) ? + $config['authdir_defaultrole'] : '20'; $tpl_data['email_smtp_security_selected'] = isset($config['email_smtp_security']) ? $config['email_smtp_security'] : ''; $tpl_data['auto_refresh_servers'] = isset($config['auto_refresh_servers']) ? @@ -244,6 +277,8 @@ class ConfigController extends AbstractController 'site_title' => $_POST['site_title'], 'sms_gateway' => $_POST['sms_gateway'], 'alert_type' => $_POST['alert_type'], + 'authdir_defaultrole' => $_POST['authdir_defaultrole'], + 'authdir_type' => $_POST['authdir_type'], 'email_smtp_security' => in_array($_POST['email_smtp_security'], array('', 'ssl', 'tls')) ? $_POST['email_smtp_security'] @@ -296,6 +331,8 @@ class ConfigController extends AbstractController if (isset($_POST['general_submit'])) { $this->default_tab = 'general'; + } elseif (isset($_POST['auth_submit'])) { + $this->default_tab = 'auth'; } elseif (isset($_POST['email_submit']) || !empty($_POST['test_email'])) { $this->default_tab = 'email'; } elseif (isset($_POST['sms_submit']) || !empty($_POST['test_sms'])) { @@ -546,6 +583,7 @@ class ConfigController extends AbstractController 'label_tab_webhook' => psm_get_lang('config', 'tab_webhook'), 'label_tab_telegram' => psm_get_lang('config', 'tab_telegram'), 'label_tab_jabber' => psm_get_lang('config', 'tab_jabber'), + 'label_tab_auth' => psm_get_lang('config', 'tab_auth'), 'label_settings_email' => psm_get_lang('config', 'settings_email'), 'label_settings_sms' => psm_get_lang('config', 'settings_sms'), 'label_settings_discord' => psm_get_lang('config', 'settings_discord'), @@ -553,6 +591,7 @@ class ConfigController extends AbstractController 'label_settings_pushover' => psm_get_lang('config', 'settings_pushover'), 'label_settings_telegram' => psm_get_lang('config', 'settings_telegram'), 'label_settings_jabber' => psm_get_lang('config', 'settings_jabber'), + 'label_settings_dirauth' => psm_get_lang('config', 'settings_dirauth'), 'label_settings_notification' => psm_get_lang('config', 'settings_notification'), 'label_settings_log' => psm_get_lang('config', 'settings_log'), 'label_settings_proxy' => psm_get_lang('config', 'settings_proxy'), @@ -565,6 +604,7 @@ class ConfigController extends AbstractController 'label_proxy_url' => psm_get_lang('config', 'proxy_url'), 'label_proxy_user' => psm_get_lang('config', 'proxy_user'), 'label_proxy_password' => psm_get_lang('config', 'proxy_password'), + 'label_email_add_url' => psm_get_lang('config', 'email_add_url'), 'label_email_status' => psm_get_lang('config', 'email_status'), 'label_email_from_email' => psm_get_lang('config', 'email_from_email'), 'label_email_from_name' => psm_get_lang('config', 'email_from_name'), @@ -599,6 +639,7 @@ class ConfigController extends AbstractController ), 'label_telegram_description' => psm_get_lang('config', 'telegram_description'), 'label_telegram_status' => psm_get_lang('config', 'telegram_status'), + 'label_telegram_add_url' => psm_get_lang('config', 'telegram_add_url'), 'label_telegram_api_token' => psm_get_lang('config', 'telegram_api_token'), 'label_telegram_api_token_description' => psm_get_lang('config', 'telegram_api_token_description'), 'label_jabber_status' => psm_get_lang('config', 'jabber_status'), @@ -613,6 +654,36 @@ class ConfigController extends AbstractController 'label_jabber_domain_description' => psm_get_lang('config', 'jabber_domain_description'), 'label_jabber_password' => psm_get_lang('config', 'jabber_password'), 'label_jabber_password_description' => psm_get_lang('config', 'jabber_password_description'), + 'label_dirauth_status' => psm_get_lang('config', 'dirauth_status'), + 'label_authdir_host_locn' => psm_get_lang('config', 'authdir_host_locn'), + 'label_authdir_host_port' => psm_get_lang('config', 'authdir_host_port'), + 'label_authdir_type' => psm_get_lang('config', 'authdir_type'), + 'label_authdir_type_description' => psm_get_lang('config', 'authdir_type_description'), + 'label_authdir_userdomain' => psm_get_lang('config', 'authdir_userdomain'), + 'label_authdir_userdomain_description' => psm_get_lang('config', 'authdir_userdomain_description'), + 'label_authdir_ldapver' => psm_get_lang('config', 'authdir_ldapver'), + 'label_authdir_ldapver_description' => psm_get_lang('config', 'authdir_ldapver_description'), + 'label_authdir_ldapfollowref' => psm_get_lang('config', 'authdir_ldapfollowref'), + 'label_authdir_ldapfollowref_description' => psm_get_lang('config', 'authdir_ldapfollowref_description'), + 'label_authdir_basedn' => psm_get_lang('config', 'authdir_basedn'), + 'label_authdir_basedn_description' => psm_get_lang('config', 'authdir_basedn_description'), + 'label_authdir_usernameattrib' => psm_get_lang('config', 'authdir_usernameattrib'), + 'label_authdir_usernameattrib_description' => psm_get_lang('config', 'authdir_usernameattrib_description'), + 'label_authdir_groupnameattrib' => psm_get_lang('config', 'authdir_groupnameattrib'), + 'label_authdir_groupnameattrib_description' => + psm_get_lang('config', 'authdir_groupnameattrib_description'), + 'label_authdir_groupmemattrib' => psm_get_lang('config', 'authdir_groupmemattrib'), + 'label_authdir_groupmemattrib_description' => psm_get_lang('config', 'authdir_groupmemattrib_description'), + 'label_authdir_usercontainerrdn' => psm_get_lang('config', 'authdir_usercontainerrdn'), + 'label_authdir_usercontainerrdn_description' => + psm_get_lang('config', 'authdir_usercontainerrdn_description'), + 'label_authdir_groupcontainerrdn' => psm_get_lang('config', 'authdir_groupcontainerrdn'), + 'label_authdir_groupcontainerrdn_description' => + psm_get_lang('config', 'authdir_groupcontainerrdn_description'), + 'label_authdir_groupname' => psm_get_lang('config', 'authdir_groupname'), + 'label_authdir_groupname_description' => psm_get_lang('config', 'authdir_groupname_description'), + 'label_authdir_defaultrole' => psm_get_lang('config', 'authdir_defaultrole'), + 'label_authdir_defaultrole_description' => psm_get_lang('config', 'authdir_defaultrole_description'), 'label_alert_type' => psm_get_lang('config', 'alert_type'), 'label_alert_type_description' => psm_get_lang('config', 'alert_type_description'), 'label_combine_notifications' => psm_get_lang('config', 'combine_notifications'), diff --git a/src/psm/Module/Install/Controller/InstallController.php b/src/psm/Module/Install/Controller/InstallController.php index b1b9bc0b..7afd97f1 100644 --- a/src/psm/Module/Install/Controller/InstallController.php +++ b/src/psm/Module/Install/Controller/InstallController.php @@ -306,6 +306,7 @@ class InstallController extends AbstractController 'webhook_url' => '', 'webhook_json' => '', 'telegram_id' => '', + 'discord' => '', 'jabber' => '' ); diff --git a/src/psm/Module/User/Controller/UserController.php b/src/psm/Module/User/Controller/UserController.php index 91f0e423..ba55a0e2 100644 --- a/src/psm/Module/User/Controller/UserController.php +++ b/src/psm/Module/User/Controller/UserController.php @@ -282,12 +282,25 @@ class UserController extends AbstractController $user_validator->username($clean['user_name'], $user_id); $user_validator->email($clean['email']); $user_validator->level($clean['level']); + + // Won't allow anonymous level for users other than __PUBLIC__ + if ($clean['user_name'] !== "__PUBLIC__" && (int) $clean['level'] === (int) PSM_USER_ANONYMOUS) { + $this->addMessage(psm_get_lang('users', 'error_user_cant_be_anonymous'), 'error'); + $clean['level'] = PSM_USER_USER; + } // always validate password for new users, // but only validate it for existing users when they change it. - if ($user_id == 0 || ($user_id > 0 && $clean['password'] != '')) { + if (($user_id == 0 || ($user_id > 0 && $clean['password'] != '')) && $clean['user_name'] != '__PUBLIC__') { $user_validator->password($clean['password'], $clean['password_repeat']); } + + // Auto generate password for __PUBLIC__ user + if ($clean['user_name'] === '__PUBLIC__') { + $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%&*_"; + $clean['password'] = substr(str_shuffle($chars), 0, 24); + } + if ($user_id > 0) { $user_validator->userId($user_id); } diff --git a/src/psm/Service/User.php b/src/psm/Service/User.php index fb50e475..bc01db2a 100644 --- a/src/psm/Service/User.php +++ b/src/psm/Service/User.php @@ -100,6 +100,17 @@ class User } $this->session = $session; + if (PSM_PUBLIC === true && PSM_PUBLIC_PAGE === true) { + $query_user = $this->db_connection->prepare('SELECT * FROM ' . + PSM_DB_PREFIX . 'users WHERE user_name = :user_name and level = :level'); + $query_user->bindValue(':user_name', "__PUBLIC__", \PDO::PARAM_STR); + $query_user->bindValue(':level', PSM_USER_ANONYMOUS, \PDO::PARAM_STR); + $query_user->execute(); + + // get result row (as an object) + $this->setUserLoggedIn($query_user->fetchObject()->user_id); + } + if ((!defined('PSM_INSTALL') || !PSM_INSTALL)) { // check the possible login actions: // 1. login via session data (happens each time user opens a page on your php project AFTER @@ -219,20 +230,51 @@ class User { $user_name = trim($user_name); $user_password = trim($user_password); + $ldapauthstatus = false; if (empty($user_name) && empty($user_password)) { return false; } + + $dirauthconfig = psm_get_conf('dirauth_status'); + + // LDAP auth enabled + if ($dirauthconfig === '1') { + $ldaplibpath = realpath( + PSM_PATH_SRC . '..' . DIRECTORY_SEPARATOR . + 'vendor' . DIRECTORY_SEPARATOR . + 'viharm' . DIRECTORY_SEPARATOR . + 'psm-ldap-auth' . DIRECTORY_SEPARATOR . + 'psmldapauth.php' + ); + // If the library is found + if ($ldaplibpath) { + // Delegate the authentication to the PsmLDAPauth module. + // If LDAP auth fails or if library not found, fall back to native auth + include_once($ldaplibpath); + $ldapauthstatus = psmldapauth($user_name, $user_password, $GLOBALS['sm_config'], $this->db_connection); + } + } + $user = $this->getUserByUsername($user_name); - // using PHP 5.5's password_verify() function to check if the provided passwords - // fits to the hash of that user's password - if (!isset($user->user_id)) { - password_verify($user_password, 'dummy_call_against_timing'); - return false; - } elseif (!password_verify($user_password, $user->password)) { - return false; - } + // Authenticated + if ($ldapauthstatus === true) { + // Remove password to prevent it from being saved in the DB. + // Otherwise, user may still be authenticated if LDAP is disabled later. + $user_password = null; + @fn_Debug('Authenticated', $user); + } else { + + // using PHP 5.5's password_verify() function to check if the provided passwords + // fits to the hash of that user's password + if (!isset($user->user_id)) { + password_verify($user_password, 'dummy_call_against_timing'); + return false; + } elseif (!password_verify($user_password, $user->password)) { + return false; + } + } // not authenticated $this->setUserLoggedIn($user->user_id, true); diff --git a/src/psm/Txtmsg/Infobip.php b/src/psm/Txtmsg/Infobip.php new file mode 100644 index 00000000..21d7f880 --- /dev/null +++ b/src/psm/Txtmsg/Infobip.php @@ -0,0 +1,91 @@ +. + * + * @package phpservermon + * @author Victor Macko + * @copyright Copyright (c) 2008-2017 Pepijn Over + * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 + * @version Release: @package_version@ + * @link http://www.phpservermonitor.org/ + * @since phpservermon 3.6.0 + **/ + +namespace psm\Txtmsg; + +class Infobip extends Core +{ + + /** + * Send sms using the infobip.com API + * + * @var string $message + * @var string $this->password + * @var array $this->recipients + * @var array $this->originator + * @var string $recipients + * + * @var resource $curl + * @var string $err + * @var mixed $result + * + * @var int $success + * @var string $error + * + * @return bool|string + */ + + + + public function sendSMS($message) + { + $success = 1; + $error = ''; + foreach ($this->recipients as $recipient) { + $ch = curl_init(); + curl_setopt( + $ch, + CURLOPT_URL, + "https://api.infobip.com/sms/1/text/query?username=" . $this->username . + "&password=" . $this->password . + "&to=" . $recipient . + "&text=" . urlencode($message) . + //add your sender id here + "&from=" + ); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + $headers = array(); + $headers[] = "Content-Type: application/x-www-form-urlencoded"; + curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); + $result = curl_exec($ch); + curl_close($ch); + + // Check for errors + if (is_numeric(strpos($result, "FAILED"))) { + $error = $result; + $success = 0; + } + } + if ($success == 1) { + return 1; + } + return $error; + } +} + diff --git a/src/psm/Txtmsg/Octopush.php b/src/psm/Txtmsg/Octopush.php index 5d1731d0..f14eb464 100644 --- a/src/psm/Txtmsg/Octopush.php +++ b/src/psm/Txtmsg/Octopush.php @@ -59,7 +59,7 @@ class Octopush extends Core { $error = ""; $success = 1; - $smsType = "XXX"; //FR = premium, WWW = world, XXX = Low cost + $smsType = "FR"; //FR = premium, WWW = world, XXX = Low cost $recipients = join(',', $this->recipients); diff --git a/src/psm/Txtmsg/Plivo.php b/src/psm/Txtmsg/Plivo.php index e2eec00f..7c164684 100644 --- a/src/psm/Txtmsg/Plivo.php +++ b/src/psm/Txtmsg/Plivo.php @@ -74,7 +74,7 @@ class Plivo extends Core array( "src" => $this->originator, "dst" => $recipients, - "text" => urlencode($message) + "text" => $message ) ), CURLOPT_HTTPHEADER => array( diff --git a/src/psm/Txtmsg/PromoSMS.php b/src/psm/Txtmsg/PromoSMS.php new file mode 100644 index 00000000..ccb024bb --- /dev/null +++ b/src/psm/Txtmsg/PromoSMS.php @@ -0,0 +1,93 @@ +. + * + * @package phpservermon + * @author Łukasz Szczepański + * @copyright Copyright (c) 2008-2017 Pepijn Over + * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 + * @version Release: @package_version@ + * @link http://www.phpservermonitor.org/ + * @since phpservermon 3.5 + **/ + +namespace psm\Txtmsg; + +class PromoSMS extends Core +{ + + /** + * Send sms using the PromoSMS API + * + * @var string $message + * @var string $this->password + * @var array $this->recipients + * @var array $headers + * + * @var resource $curl + * @var string $err + * @var int $success + * @var string $error + * + * @return bool|string + */ + + public function sendSMS($message) + { + $error = ""; + $success = 1; + + $headers = array(); + $headers[] = "Content-Type: application/x-www-form-urlencoded"; + $headers[] = "Accept: text/json"; + $headers[] = 'Authorization: Basic ' . base64_encode($this->username . ':' . $this->password); + + $curl = curl_init(); + curl_setopt_array($curl, array( + CURLOPT_URL => "https://promosms.com/api/rest/v3_2/sms", + CURLOPT_RETURNTRANSFER => true, + CURLOPT_MAXREDIRS => 10, + CURLOPT_TIMEOUT => 30, + CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, + CURLOPT_POST => true, + CURLOPT_HTTPHEADER => $headers, + CURLOPT_POSTFIELDS => http_build_query(array( + 'text' => htmlspecialchars($message), + 'type' => 1, + 'recipients' => $this->recipients, + )) + )); + + $result = curl_exec($curl); + $httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE); + $err = curl_errno($curl); + + if ($err != 0 || ($httpcode != '200' && $httpcode != '201' && $httpcode != '202' && $result != "1")) { + $success = 0; + $error = "HTTP_code: " . $httpcode . ".\ncURL error (" . $err . "): " . + curl_strerror($err) . ". Result: " . $result . ""; + } + curl_close($curl); + + if ($success) { + return 1; + } + return $error; + } +} \ No newline at end of file diff --git a/src/psm/Util/Install/Installer.php b/src/psm/Util/Install/Installer.php index fa011771..c15b0322 100644 --- a/src/psm/Util/Install/Installer.php +++ b/src/psm/Util/Install/Installer.php @@ -147,6 +147,7 @@ class Installer ('proxy_user', ''), ('proxy_password', ''), ('email_status', '1'), + ('email_add_url', '0'), ('email_from_email', 'monitor@example.org'), ('email_from_name', 'Server Monitor'), ('email_smtp', ''), @@ -164,6 +165,7 @@ class Installer ('pushover_status', '0'), ('pushover_api_token', ''), ('telegram_status', '0'), + ('telegram_add_url', '0'), ('telegram_api_token', ''), ('jabber_status', '1'), ('jabber_host', ''), @@ -724,7 +726,6 @@ class Installer ('jabber_username', ''), ('jabber_domain', ''), ('jabber_password', '');"; - $this->execSQL($queries); } @@ -754,6 +755,11 @@ class Installer ADD `discord` VARCHAR( 255 ) NOT NULL AFTER `mobile`;"; $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers` ADD `discord` ENUM( 'yes','no' ) NOT NULL DEFAULT 'yes' AFTER `sms`;"; + $queries[] = "INSERT INTO `" . PSM_DB_PREFIX . "users` ( + `user_name`, `level`, `name`, `email`) + VALUES ('__PUBLIC__', 30, 'Public page', 'publicpage@psm.psm')"; $this->execSQL($queries); + + $this->log('Public page is now available. Added user \'__PUBLIC__\'. See documentation for more info.'); } } diff --git a/src/psm/Util/Server/Updater/StatusNotifier.php b/src/psm/Util/Server/Updater/StatusNotifier.php index dd145db7..6951efea 100644 --- a/src/psm/Util/Server/Updater/StatusNotifier.php +++ b/src/psm/Util/Server/Updater/StatusNotifier.php @@ -287,7 +287,7 @@ class StatusNotifier $this->combine ? $this->setCombi('telegram') : $this->notifyByTelegram($users); } - if ($this->send_jabber && $this->server['jaber'] == 'yes') { + if ($this->send_jabber && $this->server['jabber'] == 'yes') { $this->combine ? $this->setCombi('jabber') : $this->notifyByJabber($users); } @@ -316,7 +316,7 @@ class StatusNotifier } return; } - + $this->combiNotification['notifications'][$method][$status][$this->server_id] = psm_parse_msg($this->status_new, $method . '_message', $this->server, true); } @@ -426,7 +426,8 @@ class StatusNotifier $body = key_exists('message', $combi) ? $combi['message'] : - psm_parse_msg($this->status_new, 'email_body', $this->server); + psm_parse_msg($this->status_new, 'email_body', $this->server); + if ((bool)psm_get_conf('email_add_url')) $body .= PHP_EOL.PHP_EOL.''.PSM_BASE_URL.''; $mail->Body = $body; $mail->AltBody = str_replace('
', "\n", $body); @@ -631,7 +632,14 @@ class StatusNotifier } $webhook->setUrl($user['webhook_url']); $webhook->setJson($user['webhook_json']); - $webhook->sendWebhook($message); + $webhook->sendWebhook([ + '#message' => $message, + '#server_ip' => $this->server['ip'], + '#server_label' => $this->server['label'], + '#server_error' => $this->server['error'], + '#server_last_offline_duration' => $this->status_new ? $this->server['last_offline_duration'] : '', + '#status' => $this->status_new ? 'online' : 'offline' + ]); } } /** @@ -695,14 +703,15 @@ class StatusNotifier $message = key_exists('message', $combi) ? $combi['message'] : psm_parse_msg($this->status_new, 'telegram_message', $this->server); + if ((bool)psm_get_conf('telegram_add_url')) $message .= '
'.PSM_BASE_URL; $telegram = psm_build_telegram(); $telegram->setMessage($message); - + // Log if (psm_get_conf('log_telegram')) { $log_id = psm_add_log($this->server_id, 'telegram', $message); } - + foreach ($users as $user) { // Log if (!empty($log_id)) { diff --git a/src/psm/Util/Server/Updater/StatusUpdater.php b/src/psm/Util/Server/Updater/StatusUpdater.php index 5cc42f1c..e299ae98 100644 --- a/src/psm/Util/Server/Updater/StatusUpdater.php +++ b/src/psm/Util/Server/Updater/StatusUpdater.php @@ -331,19 +331,19 @@ class StatusUpdater list ($key, $value) = explode(': ', $line); // Header found (case-insensitive) if (strcasecmp($key, $this->server['header_name']) == 0) { - // The value doesn't match what we needed - if (!preg_match("/{$this->server['header_value']}/i", $value)) { - $result = false; - } else { + // The value matches what we need, everything is fine + if (preg_match("/{$this->server['header_value']}/i", $value)) { $header_flag = true; - break; // No need to go further + break; // The correct header is found, we leave the loop } } } } if (!$header_flag) { - // Header was not present + // Header was not present, set error message and $result variable + $this->error = 'HEADER ERROR : Header "' . $this->server['header_name'] . + '" not found or does not match "/' . $this->server['header_value'] . '/i".'; $result = false; } } @@ -447,7 +447,7 @@ class StatusUpdater socket_send($socket, $package, strLen($package), 0); // socket_read returns a string or false $status = socket_read($socket, 255) !== false ? true : false; - + if ($status) { $this->header = "Success."; } else { diff --git a/src/psm/Util/User/UserValidator.php b/src/psm/Util/User/UserValidator.php index 65f322e0..b7277ce8 100644 --- a/src/psm/Util/User/UserValidator.php +++ b/src/psm/Util/User/UserValidator.php @@ -39,7 +39,7 @@ class UserValidator * Available editable user levels * @var array $user_levels */ - protected $user_levels = array(PSM_USER_ADMIN, PSM_USER_USER); + protected $user_levels = array(PSM_USER_ADMIN, PSM_USER_USER, PSM_USER_ANONYMOUS); /** * User service diff --git a/src/templates/default/module/config/config.tpl.html b/src/templates/default/module/config/config.tpl.html index ffb36a54..56fd86b7 100644 --- a/src/templates/default/module/config/config.tpl.html +++ b/src/templates/default/module/config/config.tpl.html @@ -7,6 +7,11 @@ role="tab" aria-controls="config-general" aria-selected="{% if general_active %}true{% else %}false{% endif %}">{{ label_general }} +