Files
server/usr/share/psa-horde/services/twitter/index.php
2026-01-07 20:52:11 +01:00

102 lines
3.6 KiB
PHP

<?php
/**
* Callback page for Twitter integration.
*
* Copyright 2009-2017 Horde LLC (http://www.horde.org/)
*
* See the enclosed file COPYING for license information (LGPL-2). If you
* did not receive this file, see http://www.horde.org/licenses/lgpl.
*
* @author Michael J. Rubinsky <mrubinsk.horde.org>
* @category Horde
* @license http://www.horde.org/licenses/lgpl LGPL-2
* @package Horde
*/
function _outputError($e)
{
global $notification, $page_output;
Horde::log($e, 'INFO');
$body = ($e instanceof Exception) ? $e->getMessage() : $e;
if (($errors = json_decode($body, true)) && isset($errors['errors'])) {
$errors = $errors['errors'];
} else {
$errors = array(array('message' => $body));
}
$notification->push(_("Error connecting to Twitter. Details have been logged for the administrator."), 'horde.error', array('sticky'));
foreach ($errors as $error) {
$notification->push($error['message'], 'horde.error', array('sticky'));
}
$page_output->header();
$notification->notify(array('listeners' => 'status'));
$page_output->footer();
exit;
}
require_once __DIR__ . '/../../lib/Application.php';
Horde_Registry::appInit('horde');
if (empty($conf['twitter']['enabled'])) {
Horde::url('index.php', false, array('app' => 'horde'))->redirect();
}
$twitter = $injector->getInstance('Horde_Service_Twitter');
/* See if we have an existing token for the current user */
$token = unserialize($prefs->getValue('twitter'));
/* Check for an existing token */
if (!empty($token['key']) && !empty($token['secret'])) {
$auth_token = new Horde_Oauth_Token($token['key'], $token['secret']);
$twitter->auth->setToken($auth_token);
}
$page_output->topbar = $page_output->sidebar = false;
/* Check to see if we have a valid token */
if (!empty($auth_token)) {
try {
$profile = Horde_Serialize::unserialize($twitter->account->verifyCredentials(), Horde_Serialize::JSON);
} catch (Horde_Service_Twitter_Exception $e) {
_outputError($e);
}
} elseif ($r_secret = $session->retrieve('twitter_request_secret')) {
/* No existing auth token, maybe we are in the process of getting it? */
try {
$auth_token = $twitter->auth->getAccessToken($injector->getInstance('Horde_Controller_Request'), Horde_Util::getFormData('oauth_verifier'));
} catch (Horde_Service_Twitter_Exception $e) {
_outputError($e);
}
/* Clear the temporary request secret */
$session->purge('twitter_request_secret');
if ($auth_token === false || empty($auth_token)) {
// We had a request secret, but something went wrong. maybe navigated
// back here between requests?
// fall through? Display message? What?....
//'echo';
//
} else {
/* Successfully obtained an auth token, save it to prefs etc... */
$prefs->setValue('twitter', serialize(array('key' => $auth_token->key,
'secret' => $auth_token->secret)));
/* Now try again */
$twitter->auth->setToken($auth_token);
try {
$profile = Horde_Serialize::unserialize($twitter->account->verifyCredentials(), Horde_Serialize::JSON);
} catch (Horde_Service_Twitter_Exception $e) {
_outputError($e);
}
if (!empty($profile->error)) {
_outputError($profile->error);
}
if (!empty($profile)) {
$page_output->header();
echo '<script type="text/javascript">window.opener.location.reload(true);window.close();</script>';
$page_output->footer();
exit;
}
}
}