static function google_authenticate($client, $user) { $rcmail = rcmail::get_instance(); $token = google_func::get_current_token($user); if ($token != null) { $client->setAccessToken($token); } $success = false; $msg = ''; try { if ($client->getAccessToken() == null || $client->getAccessToken() == '[]') { $code = google_func::get_auth_code($user); if (empty($code)) { throw new Exception($rcmail->gettext('noauthcode', 'google_addressbook')); } $client->authenticate($code); $success = true; } else { if ($client->isAccessTokenExpired()) { $token = json_decode($client->getAccessToken()); if (empty($token->refresh_token)) { throw new Exception("Error fetching refresh token."); // this only happens if google client id is wrong and access type != offline } else { $client->refreshToken($token->refresh_token); $success = true; } } else { // token valid, nothing to do. $success = true; } } } catch (Exception $e) { $msg = $e->getMessage(); } if ($success) { $token = $client->getAccessToken(); google_func::save_current_token($user, $token); } return array('success' => $success, 'message' => $msg); }
function get_current_token($from_db = false) { return google_func::get_current_token(rcmail::get_instance()->user, $from_db); }