1
0
mirror of https://github.com/e107inc/e107.git synced 2025-08-20 13:21:54 +02:00

Vendor folder upgrades:

- Upgrading hybridauth/hybridauth (v3.8.0 => v3.8.2)
- Upgrading guzzlehttp/psr7 (1.8.5 => 1.9.0)
- Upgrading matthiasmullie/minify (1.3.68 => 1.3.70)
- Upgrading phpmailer/phpmailer (v6.6.0 => v6.7.1)
This commit is contained in:
Cameron
2022-12-15 20:45:30 -08:00
parent 25a8b68753
commit 5f84a8253e
45 changed files with 618 additions and 980 deletions

79
composer.lock generated
View File

@@ -8,16 +8,16 @@
"packages": [ "packages": [
{ {
"name": "guzzlehttp/psr7", "name": "guzzlehttp/psr7",
"version": "1.8.5", "version": "1.9.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/guzzle/psr7.git", "url": "https://github.com/guzzle/psr7.git",
"reference": "337e3ad8e5716c15f9657bd214d16cc5e69df268" "reference": "e98e3e6d4f86621a9b75f623996e6bbdeb4b9318"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/337e3ad8e5716c15f9657bd214d16cc5e69df268", "url": "https://api.github.com/repos/guzzle/psr7/zipball/e98e3e6d4f86621a9b75f623996e6bbdeb4b9318",
"reference": "337e3ad8e5716c15f9657bd214d16cc5e69df268", "reference": "e98e3e6d4f86621a9b75f623996e6bbdeb4b9318",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -38,7 +38,7 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "1.7-dev" "dev-master": "1.9-dev"
} }
}, },
"autoload": { "autoload": {
@@ -98,7 +98,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/guzzle/psr7/issues", "issues": "https://github.com/guzzle/psr7/issues",
"source": "https://github.com/guzzle/psr7/tree/1.8.5" "source": "https://github.com/guzzle/psr7/tree/1.9.0"
}, },
"funding": [ "funding": [
{ {
@@ -114,20 +114,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2022-03-20T21:51:18+00:00" "time": "2022-06-20T21:43:03+00:00"
}, },
{ {
"name": "hybridauth/hybridauth", "name": "hybridauth/hybridauth",
"version": "v3.8.0", "version": "v3.8.2",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/hybridauth/hybridauth.git", "url": "https://github.com/hybridauth/hybridauth.git",
"reference": "c76bea6638376394c74a52791dd637fef4deaf08" "reference": "0d6e31482c544e5ed2bdc83bd3c033054129c482"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/hybridauth/hybridauth/zipball/c76bea6638376394c74a52791dd637fef4deaf08", "url": "https://api.github.com/repos/hybridauth/hybridauth/zipball/0d6e31482c544e5ed2bdc83bd3c033054129c482",
"reference": "c76bea6638376394c74a52791dd637fef4deaf08", "reference": "0d6e31482c544e5ed2bdc83bd3c033054129c482",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -174,9 +174,9 @@
"support": { "support": {
"gitter": "https://gitter.im/hybridauth/hybridauth", "gitter": "https://gitter.im/hybridauth/hybridauth",
"issues": "https://github.com/hybridauth/hybridauth/issues", "issues": "https://github.com/hybridauth/hybridauth/issues",
"source": "https://github.com/hybridauth/hybridauth/tree/v3.8.0" "source": "https://github.com/hybridauth/hybridauth/tree/v3.8.2"
}, },
"time": "2022-04-08T09:49:25+00:00" "time": "2022-08-18T19:48:17+00:00"
}, },
{ {
"name": "ifsnop/mysqldump-php", "name": "ifsnop/mysqldump-php",
@@ -323,16 +323,16 @@
}, },
{ {
"name": "matthiasmullie/minify", "name": "matthiasmullie/minify",
"version": "1.3.68", "version": "1.3.70",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/matthiasmullie/minify.git", "url": "https://github.com/matthiasmullie/minify.git",
"reference": "c00fb02f71b2ef0a5f53fe18c5a8b9aa30f48297" "reference": "2807d9f9bece6877577ad44acb5c801bb3ae536b"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/matthiasmullie/minify/zipball/c00fb02f71b2ef0a5f53fe18c5a8b9aa30f48297", "url": "https://api.github.com/repos/matthiasmullie/minify/zipball/2807d9f9bece6877577ad44acb5c801bb3ae536b",
"reference": "c00fb02f71b2ef0a5f53fe18c5a8b9aa30f48297", "reference": "2807d9f9bece6877577ad44acb5c801bb3ae536b",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -341,9 +341,10 @@
"php": ">=5.3.0" "php": ">=5.3.0"
}, },
"require-dev": { "require-dev": {
"friendsofphp/php-cs-fixer": "~2.0", "friendsofphp/php-cs-fixer": ">=2.0",
"matthiasmullie/scrapbook": "dev-master", "matthiasmullie/scrapbook": ">=1.3",
"phpunit/phpunit": ">=4.8" "phpunit/phpunit": ">=4.8",
"squizlabs/php_codesniffer": ">=3.0"
}, },
"suggest": { "suggest": {
"psr/cache-implementation": "Cache implementation to use with Minify::cache" "psr/cache-implementation": "Cache implementation to use with Minify::cache"
@@ -366,12 +367,12 @@
{ {
"name": "Matthias Mullie", "name": "Matthias Mullie",
"email": "minify@mullie.eu", "email": "minify@mullie.eu",
"homepage": "http://www.mullie.eu", "homepage": "https://www.mullie.eu",
"role": "Developer" "role": "Developer"
} }
], ],
"description": "CSS & JavaScript minifier, in PHP. Removes whitespace, strips comments, combines files (incl. @import statements and small assets in CSS files), and optimizes/shortens a few common programming patterns.", "description": "CSS & JavaScript minifier, in PHP. Removes whitespace, strips comments, combines files (incl. @import statements and small assets in CSS files), and optimizes/shortens a few common programming patterns.",
"homepage": "http://www.minifier.org", "homepage": "https://github.com/matthiasmullie/minify",
"keywords": [ "keywords": [
"JS", "JS",
"css", "css",
@@ -381,7 +382,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/matthiasmullie/minify/issues", "issues": "https://github.com/matthiasmullie/minify/issues",
"source": "https://github.com/matthiasmullie/minify/tree/1.3.68" "source": "https://github.com/matthiasmullie/minify/tree/1.3.70"
}, },
"funding": [ "funding": [
{ {
@@ -389,7 +390,7 @@
"type": "github" "type": "github"
} }
], ],
"time": "2022-04-19T08:28:56+00:00" "time": "2022-12-09T12:56:44+00:00"
}, },
{ {
"name": "matthiasmullie/path-converter", "name": "matthiasmullie/path-converter",
@@ -446,16 +447,16 @@
}, },
{ {
"name": "phpmailer/phpmailer", "name": "phpmailer/phpmailer",
"version": "v6.6.0", "version": "v6.7.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/PHPMailer/PHPMailer.git", "url": "https://github.com/PHPMailer/PHPMailer.git",
"reference": "e43bac82edc26ca04b36143a48bde1c051cfd5b1" "reference": "49cd7ea3d2563f028d7811f06864a53b1f15ff55"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/e43bac82edc26ca04b36143a48bde1c051cfd5b1", "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/49cd7ea3d2563f028d7811f06864a53b1f15ff55",
"reference": "e43bac82edc26ca04b36143a48bde1c051cfd5b1", "reference": "49cd7ea3d2563f028d7811f06864a53b1f15ff55",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -465,22 +466,24 @@
"php": ">=5.5.0" "php": ">=5.5.0"
}, },
"require-dev": { "require-dev": {
"dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", "dealerdirect/phpcodesniffer-composer-installer": "^0.7.2",
"doctrine/annotations": "^1.2", "doctrine/annotations": "^1.2.6 || ^1.13.3",
"php-parallel-lint/php-console-highlighter": "^0.5.0", "php-parallel-lint/php-console-highlighter": "^1.0.0",
"php-parallel-lint/php-parallel-lint": "^1.3.1", "php-parallel-lint/php-parallel-lint": "^1.3.2",
"phpcompatibility/php-compatibility": "^9.3.5", "phpcompatibility/php-compatibility": "^9.3.5",
"roave/security-advisories": "dev-latest", "roave/security-advisories": "dev-latest",
"squizlabs/php_codesniffer": "^3.6.2", "squizlabs/php_codesniffer": "^3.7.1",
"yoast/phpunit-polyfills": "^1.0.0" "yoast/phpunit-polyfills": "^1.0.4"
}, },
"suggest": { "suggest": {
"ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses", "ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses",
"ext-openssl": "Needed for secure SMTP sending and DKIM signing",
"greew/oauth2-azure-provider": "Needed for Microsoft Azure XOAUTH2 authentication",
"hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication", "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication",
"league/oauth2-google": "Needed for Google XOAUTH2 authentication", "league/oauth2-google": "Needed for Google XOAUTH2 authentication",
"psr/log": "For optional PSR-3 debug logging", "psr/log": "For optional PSR-3 debug logging",
"stevenmaguire/oauth2-microsoft": "Needed for Microsoft XOAUTH2 authentication", "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)",
"symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)" "thenetworg/oauth2-azure": "Needed for Microsoft XOAUTH2 authentication"
}, },
"type": "library", "type": "library",
"autoload": { "autoload": {
@@ -512,7 +515,7 @@
"description": "PHPMailer is a full-featured email creation and transfer class for PHP", "description": "PHPMailer is a full-featured email creation and transfer class for PHP",
"support": { "support": {
"issues": "https://github.com/PHPMailer/PHPMailer/issues", "issues": "https://github.com/PHPMailer/PHPMailer/issues",
"source": "https://github.com/PHPMailer/PHPMailer/tree/v6.6.0" "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.7.1"
}, },
"funding": [ "funding": [
{ {
@@ -520,7 +523,7 @@
"type": "github" "type": "github"
} }
], ],
"time": "2022-02-28T15:31:21+00:00" "time": "2022-12-08T13:30:06+00:00"
}, },
{ {
"name": "psr/http-message", "name": "psr/http-message",

View File

@@ -2,17 +2,17 @@
"packages": [ "packages": [
{ {
"name": "guzzlehttp/psr7", "name": "guzzlehttp/psr7",
"version": "1.8.5", "version": "1.9.0",
"version_normalized": "1.8.5.0", "version_normalized": "1.9.0.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/guzzle/psr7.git", "url": "https://github.com/guzzle/psr7.git",
"reference": "337e3ad8e5716c15f9657bd214d16cc5e69df268" "reference": "e98e3e6d4f86621a9b75f623996e6bbdeb4b9318"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/337e3ad8e5716c15f9657bd214d16cc5e69df268", "url": "https://api.github.com/repos/guzzle/psr7/zipball/e98e3e6d4f86621a9b75f623996e6bbdeb4b9318",
"reference": "337e3ad8e5716c15f9657bd214d16cc5e69df268", "reference": "e98e3e6d4f86621a9b75f623996e6bbdeb4b9318",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -30,11 +30,11 @@
"suggest": { "suggest": {
"laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
}, },
"time": "2022-03-20T21:51:18+00:00", "time": "2022-06-20T21:43:03+00:00",
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "1.7-dev" "dev-master": "1.9-dev"
} }
}, },
"installation-source": "dist", "installation-source": "dist",
@@ -95,7 +95,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/guzzle/psr7/issues", "issues": "https://github.com/guzzle/psr7/issues",
"source": "https://github.com/guzzle/psr7/tree/1.8.5" "source": "https://github.com/guzzle/psr7/tree/1.9.0"
}, },
"funding": [ "funding": [
{ {
@@ -115,17 +115,17 @@
}, },
{ {
"name": "hybridauth/hybridauth", "name": "hybridauth/hybridauth",
"version": "v3.8.0", "version": "v3.8.2",
"version_normalized": "3.8.0.0", "version_normalized": "3.8.2.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/hybridauth/hybridauth.git", "url": "https://github.com/hybridauth/hybridauth.git",
"reference": "c76bea6638376394c74a52791dd637fef4deaf08" "reference": "0d6e31482c544e5ed2bdc83bd3c033054129c482"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/hybridauth/hybridauth/zipball/c76bea6638376394c74a52791dd637fef4deaf08", "url": "https://api.github.com/repos/hybridauth/hybridauth/zipball/0d6e31482c544e5ed2bdc83bd3c033054129c482",
"reference": "c76bea6638376394c74a52791dd637fef4deaf08", "reference": "0d6e31482c544e5ed2bdc83bd3c033054129c482",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -139,7 +139,7 @@
"firebase/php-jwt": "Needed to support Apple provider", "firebase/php-jwt": "Needed to support Apple provider",
"phpseclib/phpseclib": "Needed to support Apple provider" "phpseclib/phpseclib": "Needed to support Apple provider"
}, },
"time": "2022-04-08T09:49:25+00:00", "time": "2022-08-18T19:48:17+00:00",
"type": "library", "type": "library",
"installation-source": "dist", "installation-source": "dist",
"autoload": { "autoload": {
@@ -174,7 +174,7 @@
"support": { "support": {
"gitter": "https://gitter.im/hybridauth/hybridauth", "gitter": "https://gitter.im/hybridauth/hybridauth",
"issues": "https://github.com/hybridauth/hybridauth/issues", "issues": "https://github.com/hybridauth/hybridauth/issues",
"source": "https://github.com/hybridauth/hybridauth/tree/v3.8.0" "source": "https://github.com/hybridauth/hybridauth/tree/v3.8.2"
}, },
"install-path": "../hybridauth/hybridauth" "install-path": "../hybridauth/hybridauth"
}, },
@@ -325,17 +325,17 @@
}, },
{ {
"name": "matthiasmullie/minify", "name": "matthiasmullie/minify",
"version": "1.3.68", "version": "1.3.70",
"version_normalized": "1.3.68.0", "version_normalized": "1.3.70.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/matthiasmullie/minify.git", "url": "https://github.com/matthiasmullie/minify.git",
"reference": "c00fb02f71b2ef0a5f53fe18c5a8b9aa30f48297" "reference": "2807d9f9bece6877577ad44acb5c801bb3ae536b"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/matthiasmullie/minify/zipball/c00fb02f71b2ef0a5f53fe18c5a8b9aa30f48297", "url": "https://api.github.com/repos/matthiasmullie/minify/zipball/2807d9f9bece6877577ad44acb5c801bb3ae536b",
"reference": "c00fb02f71b2ef0a5f53fe18c5a8b9aa30f48297", "reference": "2807d9f9bece6877577ad44acb5c801bb3ae536b",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -344,14 +344,15 @@
"php": ">=5.3.0" "php": ">=5.3.0"
}, },
"require-dev": { "require-dev": {
"friendsofphp/php-cs-fixer": "~2.0", "friendsofphp/php-cs-fixer": ">=2.0",
"matthiasmullie/scrapbook": "dev-master", "matthiasmullie/scrapbook": ">=1.3",
"phpunit/phpunit": ">=4.8" "phpunit/phpunit": ">=4.8",
"squizlabs/php_codesniffer": ">=3.0"
}, },
"suggest": { "suggest": {
"psr/cache-implementation": "Cache implementation to use with Minify::cache" "psr/cache-implementation": "Cache implementation to use with Minify::cache"
}, },
"time": "2022-04-19T08:28:56+00:00", "time": "2022-12-09T12:56:44+00:00",
"bin": [ "bin": [
"bin/minifycss", "bin/minifycss",
"bin/minifyjs" "bin/minifyjs"
@@ -371,12 +372,12 @@
{ {
"name": "Matthias Mullie", "name": "Matthias Mullie",
"email": "minify@mullie.eu", "email": "minify@mullie.eu",
"homepage": "http://www.mullie.eu", "homepage": "https://www.mullie.eu",
"role": "Developer" "role": "Developer"
} }
], ],
"description": "CSS & JavaScript minifier, in PHP. Removes whitespace, strips comments, combines files (incl. @import statements and small assets in CSS files), and optimizes/shortens a few common programming patterns.", "description": "CSS & JavaScript minifier, in PHP. Removes whitespace, strips comments, combines files (incl. @import statements and small assets in CSS files), and optimizes/shortens a few common programming patterns.",
"homepage": "http://www.minifier.org", "homepage": "https://github.com/matthiasmullie/minify",
"keywords": [ "keywords": [
"JS", "JS",
"css", "css",
@@ -386,7 +387,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/matthiasmullie/minify/issues", "issues": "https://github.com/matthiasmullie/minify/issues",
"source": "https://github.com/matthiasmullie/minify/tree/1.3.68" "source": "https://github.com/matthiasmullie/minify/tree/1.3.70"
}, },
"funding": [ "funding": [
{ {
@@ -454,17 +455,17 @@
}, },
{ {
"name": "phpmailer/phpmailer", "name": "phpmailer/phpmailer",
"version": "v6.6.0", "version": "v6.7.1",
"version_normalized": "6.6.0.0", "version_normalized": "6.7.1.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/PHPMailer/PHPMailer.git", "url": "https://github.com/PHPMailer/PHPMailer.git",
"reference": "e43bac82edc26ca04b36143a48bde1c051cfd5b1" "reference": "49cd7ea3d2563f028d7811f06864a53b1f15ff55"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/e43bac82edc26ca04b36143a48bde1c051cfd5b1", "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/49cd7ea3d2563f028d7811f06864a53b1f15ff55",
"reference": "e43bac82edc26ca04b36143a48bde1c051cfd5b1", "reference": "49cd7ea3d2563f028d7811f06864a53b1f15ff55",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -474,24 +475,26 @@
"php": ">=5.5.0" "php": ">=5.5.0"
}, },
"require-dev": { "require-dev": {
"dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", "dealerdirect/phpcodesniffer-composer-installer": "^0.7.2",
"doctrine/annotations": "^1.2", "doctrine/annotations": "^1.2.6 || ^1.13.3",
"php-parallel-lint/php-console-highlighter": "^0.5.0", "php-parallel-lint/php-console-highlighter": "^1.0.0",
"php-parallel-lint/php-parallel-lint": "^1.3.1", "php-parallel-lint/php-parallel-lint": "^1.3.2",
"phpcompatibility/php-compatibility": "^9.3.5", "phpcompatibility/php-compatibility": "^9.3.5",
"roave/security-advisories": "dev-latest", "roave/security-advisories": "dev-latest",
"squizlabs/php_codesniffer": "^3.6.2", "squizlabs/php_codesniffer": "^3.7.1",
"yoast/phpunit-polyfills": "^1.0.0" "yoast/phpunit-polyfills": "^1.0.4"
}, },
"suggest": { "suggest": {
"ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses", "ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses",
"ext-openssl": "Needed for secure SMTP sending and DKIM signing",
"greew/oauth2-azure-provider": "Needed for Microsoft Azure XOAUTH2 authentication",
"hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication", "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication",
"league/oauth2-google": "Needed for Google XOAUTH2 authentication", "league/oauth2-google": "Needed for Google XOAUTH2 authentication",
"psr/log": "For optional PSR-3 debug logging", "psr/log": "For optional PSR-3 debug logging",
"stevenmaguire/oauth2-microsoft": "Needed for Microsoft XOAUTH2 authentication", "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)",
"symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)" "thenetworg/oauth2-azure": "Needed for Microsoft XOAUTH2 authentication"
}, },
"time": "2022-02-28T15:31:21+00:00", "time": "2022-12-08T13:30:06+00:00",
"type": "library", "type": "library",
"installation-source": "dist", "installation-source": "dist",
"autoload": { "autoload": {
@@ -523,7 +526,7 @@
"description": "PHPMailer is a full-featured email creation and transfer class for PHP", "description": "PHPMailer is a full-featured email creation and transfer class for PHP",
"support": { "support": {
"issues": "https://github.com/PHPMailer/PHPMailer/issues", "issues": "https://github.com/PHPMailer/PHPMailer/issues",
"source": "https://github.com/PHPMailer/PHPMailer/tree/v6.6.0" "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.7.1"
}, },
"funding": [ "funding": [
{ {
@@ -637,6 +640,6 @@
"install-path": "../ralouphie/getallheaders" "install-path": "../ralouphie/getallheaders"
} }
], ],
"dev": false, "dev": true,
"dev-package-names": [] "dev-package-names": []
} }

View File

@@ -5,9 +5,9 @@
'type' => 'project', 'type' => 'project',
'install_path' => __DIR__ . '/../../../', 'install_path' => __DIR__ . '/../../../',
'aliases' => array(), 'aliases' => array(),
'reference' => '8ec6e3a0dd960847abbcec86c6efcaa288f47099', 'reference' => '3f73b9cccafe3f7137ec2372de00b6322c496fbf',
'name' => 'e107inc/e107', 'name' => 'e107inc/e107',
'dev' => false, 'dev' => true,
), ),
'versions' => array( 'versions' => array(
'e107inc/e107' => array( 'e107inc/e107' => array(
@@ -16,25 +16,25 @@
'type' => 'project', 'type' => 'project',
'install_path' => __DIR__ . '/../../../', 'install_path' => __DIR__ . '/../../../',
'aliases' => array(), 'aliases' => array(),
'reference' => '8ec6e3a0dd960847abbcec86c6efcaa288f47099', 'reference' => '3f73b9cccafe3f7137ec2372de00b6322c496fbf',
'dev_requirement' => false, 'dev_requirement' => false,
), ),
'guzzlehttp/psr7' => array( 'guzzlehttp/psr7' => array(
'pretty_version' => '1.8.5', 'pretty_version' => '1.9.0',
'version' => '1.8.5.0', 'version' => '1.9.0.0',
'type' => 'library', 'type' => 'library',
'install_path' => __DIR__ . '/../guzzlehttp/psr7', 'install_path' => __DIR__ . '/../guzzlehttp/psr7',
'aliases' => array(), 'aliases' => array(),
'reference' => '337e3ad8e5716c15f9657bd214d16cc5e69df268', 'reference' => 'e98e3e6d4f86621a9b75f623996e6bbdeb4b9318',
'dev_requirement' => false, 'dev_requirement' => false,
), ),
'hybridauth/hybridauth' => array( 'hybridauth/hybridauth' => array(
'pretty_version' => 'v3.8.0', 'pretty_version' => 'v3.8.2',
'version' => '3.8.0.0', 'version' => '3.8.2.0',
'type' => 'library', 'type' => 'library',
'install_path' => __DIR__ . '/../hybridauth/hybridauth', 'install_path' => __DIR__ . '/../hybridauth/hybridauth',
'aliases' => array(), 'aliases' => array(),
'reference' => 'c76bea6638376394c74a52791dd637fef4deaf08', 'reference' => '0d6e31482c544e5ed2bdc83bd3c033054129c482',
'dev_requirement' => false, 'dev_requirement' => false,
), ),
'ifsnop/mysqldump-php' => array( 'ifsnop/mysqldump-php' => array(
@@ -56,12 +56,12 @@
'dev_requirement' => false, 'dev_requirement' => false,
), ),
'matthiasmullie/minify' => array( 'matthiasmullie/minify' => array(
'pretty_version' => '1.3.68', 'pretty_version' => '1.3.70',
'version' => '1.3.68.0', 'version' => '1.3.70.0',
'type' => 'library', 'type' => 'library',
'install_path' => __DIR__ . '/../matthiasmullie/minify', 'install_path' => __DIR__ . '/../matthiasmullie/minify',
'aliases' => array(), 'aliases' => array(),
'reference' => 'c00fb02f71b2ef0a5f53fe18c5a8b9aa30f48297', 'reference' => '2807d9f9bece6877577ad44acb5c801bb3ae536b',
'dev_requirement' => false, 'dev_requirement' => false,
), ),
'matthiasmullie/path-converter' => array( 'matthiasmullie/path-converter' => array(
@@ -74,12 +74,12 @@
'dev_requirement' => false, 'dev_requirement' => false,
), ),
'phpmailer/phpmailer' => array( 'phpmailer/phpmailer' => array(
'pretty_version' => 'v6.6.0', 'pretty_version' => 'v6.7.1',
'version' => '6.6.0.0', 'version' => '6.7.1.0',
'type' => 'library', 'type' => 'library',
'install_path' => __DIR__ . '/../phpmailer/phpmailer', 'install_path' => __DIR__ . '/../phpmailer/phpmailer',
'aliases' => array(), 'aliases' => array(),
'reference' => 'e43bac82edc26ca04b36143a48bde1c051cfd5b1', 'reference' => '49cd7ea3d2563f028d7811f06864a53b1f15ff55',
'dev_requirement' => false, 'dev_requirement' => false,
), ),
'psr/http-message' => array( 'psr/http-message' => array(

View File

@@ -3,12 +3,18 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## Unreleased ## Unreleased
## 1.9.0 - 2022-06-20
### Added
- Added `UriComparator::isCrossOrigin` method
## 1.8.5 - 2022-03-20 ## 1.8.5 - 2022-03-20
### Fixed ### Fixed

View File

@@ -1,6 +1,6 @@
# PSR-7 Message Implementation # PSR-7 Message Implementation
This repository contains a full [PSR-7](http://www.php-fig.org/psr/psr-7/) This repository contains a full [PSR-7](https://www.php-fig.org/psr/psr-7/)
message implementation, several stream decorators, and some helpful message implementation, several stream decorators, and some helpful
functionality like query string parsing. functionality like query string parsing.
@@ -659,7 +659,7 @@ manually but instead is used indirectly via `Psr\Http\Message\UriInterface::__to
`public static function fromParts(array $parts): UriInterface` `public static function fromParts(array $parts): UriInterface`
Creates a URI from a hash of [`parse_url`](http://php.net/manual/en/function.parse-url.php) components. Creates a URI from a hash of [`parse_url`](https://www.php.net/manual/en/function.parse-url.php) components.
### `GuzzleHttp\Psr7\Uri::withQueryValue` ### `GuzzleHttp\Psr7\Uri::withQueryValue`
@@ -684,6 +684,16 @@ associative array of key => value.
Creates a new URI with a specific query string value removed. Any existing query string values that exactly match the Creates a new URI with a specific query string value removed. Any existing query string values that exactly match the
provided key are removed. provided key are removed.
## Cross-Origin Detection
`GuzzleHttp\Psr7\UriComparator` provides methods to determine if a modified URL should be considered cross-origin.
### `GuzzleHttp\Psr7\UriComparator::isCrossOrigin`
`public static function isCrossOrigin(UriInterface $original, UriInterface $modified): bool`
Determines if a modified URL should be considered cross-origin with respect to an original URL.
## Reference Resolution ## Reference Resolution
`GuzzleHttp\Psr7\UriResolver` provides methods to resolve a URI reference in the context of a base URI according `GuzzleHttp\Psr7\UriResolver` provides methods to resolve a URI reference in the context of a base URI according
@@ -809,14 +819,24 @@ This of course assumes they will be resolved against the same base URI. If this
equivalence or difference of relative references does not mean anything. equivalence or difference of relative references does not mean anything.
## Version Guidance
| Version | Status | PHP Version |
|---------|----------------|------------------|
| 1.x | Security fixes | >=5.4,<8.1 |
| 2.x | Latest | ^7.2.5 \|\| ^8.0 |
## Security ## Security
If you discover a security vulnerability within this package, please send an email to security@tidelift.com. All security vulnerabilities will be promptly addressed. Please do not disclose security-related issues publicly until a fix has been announced. Please see [Security Policy](https://github.com/guzzle/psr7/security/policy) for more information. If you discover a security vulnerability within this package, please send an email to security@tidelift.com. All security vulnerabilities will be promptly addressed. Please do not disclose security-related issues publicly until a fix has been announced. Please see [Security Policy](https://github.com/guzzle/psr7/security/policy) for more information.
## License ## License
Guzzle is made available under the MIT License (MIT). Please see [License File](LICENSE) for more information. Guzzle is made available under the MIT License (MIT). Please see [License File](LICENSE) for more information.
## For Enterprise ## For Enterprise
Available as part of the Tidelift Subscription Available as part of the Tidelift Subscription

View File

@@ -63,7 +63,7 @@
}, },
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "1.7-dev" "dev-master": "1.9-dev"
} }
}, },
"config": { "config": {

View File

@@ -0,0 +1,55 @@
<?php
namespace GuzzleHttp\Psr7;
use Psr\Http\Message\UriInterface;
/**
* Provides methods to determine if a modified URL should be considered cross-origin.
*
* @author Graham Campbell
*/
final class UriComparator
{
/**
* Determines if a modified URL should be considered cross-origin with
* respect to an original URL.
*
* @return bool
*/
public static function isCrossOrigin(UriInterface $original, UriInterface $modified)
{
if (\strcasecmp($original->getHost(), $modified->getHost()) !== 0) {
return true;
}
if ($original->getScheme() !== $modified->getScheme()) {
return true;
}
if (self::computePort($original) !== self::computePort($modified)) {
return true;
}
return false;
}
/**
* @return int
*/
private static function computePort(UriInterface $uri)
{
$port = $uri->getPort();
if (null !== $port) {
return $port;
}
return 'https' === $uri->getScheme() ? 443 : 80;
}
private function __construct()
{
// cannot be instantiated
}
}

View File

@@ -1,3 +1,8 @@
[![GitHub stars](https://img.shields.io/github/stars/hybridauth/hybridauth.svg)](https://github.com/hybridauth/hybridauth/stargazers)
[![GitHub issues](https://img.shields.io/github/issues/hybridauth/hybridauth.svg)](https://github.com/hybridauth/hybridauth/issues)
[![SWUbanner](https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/banner2-direct.svg)](https://supportukrainenow.org/)
## [Hybridauth](https://hybridauth.github.io/) 3.8 ## [Hybridauth](https://hybridauth.github.io/) 3.8
[![Build Status](https://travis-ci.org/hybridauth/hybridauth.svg?branch=master)](https://travis-ci.org/hybridauth/hybridauth) [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/hybridauth/hybridauth/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/hybridauth/hybridauth/?branch=master) [![Latest Stable Version](https://poser.pugx.org/hybridauth/hybridauth/v/stable.png)](https://packagist.org/packages/hybridauth/hybridauth) [![Join the chat at https://gitter.im/hybridauth/hybridauth](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/hybridauth/hybridauth?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![Build Status](https://travis-ci.org/hybridauth/hybridauth.svg?branch=master)](https://travis-ci.org/hybridauth/hybridauth) [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/hybridauth/hybridauth/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/hybridauth/hybridauth/?branch=master) [![Latest Stable Version](https://poser.pugx.org/hybridauth/hybridauth/v/stable.png)](https://packagist.org/packages/hybridauth/hybridauth) [![Join the chat at https://gitter.im/hybridauth/hybridauth](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/hybridauth/hybridauth?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)

View File

@@ -252,7 +252,7 @@ abstract class OpenID extends AbstractAdapter implements AdapterInterface
*/ */
protected function fetchUserGender(User\Profile $userProfile, $gender) protected function fetchUserGender(User\Profile $userProfile, $gender)
{ {
$gender = strtolower($gender); $gender = strtolower((string)$gender);
if ('f' == $gender) { if ('f' == $gender) {
$gender = 'female'; $gender = 'female';

View File

@@ -7,12 +7,12 @@
namespace Hybridauth\Provider; namespace Hybridauth\Provider;
use Hybridauth\Adapter\OpenID as OpenIDAdapter; use Hybridauth\Adapter\OpenID;
/** /**
* AOL OpenID provider adapter. * AOL OpenID provider adapter.
*/ */
class AOLOpenID extends OpenIDAdapter class AOLOpenID extends OpenID
{ {
/** /**
* {@inheritdoc} * {@inheritdoc}

View File

@@ -7,8 +7,9 @@
namespace Hybridauth\Provider; namespace Hybridauth\Provider;
use Hybridauth\Exception\InvalidArgumentException; use Composer\InstalledVersions;
use Hybridauth\Exception\UnexpectedApiResponseException; use Exception;
use Firebase\JWT\ExpiredException;
use Hybridauth\Exception\InvalidApplicationCredentialsException; use Hybridauth\Exception\InvalidApplicationCredentialsException;
use Hybridauth\Exception\UnexpectedValueException; use Hybridauth\Exception\UnexpectedValueException;
@@ -19,8 +20,8 @@ use Hybridauth\User;
use phpseclib\Crypt\RSA; use phpseclib\Crypt\RSA;
use phpseclib\Math\BigInteger; use phpseclib\Math\BigInteger;
use \Firebase\JWT\JWT; use Firebase\JWT\JWT;
use \Firebase\JWT\JWK; use Firebase\JWT\Key;
/** /**
* Apple OAuth2 provider adapter. * Apple OAuth2 provider adapter.
@@ -117,7 +118,7 @@ class Apple extends OAuth2
$keys = $this->config->get('keys'); $keys = $this->config->get('keys');
$keys['secret'] = $this->getSecret(); $keys['secret'] = $this->getSecret();
$this->config->set('keys', $keys); $this->config->set('keys', $keys);
return parent::configure(); parent::configure();
} }
/** /**
@@ -177,7 +178,7 @@ class Apple extends OAuth2
// validate the token signature and get the payload // validate the token signature and get the payload
$publicKeys = $this->apiRequest('keys'); $publicKeys = $this->apiRequest('keys');
\Firebase\JWT\JWT::$leeway = 120; JWT::$leeway = 120;
$error = false; $error = false;
$payload = null; $payload = null;
@@ -195,18 +196,20 @@ class Apple extends OAuth2
); );
$pem = $rsa->getPublicKey(); $pem = $rsa->getPublicKey();
$payload = JWT::decode($id_token, $pem, ['RS256']); $payload = ($this->getJwtVersion() < '6.2') ?
JWT::decode($id_token, $pem, ['RS256']) :
JWT::decode($id_token, new Key($pem, 'RS256'));
break; break;
} catch (\Exception $e) { } catch (Exception $e) {
$error = $e->getMessage(); $error = $e->getMessage();
if ($e instanceof \Firebase\JWT\ExpiredException) { if ($e instanceof ExpiredException) {
break; break;
} }
} }
} }
if ($error && !$payload) { if ($error && !$payload) {
throw new \Exception($error); throw new Exception($error);
} }
} }
@@ -293,4 +296,9 @@ class Apple extends OAuth2
return $secret; return $secret;
} }
private function getJwtVersion()
{
return InstalledVersions::getVersion('firebase/php-jwt');
}
} }

View File

@@ -1,83 +0,0 @@
<?php
/*!
* Hybridauth
* https://hybridauth.github.io | https://github.com/hybridauth/hybridauth
* (c) 2017 Hybridauth authors | https://hybridauth.github.io/license.html
*/
namespace Hybridauth\Provider;
use Hybridauth\Adapter\OAuth2;
use Hybridauth\Exception\UnexpectedApiResponseException;
use Hybridauth\Data\Collection;
use Hybridauth\User\Profile;
/**
* Mailru OAuth2 provider adapter.
*/
class Mailru extends OAuth2
{
/**
* {@inheritdoc}
*/
protected $apiBaseUrl = 'http://www.appsmail.ru/platform/api';
/**
* {@inheritdoc}
*/
protected $authorizeUrl = 'https://connect.mail.ru/oauth/authorize';
/**
* {@inheritdoc}
*/
protected $accessTokenUrl = 'https://connect.mail.ru/oauth/token';
/**
* {@inheritdoc}
*/
protected $apiDocumentation = ''; // Not available
/**
* {@inheritdoc}
*/
public function getUserProfile()
{
$params = [
'app_id' => $this->clientId,
'method' => 'users.getInfo',
'secure' => 1,
'session_key' => $this->getStoredData('access_token'),
];
$sign = md5(http_build_query($params, null, '') . $this->clientSecret);
$param = [
'app_id' => $this->clientId,
'method' => 'users.getInfo',
'secure' => 1,
'session_key' => $this->getStoredData('access_token'),
'sig' => $sign,
];
$response = $this->apiRequest('', 'GET', $param);
$data = new Collection($response[0]);
if (!$data->exists('uid')) {
throw new UnexpectedApiResponseException('Provider API returned an unexpected response.');
}
$userProfile = new Profile();
$userProfile->identifier = $data->get('uid');
$userProfile->email = $data->get('email');
$userProfile->firstName = $data->get('first_name');
$userProfile->lastName = $data->get('last_name');
$userProfile->displayName = $data->get('nick');
$userProfile->photoURL = $data->get('pic');
$userProfile->profileURL = $data->get('link');
$userProfile->gender = $data->get('sex');
$userProfile->age = $data->get('age');
return $userProfile;
}
}

View File

@@ -1,110 +0,0 @@
<?php
/*!
* Hybridauth
* https://hybridauth.github.io | https://github.com/hybridauth/hybridauth
* (c) 2017 Hybridauth authors | https://hybridauth.github.io/license.html
*/
namespace Hybridauth\Provider;
use Hybridauth\Adapter\OAuth2;
use Hybridauth\Data;
use Hybridauth\Exception\UnexpectedApiResponseException;
use Hybridauth\User;
/**
* Odnoklassniki OAuth2 provider adapter.
*/
class Odnoklassniki extends OAuth2
{
/**
* {@inheritdoc}
*/
protected $apiBaseUrl = 'https://api.ok.ru/';
/**
* {@inheritdoc}
*/
protected $authorizeUrl = 'https://connect.ok.ru/oauth/authorize';
/**
* {@inheritdoc}
*/
protected $accessTokenUrl = 'https://api.ok.ru/oauth/token.do';
/**
* {@inheritdoc}
*/
protected $apiDocumentation = 'https://apiok.ru/en/ext/oauth/';
/**
* {@inheritdoc}
*/
protected function initialize()
{
parent::initialize();
if ($this->isRefreshTokenAvailable()) {
$this->tokenRefreshParameters += [
'client_id' => $this->clientId,
'client_secret' => $this->clientSecret
];
}
}
/**
* {@inheritdoc}
*/
public function getUserProfile()
{
$fields = array(
'uid', 'locale', 'first_name', 'last_name', 'name', 'gender', 'age', 'birthday',
'has_email', 'current_status', 'current_status_id', 'current_status_date', 'online',
'photo_id', 'pic_1', 'pic_2', 'pic1024x768', 'location', 'email'
);
$sig = md5(
'application_key=' . $this->config->get('keys')['key'] .
'fields=' . implode(',', $fields) .
'method=users.getCurrentUser' .
md5($this->getStoredData('access_token') . $this->config->get('keys')['secret'])
);
$parameters = [
'access_token' => $this->getStoredData('access_token'),
'application_key' => $this->config->get('keys')['key'],
'method' => 'users.getCurrentUser',
'fields' => implode(',', $fields),
'sig' => $sig,
];
$response = $this->apiRequest('fb.do', 'GET', $parameters);
$data = new Data\Collection($response);
if (!$data->exists('uid')) {
throw new UnexpectedApiResponseException('Provider API returned an unexpected response.');
}
$userProfile = new User\Profile();
$userProfile->identifier = $data->get('uid');
$userProfile->email = $data->get('email');
$userProfile->firstName = $data->get('first_name');
$userProfile->lastName = $data->get('last_name');
$userProfile->displayName = $data->get('name');
$userProfile->photoURL = $data->get('pic1024x768');
$userProfile->profileURL = 'http://ok.ru/profile/' . $data->get('uid');
// Handle birthday.
if ($data->get('birthday')) {
$bday = explode('-', $data->get('birthday'));
$userProfile->birthDay = (int)$bday[0];
$userProfile->birthMonth = (int)$bday[1];
$userProfile->birthYear = (int)$bday[2];
}
return $userProfile;
}
}

View File

@@ -7,7 +7,7 @@
namespace Hybridauth\Provider; namespace Hybridauth\Provider;
use Hybridauth\Adapter\OpenID as OpenIDAdapter; use Hybridauth\Adapter;
/** /**
* Generic OpenID providers adapter. * Generic OpenID providers adapter.
@@ -39,6 +39,6 @@ use Hybridauth\Adapter\OpenID as OpenIDAdapter;
* echo $e->getMessage() ; * echo $e->getMessage() ;
* } * }
*/ */
class OpenID extends OpenIDAdapter class OpenID extends Adapter\OpenID
{ {
} }

View File

@@ -7,13 +7,13 @@
namespace Hybridauth\Provider; namespace Hybridauth\Provider;
use Hybridauth\Adapter\OpenID as OpenIDAdapter; use Hybridauth\Adapter\OpenID;
use Hybridauth\HttpClient; use Hybridauth\HttpClient;
/** /**
* PayPal OpenID provider adapter. * PayPal OpenID provider adapter.
*/ */
class PaypalOpenID extends OpenIDAdapter class PaypalOpenID extends OpenID
{ {
/** /**
* {@inheritdoc} * {@inheritdoc}

View File

@@ -7,12 +7,12 @@
namespace Hybridauth\Provider; namespace Hybridauth\Provider;
use Hybridauth\Adapter\OpenID as OpenIDAdapter; use Hybridauth\Adapter\OpenID;
/** /**
* StackExchange OpenID provider adapter. * StackExchange OpenID provider adapter.
*/ */
class StackExchangeOpenID extends OpenIDAdapter class StackExchangeOpenID extends OpenID
{ {
/** /**
* {@inheritdoc} * {@inheritdoc}

View File

@@ -7,7 +7,7 @@
namespace Hybridauth\Provider; namespace Hybridauth\Provider;
use Hybridauth\Adapter\OpenID as OpenIDAdapter; use Hybridauth\Adapter\OpenID;
use Hybridauth\Exception\UnexpectedApiResponseException; use Hybridauth\Exception\UnexpectedApiResponseException;
use Hybridauth\Data; use Hybridauth\Data;
use Hybridauth\User; use Hybridauth\User;
@@ -32,7 +32,7 @@ use Hybridauth\User;
* echo $e->getMessage() ; * echo $e->getMessage() ;
* } * }
*/ */
class Steam extends OpenIDAdapter class Steam extends OpenID
{ {
/** /**
* {@inheritdoc} * {@inheritdoc}

View File

@@ -1,216 +0,0 @@
<?php
/*!
* Hybridauth
* https://hybridauth.github.io | https://github.com/hybridauth/hybridauth
* (c) 2017 Hybridauth authors | https://hybridauth.github.io/license.html
*/
namespace Hybridauth\Provider;
use Hybridauth\Adapter\OAuth2;
use Hybridauth\Exception\UnexpectedApiResponseException;
use Hybridauth\Data\Collection;
use Hybridauth\User\Profile;
use Hybridauth\Data;
use Hybridauth\User;
/**
* Vkontakte OAuth2 provider adapter.
*
* Example:
*
* $config = [
* 'callback' => Hybridauth\HttpClient\Util::getCurrentUrl(),
* 'keys' => [
* 'id' => '', // App ID
* 'secret' => '' // Secure key
* ],
* ];
*
* $adapter = new Hybridauth\Provider\Vkontakte($config);
*
* try {
* if (!$adapter->isConnected()) {
* $adapter->authenticate();
* }
*
* $userProfile = $adapter->getUserProfile();
* } catch (\Exception $e) {
* print $e->getMessage() ;
* }
*/
class Vkontakte extends OAuth2
{
const API_VERSION = '5.95';
const URL = 'https://vk.com/';
/**
* {@inheritdoc}
*/
protected $apiBaseUrl = 'https://api.vk.com/method/';
/**
* {@inheritdoc}
*/
protected $authorizeUrl = 'https://api.vk.com/oauth/authorize';
/**
* {@inheritdoc}
*/
protected $accessTokenUrl = 'https://api.vk.com/oauth/token';
/**
* {@inheritdoc}
*/
protected $scope = 'email,offline';
/**
* {@inheritdoc}
*/
protected $apiDocumentation = ''; // Not available
/**
* {@inheritdoc}
*/
protected function initialize()
{
parent::initialize();
// The VK API requires version and access_token from authenticated users
// for each endpoint.
$accessToken = $this->getStoredData($this->accessTokenName);
$this->apiRequestParameters[$this->accessTokenName] = $accessToken;
$this->apiRequestParameters['v'] = static::API_VERSION;
}
/**
* {@inheritdoc}
*/
protected function validateAccessTokenExchange($response)
{
$data = parent::validateAccessTokenExchange($response);
// Need to store email for later use.
$this->storeData('email', $data->get('email'));
}
/**
* {@inheritdoc}
*/
public function hasAccessTokenExpired($time = null)
{
if ($time === null) {
$time = time();
}
// If we are using offline scope, $expired will be false.
$expired = $this->getStoredData('expires_in')
? $this->getStoredData('expires_at') <= $time
: false;
return $expired;
}
/**
* {@inheritdoc}
*/
public function getUserProfile()
{
$photoField = 'photo_' . ($this->config->get('photo_size') ?: 'max_orig');
$response = $this->apiRequest('users.get', 'GET', [
'fields' => 'screen_name,sex,education,bdate,has_photo,' . $photoField,
]);
if (property_exists($response, 'error')) {
throw new UnexpectedApiResponseException($response->error->error_msg);
}
$data = new Collection($response->response[0]);
if (!$data->exists('id')) {
throw new UnexpectedApiResponseException('Provider API returned an unexpected response.');
}
$userProfile = new Profile();
$userProfile->identifier = $data->get('id');
$userProfile->email = $this->getStoredData('email');
$userProfile->firstName = $data->get('first_name');
$userProfile->lastName = $data->get('last_name');
$userProfile->displayName = $data->get('screen_name');
$userProfile->photoURL = $data->get('has_photo') === 1 ? $data->get($photoField) : '';
// Handle b-date.
if ($data->get('bdate')) {
$bday = explode('.', $data->get('bdate'));
$userProfile->birthDay = (int)$bday[0];
$userProfile->birthMonth = (int)$bday[1];
$userProfile->birthYear = (int)$bday[2];
}
$userProfile->data = [
'education' => $data->get('education'),
];
$screen_name = static::URL . ($data->get('screen_name') ?: 'id' . $data->get('id'));
$userProfile->profileURL = $screen_name;
switch ($data->get('sex')) {
case 1:
$userProfile->gender = 'female';
break;
case 2:
$userProfile->gender = 'male';
break;
}
return $userProfile;
}
/**
* {@inheritdoc}
*/
public function getUserContacts()
{
$response = $this->apiRequest('friends.get', 'GET', [
'fields' => 'uid,name,photo_200_orig',
]);
$data = new Data\Collection($response);
if (!$data->exists('response')) {
throw new UnexpectedApiResponseException('Provider API returned an unexpected response.');
}
$contacts = [];
if (!$data->filter('response')->filter('items')->isEmpty()) {
foreach ($data->filter('response')->filter('items')->toArray() as $item) {
$contacts[] = $this->fetchUserContact($item);
}
}
return $contacts;
}
/**
* Parse the user contact.
*
* @param array $item
*
* @return \Hybridauth\User\Contact
*/
protected function fetchUserContact($item)
{
$userContact = new User\Contact();
$data = new Data\Collection($item);
$userContact->identifier = $data->get('id');
$userContact->displayName = sprintf('%s %s', $data->get('first_name'), $data->get('last_name'));
$userContact->profileURL = static::URL . ($data->get('screen_name') ?: 'id' . $data->get('id'));
$userContact->photoURL = $data->get('photo_200_orig');
return $userContact;
}
}

View File

@@ -1,85 +0,0 @@
<?php
/*!
* Hybridauth
* https://hybridauth.github.io | https://github.com/hybridauth/hybridauth
* (c) 2017 Hybridauth authors | https://hybridauth.github.io/license.html
*/
namespace Hybridauth\Provider;
use Hybridauth\Adapter\OAuth2;
use Hybridauth\Exception\Exception;
use Hybridauth\Exception\UnexpectedApiResponseException;
use Hybridauth\Data;
use Hybridauth\User;
/**
* Yandex OAuth2 provider adapter.
*/
class Yandex extends OAuth2
{
/**
* {@inheritdoc}
*/
protected $apiBaseUrl = 'https://login.yandex.ru/info';
/**
* {@inheritdoc}
*/
protected $authorizeUrl = 'https://oauth.yandex.ru/authorize';
/**
* {@inheritdoc}
*/
protected $accessTokenUrl = 'https://oauth.yandex.ru/token';
/**
* {@inheritdoc}
*/
protected $apiDocumentation
= 'https://yandex.com/dev/oauth/doc/dg/concepts/about-docpage/';
/**
* Load the user profile from the IDp api client
*
* @throws Exception
*/
public function getUserProfile()
{
$this->scope = implode(',', []);
$response = $this->apiRequest($this->apiBaseUrl, 'GET', ['format' => 'json']);
if (!isset($response->id)) {
throw new UnexpectedApiResponseException('Provider API returned an unexpected response.');
}
$data = new Data\Collection($response);
if (!$data->exists('id')) {
throw new UnexpectedApiResponseException('Provider API returned an unexpected response.');
}
$userProfile = new User\Profile();
$userProfile->identifier = $data->get('id');
$userProfile->firstName = $data->get('first_name');
$userProfile->lastName = $data->get('last_name');
$userProfile->displayName = $data->get('display_name');
$userProfile->photoURL
= 'https://avatars.yandex.net/get-yapic/' .
$data->get('default_avatar_id') . '/islands-200';
$userProfile->gender = $data->get('sex');
$userProfile->email = $data->get('default_email');
$userProfile->emailVerified = $data->get('default_email');
if ($data->get('birthday')) {
list($birthday_year, $birthday_month, $birthday_day)
= explode('-', $response->birthday);
$userProfile->birthDay = (int)$birthday_day;
$userProfile->birthMonth = (int)$birthday_month;
$userProfile->birthYear = (int)$birthday_year;
}
return $userProfile;
}
}

View File

@@ -1,59 +0,0 @@
# How to contribute
## Issues
When [filing bugs](https://github.com/matthiasmullie/minify/issues/new),
try to be as thorough as possible:
* What version did you use?
* What did you try to do? ***Please post the relevant parts of your code.***
* What went wrong? ***Please include error messages, if any.***
* What was the expected result?
## Pull requests
Bug fixes and general improvements to the existing codebase are always welcome.
New features are also welcome, but will be judged on an individual basis. If
you'd rather not risk wasting your time implementing a new feature only to see
it turned down, please start the discussion by
[opening an issue](https://github.com/matthiasmullie/minify/issues/new).
Don't forget to add your changes to the [changelog](CHANGELOG.md).
### Testing
Please include tests for every change or addition to the code.
To run the complete test suite:
```sh
vendor/bin/phpunit
```
When submitting a new pull request, please make sure that that the test suite
passes (Travis CI will run it & report back on your pull request.)
To run the tests on Windows, run `tests/convert_symlinks_to_windows_style.sh`
from the command line in order to convert Linux-style test symlinks to
Windows-style.
### Coding standards
All code must follow [PSR-2](http://www.php-fig.org/psr/psr-2/). Just make sure
to run php-cs-fixer before submitting the code, it'll take care of the
formatting for you:
```sh
vendor/bin/php-cs-fixer fix src
vendor/bin/php-cs-fixer fix tests
```
Document the code thoroughly!
## License
Note that minify is MIT-licensed, which basically allows anyone to do
anything they like with it, without restriction.

View File

@@ -1,14 +0,0 @@
ARG version=cli
FROM php:$version
COPY . /var/www
WORKDIR /var/www
RUN apt-get update
RUN apt-get install -y zip unzip libzip-dev git
RUN docker-php-ext-install zip
RUN docker-php-ext-install pcntl
RUN pecl install xdebug || pecl install xdebug-2.7.2 || pecl install -f xdebug-2.5.5 && docker-php-ext-enable xdebug
RUN curl -sS https://getcomposer.org/installer | php
RUN mv composer.phar /usr/local/bin/composer
RUN composer install

View File

@@ -3,12 +3,12 @@
"type": "library", "type": "library",
"description": "CSS & JavaScript minifier, in PHP. Removes whitespace, strips comments, combines files (incl. @import statements and small assets in CSS files), and optimizes/shortens a few common programming patterns.", "description": "CSS & JavaScript minifier, in PHP. Removes whitespace, strips comments, combines files (incl. @import statements and small assets in CSS files), and optimizes/shortens a few common programming patterns.",
"keywords": ["minify", "minifier", "css", "js", "javascript"], "keywords": ["minify", "minifier", "css", "js", "javascript"],
"homepage": "http://www.minifier.org", "homepage": "https://github.com/matthiasmullie/minify",
"license": "MIT", "license": "MIT",
"authors": [ "authors": [
{ {
"name": "Matthias Mullie", "name": "Matthias Mullie",
"homepage": "http://www.mullie.eu", "homepage": "https://www.mullie.eu",
"email": "minify@mullie.eu", "email": "minify@mullie.eu",
"role": "Developer" "role": "Developer"
} }
@@ -19,9 +19,10 @@
"matthiasmullie/path-converter": "~1.1" "matthiasmullie/path-converter": "~1.1"
}, },
"require-dev": { "require-dev": {
"matthiasmullie/scrapbook": "dev-master", "friendsofphp/php-cs-fixer": ">=2.0",
"matthiasmullie/scrapbook": ">=1.3",
"phpunit/phpunit": ">=4.8", "phpunit/phpunit": ">=4.8",
"friendsofphp/php-cs-fixer": "~2.0" "squizlabs/php_codesniffer": ">=3.0"
}, },
"suggest": { "suggest": {
"psr/cache-implementation": "Cache implementation to use with Minify::cache" "psr/cache-implementation": "Cache implementation to use with Minify::cache"
@@ -31,6 +32,11 @@
"MatthiasMullie\\Minify\\": "src/" "MatthiasMullie\\Minify\\": "src/"
} }
}, },
"autoload-dev": {
"psr-4": {
"MatthiasMullie\\Minify\\Tests\\": "tests/"
}
},
"bin": [ "bin": [
"bin/minifycss", "bin/minifycss",
"bin/minifyjs" "bin/minifyjs"

View File

@@ -1,52 +0,0 @@
version: '2.1'
services:
php:
build:
context: .
dockerfile: Dockerfile
volumes:
- ./src:/var/www/src
- ./data:/var/www/data
- ./tests:/var/www/tests
- ./build:/var/www/build
- ./phpunit.xml.dist:/var/www/phpunit.xml.dist
'8.1':
extends: php
build:
args:
version: 8.1-cli
'8.0':
extends: php
build:
args:
version: 8.0-cli
'7.4':
extends: php
build:
args:
version: 7.4-cli
'7.3':
extends: php
build:
args:
version: 7.3-cli
'7.2':
extends: php
build:
args:
version: 7.2-cli
'7.1':
extends: php
build:
args:
version: 7.1-cli
'7.0':
extends: php
build:
args:
version: 7.0-cli
'5.6':
extends: php
build:
args:
version: 5.6-cli

View File

@@ -0,0 +1,10 @@
<?xml version="1.0"?>
<ruleset>
<rule ref="PSR12" />
<file>./src</file>
<file>./tests</file>
<arg name="extensions" value="php" />
<arg name="encoding" value="UTF-8" />
</ruleset>

View File

@@ -1,6 +1,7 @@
<?php <?php
/** /**
* CSS Minifier * CSS Minifier.
* *
* Please report bugs on https://github.com/matthiasmullie/minify/issues * Please report bugs on https://github.com/matthiasmullie/minify/issues
* *
@@ -12,15 +13,14 @@
namespace MatthiasMullie\Minify; namespace MatthiasMullie\Minify;
use MatthiasMullie\Minify\Exceptions\FileImportException; use MatthiasMullie\Minify\Exceptions\FileImportException;
use MatthiasMullie\PathConverter\ConverterInterface;
use MatthiasMullie\PathConverter\Converter; use MatthiasMullie\PathConverter\Converter;
use MatthiasMullie\PathConverter\ConverterInterface;
/** /**
* CSS minifier * CSS minifier.
* *
* Please report bugs on https://github.com/matthiasmullie/minify/issues * Please report bugs on https://github.com/matthiasmullie/minify/issues
* *
* @package Minify
* @author Matthias Mullie <minify@mullie.eu> * @author Matthias Mullie <minify@mullie.eu>
* @author Tijs Verkoyen <minify@verkoyen.eu> * @author Tijs Verkoyen <minify@verkoyen.eu>
* @copyright Copyright (c) 2012, Matthias Mullie. All rights reserved * @copyright Copyright (c) 2012, Matthias Mullie. All rights reserved
@@ -97,7 +97,7 @@ class CSS extends Minify
} }
// add to top // add to top
$content = implode(';', $matches[2]).';'.trim($content, ';'); $content = implode(';', $matches[2]) . ';' . trim($content, ';');
} }
return $content; return $content;
@@ -106,8 +106,8 @@ class CSS extends Minify
/** /**
* Combine CSS from import statements. * Combine CSS from import statements.
* *
* @import's will be loaded and their content merged into the original file, * Import statements will be loaded and their content merged into the original
* to save HTTP requests. * file, to save HTTP requests.
* *
* @param string $source The file to combine imports for * @param string $source The file to combine imports for
* @param string $content The CSS content to combine imports for * @param string $content The CSS content to combine imports for
@@ -204,7 +204,7 @@ class CSS extends Minify
// loop the matches // loop the matches
foreach ($matches as $match) { foreach ($matches as $match) {
// get the path for the file that will be imported // get the path for the file that will be imported
$importPath = dirname($source).'/'.$match['path']; $importPath = dirname($source) . '/' . $match['path'];
// only replace the import with the content if we can grab the // only replace the import with the content if we can grab the
// content of the file // content of the file
@@ -215,7 +215,7 @@ class CSS extends Minify
// check if current file was not imported previously in the same // check if current file was not imported previously in the same
// import chain. // import chain.
if (in_array($importPath, $parents)) { if (in_array($importPath, $parents)) {
throw new FileImportException('Failed to import file "'.$importPath.'": circular reference detected.'); throw new FileImportException('Failed to import file "' . $importPath . '": circular reference detected.');
} }
// grab referenced file & minify it (which may include importing // grab referenced file & minify it (which may include importing
@@ -227,7 +227,7 @@ class CSS extends Minify
// check if this is only valid for certain media // check if this is only valid for certain media
if (!empty($match['media'])) { if (!empty($match['media'])) {
$importContent = '@media '.$match['media'].'{'.$importContent.'}'; $importContent = '@media ' . $match['media'] . '{' . $importContent . '}';
} }
// add to replacement array // add to replacement array
@@ -266,7 +266,7 @@ class CSS extends Minify
// get the path for the file that will be imported // get the path for the file that will be imported
$path = $match[2]; $path = $match[2];
$path = dirname($source).'/'.$path; $path = dirname($source) . '/' . $path;
// only replace the import with the content if we're able to get // only replace the import with the content if we're able to get
// the content of the file, and it's relatively small // the content of the file, and it's relatively small
@@ -277,7 +277,7 @@ class CSS extends Minify
// build replacement // build replacement
$search[] = $match[0]; $search[] = $match[0];
$replace[] = 'url('.$this->importExtensions[$extension].';base64,'.$importContent.')'; $replace[] = 'url(' . $this->importExtensions[$extension] . ';base64,' . $importContent . ')';
} }
} }
@@ -293,7 +293,7 @@ class CSS extends Minify
* Perform CSS optimizations. * Perform CSS optimizations.
* *
* @param string[optional] $path Path to write the data to * @param string[optional] $path Path to write the data to
* @param string[] $parents Parent paths, for circular reference checks * @param string[] $parents Parent paths, for circular reference checks
* *
* @return string The minified data * @return string The minified data
*/ */
@@ -469,9 +469,9 @@ class CSS extends Minify
// build replacement // build replacement
$search[] = $match[0]; $search[] = $match[0];
if ($type === 'url') { if ($type === 'url') {
$replace[] = 'url('.$url.')'; $replace[] = 'url(' . $url . ')';
} elseif ($type === 'import') { } elseif ($type === 'import') {
$replace[] = '@import "'.$url.'"'; $replace[] = '@import "' . $url . '"';
} }
} }
@@ -530,7 +530,7 @@ class CSS extends Minify
); );
return preg_replace_callback( return preg_replace_callback(
'/(?<=[: ])('.implode('|', array_keys($colors)).')(?=[; }])/i', '/(?<=[: ])(' . implode('|', array_keys($colors)) . ')(?=[; }])/i',
function ($match) use ($colors) { function ($match) use ($colors) {
return $colors[strtoupper($match[0])]; return $colors[strtoupper($match[0])];
}, },
@@ -553,10 +553,10 @@ class CSS extends Minify
); );
$callback = function ($match) use ($weights) { $callback = function ($match) use ($weights) {
return $match[1].$weights[$match[2]]; return $match[1] . $weights[$match[2]];
}; };
return preg_replace_callback('/(font-weight\s*:\s*)('.implode('|', array_keys($weights)).')(?=[;}])/', $callback, $content); return preg_replace_callback('/(font-weight\s*:\s*)(' . implode('|', array_keys($weights)) . ')(?=[;}])/', $callback, $content);
} }
/** /**
@@ -588,19 +588,19 @@ class CSS extends Minify
// practice, Webkit (especially Safari) seems to stumble over at least // practice, Webkit (especially Safari) seems to stumble over at least
// 0%, potentially other units as well. Only stripping 'px' for now. // 0%, potentially other units as well. Only stripping 'px' for now.
// @see https://github.com/matthiasmullie/minify/issues/60 // @see https://github.com/matthiasmullie/minify/issues/60
$content = preg_replace('/'.$before.'(-?0*(\.0+)?)(?<=0)px'.$after.'/', '\\1', $content); $content = preg_replace('/' . $before . '(-?0*(\.0+)?)(?<=0)px' . $after . '/', '\\1', $content);
// strip 0-digits (.0 -> 0) // strip 0-digits (.0 -> 0)
$content = preg_replace('/'.$before.'\.0+'.$units.'?'.$after.'/', '0\\1', $content); $content = preg_replace('/' . $before . '\.0+' . $units . '?' . $after . '/', '0\\1', $content);
// strip trailing 0: 50.10 -> 50.1, 50.10px -> 50.1px // strip trailing 0: 50.10 -> 50.1, 50.10px -> 50.1px
$content = preg_replace('/'.$before.'(-?[0-9]+\.[0-9]+)0+'.$units.'?'.$after.'/', '\\1\\2', $content); $content = preg_replace('/' . $before . '(-?[0-9]+\.[0-9]+)0+' . $units . '?' . $after . '/', '\\1\\2', $content);
// strip trailing 0: 50.00 -> 50, 50.00px -> 50px // strip trailing 0: 50.00 -> 50, 50.00px -> 50px
$content = preg_replace('/'.$before.'(-?[0-9]+)\.0+'.$units.'?'.$after.'/', '\\1\\2', $content); $content = preg_replace('/' . $before . '(-?[0-9]+)\.0+' . $units . '?' . $after . '/', '\\1\\2', $content);
// strip leading 0: 0.1 -> .1, 01.1 -> 1.1 // strip leading 0: 0.1 -> .1, 01.1 -> 1.1
$content = preg_replace('/'.$before.'(-?)0+([0-9]*\.[0-9]+)'.$units.'?'.$after.'/', '\\1\\2\\3', $content); $content = preg_replace('/' . $before . '(-?)0+([0-9]*\.[0-9]+)' . $units . '?' . $after . '/', '\\1\\2\\3', $content);
// strip negative zeroes (-0 -> 0) & truncate zeroes (00 -> 0) // strip negative zeroes (-0 -> 0) & truncate zeroes (00 -> 0)
$content = preg_replace('/'.$before.'-?0+'.$units.'?'.$after.'/', '0\\1', $content); $content = preg_replace('/' . $before . '-?0+' . $units . '?' . $after . '/', '0\\1', $content);
// IE doesn't seem to understand a unitless flex-basis value (correct - // IE doesn't seem to understand a unitless flex-basis value (correct -
// it goes against the spec), so let's add it in again (make it `%`, // it goes against the spec), so let's add it in again (make it `%`,
@@ -636,7 +636,7 @@ class CSS extends Minify
$minifier = $this; $minifier = $this;
$callback = function ($match) use ($minifier) { $callback = function ($match) use ($minifier) {
$count = count($minifier->extracted); $count = count($minifier->extracted);
$placeholder = '/*'.$count.'*/'; $placeholder = '/*' . $count . '*/';
$minifier->extracted[$placeholder] = $match[0]; $minifier->extracted[$placeholder] = $match[0];
return $placeholder; return $placeholder;
@@ -674,7 +674,7 @@ class CSS extends Minify
// not in things like `calc(3px + 2px)`, shorthands like `3px -2px`, or // not in things like `calc(3px + 2px)`, shorthands like `3px -2px`, or
// selectors like `div.weird- p` // selectors like `div.weird- p`
$pseudos = array('nth-child', 'nth-last-child', 'nth-last-of-type', 'nth-of-type'); $pseudos = array('nth-child', 'nth-last-child', 'nth-last-of-type', 'nth-of-type');
$content = preg_replace('/:('.implode('|', $pseudos).')\(\s*([+-]?)\s*(.+?)\s*([+-]?)\s*(.*?)\s*\)/', ':$1($2$3$4$5)', $content); $content = preg_replace('/:(' . implode('|', $pseudos) . ')\(\s*([+-]?)\s*(.+?)\s*([+-]?)\s*(.*?)\s*\)/', ':$1($2$3$4$5)', $content);
// remove semicolon/whitespace followed by closing bracket // remove semicolon/whitespace followed by closing bracket
$content = str_replace(';}', '}', $content); $content = str_replace(';}', '}', $content);
@@ -684,12 +684,12 @@ class CSS extends Minify
/** /**
* Replace all occurrences of functions that may contain math, where * Replace all occurrences of functions that may contain math, where
* whitespace around operators needs to be preserved (e.g. calc, clamp) * whitespace around operators needs to be preserved (e.g. calc, clamp).
*/ */
protected function extractMath() protected function extractMath()
{ {
$functions = array('calc', 'clamp', 'min', 'max'); $functions = array('calc', 'clamp', 'min', 'max');
$pattern = '/\b('. implode('|', $functions) .')(\(.+?)(?=$|;|})/m'; $pattern = '/\b(' . implode('|', $functions) . ')(\(.+?)(?=$|;|})/m';
// PHP only supports $this inside anonymous functions since 5.4 // PHP only supports $this inside anonymous functions since 5.4
$minifier = $this; $minifier = $this;
@@ -704,11 +704,11 @@ class CSS extends Minify
// instead, it'll match a larger portion of code to where it's certain that // instead, it'll match a larger portion of code to where it's certain that
// the calc() musts have ended, and we'll figure out which is the correct // the calc() musts have ended, and we'll figure out which is the correct
// closing parenthesis here, by counting how many have opened // closing parenthesis here, by counting how many have opened
for ($i = 0; $i < $length; $i++) { for ($i = 0; $i < $length; ++$i) {
$char = $match[2][$i]; $char = $match[2][$i];
$expr .= $char; $expr .= $char;
if ($char === '(') { if ($char === '(') {
$opened++; ++$opened;
} elseif ($char === ')' && --$opened === 0) { } elseif ($char === ')' && --$opened === 0) {
break; break;
} }
@@ -716,16 +716,16 @@ class CSS extends Minify
// now that we've figured out where the calc() starts and ends, extract it // now that we've figured out where the calc() starts and ends, extract it
$count = count($minifier->extracted); $count = count($minifier->extracted);
$placeholder = 'math('.$count.')'; $placeholder = 'math(' . $count . ')';
$minifier->extracted[$placeholder] = $function.'('.trim(substr($expr, 1, -1)).')'; $minifier->extracted[$placeholder] = $function . '(' . trim(substr($expr, 1, -1)) . ')';
// and since we've captured more code than required, we may have some leftover // and since we've captured more code than required, we may have some leftover
// calc() in here too - go recursive on the remaining but of code to go figure // calc() in here too - go recursive on the remaining but of code to go figure
// that out and extract what is needed // that out and extract what is needed
$rest = str_replace($function.$expr, '', $match[0]); $rest = $minifier->str_replace_first($function . $expr, '', $match[0]);
$rest = preg_replace_callback($pattern, $callback, $rest); $rest = preg_replace_callback($pattern, $callback, $rest);
return $placeholder.$rest; return $placeholder . $rest;
}; };
$this->registerPattern($pattern, $callback); $this->registerPattern($pattern, $callback);
@@ -733,19 +733,19 @@ class CSS extends Minify
/** /**
* Replace custom properties, whose values may be used in scenarios where * Replace custom properties, whose values may be used in scenarios where
* we wouldn't want them to be minified (e.g. inside calc) * we wouldn't want them to be minified (e.g. inside calc).
*/ */
protected function extractCustomProperties() protected function extractCustomProperties()
{ {
// PHP only supports $this inside anonymous functions since 5.4 // PHP only supports $this inside anonymous functions since 5.4
$minifier = $this; $minifier = $this;
$this->registerPattern( $this->registerPattern(
'/(?<=^|[;}])\s*(--[^:;{}"\'\s]+)\s*:([^;{}]+)/m', '/(?<=^|[;}{])\s*(--[^:;{}"\'\s]+)\s*:([^;{}]+)/m',
function ($match) use ($minifier) { function ($match) use ($minifier) {
$placeholder = '--custom-'. count($minifier->extracted) . ':0'; $placeholder = '--custom-' . count($minifier->extracted) . ':0';
$minifier->extracted[$placeholder] = $match[1] .':'. trim($match[2]); $minifier->extracted[$placeholder] = $match[1] . ':' . trim($match[2]);
return $placeholder;
return $placeholder;
} }
); );
} }

View File

@@ -1,18 +1,20 @@
<?php <?php
/** /**
* Base Exception * Base Exception.
* *
* @deprecated Use Exceptions\BasicException instead * @deprecated Use Exceptions\BasicException instead
* *
* @author Matthias Mullie <minify@mullie.eu> * @author Matthias Mullie <minify@mullie.eu>
*/ */
namespace MatthiasMullie\Minify; namespace MatthiasMullie\Minify;
/** /**
* Base Exception Class * Base Exception Class.
*
* @deprecated Use Exceptions\BasicException instead * @deprecated Use Exceptions\BasicException instead
* *
* @package Minify
* @author Matthias Mullie <minify@mullie.eu> * @author Matthias Mullie <minify@mullie.eu>
*/ */
abstract class Exception extends \Exception abstract class Exception extends \Exception

View File

@@ -1,6 +1,7 @@
<?php <?php
/** /**
* Basic exception * Basic exception.
* *
* Please report bugs on https://github.com/matthiasmullie/minify/issues * Please report bugs on https://github.com/matthiasmullie/minify/issues
* *
@@ -8,14 +9,14 @@
* @copyright Copyright (c) 2012, Matthias Mullie. All rights reserved * @copyright Copyright (c) 2012, Matthias Mullie. All rights reserved
* @license MIT License * @license MIT License
*/ */
namespace MatthiasMullie\Minify\Exceptions; namespace MatthiasMullie\Minify\Exceptions;
use MatthiasMullie\Minify\Exception; use MatthiasMullie\Minify\Exception;
/** /**
* Basic Exception Class * Basic Exception Class.
* *
* @package Minify\Exception
* @author Matthias Mullie <minify@mullie.eu> * @author Matthias Mullie <minify@mullie.eu>
*/ */
abstract class BasicException extends Exception abstract class BasicException extends Exception

View File

@@ -1,6 +1,7 @@
<?php <?php
/** /**
* File Import Exception * File Import Exception.
* *
* Please report bugs on https://github.com/matthiasmullie/minify/issues * Please report bugs on https://github.com/matthiasmullie/minify/issues
* *
@@ -8,12 +9,12 @@
* @copyright Copyright (c) 2012, Matthias Mullie. All rights reserved * @copyright Copyright (c) 2012, Matthias Mullie. All rights reserved
* @license MIT License * @license MIT License
*/ */
namespace MatthiasMullie\Minify\Exceptions; namespace MatthiasMullie\Minify\Exceptions;
/** /**
* File Import Exception Class * File Import Exception Class.
* *
* @package Minify\Exception
* @author Matthias Mullie <minify@mullie.eu> * @author Matthias Mullie <minify@mullie.eu>
*/ */
class FileImportException extends BasicException class FileImportException extends BasicException

View File

@@ -1,6 +1,7 @@
<?php <?php
/** /**
* IO Exception * IO Exception.
* *
* Please report bugs on https://github.com/matthiasmullie/minify/issues * Please report bugs on https://github.com/matthiasmullie/minify/issues
* *
@@ -8,12 +9,12 @@
* @copyright Copyright (c) 2012, Matthias Mullie. All rights reserved * @copyright Copyright (c) 2012, Matthias Mullie. All rights reserved
* @license MIT License * @license MIT License
*/ */
namespace MatthiasMullie\Minify\Exceptions; namespace MatthiasMullie\Minify\Exceptions;
/** /**
* IO Exception Class * IO Exception Class.
* *
* @package Minify\Exception
* @author Matthias Mullie <minify@mullie.eu> * @author Matthias Mullie <minify@mullie.eu>
*/ */
class IOException extends BasicException class IOException extends BasicException

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,7 @@
<?php <?php
/** /**
* Abstract minifier class * Abstract minifier class.
* *
* Please report bugs on https://github.com/matthiasmullie/minify/issues * Please report bugs on https://github.com/matthiasmullie/minify/issues
* *
@@ -8,6 +9,7 @@
* @copyright Copyright (c) 2012, Matthias Mullie. All rights reserved * @copyright Copyright (c) 2012, Matthias Mullie. All rights reserved
* @license MIT License * @license MIT License
*/ */
namespace MatthiasMullie\Minify; namespace MatthiasMullie\Minify;
use MatthiasMullie\Minify\Exceptions\IOException; use MatthiasMullie\Minify\Exceptions\IOException;
@@ -18,7 +20,6 @@ use Psr\Cache\CacheItemInterface;
* *
* Please report bugs on https://github.com/matthiasmullie/minify/issues * Please report bugs on https://github.com/matthiasmullie/minify/issues
* *
* @package Minify
* @author Matthias Mullie <minify@mullie.eu> * @author Matthias Mullie <minify@mullie.eu>
* @copyright Copyright (c) 2012, Matthias Mullie. All rights reserved * @copyright Copyright (c) 2012, Matthias Mullie. All rights reserved
* @license MIT License * @license MIT License
@@ -44,6 +45,8 @@ abstract class Minify
* been extracted from the JS source code, so we can reliably match "code", * been extracted from the JS source code, so we can reliably match "code",
* without having to worry about potential "code-like" characters inside. * without having to worry about potential "code-like" characters inside.
* *
* @internal
*
* @var string[] * @var string[]
*/ */
public $extracted = array(); public $extracted = array();
@@ -128,7 +131,7 @@ abstract class Minify
// check if we can read the file // check if we can read the file
if (!$this->canImportFile($path)) { if (!$this->canImportFile($path)) {
throw new IOException('The file "'.$path.'" could not be opened for reading. Check if PHP has enough permissions.'); throw new IOException('The file "' . $path . '" could not be opened for reading. Check if PHP has enough permissions.');
} }
$this->add($path); $this->add($path);
@@ -357,6 +360,7 @@ abstract class Minify
foreach ($match as &$matchItem) { foreach ($match as &$matchItem) {
$matchItem = $matchItem[0]; $matchItem = $matchItem[0];
} }
return $replacement($match); return $replacement($match);
} }
@@ -391,8 +395,8 @@ abstract class Minify
} }
$count = count($minifier->extracted); $count = count($minifier->extracted);
$placeholder = $match[1].$placeholderPrefix.$count.$match[1]; $placeholder = $match[1] . $placeholderPrefix . $count . $match[1];
$minifier->extracted[$placeholder] = $match[1].$match[2].$match[1]; $minifier->extracted[$placeholder] = $match[1] . $match[2] . $match[1];
return $placeholder; return $placeholder;
}; };
@@ -409,7 +413,7 @@ abstract class Minify
* considered as escape-char (times 2) and to get it in the regex, * considered as escape-char (times 2) and to get it in the regex,
* escaped (times 2) * escaped (times 2)
*/ */
$this->registerPattern('/(['.$chars.'])(.*?(?<!\\\\)(\\\\\\\\)*+)\\1/s', $callback); $this->registerPattern('/([' . $chars . '])(.*?(?<!\\\\)(\\\\\\\\)*+)\\1/s', $callback);
} }
/** /**
@@ -469,7 +473,7 @@ abstract class Minify
protected function openFileForWriting($path) protected function openFileForWriting($path)
{ {
if ($path === '' || ($handler = @fopen($path, 'w')) === false) { if ($path === '' || ($handler = @fopen($path, 'w')) === false) {
throw new IOException('The file "'.$path.'" could not be opened for writing. Check if PHP has enough permissions.'); throw new IOException('The file "' . $path . '" could not be opened for writing. Check if PHP has enough permissions.');
} }
return $handler; return $handler;
@@ -491,7 +495,17 @@ abstract class Minify
($result = @fwrite($handler, $content)) === false || ($result = @fwrite($handler, $content)) === false ||
($result < strlen($content)) ($result < strlen($content))
) { ) {
throw new IOException('The file "'.$path.'" could not be written to. Check your disk space and file permissions.'); throw new IOException('The file "' . $path . '" could not be written to. Check your disk space and file permissions.');
} }
} }
protected static function str_replace_first($search, $replace, $subject)
{
$pos = strpos($subject, $search);
if ($pos !== false) {
return substr_replace($subject, $replace, $pos, strlen($search));
}
return $subject;
}
} }

View File

@@ -1,3 +1,5 @@
[![SWUbanner](https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/banner2-direct.svg)](https://supportukrainenow.org/)
![PHPMailer](https://raw.github.com/PHPMailer/PHPMailer/master/examples/images/phpmailer.png) ![PHPMailer](https://raw.github.com/PHPMailer/PHPMailer/master/examples/images/phpmailer.png)
# PHPMailer A full-featured email creation and transfer class for PHP # PHPMailer A full-featured email creation and transfer class for PHP
@@ -8,12 +10,13 @@
[![Total Downloads](https://poser.pugx.org/phpmailer/phpmailer/downloads)](https://packagist.org/packages/phpmailer/phpmailer) [![Total Downloads](https://poser.pugx.org/phpmailer/phpmailer/downloads)](https://packagist.org/packages/phpmailer/phpmailer)
[![License](https://poser.pugx.org/phpmailer/phpmailer/license.svg)](https://packagist.org/packages/phpmailer/phpmailer) [![License](https://poser.pugx.org/phpmailer/phpmailer/license.svg)](https://packagist.org/packages/phpmailer/phpmailer)
[![API Docs](https://github.com/phpmailer/phpmailer/workflows/Docs/badge.svg)](https://phpmailer.github.io/PHPMailer/) [![API Docs](https://github.com/phpmailer/phpmailer/workflows/Docs/badge.svg)](https://phpmailer.github.io/PHPMailer/)
[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/PHPMailer/PHPMailer/badge)](https://api.securityscorecards.dev/projects/github.com/PHPMailer/PHPMailer)
## Features ## Features
- Probably the world's most popular code for sending email from PHP! - Probably the world's most popular code for sending email from PHP!
- Used by many open-source projects: WordPress, Drupal, 1CRM, SugarCRM, Yii, Joomla! and many more - Used by many open-source projects: WordPress, Drupal, 1CRM, SugarCRM, Yii, Joomla! and many more
- Integrated SMTP support send without a local mail server - Integrated SMTP support send without a local mail server
- Send emails with multiple To, CC, BCC and Reply-to addresses - Send emails with multiple To, CC, BCC, and Reply-to addresses
- Multipart/alternative emails for mail clients that do not read HTML email - Multipart/alternative emails for mail clients that do not read HTML email
- Add attachments, including inline - Add attachments, including inline
- Support for UTF-8 content and 8bit, base64, binary, and quoted-printable encodings - Support for UTF-8 content and 8bit, base64, binary, and quoted-printable encodings
@@ -22,7 +25,7 @@
- Protects against header injection attacks - Protects against header injection attacks
- Error messages in over 50 languages! - Error messages in over 50 languages!
- DKIM and S/MIME signing support - DKIM and S/MIME signing support
- Compatible with PHP 5.5 and later, including PHP 8.1 - Compatible with PHP 5.5 and later, including PHP 8.2
- Namespaced to prevent name clashes - Namespaced to prevent name clashes
- Much more! - Much more!
@@ -35,7 +38,7 @@ The PHP `mail()` function usually sends via a local mail server, typically front
*Please* don't be tempted to do it yourself if you don't use PHPMailer, there are many other excellent libraries that *Please* don't be tempted to do it yourself if you don't use PHPMailer, there are many other excellent libraries that
you should look at before rolling your own. Try [SwiftMailer](https://swiftmailer.symfony.com/) you should look at before rolling your own. Try [SwiftMailer](https://swiftmailer.symfony.com/)
, [Laminas/Mail](https://docs.laminas.dev/laminas-mail/), [ZetaComponents](https://github.com/zetacomponents/Mail) etc. , [Laminas/Mail](https://docs.laminas.dev/laminas-mail/), [ZetaComponents](https://github.com/zetacomponents/Mail), etc.
## License ## License
This software is distributed under the [LGPL 2.1](http://www.gnu.org/licenses/lgpl-2.1.html) license, along with the [GPL Cooperation Commitment](https://gplcc.github.io/gplcc/). Please read [LICENSE](https://github.com/PHPMailer/PHPMailer/blob/master/LICENSE) for information on the software availability and distribution. This software is distributed under the [LGPL 2.1](http://www.gnu.org/licenses/lgpl-2.1.html) license, along with the [GPL Cooperation Commitment](https://gplcc.github.io/gplcc/). Please read [LICENSE](https://github.com/PHPMailer/PHPMailer/blob/master/LICENSE) for information on the software availability and distribution.
@@ -44,7 +47,7 @@ This software is distributed under the [LGPL 2.1](http://www.gnu.org/licenses/lg
PHPMailer is available on [Packagist](https://packagist.org/packages/phpmailer/phpmailer) (using semantic versioning), and installation via [Composer](https://getcomposer.org) is the recommended way to install PHPMailer. Just add this line to your `composer.json` file: PHPMailer is available on [Packagist](https://packagist.org/packages/phpmailer/phpmailer) (using semantic versioning), and installation via [Composer](https://getcomposer.org) is the recommended way to install PHPMailer. Just add this line to your `composer.json` file:
```json ```json
"phpmailer/phpmailer": "^6.5" "phpmailer/phpmailer": "^6.7.1"
``` ```
or run or run
@@ -133,14 +136,14 @@ try {
} }
``` ```
You'll find plenty to play with in the [examples](https://github.com/PHPMailer/PHPMailer/tree/master/examples) folder, which covers many common scenarios including sending through gmail, building contact forms, sending to mailing lists, and more. You'll find plenty to play with in the [examples](https://github.com/PHPMailer/PHPMailer/tree/master/examples) folder, which covers many common scenarios including sending through Gmail, building contact forms, sending to mailing lists, and more.
If you are re-using the instance (e.g. when sending to a mailing list), you may need to clear the recipient list to avoid sending duplicate messages. See [the mailing list example](https://github.com/PHPMailer/PHPMailer/blob/master/examples/mailing_list.phps) for further guidance. If you are re-using the instance (e.g. when sending to a mailing list), you may need to clear the recipient list to avoid sending duplicate messages. See [the mailing list example](https://github.com/PHPMailer/PHPMailer/blob/master/examples/mailing_list.phps) for further guidance.
That's it. You should now be ready to use PHPMailer! That's it. You should now be ready to use PHPMailer!
## Localization ## Localization
PHPMailer defaults to English, but in the [language](https://github.com/PHPMailer/PHPMailer/tree/master/language/) folder you'll find many translations for PHPMailer error messages that you may encounter. Their filenames contain [ISO 639-1](http://en.wikipedia.org/wiki/ISO_639-1) language code for the translations, for example `fr` for French. To specify a language, you need to tell PHPMailer which one to use, like this: PHPMailer defaults to English, but in the [language](https://github.com/PHPMailer/PHPMailer/tree/master/language/) folder, you'll find many translations for PHPMailer error messages that you may encounter. Their filenames contain [ISO 639-1](http://en.wikipedia.org/wiki/ISO_639-1) language code for the translations, for example `fr` for French. To specify a language, you need to tell PHPMailer which one to use, like this:
```php ```php
//To load the French version //To load the French version
@@ -175,9 +178,9 @@ Please disclose any vulnerabilities found responsibly report security issues
See [SECURITY](https://github.com/PHPMailer/PHPMailer/tree/master/SECURITY.md) and [PHPMailer's security advisories on GitHub](https://github.com/PHPMailer/PHPMailer/security). See [SECURITY](https://github.com/PHPMailer/PHPMailer/tree/master/SECURITY.md) and [PHPMailer's security advisories on GitHub](https://github.com/PHPMailer/PHPMailer/security).
## Contributing ## Contributing
Please submit bug reports, suggestions and pull requests to the [GitHub issue tracker](https://github.com/PHPMailer/PHPMailer/issues). Please submit bug reports, suggestions, and pull requests to the [GitHub issue tracker](https://github.com/PHPMailer/PHPMailer/issues).
We're particularly interested in fixing edge-cases, expanding test coverage and updating translations. We're particularly interested in fixing edge cases, expanding test coverage, and updating translations.
If you found a mistake in the docs, or want to add something, go ahead and amend the wiki anyone can edit it. If you found a mistake in the docs, or want to add something, go ahead and amend the wiki anyone can edit it.
@@ -201,7 +204,7 @@ Donations are very welcome, whether in beer 🍺, T-shirts 👕, or cold, hard c
Available as part of the Tidelift Subscription. Available as part of the Tidelift Subscription.
The maintainers of PHPMailer and thousands of other packages are working with Tidelift to deliver commercial The maintainers of PHPMailer and thousands of other packages are working with Tidelift to deliver commercial
support and maintenance for the open source packages you use to build your applications. Save time, reduce risk, and support and maintenance for the open-source packages you use to build your applications. Save time, reduce risk, and
improve code health, while paying the maintainers of the exact packages you improve code health, while paying the maintainers of the exact packages you
use. [Learn more.](https://tidelift.com/subscription/pkg/packagist-phpmailer-phpmailer?utm_source=packagist-phpmailer-phpmailer&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) use. [Learn more.](https://tidelift.com/subscription/pkg/packagist-phpmailer-phpmailer?utm_source=packagist-phpmailer-phpmailer&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)
@@ -219,9 +222,9 @@ See [changelog](changelog.md).
### What's changed since moving from SourceForge? ### What's changed since moving from SourceForge?
- Official successor to the SourceForge and Google Code projects. - Official successor to the SourceForge and Google Code projects.
- Test suite. - Test suite.
- Continuous integration with Github Actions. - Continuous integration with GitHub Actions.
- Composer support. - Composer support.
- Public development. - Public development.
- Additional languages and language strings. - Additional languages and language strings.
- CRAM-MD5 authentication support. - CRAM-MD5 authentication support.
- Preserves full repo history of authors, commits and branches from the original SourceForge project. - Preserves full repo history of authors, commits, and branches from the original SourceForge project.

View File

@@ -1 +1 @@
6.6.0 6.7.1

View File

@@ -37,21 +37,23 @@
"ext-hash": "*" "ext-hash": "*"
}, },
"require-dev": { "require-dev": {
"dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", "dealerdirect/phpcodesniffer-composer-installer": "^0.7.2",
"doctrine/annotations": "^1.2", "doctrine/annotations": "^1.2.6 || ^1.13.3",
"php-parallel-lint/php-console-highlighter": "^0.5.0", "php-parallel-lint/php-console-highlighter": "^1.0.0",
"php-parallel-lint/php-parallel-lint": "^1.3.1", "php-parallel-lint/php-parallel-lint": "^1.3.2",
"phpcompatibility/php-compatibility": "^9.3.5", "phpcompatibility/php-compatibility": "^9.3.5",
"roave/security-advisories": "dev-latest", "roave/security-advisories": "dev-latest",
"squizlabs/php_codesniffer": "^3.6.2", "squizlabs/php_codesniffer": "^3.7.1",
"yoast/phpunit-polyfills": "^1.0.0" "yoast/phpunit-polyfills": "^1.0.4"
}, },
"suggest": { "suggest": {
"ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses", "ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses",
"ext-openssl": "Needed for secure SMTP sending and DKIM signing",
"greew/oauth2-azure-provider": "Needed for Microsoft Azure XOAUTH2 authentication",
"hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication", "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication",
"league/oauth2-google": "Needed for Google XOAUTH2 authentication", "league/oauth2-google": "Needed for Google XOAUTH2 authentication",
"psr/log": "For optional PSR-3 debug logging", "psr/log": "For optional PSR-3 debug logging",
"stevenmaguire/oauth2-microsoft": "Needed for Microsoft XOAUTH2 authentication", "thenetworg/oauth2-azure": "Needed for Microsoft XOAUTH2 authentication",
"symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)" "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)"
}, },
"autoload": { "autoload": {
@@ -70,7 +72,7 @@
"test": "./vendor/bin/phpunit --no-coverage", "test": "./vendor/bin/phpunit --no-coverage",
"coverage": "./vendor/bin/phpunit", "coverage": "./vendor/bin/phpunit",
"lint": [ "lint": [
"@php ./vendor/php-parallel-lint/php-parallel-lint/parallel-lint . -e php,phps --exclude vendor --exclude .git --exclude build" "@php ./vendor/php-parallel-lint/php-parallel-lint/parallel-lint . --show-deprecated -e php,phps --exclude vendor --exclude .git --exclude build"
] ]
} }
} }

View File

@@ -44,14 +44,31 @@ use League\OAuth2\Client\Provider\Google;
use Hayageek\OAuth2\Client\Provider\Yahoo; use Hayageek\OAuth2\Client\Provider\Yahoo;
//@see https://github.com/stevenmaguire/oauth2-microsoft //@see https://github.com/stevenmaguire/oauth2-microsoft
use Stevenmaguire\OAuth2\Client\Provider\Microsoft; use Stevenmaguire\OAuth2\Client\Provider\Microsoft;
//@see https://github.com/greew/oauth2-azure-provider
use Greew\OAuth2\Client\Provider\Azure;
if (!isset($_GET['code']) && !isset($_GET['provider'])) { if (!isset($_GET['code']) && !isset($_POST['provider'])) {
?> ?>
<html> <html>
<body>Select Provider:<br> <body>
<a href='?provider=Google'>Google</a><br> <form method="post">
<a href='?provider=Yahoo'>Yahoo</a><br> <h1>Select Provider</h1>
<a href='?provider=Microsoft'>Microsoft/Outlook/Hotmail/Live/Office365</a><br> <input type="radio" name="provider" value="Google" id="providerGoogle">
<label for="providerGoogle">Google</label><br>
<input type="radio" name="provider" value="Yahoo" id="providerYahoo">
<label for="providerYahoo">Yahoo</label><br>
<input type="radio" name="provider" value="Microsoft" id="providerMicrosoft">
<label for="providerMicrosoft">Microsoft</label><br>
<input type="radio" name="provider" value="Azure" id="providerAzure">
<label for="providerAzure">Azure</label><br>
<h1>Enter id and secret</h1>
<p>These details are obtained by setting up an app in your provider's developer console.
</p>
<p>ClientId: <input type="text" name="clientId"><p>
<p>ClientSecret: <input type="text" name="clientSecret"></p>
<p>TenantID (only relevant for Azure): <input type="text" name="tenantId"></p>
<input type="submit" value="Continue">
</form>
</body> </body>
</html> </html>
<?php <?php
@@ -63,21 +80,29 @@ require 'vendor/autoload.php';
session_start(); session_start();
$providerName = ''; $providerName = '';
$clientId = '';
$clientSecret = '';
$tenantId = '';
if (array_key_exists('provider', $_GET)) { if (array_key_exists('provider', $_POST)) {
$providerName = $_GET['provider']; $providerName = $_POST['provider'];
$clientId = $_POST['clientId'];
$clientSecret = $_POST['clientSecret'];
$tenantId = $_POST['tenantId'];
$_SESSION['provider'] = $providerName; $_SESSION['provider'] = $providerName;
$_SESSION['clientId'] = $clientId;
$_SESSION['clientSecret'] = $clientSecret;
$_SESSION['tenantId'] = $tenantId;
} elseif (array_key_exists('provider', $_SESSION)) { } elseif (array_key_exists('provider', $_SESSION)) {
$providerName = $_SESSION['provider']; $providerName = $_SESSION['provider'];
} $clientId = $_SESSION['clientId'];
if (!in_array($providerName, ['Google', 'Microsoft', 'Yahoo'])) { $clientSecret = $_SESSION['clientSecret'];
exit('Only Google, Microsoft and Yahoo OAuth2 providers are currently supported in this script.'); $tenantId = $_SESSION['tenantId'];
} }
//These details are obtained by setting up an app in the Google developer console, //If you don't want to use the built-in form, set your client id and secret here
//or whichever provider you're using. //$clientId = 'RANDOMCHARS-----duv1n2.apps.googleusercontent.com';
$clientId = 'RANDOMCHARS-----duv1n2.apps.googleusercontent.com'; //$clientSecret = 'RANDOMCHARS-----lGyjPcRtvP';
$clientSecret = 'RANDOMCHARS-----lGyjPcRtvP';
//If this automatic URL doesn't work, set it yourself manually to the URL of this script //If this automatic URL doesn't work, set it yourself manually to the URL of this script
$redirectUri = (isset($_SERVER['HTTPS']) ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']; $redirectUri = (isset($_SERVER['HTTPS']) ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
@@ -114,6 +139,17 @@ switch ($providerName) {
] ]
]; ];
break; break;
case 'Azure':
$params['tenantId'] = $tenantId;
$provider = new Azure($params);
$options = [
'scope' => [
'https://outlook.office.com/SMTP.Send',
'offline_access'
]
];
break;
} }
if (null === $provider) { if (null === $provider) {

View File

@@ -1,27 +0,0 @@
<?php
/**
* Chinese PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer
* @author LiuXin <http://www.80x86.cn/blog/>
*/
$PHPMAILER_LANG['authenticate'] = 'SMTP 错误:身份验证失败。';
$PHPMAILER_LANG['connect_host'] = 'SMTP 错误: 不能连接SMTP主机。';
$PHPMAILER_LANG['data_not_accepted'] = 'SMTP 错误: 数据不可接受。';
//$PHPMAILER_LANG['empty_message'] = 'Message body empty';
$PHPMAILER_LANG['encoding'] = '未知编码:';
$PHPMAILER_LANG['execute'] = '不能执行: ';
$PHPMAILER_LANG['file_access'] = '不能访问文件:';
$PHPMAILER_LANG['file_open'] = '文件错误:不能打开文件:';
$PHPMAILER_LANG['from_failed'] = '下面的发送地址邮件发送失败了: ';
$PHPMAILER_LANG['instantiate'] = '不能实现mail方法。';
//$PHPMAILER_LANG['invalid_address'] = 'Invalid address: ';
$PHPMAILER_LANG['mailer_not_supported'] = ' 您所选择的发送邮件的方法并不支持。';
$PHPMAILER_LANG['provide_address'] = '您必须提供至少一个 收信人的email地址。';
$PHPMAILER_LANG['recipients_failed'] = 'SMTP 错误: 下面的 收件人失败了: ';
//$PHPMAILER_LANG['signing'] = 'Signing Error: ';
//$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() failed.';
//$PHPMAILER_LANG['smtp_error'] = 'SMTP server error: ';
//$PHPMAILER_LANG['variable_set'] = 'Cannot set or reset variable: ';
//$PHPMAILER_LANG['extension_missing'] = 'Extension missing: ';

View File

@@ -14,16 +14,22 @@ $PHPMAILER_LANG['data_not_accepted'] = 'SMTP fejl: Data blev ikke accepteret.
$PHPMAILER_LANG['empty_message'] = 'Meddelelsen er uden indhold'; $PHPMAILER_LANG['empty_message'] = 'Meddelelsen er uden indhold';
$PHPMAILER_LANG['encoding'] = 'Ukendt encode-format: '; $PHPMAILER_LANG['encoding'] = 'Ukendt encode-format: ';
$PHPMAILER_LANG['execute'] = 'Kunne ikke afvikle: '; $PHPMAILER_LANG['execute'] = 'Kunne ikke afvikle: ';
$PHPMAILER_LANG['extension_missing'] = 'Udvidelse mangler: ';
$PHPMAILER_LANG['file_access'] = 'Kunne ikke tilgå filen: '; $PHPMAILER_LANG['file_access'] = 'Kunne ikke tilgå filen: ';
$PHPMAILER_LANG['file_open'] = 'Fil fejl: Kunne ikke åbne filen: '; $PHPMAILER_LANG['file_open'] = 'Fil fejl: Kunne ikke åbne filen: ';
$PHPMAILER_LANG['from_failed'] = 'Følgende afsenderadresse er forkert: '; $PHPMAILER_LANG['from_failed'] = 'Følgende afsenderadresse er forkert: ';
$PHPMAILER_LANG['instantiate'] = 'Email funktionen kunne ikke initialiseres.'; $PHPMAILER_LANG['instantiate'] = 'Email funktionen kunne ikke initialiseres.';
$PHPMAILER_LANG['invalid_address'] = 'Udgyldig adresse: '; $PHPMAILER_LANG['invalid_address'] = 'Udgyldig adresse: ';
$PHPMAILER_LANG['invalid_header'] = 'Ugyldig header navn eller værdi';
$PHPMAILER_LANG['invalid_hostentry'] = 'Ugyldig hostentry: ';
$PHPMAILER_LANG['invalid_host'] = 'Ugyldig vært: ';
$PHPMAILER_LANG['mailer_not_supported'] = ' mailer understøttes ikke.'; $PHPMAILER_LANG['mailer_not_supported'] = ' mailer understøttes ikke.';
$PHPMAILER_LANG['provide_address'] = 'Indtast mindst en modtagers email adresse.'; $PHPMAILER_LANG['provide_address'] = 'Indtast mindst en modtagers email adresse.';
$PHPMAILER_LANG['recipients_failed'] = 'SMTP fejl: Følgende modtagere er forkerte: '; $PHPMAILER_LANG['recipients_failed'] = 'SMTP fejl: Følgende modtagere fejlede: ';
$PHPMAILER_LANG['signing'] = 'Signeringsfejl: '; $PHPMAILER_LANG['signing'] = 'Signeringsfejl: ';
$PHPMAILER_LANG['smtp_code'] = 'SMTP kode: ';
$PHPMAILER_LANG['smtp_code_ex'] = 'Yderligere SMTP info: ';
$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() fejlede.'; $PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() fejlede.';
$PHPMAILER_LANG['smtp_detail'] = 'Detalje: ';
$PHPMAILER_LANG['smtp_error'] = 'SMTP server fejl: '; $PHPMAILER_LANG['smtp_error'] = 'SMTP server fejl: ';
$PHPMAILER_LANG['variable_set'] = 'Kunne ikke definere eller nulstille variablen: '; $PHPMAILER_LANG['variable_set'] = 'Kunne ikke definere eller nulstille variablen: ';
$PHPMAILER_LANG['extension_missing'] = 'Udvidelse mangler: ';

View File

@@ -5,22 +5,29 @@
* @package PHPMailer * @package PHPMailer
*/ */
$PHPMAILER_LANG['authenticate'] = 'SMTP Σφάλμα: Αδυναμία πιστοποίησης (authentication).'; $PHPMAILER_LANG['authenticate'] = 'Σφάλμα SMTP: Αδυναμία πιστοποίησης.';
$PHPMAILER_LANG['connect_host'] = 'SMTP Σφάλμα: Αδυναμία σύνδεσης στον SMTP-Host.'; $PHPMAILER_LANG['buggy_php'] = 'Η έκδοση PHP που χρησιμοποιείτε παρουσιάζει σφάλμα που μπορεί να έχει ως αποτέλεσμα κατεστραμένα μηνύματα. Για να το διορθώσετε, αλλάξτε τον τρόπο αποστολής σε SMTP, απενεργοποιήστε την επιλογή mail.add_x_header στο αρχείο php.ini, αλλάξτε λειτουργικό σε MacOS ή Linux ή αναβαθμίστε την PHP σε έκδοση 7.0.17+ ή 7.1.3+.';
$PHPMAILER_LANG['data_not_accepted'] = 'SMTP Σφάλμα: Τα δεδομένα δεν έγιναν αποδεκτά.'; $PHPMAILER_LANG['connect_host'] = 'Σφάλμα SMTP: Αδυναμία σύνδεσης με τον φιλοξενητή SMTP.';
$PHPMAILER_LANG['empty_message'] = 'Το E-Mail δεν έχει περιεχόμενο .'; $PHPMAILER_LANG['data_not_accepted'] = 'Σφάλμα SMTP: Μη αποδεκτά δεδομένα.';
$PHPMAILER_LANG['encoding'] = 'Αγνωστο Encoding-Format: '; $PHPMAILER_LANG['empty_message'] = 'Η ηλεκτρονική επιστολή δεν έχει περιεχόμενο.';
$PHPMAILER_LANG['execute'] = 'Αδυναμία εκτέλεσης ακόλουθης εντολής: '; $PHPMAILER_LANG['encoding'] = 'Άγνωστη μορφή κωδικοποίησης: ';
$PHPMAILER_LANG['file_access'] = 'Αδυναμία προσπέλασης του αρχείου: '; $PHPMAILER_LANG['execute'] = 'Αδυναμία εκτέλεσης: ';
$PHPMAILER_LANG['file_open'] = 'Σφάλμα Αρχείου: Δεν είναι δυνατό το άνοιγμα του ακόλουθου αρχείου: '; $PHPMAILER_LANG['extension_missing'] = 'Απουσία επέκτασης: ';
$PHPMAILER_LANG['from_failed'] = 'Η παρακάτω διεύθυνση αποστολέα δεν είναι σωστή: '; $PHPMAILER_LANG['file_access'] = 'Αδυναμία πρόσβασης στο αρχείο: ';
$PHPMAILER_LANG['instantiate'] = 'Αδυναμία εκκίνησης Mail function.'; $PHPMAILER_LANG['file_open'] = 'Σφάλμα Αρχείου: Αδυναμία ανοίγματος αρχείου: ';
$PHPMAILER_LANG['invalid_address'] = 'Το μήνυμα δεν εστάλη, η διεύθυνση δεν είναι έγκυρη: '; $PHPMAILER_LANG['from_failed'] = 'Η ακόλουθη διεύθυνση αποστολέα δεν είναι σωστή: ';
$PHPMAILER_LANG['instantiate'] = 'Αδυναμία εκκίνησης συνάρτησης Mail.';
$PHPMAILER_LANG['invalid_address'] = 'Μη έγκυρη διεύθυνση: ';
$PHPMAILER_LANG['invalid_header'] = 'Μη έγκυρο όνομα κεφαλίδας ή τιμή';
$PHPMAILER_LANG['invalid_hostentry'] = 'Μη έγκυρη εισαγωγή φιλοξενητή: ';
$PHPMAILER_LANG['invalid_host'] = 'Μη έγκυρος φιλοξενητής: ';
$PHPMAILER_LANG['mailer_not_supported'] = ' mailer δεν υποστηρίζεται.'; $PHPMAILER_LANG['mailer_not_supported'] = ' mailer δεν υποστηρίζεται.';
$PHPMAILER_LANG['provide_address'] = 'Παρακαλούμε δώστε τουλάχιστον μια e-mail διεύθυνση παραλήπτη.'; $PHPMAILER_LANG['provide_address'] = 'Δώστε τουλάχιστον μια ηλεκτρονική διεύθυνση παραλήπτη.';
$PHPMAILER_LANG['recipients_failed'] = 'SMTP Σφάλμα: Οι παρακάτω διευθύνσεις παραλήπτη δεν είναι έγκυρες: '; $PHPMAILER_LANG['recipients_failed'] = 'Σφάλμα SMTP: Οι παρακάτω διευθύνσεις παραλήπτη δεν είναι έγκυρες: ';
$PHPMAILER_LANG['signing'] = 'Σφάλμα υπογραφής: '; $PHPMAILER_LANG['signing'] = 'Σφάλμα υπογραφής: ';
$PHPMAILER_LANG['smtp_connect_failed'] = 'Αποτυχία σύνδεσης στον SMTP Server.'; $PHPMAILER_LANG['smtp_code'] = 'Κώδικάς SMTP: ';
$PHPMAILER_LANG['smtp_error'] = 'Σφάλμα από τον SMTP Server: '; $PHPMAILER_LANG['smtp_code_ex'] = 'Πρόσθετες πληροφορίες SMTP: ';
$PHPMAILER_LANG['variable_set'] = 'Αδυναμία ορισμού ή αρχικοποίησης μεταβλητής: '; $PHPMAILER_LANG['smtp_connect_failed'] = 'Αποτυχία σύνδεσης SMTP.';
//$PHPMAILER_LANG['extension_missing'] = 'Extension missing: '; $PHPMAILER_LANG['smtp_detail'] = 'Λεπτομέρεια: ';
$PHPMAILER_LANG['smtp_error'] = 'Σφάλμα με τον διακομιστή SMTP: ';
$PHPMAILER_LANG['variable_set'] = 'Αδυναμία ορισμού ή επαναφοράς μεταβλητής: ';

View File

@@ -4,6 +4,7 @@
* Spanish PHPMailer language file: refer to English translation for definitive list * Spanish PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer * @package PHPMailer
* @author Matt Sturdy <matt.sturdy@gmail.com> * @author Matt Sturdy <matt.sturdy@gmail.com>
* @author Crystopher Glodzienski Cardoso <crystopher.glodzienski@gmail.com>
*/ */
$PHPMAILER_LANG['authenticate'] = 'Error SMTP: Imposible autentificar.'; $PHPMAILER_LANG['authenticate'] = 'Error SMTP: Imposible autentificar.';
@@ -25,3 +26,6 @@ $PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() falló.';
$PHPMAILER_LANG['smtp_error'] = 'Error del servidor SMTP: '; $PHPMAILER_LANG['smtp_error'] = 'Error del servidor SMTP: ';
$PHPMAILER_LANG['variable_set'] = 'No se pudo configurar la variable: '; $PHPMAILER_LANG['variable_set'] = 'No se pudo configurar la variable: ';
$PHPMAILER_LANG['extension_missing'] = 'Extensión faltante: '; $PHPMAILER_LANG['extension_missing'] = 'Extensión faltante: ';
$PHPMAILER_LANG['smtp_code'] = 'Código del servidor SMTP: ';
$PHPMAILER_LANG['smtp_code_ex'] = 'Información adicional del servidor SMTP: ';
$PHPMAILER_LANG['invalid_header'] = 'Nombre o valor de encabezado no válido';

View File

@@ -0,0 +1,27 @@
<?php
/**
* Mongolian PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer
* @author @wispas
*/
$PHPMAILER_LANG['authenticate'] = 'Алдаа SMTP: Холбогдож чадсангүй.';
$PHPMAILER_LANG['connect_host'] = 'Алдаа SMTP: SMTP- сервертэй холбогдож болохгүй байна.';
$PHPMAILER_LANG['data_not_accepted'] = 'Алдаа SMTP: зөвшөөрөгдсөнгүй.';
$PHPMAILER_LANG['encoding'] = 'Тодорхойгүй кодчилол: ';
$PHPMAILER_LANG['execute'] = 'Коммандыг гүйцэтгэх боломжгүй байна: ';
$PHPMAILER_LANG['file_access'] = 'Файлд хандах боломжгүй байна: ';
$PHPMAILER_LANG['file_open'] = 'Файлын алдаа: файлыг нээх боломжгүй байна: ';
$PHPMAILER_LANG['from_failed'] = 'Илгээгчийн хаяг буруу байна: ';
$PHPMAILER_LANG['instantiate'] = 'Mail () функцийг ажиллуулах боломжгүй байна.';
$PHPMAILER_LANG['provide_address'] = 'Хүлээн авагчийн имэйл хаягийг оруулна уу.';
$PHPMAILER_LANG['mailer_not_supported'] = ' — мэйл серверийг дэмжсэнгүй.';
$PHPMAILER_LANG['recipients_failed'] = 'Алдаа SMTP: ийм хаягийг илгээж чадсангүй: ';
$PHPMAILER_LANG['empty_message'] = 'Хоосон мессэж';
$PHPMAILER_LANG['invalid_address'] = 'И-Мэйл буруу форматтай тул илгээх боломжгүй: ';
$PHPMAILER_LANG['signing'] = 'Гарын үсгийн алдаа: ';
$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP сервертэй холбогдоход алдаа гарлаа';
$PHPMAILER_LANG['smtp_error'] = 'SMTP серверийн алдаа: ';
$PHPMAILER_LANG['variable_set'] = 'Хувьсагчийг тохируулах эсвэл дахин тохируулах боломжгүй байна: ';
$PHPMAILER_LANG['extension_missing'] = 'Өргөтгөл байхгүй: ';

View File

@@ -9,19 +9,18 @@ $PHPMAILER_LANG['authenticate'] = 'Błąd SMTP: Nie można przeprowadzi
$PHPMAILER_LANG['connect_host'] = 'Błąd SMTP: Nie można połączyć się z wybranym hostem.'; $PHPMAILER_LANG['connect_host'] = 'Błąd SMTP: Nie można połączyć się z wybranym hostem.';
$PHPMAILER_LANG['data_not_accepted'] = 'Błąd SMTP: Dane nie zostały przyjęte.'; $PHPMAILER_LANG['data_not_accepted'] = 'Błąd SMTP: Dane nie zostały przyjęte.';
$PHPMAILER_LANG['empty_message'] = 'Wiadomość jest pusta.'; $PHPMAILER_LANG['empty_message'] = 'Wiadomość jest pusta.';
$PHPMAILER_LANG['encoding'] = 'Nieznany sposób kodowania znaków: '; $PHPMAILER_LANG['encoding'] = 'Błędny sposób kodowania znaków: ';
$PHPMAILER_LANG['execute'] = 'Nie można uruchomić: '; $PHPMAILER_LANG['execute'] = 'Nie można uruchomić: ';
$PHPMAILER_LANG['file_access'] = 'Brak dostępu do pliku: '; $PHPMAILER_LANG['file_access'] = 'Brak dostępu do pliku: ';
$PHPMAILER_LANG['file_open'] = 'Nie można otworzyć pliku: '; $PHPMAILER_LANG['file_open'] = 'Nie można otworzyć pliku: ';
$PHPMAILER_LANG['from_failed'] = 'Następujący adres Nadawcy jest nieprawidłowy: '; $PHPMAILER_LANG['from_failed'] = 'Następujący adres nadawcy jest nieprawidłowy lub nie istnieje: ';
$PHPMAILER_LANG['instantiate'] = 'Nie można wywołać funkcji mail(). Sprawdź konfigurację serwera.'; $PHPMAILER_LANG['instantiate'] = 'Nie można wywołać funkcji mail(). Sprawdź konfigurację serwera.';
$PHPMAILER_LANG['invalid_address'] = 'Nie można wysłać wiadomości, ' . $PHPMAILER_LANG['invalid_address'] = 'Nie można wysłać wiadomości, ' . 'następujący adres odbiorcy jest nieprawidłowy lub nie istnieje: ';
'następujący adres Odbiorcy jest nieprawidłowy: '; $PHPMAILER_LANG['provide_address'] = 'Należy podać prawidłowy adres email odbiorcy.';
$PHPMAILER_LANG['provide_address'] = 'Należy podać prawidłowy adres email Odbiorcy.';
$PHPMAILER_LANG['mailer_not_supported'] = 'Wybrana metoda wysyłki wiadomości nie jest obsługiwana.'; $PHPMAILER_LANG['mailer_not_supported'] = 'Wybrana metoda wysyłki wiadomości nie jest obsługiwana.';
$PHPMAILER_LANG['recipients_failed'] = 'Błąd SMTP: Następujący odbiorcy są nieprawidłowi: '; $PHPMAILER_LANG['recipients_failed'] = 'Błąd SMTP: Następujący odbiorcy są nieprawidłowi lub nie istnieją: ';
$PHPMAILER_LANG['signing'] = 'Błąd podpisywania wiadomości: '; $PHPMAILER_LANG['signing'] = 'Błąd podpisywania wiadomości: ';
$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() zakończone niepowodzeniem.'; $PHPMAILER_LANG['smtp_connect_failed'] = 'Wywołanie funkcji SMTP Connect() zostało zakończone niepowodzeniem.';
$PHPMAILER_LANG['smtp_error'] = 'Błąd SMTP: '; $PHPMAILER_LANG['smtp_error'] = 'Błąd SMTP: ';
$PHPMAILER_LANG['variable_set'] = 'Nie można ustawić lub zmodyfikować zmiennej: '; $PHPMAILER_LANG['variable_set'] = 'Nie można ustawić lub zmodyfikować zmiennej: ';
$PHPMAILER_LANG['extension_missing'] = 'Brakujące rozszerzenie: '; $PHPMAILER_LANG['extension_missing'] = 'Brakujące rozszerzenie: ';

View File

@@ -350,8 +350,8 @@ class PHPMailer
public $Password = ''; public $Password = '';
/** /**
* SMTP auth type. * SMTP authentication type. Options are CRAM-MD5, LOGIN, PLAIN, XOAUTH2.
* Options are CRAM-MD5, LOGIN, PLAIN, XOAUTH2, attempted in that order if not specified. * If not specified, the first one from that list that the server supports will be selected.
* *
* @var string * @var string
*/ */
@@ -750,7 +750,7 @@ class PHPMailer
* *
* @var string * @var string
*/ */
const VERSION = '6.6.0'; const VERSION = '6.7.1';
/** /**
* Error severity: message only, continue processing. * Error severity: message only, continue processing.
@@ -858,7 +858,7 @@ class PHPMailer
private function mailPassthru($to, $subject, $body, $header, $params) private function mailPassthru($to, $subject, $body, $header, $params)
{ {
//Check overloading of mail function to avoid double-encoding //Check overloading of mail function to avoid double-encoding
if (ini_get('mbstring.func_overload') & 1) { if ((int)ini_get('mbstring.func_overload') & 1) {
$subject = $this->secureHeader($subject); $subject = $this->secureHeader($subject);
} else { } else {
$subject = $this->encodeHeader($this->secureHeader($subject)); $subject = $this->encodeHeader($this->secureHeader($subject));
@@ -1066,8 +1066,8 @@ class PHPMailer
* Addresses that have been added already return false, but do not throw exceptions. * Addresses that have been added already return false, but do not throw exceptions.
* *
* @param string $kind One of 'to', 'cc', 'bcc', or 'ReplyTo' * @param string $kind One of 'to', 'cc', 'bcc', or 'ReplyTo'
* @param string $address The email address to send, resp. to reply to * @param string $address The email address
* @param string $name * @param string $name An optional username associated with the address
* *
* @throws Exception * @throws Exception
* *
@@ -1075,9 +1075,11 @@ class PHPMailer
*/ */
protected function addOrEnqueueAnAddress($kind, $address, $name) protected function addOrEnqueueAnAddress($kind, $address, $name)
{ {
$address = trim($address); $pos = false;
$name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim if ($address !== null) {
$pos = strrpos($address, '@'); $address = trim($address);
$pos = strrpos($address, '@');
}
if (false === $pos) { if (false === $pos) {
//At-sign is missing. //At-sign is missing.
$error_message = sprintf( $error_message = sprintf(
@@ -1094,8 +1096,14 @@ class PHPMailer
return false; return false;
} }
if ($name !== null && is_string($name)) {
$name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim
} else {
$name = '';
}
$params = [$kind, $address, $name]; $params = [$kind, $address, $name];
//Enqueue addresses with IDN until we know the PHPMailer::$CharSet. //Enqueue addresses with IDN until we know the PHPMailer::$CharSet.
//Domain is assumed to be whatever is after the last @ symbol in the address
if (static::idnSupported() && $this->has8bitChars(substr($address, ++$pos))) { if (static::idnSupported() && $this->has8bitChars(substr($address, ++$pos))) {
if ('Reply-To' !== $kind) { if ('Reply-To' !== $kind) {
if (!array_key_exists($address, $this->RecipientsQueue)) { if (!array_key_exists($address, $this->RecipientsQueue)) {
@@ -1116,6 +1124,22 @@ class PHPMailer
return call_user_func_array([$this, 'addAnAddress'], $params); return call_user_func_array([$this, 'addAnAddress'], $params);
} }
/**
* Set the boundaries to use for delimiting MIME parts.
* If you override this, ensure you set all 3 boundaries to unique values.
* The default boundaries include a "=_" sequence which cannot occur in quoted-printable bodies,
* as suggested by https://www.rfc-editor.org/rfc/rfc2045#section-6.7
*
* @return void
*/
public function setBoundaries()
{
$this->uniqueid = $this->generateId();
$this->boundary[1] = 'b1=_' . $this->uniqueid;
$this->boundary[2] = 'b2=_' . $this->uniqueid;
$this->boundary[3] = 'b3=_' . $this->uniqueid;
}
/** /**
* Add an address to one of the recipient arrays or to the ReplyTo array. * Add an address to one of the recipient arrays or to the ReplyTo array.
* Addresses that have been added already return false, but do not throw exceptions. * Addresses that have been added already return false, but do not throw exceptions.
@@ -1280,7 +1304,7 @@ class PHPMailer
*/ */
public function setFrom($address, $name = '', $auto = true) public function setFrom($address, $name = '', $auto = true)
{ {
$address = trim($address); $address = trim((string)$address);
$name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim
//Don't validate now addresses with IDN. Will be done in send(). //Don't validate now addresses with IDN. Will be done in send().
$pos = strrpos($address, '@'); $pos = strrpos($address, '@');
@@ -1547,17 +1571,17 @@ class PHPMailer
//Validate From, Sender, and ConfirmReadingTo addresses //Validate From, Sender, and ConfirmReadingTo addresses
foreach (['From', 'Sender', 'ConfirmReadingTo'] as $address_kind) { foreach (['From', 'Sender', 'ConfirmReadingTo'] as $address_kind) {
$this->$address_kind = trim($this->$address_kind); $this->{$address_kind} = trim($this->{$address_kind});
if (empty($this->$address_kind)) { if (empty($this->{$address_kind})) {
continue; continue;
} }
$this->$address_kind = $this->punyencodeAddress($this->$address_kind); $this->{$address_kind} = $this->punyencodeAddress($this->{$address_kind});
if (!static::validateAddress($this->$address_kind)) { if (!static::validateAddress($this->{$address_kind})) {
$error_message = sprintf( $error_message = sprintf(
'%s (%s): %s', '%s (%s): %s',
$this->lang('invalid_address'), $this->lang('invalid_address'),
$address_kind, $address_kind,
$this->$address_kind $this->{$address_kind}
); );
$this->setError($error_message); $this->setError($error_message);
$this->edebug($error_message); $this->edebug($error_message);
@@ -1657,17 +1681,17 @@ class PHPMailer
default: default:
$sendMethod = $this->Mailer . 'Send'; $sendMethod = $this->Mailer . 'Send';
if (method_exists($this, $sendMethod)) { if (method_exists($this, $sendMethod)) {
return $this->$sendMethod($this->MIMEHeader, $this->MIMEBody); return $this->{$sendMethod}($this->MIMEHeader, $this->MIMEBody);
} }
return $this->mailSend($this->MIMEHeader, $this->MIMEBody); return $this->mailSend($this->MIMEHeader, $this->MIMEBody);
} }
} catch (Exception $exc) { } catch (Exception $exc) {
if ($this->Mailer === 'smtp' && $this->SMTPKeepAlive == true) {
$this->smtp->reset();
}
$this->setError($exc->getMessage()); $this->setError($exc->getMessage());
$this->edebug($exc->getMessage()); $this->edebug($exc->getMessage());
if ($this->Mailer === 'smtp' && $this->SMTPKeepAlive == true && $this->smtp->connected()) {
$this->smtp->reset();
}
if ($this->exceptions) { if ($this->exceptions) {
throw $exc; throw $exc;
} }
@@ -1855,7 +1879,7 @@ class PHPMailer
if (!static::isPermittedPath($path)) { if (!static::isPermittedPath($path)) {
return false; return false;
} }
$readable = file_exists($path); $readable = is_file($path);
//If not a UNC path (expected to start with \\), check read permission, see #2069 //If not a UNC path (expected to start with \\), check read permission, see #2069
if (strpos($path, '\\\\') !== 0) { if (strpos($path, '\\\\') !== 0) {
$readable = $readable && is_readable($path); $readable = $readable && is_readable($path);
@@ -1883,7 +1907,14 @@ class PHPMailer
foreach ($this->to as $toaddr) { foreach ($this->to as $toaddr) {
$toArr[] = $this->addrFormat($toaddr); $toArr[] = $this->addrFormat($toaddr);
} }
$to = implode(', ', $toArr); $to = trim(implode(', ', $toArr));
//If there are no To-addresses (e.g. when sending only to BCC-addresses)
//the following should be added to get a correct DKIM-signature.
//Compare with $this->preSend()
if ($to === '') {
$to = 'undisclosed-recipients:;';
}
$params = null; $params = null;
//This sets the SMTP envelope sender which gets turned into a return-path header by the receiver //This sets the SMTP envelope sender which gets turned into a return-path header by the receiver
@@ -2086,6 +2117,9 @@ class PHPMailer
$this->smtp->setDebugLevel($this->SMTPDebug); $this->smtp->setDebugLevel($this->SMTPDebug);
$this->smtp->setDebugOutput($this->Debugoutput); $this->smtp->setDebugOutput($this->Debugoutput);
$this->smtp->setVerp($this->do_verp); $this->smtp->setVerp($this->do_verp);
if ($this->Host === null) {
$this->Host = 'localhost';
}
$hosts = explode(';', $this->Host); $hosts = explode(';', $this->Host);
$lastexception = null; $lastexception = null;
@@ -2192,7 +2226,8 @@ class PHPMailer
//As we've caught all exceptions, just report whatever the last one was //As we've caught all exceptions, just report whatever the last one was
if ($this->exceptions && null !== $lastexception) { if ($this->exceptions && null !== $lastexception) {
throw $lastexception; throw $lastexception;
} elseif ($this->exceptions) { }
if ($this->exceptions) {
// no exception was thrown, likely $this->smtp->connect() failed // no exception was thrown, likely $this->smtp->connect() failed
$message = $this->getSmtpErrorMessage('connect_host'); $message = $this->getSmtpErrorMessage('connect_host');
throw new Exception($message); throw new Exception($message);
@@ -2775,10 +2810,7 @@ class PHPMailer
{ {
$body = ''; $body = '';
//Create unique IDs and preset boundaries //Create unique IDs and preset boundaries
$this->uniqueid = $this->generateId(); $this->setBoundaries();
$this->boundary[1] = 'b1_' . $this->uniqueid;
$this->boundary[2] = 'b2_' . $this->uniqueid;
$this->boundary[3] = 'b3_' . $this->uniqueid;
if ($this->sign_key_file) { if ($this->sign_key_file) {
$body .= $this->getMailMIME() . static::$LE; $body .= $this->getMailMIME() . static::$LE;
@@ -2814,7 +2846,7 @@ class PHPMailer
$altBodyEncoding = static::ENCODING_QUOTED_PRINTABLE; $altBodyEncoding = static::ENCODING_QUOTED_PRINTABLE;
} }
//Use this as a preamble in all multipart message types //Use this as a preamble in all multipart message types
$mimepre = 'This is a multi-part message in MIME format.' . static::$LE . static::$LE; $mimepre = '';
switch ($this->message_type) { switch ($this->message_type) {
case 'inline': case 'inline':
$body .= $mimepre; $body .= $mimepre;
@@ -3050,6 +3082,18 @@ class PHPMailer
return $body; return $body;
} }
/**
* Get the boundaries that this message will use
* @return array
*/
public function getBoundaries()
{
if (empty($this->boundary)) {
$this->setBoundaries();
}
return $this->boundary;
}
/** /**
* Return the start of a message boundary. * Return the start of a message boundary.
* *
@@ -3705,20 +3749,21 @@ class PHPMailer
* These differ from 'regular' attachments in that they are intended to be * These differ from 'regular' attachments in that they are intended to be
* displayed inline with the message, not just attached for download. * displayed inline with the message, not just attached for download.
* This is used in HTML messages that embed the images * This is used in HTML messages that embed the images
* the HTML refers to using the $cid value. * the HTML refers to using the `$cid` value in `img` tags, for example `<img src="cid:mylogo">`.
* Never use a user-supplied path to a file! * Never use a user-supplied path to a file!
* *
* @param string $path Path to the attachment * @param string $path Path to the attachment
* @param string $cid Content ID of the attachment; Use this to reference * @param string $cid Content ID of the attachment; Use this to reference
* the content when using an embedded image in HTML * the content when using an embedded image in HTML
* @param string $name Overrides the attachment name * @param string $name Overrides the attachment filename
* @param string $encoding File encoding (see $Encoding) * @param string $encoding File encoding (see $Encoding) defaults to `base64`
* @param string $type File MIME type * @param string $type File MIME type (by default mapped from the `$path` filename's extension)
* @param string $disposition Disposition to use * @param string $disposition Disposition to use: `inline` (default) or `attachment`
* * (unlikely you want this {@see `addAttachment()`} instead)
* @throws Exception
* *
* @return bool True on successfully adding an attachment * @return bool True on successfully adding an attachment
* @throws Exception
*
*/ */
public function addEmbeddedImage( public function addEmbeddedImage(
$path, $path,
@@ -4096,12 +4141,8 @@ class PHPMailer
//Is it a valid IPv4 address? //Is it a valid IPv4 address?
return filter_var($host, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) !== false; return filter_var($host, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) !== false;
} }
if (filter_var('http://' . $host, FILTER_VALIDATE_URL) !== false) { //Is it a syntactically valid hostname (when embeded in a URL)?
//Is it a syntactically valid hostname? return filter_var('http://' . $host, FILTER_VALIDATE_URL) !== false;
return true;
}
return false;
} }
/** /**
@@ -4170,6 +4211,7 @@ class PHPMailer
* @param string $name Custom header name * @param string $name Custom header name
* @param string|null $value Header value * @param string|null $value Header value
* *
* @return bool True if a header was set successfully
* @throws Exception * @throws Exception
*/ */
public function addCustomHeader($name, $value = null) public function addCustomHeader($name, $value = null)
@@ -4464,6 +4506,7 @@ class PHPMailer
'ics' => 'text/calendar', 'ics' => 'text/calendar',
'xml' => 'text/xml', 'xml' => 'text/xml',
'xsl' => 'text/xml', 'xsl' => 'text/xml',
'csv' => 'text/csv',
'wmv' => 'video/x-ms-wmv', 'wmv' => 'video/x-ms-wmv',
'mpeg' => 'video/mpeg', 'mpeg' => 'video/mpeg',
'mpe' => 'video/mpeg', 'mpe' => 'video/mpeg',
@@ -4571,7 +4614,7 @@ class PHPMailer
public function set($name, $value = '') public function set($name, $value = '')
{ {
if (property_exists($this, $name)) { if (property_exists($this, $name)) {
$this->$name = $value; $this->{$name} = $value;
return true; return true;
} }
@@ -4618,15 +4661,27 @@ class PHPMailer
} }
/** /**
* Remove trailing breaks from a string. * Remove trailing whitespace from a string.
*
* @param string $text
*
* @return string The text to remove whitespace from
*/
public static function stripTrailingWSP($text)
{
return rtrim($text, " \r\n\t");
}
/**
* Strip trailing line breaks from a string.
* *
* @param string $text * @param string $text
* *
* @return string The text to remove breaks from * @return string The text to remove breaks from
*/ */
public static function stripTrailingWSP($text) public static function stripTrailingBreaks($text)
{ {
return rtrim($text, " \r\n\t"); return rtrim($text, "\r\n");
} }
/** /**
@@ -4792,7 +4847,7 @@ class PHPMailer
$body = static::normalizeBreaks($body, self::CRLF); $body = static::normalizeBreaks($body, self::CRLF);
//Reduce multiple trailing line breaks to a single one //Reduce multiple trailing line breaks to a single one
return static::stripTrailingWSP($body) . self::CRLF; return static::stripTrailingBreaks($body) . self::CRLF;
} }
/** /**

View File

@@ -46,7 +46,7 @@ class POP3
* *
* @var string * @var string
*/ */
const VERSION = '6.6.0'; const VERSION = '6.7.1';
/** /**
* Default POP3 port number. * Default POP3 port number.
@@ -337,7 +337,12 @@ class POP3
*/ */
public function disconnect() public function disconnect()
{ {
$this->sendString('QUIT'); // If could not connect at all, no need to disconnect
if ($this->pop_conn === false) {
return;
}
$this->sendString('QUIT' . static::LE);
// RFC 1939 shows POP3 server sending a +OK response to the QUIT command. // RFC 1939 shows POP3 server sending a +OK response to the QUIT command.
// Try to get it. Ignore any failures here. // Try to get it. Ignore any failures here.

View File

@@ -35,7 +35,7 @@ class SMTP
* *
* @var string * @var string
*/ */
const VERSION = '6.6.0'; const VERSION = '6.7.1';
/** /**
* SMTP line break constant. * SMTP line break constant.
@@ -682,7 +682,6 @@ class SMTP
*/ */
public function close() public function close()
{ {
$this->setError('');
$this->server_caps = null; $this->server_caps = null;
$this->helo_rply = null; $this->helo_rply = null;
if (is_resource($this->smtp_conn)) { if (is_resource($this->smtp_conn)) {
@@ -1037,7 +1036,10 @@ class SMTP
return false; return false;
} }
$this->setError(''); //Don't clear the error store when using keepalive
if ($command !== 'RSET') {
$this->setError('');
}
return true; return true;
} }

View File

@@ -35,7 +35,7 @@ class e_user_providerTest extends \Codeception\Test\Unit
$this->assertIsArray($result); $this->assertIsArray($result);
$this->assertContains("Facebook", $result); $this->assertContains("Facebook", $result);
$this->assertContains("Twitter", $result); $this->assertContains("Twitter", $result);
$this->assertCount(52, $result, $this->assertCount(48, $result,
"The number of Hybridauth providers has changed! If this is intentional, note the change " . "The number of Hybridauth providers has changed! If this is intentional, note the change " .
"in Hybridauth providers in the release changelog and update the count in this test." "in Hybridauth providers in the release changelog and update the count in this test."
); );
@@ -89,11 +89,11 @@ class e_user_providerTest extends \Codeception\Test\Unit
$result = e_user_provider::getSupplementalFieldsOf("Google"); $result = e_user_provider::getSupplementalFieldsOf("Google");
$this->assertTrue(array_key_exists('photo_size', $result)); $this->assertTrue(array_key_exists('photo_size', $result));
$result = e_user_provider::getSupplementalFieldsOf("Odnoklassniki"); /* $result = e_user_provider::getSupplementalFieldsOf("Odnoklassniki");
$this->assertTrue(array_key_exists('key', $result['keys'])); $this->assertTrue(array_key_exists('key', $result['keys']));
$this->assertTrue(array_key_exists('secret', $result['keys'])); $this->assertTrue(array_key_exists('secret', $result['keys']));
$this->assertIsNotArray($result['keys']['key']); $this->assertIsNotArray($result['keys']['key']);
$this->assertIsNotArray($result['keys']['secret']); $this->assertIsNotArray($result['keys']['secret']);*/
$result = e_user_provider::getSupplementalFieldsOf("StackExchange"); $result = e_user_provider::getSupplementalFieldsOf("StackExchange");
$this->assertTrue(array_key_exists('api_key', $result)); $this->assertTrue(array_key_exists('api_key', $result));
@@ -112,8 +112,8 @@ class e_user_providerTest extends \Codeception\Test\Unit
$this->assertTrue(array_key_exists('photo_size', $result)); $this->assertTrue(array_key_exists('photo_size', $result));
$this->assertIsNotArray($result['photo_size']); $this->assertIsNotArray($result['photo_size']);
$result = e_user_provider::getSupplementalFieldsOf("Vkontakte"); /* $result = e_user_provider::getSupplementalFieldsOf("Vkontakte");
$this->assertTrue(array_key_exists('photo_size', $result)); $this->assertTrue(array_key_exists('photo_size', $result));*/
} }
public function testNewSuppressExceptions() public function testNewSuppressExceptions()