Merge pull request #521 from MrPetovan/bug/4409-twitter-exception

[twitter] Add Exception handling/Fix OAuth usage
This commit is contained in:
Tobias Diekershoff 2018-02-08 07:07:06 +01:00 committed by GitHub
commit d83dbb3172
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -200,11 +200,11 @@ function twitter_settings_post(App $a, $post)
return; return;
} }
// don't check twitter settings if twitter submit button is not clicked // don't check twitter settings if twitter submit button is not clicked
if (!x($_POST, 'twitter-submit')) { if (empty($_POST['twitter-disconnect']) && empty($_POST['twitter-submit'])) {
return; return;
} }
if (isset($_POST['twitter-disconnect'])) { if (!empty($_POST['twitter-disconnect'])) {
/* * * /* * *
* if the twitter-disconnect checkbox is set, clear the OAuth key/secret pair * if the twitter-disconnect checkbox is set, clear the OAuth key/secret pair
* from the user configuration * from the user configuration
@ -229,12 +229,20 @@ function twitter_settings_post(App $a, $post)
// the token and secret for which the PIN was generated were hidden in the settings // the token and secret for which the PIN was generated were hidden in the settings
// form as token and token2, we need a new connection to Twitter using these token // form as token and token2, we need a new connection to Twitter using these token
// and secret to request a Access Token with the PIN // and secret to request a Access Token with the PIN
$connection = new TwitterOAuth($ckey, $csecret, $_POST['twitter-token'], $_POST['twitter-token2']); try {
$token = $connection->oauth("oauth/access_token", ["oauth_verifier" => $_POST['twitter-pin']]); if (empty($_POST['twitter-pin'])) {
// ok, now that we have the Access Token, save them in the user config throw new Exception(L10n::t('You submitted an empty PIN, please Sign In with Twitter again to get a new one.'));
PConfig::set(local_user(), 'twitter', 'oauthtoken', $token['oauth_token']); }
PConfig::set(local_user(), 'twitter', 'oauthsecret', $token['oauth_token_secret']);
PConfig::set(local_user(), 'twitter', 'post', 1); $connection = new TwitterOAuth($ckey, $csecret, $_POST['twitter-token'], $_POST['twitter-token2']);
$token = $connection->oauth("oauth/access_token", ["oauth_verifier" => $_POST['twitter-pin']]);
// ok, now that we have the Access Token, save them in the user config
PConfig::set(local_user(), 'twitter', 'oauthtoken', $token['oauth_token']);
PConfig::set(local_user(), 'twitter', 'oauthsecret', $token['oauth_token_secret']);
PConfig::set(local_user(), 'twitter', 'post', 1);
} catch(Exception $e) {
info($e->getMessage());
}
// reload the Addon Settings page, if we don't do it see Bug #42 // reload the Addon Settings page, if we don't do it see Bug #42
goaway('settings/connectors'); goaway('settings/connectors');
} else { } else {
@ -288,34 +296,28 @@ function twitter_settings(App $a, &$s)
$s .= '</span>'; $s .= '</span>';
if ((!$ckey) && (!$csecret)) { if ((!$ckey) && (!$csecret)) {
/* * * /* no global consumer keys
* no global consumer keys
* display warning and skip personal config * display warning and skip personal config
*/ */
$s .= '<p>' . L10n::t('No consumer key pair for Twitter found. Please contact your site administrator.') . '</p>'; $s .= '<p>' . L10n::t('No consumer key pair for Twitter found. Please contact your site administrator.') . '</p>';
} else { } else {
/* * * // ok we have a consumer key pair now look into the OAuth stuff
* ok we have a consumer key pair now look into the OAuth stuff
*/
if ((!$otoken) && (!$osecret)) { if ((!$otoken) && (!$osecret)) {
/* * * /* the user has not yet connected the account to twitter...
* the user has not yet connected the account to twitter...
* get a temporary OAuth key/secret pair and display a button with * get a temporary OAuth key/secret pair and display a button with
* which the user can request a PIN to connect the account to a * which the user can request a PIN to connect the account to a
* account at Twitter. * account at Twitter.
*/ */
$connection = new TwitterOAuth($ckey, $csecret); $connection = new TwitterOAuth($ckey, $csecret);
$result = $connection->oauth('oauth/request_token', ['oauth_callback' => 'oob']); $result = $connection->oauth('oauth/request_token', ['oauth_callback' => 'oob']);
/* * *
* make some nice form
*/
$s .= '<p>' . L10n::t('At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your <strong>public</strong> posts will be posted to Twitter.') . '</p>'; $s .= '<p>' . L10n::t('At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your <strong>public</strong> posts will be posted to Twitter.') . '</p>';
$s .= '<a href="' . $connection->url('oauth/authorize', ['oauth_token' => $result->oauth_token]) . '" target="_twitter"><img src="addon/twitter/lighter.png" alt="' . L10n::t('Log in with Twitter') . '"></a>'; $s .= '<a href="' . $connection->url('oauth/authorize', ['oauth_token' => $result['oauth_token']]) . '" target="_twitter"><img src="addon/twitter/lighter.png" alt="' . L10n::t('Log in with Twitter') . '"></a>';
$s .= '<div id="twitter-pin-wrapper">'; $s .= '<div id="twitter-pin-wrapper">';
$s .= '<label id="twitter-pin-label" for="twitter-pin">' . L10n::t('Copy the PIN from Twitter here') . '</label>'; $s .= '<label id="twitter-pin-label" for="twitter-pin">' . L10n::t('Copy the PIN from Twitter here') . '</label>';
$s .= '<input id="twitter-pin" type="text" name="twitter-pin" />'; $s .= '<input id="twitter-pin" type="text" name="twitter-pin" />';
$s .= '<input id="twitter-token" type="hidden" name="twitter-token" value="' . $result->oauth_token . '" />'; $s .= '<input id="twitter-token" type="hidden" name="twitter-token" value="' . $result['oauth_token'] . '" />';
$s .= '<input id="twitter-token2" type="hidden" name="twitter-token2" value="' . $result->oauth_token_secret . '" />'; $s .= '<input id="twitter-token2" type="hidden" name="twitter-token2" value="' . $result['oauth_token_secret'] . '" />';
$s .= '</div><div class="clear"></div>'; $s .= '</div><div class="clear"></div>';
$s .= '<div class="settings-submit-wrapper" ><input type="submit" name="twitter-submit" class="settings-submit" value="' . L10n::t('Save Settings') . '" /></div>'; $s .= '<div class="settings-submit-wrapper" ><input type="submit" name="twitter-submit" class="settings-submit" value="' . L10n::t('Save Settings') . '" /></div>';
} else { } else {