From 092cd6e9cbd297781489d4a316cb8ad264fa6b4a Mon Sep 17 00:00:00 2001 From: Andrea Adamczyk Date: Mon, 28 Oct 2019 12:10:22 -0400 Subject: [PATCH 1/3] PMC-1333 --- composer.json | 4 +- composer.lock | 122 +++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 123 insertions(+), 3 deletions(-) diff --git a/composer.json b/composer.json index 11d6041e8..533f6eacc 100644 --- a/composer.json +++ b/composer.json @@ -50,7 +50,9 @@ "chumper/zipper": "^1.0", "php-imap/php-imap": "^3.0", "nikic/php-parser": "3.1.5", - "laravel/tinker": "^1.0" + "laravel/tinker": "^1.0", + "league/oauth2-client": "^2.4", + "league/oauth2-google": "^3.0" }, "require-dev": { "fzaninotto/faker": "^1.7", diff --git a/composer.lock b/composer.lock index e3e3e9590..0ddcf9836 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,8 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "2847484159397aa0646fb850bf14c857", - "content-hash": "6a5b008a3b908266bd5d0ff9b842eb9c", + "hash": "5b6ee9e869917ead9a2b4173803185c6", + "content-hash": "e87a4b0ee6d2684b8cb0ceb971b8524e", "packages": [ { "name": "bshaffer/oauth2-server-php", @@ -1393,6 +1393,124 @@ ], "time": "2019-06-18 20:09:29" }, + { + "name": "league/oauth2-client", + "version": "2.4.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/oauth2-client.git", + "reference": "cc114abc622a53af969e8664722e84ca36257530" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/oauth2-client/zipball/cc114abc622a53af969e8664722e84ca36257530", + "reference": "cc114abc622a53af969e8664722e84ca36257530", + "shasum": "" + }, + "require": { + "guzzlehttp/guzzle": "^6.0", + "paragonie/random_compat": "^1|^2|^9.99", + "php": "^5.6|^7.0" + }, + "require-dev": { + "eloquent/liberator": "^2.0", + "eloquent/phony-phpunit": "^1.0|^3.0", + "jakub-onderka/php-parallel-lint": "^0.9.2", + "phpunit/phpunit": "^5.7|^6.0", + "squizlabs/php_codesniffer": "^2.3|^3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\OAuth2\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alex Bilbie", + "email": "hello@alexbilbie.com", + "homepage": "http://www.alexbilbie.com", + "role": "Developer" + }, + { + "name": "Woody Gilk", + "homepage": "https://github.com/shadowhand", + "role": "Contributor" + } + ], + "description": "OAuth 2.0 Client Library", + "keywords": [ + "Authentication", + "SSO", + "authorization", + "identity", + "idp", + "oauth", + "oauth2", + "single sign on" + ], + "time": "2018-11-22 18:33:57" + }, + { + "name": "league/oauth2-google", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/oauth2-google.git", + "reference": "3290273029f7cc2a468aae68bad184479a23b9d2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/oauth2-google/zipball/3290273029f7cc2a468aae68bad184479a23b9d2", + "reference": "3290273029f7cc2a468aae68bad184479a23b9d2", + "shasum": "" + }, + "require": { + "league/oauth2-client": "^2.0" + }, + "require-dev": { + "eloquent/phony-phpunit": "^2.0", + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^6.0", + "squizlabs/php_codesniffer": "^2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\OAuth2\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Woody Gilk", + "email": "woody.gilk@gmail.com", + "homepage": "http://shadowhand.me" + } + ], + "description": "Google OAuth 2.0 Client Provider for The PHP League OAuth2-Client", + "keywords": [ + "Authentication", + "authorization", + "client", + "google", + "oauth", + "oauth2" + ], + "time": "2018-12-28 16:18:33" + }, { "name": "libchart/libchart", "version": "1.4.0", From 26306c4a935d890b6e1b203f48368f35a1ffa2c6 Mon Sep 17 00:00:00 2001 From: Andrea Adamczyk Date: Tue, 29 Oct 2019 09:09:27 -0400 Subject: [PATCH 2/3] PMC-1334 --- .../model/map/EmailServerMapBuilder.php | 8 + .../classes/model/om/BaseEmailServer.php | 176 +++++++++++++++++- .../classes/model/om/BaseEmailServerPeer.php | 36 +++- workflow/engine/config/schema.xml | 6 + workflow/engine/data/mysql/schema.sql | 3 + 5 files changed, 219 insertions(+), 10 deletions(-) diff --git a/workflow/engine/classes/model/map/EmailServerMapBuilder.php b/workflow/engine/classes/model/map/EmailServerMapBuilder.php index b9e5729a0..efba152f9 100644 --- a/workflow/engine/classes/model/map/EmailServerMapBuilder.php +++ b/workflow/engine/classes/model/map/EmailServerMapBuilder.php @@ -95,6 +95,14 @@ class EmailServerMapBuilder $tMap->addColumn('MESS_DEFAULT', 'MessDefault', 'int', CreoleTypes::INTEGER, true, null); + $tMap->addColumn('OAUTH_CLIENT_ID', 'OauthClientId', 'string', CreoleTypes::VARCHAR, true, 256); + + $tMap->addColumn('OAUTH_CLIENT_SECRET', 'OauthClientSecret', 'string', CreoleTypes::VARCHAR, true, 256); + + $tMap->addColumn('OAUTH_REFRESH_TOKEN', 'OauthRefreshToken', 'string', CreoleTypes::VARCHAR, true, 256); + + $tMap->addValidator('MESS_ENGINE', 'validValues', 'propel.validator.ValidValuesValidator', 'MAIL|PHPMAILER|XOAUTH2', 'Please enter a valid value for MESS_ENGINE'); + } // doBuild() } // EmailServerMapBuilder diff --git a/workflow/engine/classes/model/om/BaseEmailServer.php b/workflow/engine/classes/model/om/BaseEmailServer.php index 82716bab4..69cb5d10c 100644 --- a/workflow/engine/classes/model/om/BaseEmailServer.php +++ b/workflow/engine/classes/model/om/BaseEmailServer.php @@ -117,6 +117,24 @@ abstract class BaseEmailServer extends BaseObject implements Persistent */ protected $mess_default = 0; + /** + * The value for the oauth_client_id field. + * @var string + */ + protected $oauth_client_id = ''; + + /** + * The value for the oauth_client_secret field. + * @var string + */ + protected $oauth_client_secret = ''; + + /** + * The value for the oauth_refresh_token field. + * @var string + */ + protected $oauth_refresh_token = ''; + /** * Flag to prevent endless save loop, if this object is referenced * by another object which falls in this transaction. @@ -296,6 +314,39 @@ abstract class BaseEmailServer extends BaseObject implements Persistent return $this->mess_default; } + /** + * Get the [oauth_client_id] column value. + * + * @return string + */ + public function getOauthClientId() + { + + return $this->oauth_client_id; + } + + /** + * Get the [oauth_client_secret] column value. + * + * @return string + */ + public function getOauthClientSecret() + { + + return $this->oauth_client_secret; + } + + /** + * Get the [oauth_refresh_token] column value. + * + * @return string + */ + public function getOauthRefreshToken() + { + + return $this->oauth_refresh_token; + } + /** * Set the value of [mess_uid] column. * @@ -626,6 +677,72 @@ abstract class BaseEmailServer extends BaseObject implements Persistent } // setMessDefault() + /** + * Set the value of [oauth_client_id] column. + * + * @param string $v new value + * @return void + */ + public function setOauthClientId($v) + { + + // Since the native PHP type for this column is string, + // we will cast the input to a string (if it is not). + if ($v !== null && !is_string($v)) { + $v = (string) $v; + } + + if ($this->oauth_client_id !== $v || $v === '') { + $this->oauth_client_id = $v; + $this->modifiedColumns[] = EmailServerPeer::OAUTH_CLIENT_ID; + } + + } // setOauthClientId() + + /** + * Set the value of [oauth_client_secret] column. + * + * @param string $v new value + * @return void + */ + public function setOauthClientSecret($v) + { + + // Since the native PHP type for this column is string, + // we will cast the input to a string (if it is not). + if ($v !== null && !is_string($v)) { + $v = (string) $v; + } + + if ($this->oauth_client_secret !== $v || $v === '') { + $this->oauth_client_secret = $v; + $this->modifiedColumns[] = EmailServerPeer::OAUTH_CLIENT_SECRET; + } + + } // setOauthClientSecret() + + /** + * Set the value of [oauth_refresh_token] column. + * + * @param string $v new value + * @return void + */ + public function setOauthRefreshToken($v) + { + + // Since the native PHP type for this column is string, + // we will cast the input to a string (if it is not). + if ($v !== null && !is_string($v)) { + $v = (string) $v; + } + + if ($this->oauth_refresh_token !== $v || $v === '') { + $this->oauth_refresh_token = $v; + $this->modifiedColumns[] = EmailServerPeer::OAUTH_REFRESH_TOKEN; + } + + } // setOauthRefreshToken() + /** * Hydrates (populates) the object variables with values from the database resultset. * @@ -673,12 +790,18 @@ abstract class BaseEmailServer extends BaseObject implements Persistent $this->mess_default = $rs->getInt($startcol + 14); + $this->oauth_client_id = $rs->getString($startcol + 15); + + $this->oauth_client_secret = $rs->getString($startcol + 16); + + $this->oauth_refresh_token = $rs->getString($startcol + 17); + $this->resetModified(); $this->setNew(false); // FIXME - using NUM_COLUMNS may be clearer. - return $startcol + 15; // 15 = EmailServerPeer::NUM_COLUMNS - EmailServerPeer::NUM_LAZY_LOAD_COLUMNS). + return $startcol + 18; // 18 = EmailServerPeer::NUM_COLUMNS - EmailServerPeer::NUM_LAZY_LOAD_COLUMNS). } catch (Exception $e) { throw new PropelException("Error populating EmailServer object", $e); @@ -927,6 +1050,15 @@ abstract class BaseEmailServer extends BaseObject implements Persistent case 14: return $this->getMessDefault(); break; + case 15: + return $this->getOauthClientId(); + break; + case 16: + return $this->getOauthClientSecret(); + break; + case 17: + return $this->getOauthRefreshToken(); + break; default: return null; break; @@ -962,6 +1094,9 @@ abstract class BaseEmailServer extends BaseObject implements Persistent $keys[12] => $this->getMessTrySendInmediatly(), $keys[13] => $this->getMailTo(), $keys[14] => $this->getMessDefault(), + $keys[15] => $this->getOauthClientId(), + $keys[16] => $this->getOauthClientSecret(), + $keys[17] => $this->getOauthRefreshToken(), ); return $result; } @@ -1038,6 +1173,15 @@ abstract class BaseEmailServer extends BaseObject implements Persistent case 14: $this->setMessDefault($value); break; + case 15: + $this->setOauthClientId($value); + break; + case 16: + $this->setOauthClientSecret($value); + break; + case 17: + $this->setOauthRefreshToken($value); + break; } // switch() } @@ -1121,6 +1265,18 @@ abstract class BaseEmailServer extends BaseObject implements Persistent $this->setMessDefault($arr[$keys[14]]); } + if (array_key_exists($keys[15], $arr)) { + $this->setOauthClientId($arr[$keys[15]]); + } + + if (array_key_exists($keys[16], $arr)) { + $this->setOauthClientSecret($arr[$keys[16]]); + } + + if (array_key_exists($keys[17], $arr)) { + $this->setOauthRefreshToken($arr[$keys[17]]); + } + } /** @@ -1192,6 +1348,18 @@ abstract class BaseEmailServer extends BaseObject implements Persistent $criteria->add(EmailServerPeer::MESS_DEFAULT, $this->mess_default); } + if ($this->isColumnModified(EmailServerPeer::OAUTH_CLIENT_ID)) { + $criteria->add(EmailServerPeer::OAUTH_CLIENT_ID, $this->oauth_client_id); + } + + if ($this->isColumnModified(EmailServerPeer::OAUTH_CLIENT_SECRET)) { + $criteria->add(EmailServerPeer::OAUTH_CLIENT_SECRET, $this->oauth_client_secret); + } + + if ($this->isColumnModified(EmailServerPeer::OAUTH_REFRESH_TOKEN)) { + $criteria->add(EmailServerPeer::OAUTH_REFRESH_TOKEN, $this->oauth_refresh_token); + } + return $criteria; } @@ -1274,6 +1442,12 @@ abstract class BaseEmailServer extends BaseObject implements Persistent $copyObj->setMessDefault($this->mess_default); + $copyObj->setOauthClientId($this->oauth_client_id); + + $copyObj->setOauthClientSecret($this->oauth_client_secret); + + $copyObj->setOauthRefreshToken($this->oauth_refresh_token); + $copyObj->setNew(true); diff --git a/workflow/engine/classes/model/om/BaseEmailServerPeer.php b/workflow/engine/classes/model/om/BaseEmailServerPeer.php index a020a0763..7486104a6 100644 --- a/workflow/engine/classes/model/om/BaseEmailServerPeer.php +++ b/workflow/engine/classes/model/om/BaseEmailServerPeer.php @@ -25,7 +25,7 @@ abstract class BaseEmailServerPeer const CLASS_DEFAULT = 'classes.model.EmailServer'; /** The total number of columns. */ - const NUM_COLUMNS = 15; + const NUM_COLUMNS = 18; /** The number of lazy-loaded columns. */ const NUM_LAZY_LOAD_COLUMNS = 0; @@ -76,6 +76,15 @@ abstract class BaseEmailServerPeer /** the column name for the MESS_DEFAULT field */ const MESS_DEFAULT = 'EMAIL_SERVER.MESS_DEFAULT'; + /** the column name for the OAUTH_CLIENT_ID field */ + const OAUTH_CLIENT_ID = 'EMAIL_SERVER.OAUTH_CLIENT_ID'; + + /** the column name for the OAUTH_CLIENT_SECRET field */ + const OAUTH_CLIENT_SECRET = 'EMAIL_SERVER.OAUTH_CLIENT_SECRET'; + + /** the column name for the OAUTH_REFRESH_TOKEN field */ + const OAUTH_REFRESH_TOKEN = 'EMAIL_SERVER.OAUTH_REFRESH_TOKEN'; + /** The PHP to DB Name Mapping */ private static $phpNameMap = null; @@ -87,10 +96,10 @@ abstract class BaseEmailServerPeer * e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id' */ private static $fieldNames = array ( - BasePeer::TYPE_PHPNAME => array ('MessUid', 'MessEngine', 'MessServer', 'MessPort', 'MessIncomingServer', 'MessIncomingPort', 'MessRauth', 'MessAccount', 'MessPassword', 'MessFromMail', 'MessFromName', 'Smtpsecure', 'MessTrySendInmediatly', 'MailTo', 'MessDefault', ), - BasePeer::TYPE_COLNAME => array (EmailServerPeer::MESS_UID, EmailServerPeer::MESS_ENGINE, EmailServerPeer::MESS_SERVER, EmailServerPeer::MESS_PORT, EmailServerPeer::MESS_INCOMING_SERVER, EmailServerPeer::MESS_INCOMING_PORT, EmailServerPeer::MESS_RAUTH, EmailServerPeer::MESS_ACCOUNT, EmailServerPeer::MESS_PASSWORD, EmailServerPeer::MESS_FROM_MAIL, EmailServerPeer::MESS_FROM_NAME, EmailServerPeer::SMTPSECURE, EmailServerPeer::MESS_TRY_SEND_INMEDIATLY, EmailServerPeer::MAIL_TO, EmailServerPeer::MESS_DEFAULT, ), - BasePeer::TYPE_FIELDNAME => array ('MESS_UID', 'MESS_ENGINE', 'MESS_SERVER', 'MESS_PORT', 'MESS_INCOMING_SERVER', 'MESS_INCOMING_PORT', 'MESS_RAUTH', 'MESS_ACCOUNT', 'MESS_PASSWORD', 'MESS_FROM_MAIL', 'MESS_FROM_NAME', 'SMTPSECURE', 'MESS_TRY_SEND_INMEDIATLY', 'MAIL_TO', 'MESS_DEFAULT', ), - BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ) + BasePeer::TYPE_PHPNAME => array ('MessUid', 'MessEngine', 'MessServer', 'MessPort', 'MessIncomingServer', 'MessIncomingPort', 'MessRauth', 'MessAccount', 'MessPassword', 'MessFromMail', 'MessFromName', 'Smtpsecure', 'MessTrySendInmediatly', 'MailTo', 'MessDefault', 'OauthClientId', 'OauthClientSecret', 'OauthRefreshToken', ), + BasePeer::TYPE_COLNAME => array (EmailServerPeer::MESS_UID, EmailServerPeer::MESS_ENGINE, EmailServerPeer::MESS_SERVER, EmailServerPeer::MESS_PORT, EmailServerPeer::MESS_INCOMING_SERVER, EmailServerPeer::MESS_INCOMING_PORT, EmailServerPeer::MESS_RAUTH, EmailServerPeer::MESS_ACCOUNT, EmailServerPeer::MESS_PASSWORD, EmailServerPeer::MESS_FROM_MAIL, EmailServerPeer::MESS_FROM_NAME, EmailServerPeer::SMTPSECURE, EmailServerPeer::MESS_TRY_SEND_INMEDIATLY, EmailServerPeer::MAIL_TO, EmailServerPeer::MESS_DEFAULT, EmailServerPeer::OAUTH_CLIENT_ID, EmailServerPeer::OAUTH_CLIENT_SECRET, EmailServerPeer::OAUTH_REFRESH_TOKEN, ), + BasePeer::TYPE_FIELDNAME => array ('MESS_UID', 'MESS_ENGINE', 'MESS_SERVER', 'MESS_PORT', 'MESS_INCOMING_SERVER', 'MESS_INCOMING_PORT', 'MESS_RAUTH', 'MESS_ACCOUNT', 'MESS_PASSWORD', 'MESS_FROM_MAIL', 'MESS_FROM_NAME', 'SMTPSECURE', 'MESS_TRY_SEND_INMEDIATLY', 'MAIL_TO', 'MESS_DEFAULT', 'OAUTH_CLIENT_ID', 'OAUTH_CLIENT_SECRET', 'OAUTH_REFRESH_TOKEN', ), + BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, ) ); /** @@ -100,10 +109,10 @@ abstract class BaseEmailServerPeer * e.g. self::$fieldNames[BasePeer::TYPE_PHPNAME]['Id'] = 0 */ private static $fieldKeys = array ( - BasePeer::TYPE_PHPNAME => array ('MessUid' => 0, 'MessEngine' => 1, 'MessServer' => 2, 'MessPort' => 3, 'MessIncomingServer' => 4, 'MessIncomingPort' => 5, 'MessRauth' => 6, 'MessAccount' => 7, 'MessPassword' => 8, 'MessFromMail' => 9, 'MessFromName' => 10, 'Smtpsecure' => 11, 'MessTrySendInmediatly' => 12, 'MailTo' => 13, 'MessDefault' => 14, ), - BasePeer::TYPE_COLNAME => array (EmailServerPeer::MESS_UID => 0, EmailServerPeer::MESS_ENGINE => 1, EmailServerPeer::MESS_SERVER => 2, EmailServerPeer::MESS_PORT => 3, EmailServerPeer::MESS_INCOMING_SERVER => 4, EmailServerPeer::MESS_INCOMING_PORT => 5, EmailServerPeer::MESS_RAUTH => 6, EmailServerPeer::MESS_ACCOUNT => 7, EmailServerPeer::MESS_PASSWORD => 8, EmailServerPeer::MESS_FROM_MAIL => 9, EmailServerPeer::MESS_FROM_NAME => 10, EmailServerPeer::SMTPSECURE => 11, EmailServerPeer::MESS_TRY_SEND_INMEDIATLY => 12, EmailServerPeer::MAIL_TO => 13, EmailServerPeer::MESS_DEFAULT => 14, ), - BasePeer::TYPE_FIELDNAME => array ('MESS_UID' => 0, 'MESS_ENGINE' => 1, 'MESS_SERVER' => 2, 'MESS_PORT' => 3, 'MESS_INCOMING_SERVER' => 4, 'MESS_INCOMING_PORT' => 5, 'MESS_RAUTH' => 6, 'MESS_ACCOUNT' => 7, 'MESS_PASSWORD' => 8, 'MESS_FROM_MAIL' => 9, 'MESS_FROM_NAME' => 10, 'SMTPSECURE' => 11, 'MESS_TRY_SEND_INMEDIATLY' => 12, 'MAIL_TO' => 13, 'MESS_DEFAULT' => 14, ), - BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ) + BasePeer::TYPE_PHPNAME => array ('MessUid' => 0, 'MessEngine' => 1, 'MessServer' => 2, 'MessPort' => 3, 'MessIncomingServer' => 4, 'MessIncomingPort' => 5, 'MessRauth' => 6, 'MessAccount' => 7, 'MessPassword' => 8, 'MessFromMail' => 9, 'MessFromName' => 10, 'Smtpsecure' => 11, 'MessTrySendInmediatly' => 12, 'MailTo' => 13, 'MessDefault' => 14, 'OauthClientId' => 15, 'OauthClientSecret' => 16, 'OauthRefreshToken' => 17, ), + BasePeer::TYPE_COLNAME => array (EmailServerPeer::MESS_UID => 0, EmailServerPeer::MESS_ENGINE => 1, EmailServerPeer::MESS_SERVER => 2, EmailServerPeer::MESS_PORT => 3, EmailServerPeer::MESS_INCOMING_SERVER => 4, EmailServerPeer::MESS_INCOMING_PORT => 5, EmailServerPeer::MESS_RAUTH => 6, EmailServerPeer::MESS_ACCOUNT => 7, EmailServerPeer::MESS_PASSWORD => 8, EmailServerPeer::MESS_FROM_MAIL => 9, EmailServerPeer::MESS_FROM_NAME => 10, EmailServerPeer::SMTPSECURE => 11, EmailServerPeer::MESS_TRY_SEND_INMEDIATLY => 12, EmailServerPeer::MAIL_TO => 13, EmailServerPeer::MESS_DEFAULT => 14, EmailServerPeer::OAUTH_CLIENT_ID => 15, EmailServerPeer::OAUTH_CLIENT_SECRET => 16, EmailServerPeer::OAUTH_REFRESH_TOKEN => 17, ), + BasePeer::TYPE_FIELDNAME => array ('MESS_UID' => 0, 'MESS_ENGINE' => 1, 'MESS_SERVER' => 2, 'MESS_PORT' => 3, 'MESS_INCOMING_SERVER' => 4, 'MESS_INCOMING_PORT' => 5, 'MESS_RAUTH' => 6, 'MESS_ACCOUNT' => 7, 'MESS_PASSWORD' => 8, 'MESS_FROM_MAIL' => 9, 'MESS_FROM_NAME' => 10, 'SMTPSECURE' => 11, 'MESS_TRY_SEND_INMEDIATLY' => 12, 'MAIL_TO' => 13, 'MESS_DEFAULT' => 14, 'OAUTH_CLIENT_ID' => 15, 'OAUTH_CLIENT_SECRET' => 16, 'OAUTH_REFRESH_TOKEN' => 17, ), + BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, ) ); /** @@ -234,6 +243,12 @@ abstract class BaseEmailServerPeer $criteria->addSelectColumn(EmailServerPeer::MESS_DEFAULT); + $criteria->addSelectColumn(EmailServerPeer::OAUTH_CLIENT_ID); + + $criteria->addSelectColumn(EmailServerPeer::OAUTH_CLIENT_SECRET); + + $criteria->addSelectColumn(EmailServerPeer::OAUTH_REFRESH_TOKEN); + } const COUNT = 'COUNT(EMAIL_SERVER.MESS_UID)'; @@ -564,6 +579,9 @@ abstract class BaseEmailServerPeer } } else { + if ($obj->isNew() || $obj->isColumnModified(EmailServerPeer::MESS_ENGINE)) + $columns[EmailServerPeer::MESS_ENGINE] = $obj->getMessEngine(); + } return BasePeer::doValidate(EmailServerPeer::DATABASE_NAME, EmailServerPeer::TABLE_NAME, $columns); diff --git a/workflow/engine/config/schema.xml b/workflow/engine/config/schema.xml index a9b23a22b..f4fb66b9c 100644 --- a/workflow/engine/config/schema.xml +++ b/workflow/engine/config/schema.xml @@ -5004,6 +5004,12 @@ + + + + + + diff --git a/workflow/engine/data/mysql/schema.sql b/workflow/engine/data/mysql/schema.sql index 0d2445581..b89e52241 100644 --- a/workflow/engine/data/mysql/schema.sql +++ b/workflow/engine/data/mysql/schema.sql @@ -2781,6 +2781,9 @@ CREATE TABLE `EMAIL_SERVER` `MESS_TRY_SEND_INMEDIATLY` INTEGER default 0 NOT NULL, `MAIL_TO` VARCHAR(256) default '', `MESS_DEFAULT` INTEGER default 0 NOT NULL, + `OAUTH_CLIENT_ID` VARCHAR(256) default '' NOT NULL, + `OAUTH_CLIENT_SECRET` VARCHAR(256) default '' NOT NULL, + `OAUTH_REFRESH_TOKEN` VARCHAR(256) default '' NOT NULL, PRIMARY KEY (`MESS_UID`) )ENGINE=InnoDB DEFAULT CHARSET='utf8'; #----------------------------------------------------------------------------- From f58d31acf14b2a2494f868e5c778ae0ad5b224aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Fri, 15 Nov 2019 10:41:38 -0400 Subject: [PATCH 3/3] PMC-1375 --- workflow/engine/classes/SpoolRun.php | 18 ++++++++++++++++-- workflow/engine/classes/class.pmFunctions.php | 4 +++- workflow/engine/methods/cases/cases_Ajax.php | 5 ++++- .../ProcessMaker/BusinessModel/EmailServer.php | 11 ++++++++++- .../engine/src/ProcessMaker/Core/System.php | 5 ++++- .../ProcessMaker/Model/EmailServerModel.php | 10 ++++++++-- 6 files changed, 45 insertions(+), 8 deletions(-) diff --git a/workflow/engine/classes/SpoolRun.php b/workflow/engine/classes/SpoolRun.php index f5b1054fa..22ccea260 100644 --- a/workflow/engine/classes/SpoolRun.php +++ b/workflow/engine/classes/SpoolRun.php @@ -510,6 +510,7 @@ class SpoolRun case 'MAIL': case 'PHPMAILER': case 'IMAP': + case 'GMAILAPI': switch ($this->config['MESS_ENGINE']) { case 'MAIL': $phpMailer = new PHPMailer(); @@ -520,6 +521,11 @@ class SpoolRun $phpMailer = new PHPMailer(true); $phpMailer->Mailer = 'smtp'; break; + case 'GMAILAPI': + $phpMailer = new PHPMailerOAuth(); + $phpMailer->AuthType = 'XOAUTH2'; + $phpMailer->isSMTP(); + break; } $phpMailer->SMTPAuth = (isset($this->config['SMTPAuth']) ? $this->config['SMTPAuth'] : ''); @@ -529,6 +535,7 @@ class SpoolRun break; case 'IMAP': case 'PHPMAILER': + case 'GMAILAPI': //Posible Options for SMTPSecure are: "", "ssl" or "tls" if (isset($this->config['SMTPSecure']) && preg_match('/^(ssl|tls)$/', $this->config['SMTPSecure'])) { $phpMailer->SMTPSecure = $this->config['SMTPSecure']; @@ -543,8 +550,15 @@ class SpoolRun $phpMailer->Encoding = "8bit"; $phpMailer->Host = $this->config['MESS_SERVER']; $phpMailer->Port = $this->config['MESS_PORT']; - $phpMailer->Username = $this->config['MESS_ACCOUNT']; - $phpMailer->Password = $this->config['MESS_PASSWORD']; + if ($this->config['MESS_ENGINE'] !== 'GMAILAPI') { + $phpMailer->Username = $this->config['MESS_ACCOUNT']; + $phpMailer->Password = $this->config['MESS_PASSWORD']; + } else { + $phpMailer->oauthUserEmail = $this->config['MESS_ACCOUNT']; + $phpMailer->oauthClientId = $this->config['OAUTH_CLIENT_ID']; + $phpMailer->oauthClientSecret = $this->config['OAUTH_CLIENT_SECRET']; + $phpMailer->oauthRefreshToken = $this->config['OAUTH_REFRESH_TOKEN']; + } //From $phpMailer->SetFrom($this->fileData['from_email'], utf8_decode($this->fileData['from_name'])); diff --git a/workflow/engine/classes/class.pmFunctions.php b/workflow/engine/classes/class.pmFunctions.php index 370c169cd..924350d22 100644 --- a/workflow/engine/classes/class.pmFunctions.php +++ b/workflow/engine/classes/class.pmFunctions.php @@ -931,7 +931,9 @@ function getEmailConfiguration () * @param array | $attachments = [] | Attachment | An Optional arrray. An array of files (full paths) to be attached to the email. * @param boolean | $showMessage = true | Show message | Optional parameter. Set to TRUE to show the message in the case's message history. * @param int | $delIndex = 0 | Delegation index of the case | Optional parameter. The delegation index of the current task in the case. - * @param array | $config = [] | Email server configuration | An optional array: An array of parameters to be used in the Email sent (MESS_ENGINE, MESS_SERVER, MESS_PORT, MESS_FROM_MAIL, MESS_RAUTH, MESS_ACCOUNT, MESS_PASSWORD, and SMTPSecure) Or String: UID of Email server . + * @param array | $config = [] | Email server configuration | An optional array: An array of parameters to be used in the Email sent (MESS_ENGINE, + * MESS_SERVER, MESS_PORT, MESS_FROM_MAIL, MESS_RAUTH, MESS_ACCOUNT, MESS_PASSWORD, SMTPSecure, OAUTH_CLIENT_ID, OAUTH_CLIENT_SECRET and OAUTH_REFRESH_TOKEN) + * Or String: UID of Email server . * @return int | | result | Result of sending email * * @see class.pmFunctions::PMFSendMessageToGroup() diff --git a/workflow/engine/methods/cases/cases_Ajax.php b/workflow/engine/methods/cases/cases_Ajax.php index a120669ff..3bf9870b1 100644 --- a/workflow/engine/methods/cases/cases_Ajax.php +++ b/workflow/engine/methods/cases/cases_Ajax.php @@ -817,7 +817,10 @@ switch (($_POST['action']) ? $_POST['action'] : $_REQUEST['action']) { 'MESS_ACCOUNT' => $aSetup['MESS_ACCOUNT'], 'MESS_PASSWORD' => $aSetup['MESS_PASSWORD'], 'SMTPSecure' => $aSetup['SMTPSecure'], - 'SMTPAuth' => $aSetup['MESS_RAUTH'] + 'SMTPAuth' => $aSetup['MESS_RAUTH'], + 'OAUTH_CLIENT_ID' => $aSetup['OAUTH_CLIENT_ID'], + 'OAUTH_CLIENT_SECRET' => $aSetup['OAUTH_CLIENT_SECRET'], + 'OAUTH_REFRESH_TOKEN' => $aSetup['OAUTH_REFRESH_TOKEN'] ) ); $oSpool->create(array('msg_uid' => $data['MSG_UID'], 'app_uid' => $data['APP_UID'], 'del_index' => $data['DEL_INDEX'], 'app_msg_type' => $data['APP_MSG_TYPE'], 'app_msg_subject' => $data['APP_MSG_SUBJECT'], 'app_msg_from' => $data['APP_MSG_FROM'], 'app_msg_to' => $data['APP_MSG_TO'], 'app_msg_body' => $data['APP_MSG_BODY'], 'app_msg_cc' => $data['APP_MSG_CC'], 'app_msg_bcc' => $data['APP_MSG_BCC'], 'app_msg_attach' => $data['APP_MSG_ATTACH'], 'app_msg_template' => $data['APP_MSG_TEMPLATE'], 'app_msg_status' => 'pending' diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/EmailServer.php b/workflow/engine/src/ProcessMaker/BusinessModel/EmailServer.php index b278810f8..1f4b7dcf8 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/EmailServer.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/EmailServer.php @@ -1106,6 +1106,9 @@ class EmailServer $criteria->addSelectColumn(\EmailServerPeer::MESS_TRY_SEND_INMEDIATLY); $criteria->addSelectColumn(\EmailServerPeer::MAIL_TO); $criteria->addSelectColumn(\EmailServerPeer::MESS_DEFAULT); + $criteria->addSelectColumn(\EmailServerPeer::OAUTH_CLIENT_ID); + $criteria->addSelectColumn(\EmailServerPeer::OAUTH_CLIENT_SECRET); + $criteria->addSelectColumn(\EmailServerPeer::OAUTH_REFRESH_TOKEN); return $criteria; } catch (Exception $e) { @@ -1143,7 +1146,10 @@ class EmailServer $this->getFieldNameByFormatFieldName("MESS_BACKGROUND") => '', $this->getFieldNameByFormatFieldName("MESS_PASSWORD_HIDDEN") => '', $this->getFieldNameByFormatFieldName("MESS_EXECUTE_EVERY") => '', - $this->getFieldNameByFormatFieldName("MESS_SEND_MAX") => '' + $this->getFieldNameByFormatFieldName("MESS_SEND_MAX") => '', + $this->getFieldNameByFormatFieldName("OAUTH_CLIENT_ID") => $record["OAUTH_CLIENT_ID"], + $this->getFieldNameByFormatFieldName("OAUTH_CLIENT_SECRET") => $record["OAUTH_CLIENT_SECRET"], + $this->getFieldNameByFormatFieldName("OAUTH_REFRESH_TOKEN") => $record["OAUTH_REFRESH_TOKEN"] ); } catch (Exception $e) { throw $e; @@ -1191,6 +1197,9 @@ class EmailServer $arrayData["MESS_PASSWORD_HIDDEN"] = ''; $arrayData["MESS_EXECUTE_EVERY"] = ''; $arrayData["MESS_SEND_MAX"] = ''; + $arrayData["OAUTH_CLIENT_ID"] = $row["OAUTH_CLIENT_ID"]; + $arrayData["OAUTH_CLIENT_SECRET"] = $row["OAUTH_CLIENT_SECRET"]; + $arrayData["OAUTH_REFRESH_TOKEN"] = $row["OAUTH_REFRESH_TOKEN"]; } //Return diff --git a/workflow/engine/src/ProcessMaker/Core/System.php b/workflow/engine/src/ProcessMaker/Core/System.php index 7de260e0c..3e02cf345 100644 --- a/workflow/engine/src/ProcessMaker/Core/System.php +++ b/workflow/engine/src/ProcessMaker/Core/System.php @@ -1015,7 +1015,10 @@ class System "MESS_BACKGROUND" => "", "MESS_PASSWORD_HIDDEN" => "", "MESS_EXECUTE_EVERY" => "", - "MESS_SEND_MAX" => "" + "MESS_SEND_MAX" => "", + "OAUTH_CLIENT_ID" => $arrayEmailServerDefault["OAUTH_CLIENT_ID"], + "OAUTH_CLIENT_SECRET" => $arrayEmailServerDefault["OAUTH_CLIENT_SECRET"], + "OAUTH_REFRESH_TOKEN" => $arrayEmailServerDefault["OAUTH_REFRESH_TOKEN"] ); //Return diff --git a/workflow/engine/src/ProcessMaker/Model/EmailServerModel.php b/workflow/engine/src/ProcessMaker/Model/EmailServerModel.php index b8cdfd771..12faca19e 100644 --- a/workflow/engine/src/ProcessMaker/Model/EmailServerModel.php +++ b/workflow/engine/src/ProcessMaker/Model/EmailServerModel.php @@ -31,7 +31,10 @@ class EmailServerModel extends Model 'EMAIL_SERVER.SMTPSECURE', 'EMAIL_SERVER.MESS_TRY_SEND_INMEDIATLY', 'EMAIL_SERVER.MAIL_TO', - 'EMAIL_SERVER.MESS_DEFAULT' + 'EMAIL_SERVER.MESS_DEFAULT', + 'EMAIL_SERVER.OAUTH_CLIENT_ID', + 'EMAIL_SERVER.OAUTH_CLIENT_SECRET', + 'EMAIL_SERVER.OAUTH_REFRESH_TOKEN' ]; $query = EmailServerModel::query()->select($selectedColumns); $query->where('EMAIL_SERVER.MESS_UID', '=', $messUid); @@ -64,7 +67,10 @@ class EmailServerModel extends Model 'EMAIL_SERVER.SMTPSECURE', 'EMAIL_SERVER.MESS_TRY_SEND_INMEDIATLY', 'EMAIL_SERVER.MAIL_TO', - 'EMAIL_SERVER.MESS_DEFAULT' + 'EMAIL_SERVER.MESS_DEFAULT', + 'EMAIL_SERVER.OAUTH_CLIENT_ID', + 'EMAIL_SERVER.OAUTH_CLIENT_SECRET', + 'EMAIL_SERVER.OAUTH_REFRESH_TOKEN' ]; $query = EmailServerModel::query()->select($selectedColumns) ->where('MESS_DEFAULT', '=', 1);