using System; using System.Collections.Generic; using System.Linq; using System.Text; using NLog; using Ninject; using NzbDrone.Core.Model; using NzbDrone.Core.Model.Twitter; using NzbDrone.Core.Providers.Core; using Twitterizer; namespace NzbDrone.Core.Providers { public class TwitterProvider { private readonly ConfigProvider _configProvider; private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); private const string ConsumerKey = "umKU6jBWpFbHTuqQbW2VlQ"; private const string ConsumerSecret = "e30OXkI6qrZWS35hbUUnrQQ8J2R9XNpccQNWAVK10"; [Inject] public TwitterProvider(ConfigProvider configProvider) { _configProvider = configProvider; } public virtual TwitterAuthorizationModel GetAuthorization() { try { OAuthTokenResponse requestToken = OAuthUtility.GetRequestToken(ConsumerKey, ConsumerSecret, "oob", null); Uri authorizationUri = OAuthUtility.BuildAuthorizationUri(requestToken.Token); return new TwitterAuthorizationModel { Token = requestToken.Token, Url = authorizationUri.ToString() }; } catch (Exception ex) { Logger.Warn("Failed to get Twitter authorization URL."); Logger.TraceException(ex.Message, ex); return null; } } public virtual bool GetAndSaveAccessToken(string authToken, string verifier) { try { Logger.Debug("Attempting to get the AccessToken from Twitter"); OAuthTokenResponse accessToken = OAuthUtility.GetAccessToken(ConsumerKey, ConsumerSecret, authToken, verifier); _configProvider.TwitterAccessToken = accessToken.Token; _configProvider.TwitterAccessTokenSecret = accessToken.TokenSecret; //Send a tweet to test! SendTweet("I have just setup tweet notifications for NzbDrone!"); return true; } catch (Exception ex) { Logger.TraceException(ex.Message, ex); return false; } } public virtual bool SendTweet(string message) { try { Logger.Trace("Sending status update to twitter: {0}", message); var accessToken = _configProvider.TwitterAccessToken; var accessTokenSecret = _configProvider.TwitterAccessTokenSecret; //If the access token or access token secret are not configured, log an error and return if (String.IsNullOrWhiteSpace(accessToken) || String.IsNullOrWhiteSpace(accessTokenSecret)) { Logger.Warn("Twitter Setup is incomplete, please check your settings"); return false; } var token = new OAuthTokens { AccessToken = accessToken, AccessTokenSecret = accessTokenSecret, ConsumerKey = ConsumerKey, ConsumerSecret = ConsumerSecret }; TwitterStatus.Update(token, message + " #NzbDrone"); return true; } catch (Exception ex) { Logger.DebugException(ex.Message, ex); return false; } } } }