From 7c66b8c94b3eed32d0c28caee4d6200f7402d23a Mon Sep 17 00:00:00 2001 From: Ronald Quenta Date: Fri, 11 Sep 2015 17:15:47 -0400 Subject: [PATCH] PM-3501 Move pmgmail authentication end point to the next branch 3.0.1.4 remove email fix in message response --- workflow/engine/classes/model/Users.php | 25 +++++++ .../Services/Api/Google/Authentication.php | 31 ++++++++ .../Services/Google/Authentication.php | 74 +++++++++++++++++++ .../engine/src/ProcessMaker/Services/api.ini | 2 + 4 files changed, 132 insertions(+) create mode 100644 workflow/engine/src/ProcessMaker/Services/Api/Google/Authentication.php create mode 100644 workflow/engine/src/ProcessMaker/Services/Google/Authentication.php diff --git a/workflow/engine/classes/model/Users.php b/workflow/engine/classes/model/Users.php index e956d7d90..07f1c8393 100755 --- a/workflow/engine/classes/model/Users.php +++ b/workflow/engine/classes/model/Users.php @@ -103,6 +103,31 @@ class Users extends BaseUsers } } + public function loadByEmail ($sUsrEmail) + { + $c = new Criteria( 'workflow' ); + + $c->clearSelectColumns(); + $c->addSelectColumn( UsersPeer::USR_UID ); + $c->addSelectColumn( UsersPeer::USR_USERNAME ); + $c->addSelectColumn( UsersPeer::USR_STATUS ); + $c->addSelectColumn( UsersPeer::USR_FIRSTNAME ); + $c->addSelectColumn( UsersPeer::USR_LASTNAME ); + + $c->add( UsersPeer::USR_EMAIL, $sUsrEmail ); + return $c; + } + + public function loadByUserEmailInArray ($sUsrEmail) + { + $c = $this->loadByEmail( $sUsrEmail ); + $rs = UsersPeer::doSelectRS( $c, Propel::getDbConnection('workflow_ro') ); + $rs->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $rs->next(); + $row = $rs->getRow(); + return $row; + } + public function loadDetails ($UsrUid) { try { diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Google/Authentication.php b/workflow/engine/src/ProcessMaker/Services/Api/Google/Authentication.php new file mode 100644 index 000000000..88b7dc4ab --- /dev/null +++ b/workflow/engine/src/ProcessMaker/Services/Api/Google/Authentication.php @@ -0,0 +1,31 @@ +postTokenAccountGmail($request_data); + return $response; + } catch (\Exception $e){ + throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); + } + } +} \ No newline at end of file diff --git a/workflow/engine/src/ProcessMaker/Services/Google/Authentication.php b/workflow/engine/src/ProcessMaker/Services/Google/Authentication.php new file mode 100644 index 000000000..d6a10b6fe --- /dev/null +++ b/workflow/engine/src/ProcessMaker/Services/Google/Authentication.php @@ -0,0 +1,74 @@ + \G::LoadTranslation( 'ID_UPGRADE_ENTERPRISE' )); + + /*----------------------------------********---------------------------------*/ + + //Lets verify the gmail token + $url = 'https://www.googleapis.com/oauth2/v1/tokeninfo?access_token='.$request_data['token']; + + // init curl object + $ch = curl_init(); + // define options + $optArray = array( + CURLOPT_URL => $url, + CURLOPT_RETURNTRANSFER => true + ); + // apply those options + curl_setopt_array($ch, $optArray); + // execute request and get response + $result = curl_exec($ch); + $response = (json_decode($result)); + // Check if any error occurred + if(curl_errno($ch)) + { + throw (new \Exception(\G::LoadTranslation( 'ID_TO_URL' ))); + } + $info = curl_getinfo($ch); + curl_close($ch); + + //If there is response + if($info['http_code'] == 200 && isset($response->email)){ + //If the usermail that was send in the end point es the same of the one in the response + if($request_data['mail'] == $response->email){ + $oUsers = new \Users(); + $userExist = $oUsers->loadByUserEmailInArray($request_data['mail']); + + if($userExist['USR_STATUS'] == "ACTIVE"){ + //User Active! lets create the token and register it in the DB for this user + $oauthServer = new \ProcessMaker\Services\OAuth2\Server; + $server = $oauthServer->getServer(); + $config = array( + 'allow_implicit' => $server->getConfig('allow_implicit'), + 'access_lifetime' => $server->getConfig('access_lifetime') + ); + $storage = $server->getStorages(); + $accessToken = new \OAuth2\ResponseType\AccessToken($storage['access_token'],$storage['refresh_token'],$config); + $responseToken = $accessToken->createAccessToken($request_data['clientid'], $userExist['USR_UID'],$request_data['scope']); + }else { + throw (new \Exception(\G::LoadTranslation( 'ID_ACTIVE_USERS' ))); + } + } else { + throw (new \Exception(\G::LoadTranslation( 'ID_EMAIL_ENTER_VALID' ))); + } + }else { + throw (new \Exception(\G::LoadTranslation( 'ID_PMGMAIL_VALID' ))); + } + + /*----------------------------------********---------------------------------*/ + + return $responseToken; + } + +} \ No newline at end of file diff --git a/workflow/engine/src/ProcessMaker/Services/api.ini b/workflow/engine/src/ProcessMaker/Services/api.ini index d24e93b78..13b3d303f 100644 --- a/workflow/engine/src/ProcessMaker/Services/api.ini +++ b/workflow/engine/src/ProcessMaker/Services/api.ini @@ -114,3 +114,5 @@ debug = 1 [alias: catalog] dashboard = "ProcessMaker\Services\Api\Catalog" +[alias: google] + authentication = "ProcessMaker\Services\Api\Google\Authentication"