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);
 }