/// <summary> /// Send an Private Message to the Newly Created User with /// his Account Info (Pass, Security Question and Answer) /// </summary> /// <param name="user"> /// The user. /// </param> /// <param name="pass"> /// The pass. /// </param> /// <param name="securityAnswer"> /// The security answer. /// </param> /// <param name="userId"> /// The user Id. /// </param> /// <param name="oAuth"> /// The oAUTH. /// </param> private static void SendRegistrationMessageToTwitterUser( [NotNull] MembershipUser user, [NotNull] string pass, [NotNull] string securityAnswer, [NotNull] int userId, OAuthTwitter oAuth) { var subject = string.Format( YafContext.Current.Get <ILocalization>().GetText("COMMON", "NOTIFICATION_ON_NEW_FACEBOOK_USER_SUBJECT"), YafContext.Current.Get <BoardSettings>().Name); var notifyUser = new TemplateEmail { TemplateParams = { ["{user}"] = user.UserName, ["{email}"] = user.Email, ["{pass}"] = pass, ["{answer}"] = securityAnswer, ["{forumname}"] = YafContext.Current.Get <BoardSettings>().Name } }; var emailBody = notifyUser.ProcessTemplate("NOTIFICATION_ON_TWITTER_REGISTER"); var messageFlags = new MessageFlags { IsHtml = false, IsBBCode = true }; // Send Message also as DM to Twitter. var tweetApi = new TweetAPI(oAuth); var message = $"{subject}. {YafContext.Current.Get<ILocalization>().GetText("LOGIN", "TWITTER_DM")}"; if (YafContext.Current.Get <BoardSettings>().AllowPrivateMessages) { YafContext.Current.GetRepository <PMessage>().SendMessage(2, userId, subject, emailBody, messageFlags.BitValue, -1); } else { message = YafContext.Current.Get <ILocalization>() .GetTextFormatted( "LOGIN", "TWITTER_DM_ACCOUNT", YafContext.Current.Get <BoardSettings>().Name, user.UserName, pass); } try { tweetApi.SendDirectMessage(TweetAPI.ResponseFormat.json, user.UserName, message.Truncate(140)); } catch (Exception ex) { YafContext.Current.Get <ILogger>().Error(ex, "Error while sending Twitter DM Message"); } }
/// <summary> /// Re-tweets Message thru the Twitter API /// </summary> /// <param name="sender"> /// The source of the event. /// </param> /// <param name="e"> /// The <see cref="System.EventArgs"/> instance containing the event data. /// </param> protected void Retweet_Click(object sender, EventArgs e) { var twitterName = this.Get<YafBoardSettings>().TwitterUserName.IsSet() ? "@{0} ".FormatWith(this.Get<YafBoardSettings>().TwitterUserName) : string.Empty; // process message... clean html, strip html, remove bbcode, etc... var twitterMsg = BBCodeHelper.StripBBCode( HtmlHelper.StripHtml(HtmlHelper.CleanHtmlString((string)this.DataRow["Message"]))).RemoveMultipleWhitespace(); var topicUrl = YafBuildLink.GetLinkNotEscaped(ForumPages.posts, true, "m={0}#post{0}", this.DataRow["MessageID"]); // Send Retweet Directlly thru the Twitter API if User is Twitter User if (Config.TwitterConsumerKey.IsSet() && Config.TwitterConsumerSecret.IsSet() && this.Get<IYafSession>().TwitterToken.IsSet() && this.Get<IYafSession>().TwitterTokenSecret.IsSet() && this.Get<IYafSession>().TwitterTokenSecret.IsSet() && this.PageContext.IsTwitterUser) { var oAuth = new OAuthTwitter { ConsumerKey = Config.TwitterConsumerKey, ConsumerSecret = Config.TwitterConsumerSecret, Token = this.Get<IYafSession>().TwitterToken, TokenSecret = this.Get<IYafSession>().TwitterTokenSecret }; var tweets = new TweetAPI(oAuth); tweets.UpdateStatus( TweetAPI.ResponseFormat.json, this.Server.UrlEncode("RT {1}: {0} {2}".FormatWith(twitterMsg.Truncate(100), twitterName, topicUrl)), string.Empty); } else { this.Get<HttpResponseBase>().Redirect( "http://twitter.com/share?url={0}&text={1}".FormatWith( this.Server.UrlEncode(topicUrl), this.Server.UrlEncode( "RT {1}: {0} {2}".FormatWith(twitterMsg.Truncate(100), twitterName, topicUrl)))); } }
/// <summary> /// Logins the or create user. /// </summary> /// <param name="request">The request.</param> /// <param name="parameters">The parameters.</param> /// <param name="message">The message.</param> /// <returns> /// Returns if Login was successful or not /// </returns> public bool LoginOrCreateUser(HttpRequest request, string parameters, out string message) { var oAuth = new OAuthTwitter { ConsumerKey = Config.TwitterConsumerKey, ConsumerSecret = Config.TwitterConsumerSecret }; // Get the access token and secret. oAuth.AccessTokenGet(request["oauth_token"], request["oauth_verifier"]); if (oAuth.TokenSecret.Length > 0) { var tweetAPI = new TweetAPI(oAuth); var twitterUser = tweetAPI.GetUser(); if (twitterUser.UserId > 0) { // Check if user exists var checkUser = YafContext.Current.Get <MembershipProvider>().GetUser(twitterUser.UserName, false); // Login user if exists if (checkUser == null) { return(CreateTwitterUser(twitterUser, oAuth, out message)); } // LOGIN Existing User var yafUser = YafUserProfile.GetProfile(checkUser.UserName); var yafUserData = new CombinedUserDataHelper(checkUser); if (yafUser.Twitter.IsNotSet() && yafUser.TwitterId.IsNotSet()) { // user with the same name exists but account is not conncected, exit! message = YafContext.Current.Get <ILocalization>().GetText("LOGIN", "SSO_TWITTER_FAILED"); return(false); } if (yafUser.Twitter.Equals(twitterUser.UserName) && yafUser.TwitterId.Equals(twitterUser.UserId.ToString())) { LoginTwitterSuccess(false, oAuth, yafUserData.UserID, checkUser); message = string.Empty; return(true); } message = YafContext.Current.Get <ILocalization>().GetText("LOGIN", "SSO_TWITTERID_NOTMATCH"); return(false); // User does not exist create new user } } message = YafContext.Current.Get <ILocalization>().GetText("LOGIN", "SSO_TWITTER_FAILED"); return(false); }
/// <summary> /// Connects the user. /// </summary> /// <param name="request">The request.</param> /// <param name="parameters">The parameters.</param> /// <param name="message">The message.</param> /// <returns> /// Returns if the connect was successful or not /// </returns> public bool ConnectUser(HttpRequest request, string parameters, out string message) { var oAuth = new OAuthTwitter { ConsumerKey = Config.TwitterConsumerKey, ConsumerSecret = Config.TwitterConsumerSecret }; // Get the access token and secret. oAuth.AccessTokenGet(request["oauth_token"], request["oauth_verifier"]); if (oAuth.TokenSecret.Length > 0) { var tweetAPI = new TweetAPI(oAuth); var twitterUser = tweetAPI.GetUser(); if (twitterUser.UserId > 0) { // Create User if not exists?! if (!YafContext.Current.IsGuest && !YafContext.Current.Get <YafBoardSettings>().DisableRegistrations) { // Because twitter doesnt provide the email we need to match the user name... if (twitterUser.UserName != YafContext.Current.Profile.UserName) { message = YafContext.Current.Get <ILocalization>() .GetText("LOGIN", "SSO_TWITTERNAME_NOTMATCH"); return(false); } // Update profile with twitter informations YafUserProfile userProfile = YafContext.Current.Profile; userProfile.TwitterId = twitterUser.UserId.ToString(); userProfile.Twitter = twitterUser.UserName; userProfile.Homepage = twitterUser.Url.IsSet() ? twitterUser.Url : "http://twitter.com/{0}".FormatWith(twitterUser.UserName); userProfile.RealName = twitterUser.Name; userProfile.Interests = twitterUser.Description; userProfile.Location = twitterUser.Location; userProfile.Save(); // save avatar if (twitterUser.ProfileImageUrl.IsSet()) { LegacyDb.user_saveavatar( YafContext.Current.PageUserID, twitterUser.ProfileImageUrl, null, null); } YafSingleSignOnUser.LoginSuccess(AuthService.twitter, null, YafContext.Current.PageUserID, false); message = string.Empty; return(true); } } } message = YafContext.Current.Get <ILocalization>().GetText("LOGIN", "SSO_TWITTER_FAILED"); return(false); }
/// <summary> /// The options menu_ item click. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The Pop Event Arguments.</param> private void ShareMenu_ItemClick([NotNull] object sender, [NotNull] PopEventArgs e) { var topicUrl = YafBuildLink.GetLinkNotEscaped(ForumPages.posts, true, "t={0}", this.PageContext.PageTopicID); switch (e.Item.ToLower()) { case "email": this.EmailTopic_Click(sender, e); break; case "tumblr": { // process message... clean html, strip html, remove bbcode, etc... var tumblrMsg = BBCodeHelper.StripBBCode( HtmlHelper.StripHtml(HtmlHelper.CleanHtmlString((string)this._topic["Topic"]))).RemoveMultipleWhitespace(); var meta = this.Page.Header.FindControlType<HtmlMeta>(); string description = string.Empty; if (meta.Any(x => x.Name.Equals("description"))) { var descriptionMeta = meta.FirstOrDefault(x => x.Name.Equals("description")); if (descriptionMeta != null) { description = "&description={0}".FormatWith(descriptionMeta.Content); } } var tumblrUrl = "http://www.tumblr.com/share/link?url={0}&name={1}{2}".FormatWith( this.Server.UrlEncode(topicUrl), tumblrMsg, description); this.Get<HttpResponseBase>().Redirect(tumblrUrl); } break; case "retweet": { var twitterName = this.Get<YafBoardSettings>().TwitterUserName.IsSet() ? "@{0} ".FormatWith(this.Get<YafBoardSettings>().TwitterUserName) : string.Empty; // process message... clean html, strip html, remove bbcode, etc... var twitterMsg = BBCodeHelper.StripBBCode( HtmlHelper.StripHtml(HtmlHelper.CleanHtmlString((string)this._topic["Topic"]))).RemoveMultipleWhitespace(); var tweetUrl = "http://twitter.com/share?url={0}&text={1}".FormatWith( this.Server.UrlEncode(topicUrl), this.Server.UrlEncode( "RT {1}Thread: {0}".FormatWith(twitterMsg.Truncate(100), twitterName))); // Send Retweet Directlly thru the Twitter API if User is Twitter User if (Config.TwitterConsumerKey.IsSet() && Config.TwitterConsumerSecret.IsSet() && this.Get<IYafSession>().TwitterToken.IsSet() && this.Get<IYafSession>().TwitterTokenSecret.IsSet() && this.PageContext.IsTwitterUser) { var oAuth = new OAuthTwitter { ConsumerKey = Config.TwitterConsumerKey, ConsumerSecret = Config.TwitterConsumerSecret, Token = this.Get<IYafSession>().TwitterToken, TokenSecret = this.Get<IYafSession>().TwitterTokenSecret }; var tweets = new TweetAPI(oAuth); tweets.UpdateStatus( TweetAPI.ResponseFormat.json, this.Server.UrlEncode( "RT {1}: {0} {2}".FormatWith(twitterMsg.Truncate(100), twitterName, topicUrl)), string.Empty); } else { this.Get<HttpResponseBase>().Redirect(tweetUrl); } } break; case "digg": { var diggUrl = "http://digg.com/submit?url={0}&title={1}".FormatWith( this.Server.UrlEncode(topicUrl), this.Server.UrlEncode((string)this._topic["Topic"])); this.Get<HttpResponseBase>().Redirect(diggUrl); } break; case "reddit": { var redditUrl = "http://www.reddit.com/submit?url={0}&title={1}".FormatWith( this.Server.UrlEncode(topicUrl), this.Server.UrlEncode((string)this._topic["Topic"])); this.Get<HttpResponseBase>().Redirect(redditUrl); } break; case "googleplus": { var googlePlusUrl = "https://plusone.google.com/_/+1/confirm?hl=en&url={0}".FormatWith( this.Server.UrlEncode(topicUrl)); this.Get<HttpResponseBase>().Redirect(googlePlusUrl); } break; default: throw new ApplicationException(e.Item); } }
/// <summary> /// Logins the or create user. /// </summary> /// <param name="request"> /// The request. /// </param> /// <param name="parameters"> /// The parameters. /// </param> /// <param name="message"> /// The message. /// </param> /// <returns> /// Returns if Login was successful or not /// </returns> public bool LoginOrCreateUser(HttpRequest request, string parameters, out string message) { var oAuth = new OAuthTwitter { ConsumerKey = Config.TwitterConsumerKey, ConsumerSecret = Config.TwitterConsumerSecret }; // Get the access token and secret. oAuth.AccessTokenGet(request["oauth_token"], request["oauth_verifier"]); if (oAuth.TokenSecret.Length > 0) { var tweetAPI = new TweetAPI(oAuth); var twitterUser = tweetAPI.GetUser(); if (twitterUser.UserId > 0) { // Check if user exists var checkUser = YafContext.Current.Get<MembershipProvider>().GetUser(twitterUser.UserName, false); // Login user if exists if (checkUser == null) { return CreateTwitterUser(twitterUser, oAuth, out message); } // LOGIN Existing User var yafUser = YafUserProfile.GetProfile(checkUser.UserName); var yafUserData = new CombinedUserDataHelper(checkUser); if (yafUser.Twitter.IsNotSet() && yafUser.TwitterId.IsNotSet()) { // user with the same name exists but account is not connected, exit! message = YafContext.Current.Get<ILocalization>().GetText("LOGIN", "SSO_TWITTER_FAILED"); return false; } if (yafUser.Twitter.Equals(twitterUser.UserName) && yafUser.TwitterId.Equals(twitterUser.UserId.ToString())) { LoginTwitterSuccess(false, oAuth, yafUserData.UserID, checkUser); message = string.Empty; return true; } message = YafContext.Current.Get<ILocalization>().GetText("LOGIN", "SSO_TWITTERID_NOTMATCH"); return false; // User does not exist create new user } } message = YafContext.Current.Get<ILocalization>().GetText("LOGIN", "SSO_TWITTER_FAILED"); return false; }
/// <summary> /// Send an Private Message to the Newly Created User with /// his Account Info (Pass, Security Question and Answer) /// </summary> /// <param name="user"> /// The user. /// </param> /// <param name="pass"> /// The pass. /// </param> /// <param name="securityAnswer"> /// The security answer. /// </param> /// <param name="userId"> /// The user Id. /// </param> /// <param name="oAuth"> /// The oAUTH. /// </param> private static void SendRegistrationMessageToTwitterUser( [NotNull] MembershipUser user, [NotNull] string pass, [NotNull] string securityAnswer, [NotNull] int userId, OAuthTwitter oAuth) { var notifyUser = new YafTemplateEmail(); var subject = YafContext.Current.Get<ILocalization>() .GetText("COMMON", "NOTIFICATION_ON_NEW_FACEBOOK_USER_SUBJECT") .FormatWith(YafContext.Current.Get<YafBoardSettings>().Name); notifyUser.TemplateParams["{user}"] = user.UserName; notifyUser.TemplateParams["{email}"] = user.Email; notifyUser.TemplateParams["{pass}"] = pass; notifyUser.TemplateParams["{answer}"] = securityAnswer; notifyUser.TemplateParams["{forumname}"] = YafContext.Current.Get<YafBoardSettings>().Name; var emailBody = notifyUser.ProcessTemplate("NOTIFICATION_ON_TWITTER_REGISTER"); var messageFlags = new MessageFlags { IsHtml = false, IsBBCode = true }; // Send Message also as DM to Twitter. var tweetApi = new TweetAPI(oAuth); var message = "{0}. {1}".FormatWith( subject, YafContext.Current.Get<ILocalization>().GetText("LOGIN", "TWITTER_DM")); if (YafContext.Current.Get<YafBoardSettings>().AllowPrivateMessages) { LegacyDb.pmessage_save(2, userId, subject, emailBody, messageFlags.BitValue, -1); } else { message = YafContext.Current.Get<ILocalization>() .GetTextFormatted( "LOGIN", "TWITTER_DM_ACCOUNT", YafContext.Current.Get<YafBoardSettings>().Name, user.UserName, pass); } try { tweetApi.SendDirectMessage(TweetAPI.ResponseFormat.json, user.UserName, message.Truncate(140)); } catch (Exception ex) { YafContext.Current.Get<ILogger>().Error(ex, "Error while sending Twitter DM Message"); } }
/// <summary> /// Connects the user. /// </summary> /// <param name="request"> /// The request. /// </param> /// <param name="parameters"> /// The parameters. /// </param> /// <param name="message"> /// The message. /// </param> /// <returns> /// Returns if the connect was successful or not /// </returns> public bool ConnectUser(HttpRequest request, string parameters, out string message) { var oAuth = new OAuthTwitter { ConsumerKey = Config.TwitterConsumerKey, ConsumerSecret = Config.TwitterConsumerSecret }; // Get the access token and secret. oAuth.AccessTokenGet(request["oauth_token"], request["oauth_verifier"]); if (oAuth.TokenSecret.Length > 0) { var tweetAPI = new TweetAPI(oAuth); var twitterUser = tweetAPI.GetUser(); if (twitterUser.UserId > 0) { // Create User if not exists?! if (!YafContext.Current.IsGuest && !YafContext.Current.Get<YafBoardSettings>().DisableRegistrations) { // Because twitter doesn't provide the email we need to match the user name... if (twitterUser.UserName != YafContext.Current.Profile.UserName) { message = YafContext.Current.Get<ILocalization>() .GetText("LOGIN", "SSO_TWITTERNAME_NOTMATCH"); return false; } // Update profile with twitter informations YafUserProfile userProfile = YafContext.Current.Profile; userProfile.TwitterId = twitterUser.UserId.ToString(); userProfile.Twitter = twitterUser.UserName; userProfile.Homepage = twitterUser.Url.IsSet() ? twitterUser.Url : "http://twitter.com/{0}".FormatWith(twitterUser.UserName); userProfile.RealName = twitterUser.Name; userProfile.Interests = twitterUser.Description; userProfile.Location = twitterUser.Location; userProfile.Save(); // save avatar if (twitterUser.ProfileImageUrl.IsSet()) { LegacyDb.user_saveavatar( YafContext.Current.PageUserID, twitterUser.ProfileImageUrl, null, null); } YafSingleSignOnUser.LoginSuccess(AuthService.twitter, null, YafContext.Current.PageUserID, false); message = string.Empty; return true; } } } message = YafContext.Current.Get<ILocalization>().GetText("LOGIN", "SSO_TWITTER_FAILED"); return false; }
/// <summary> /// Gets the twitter user info as JSON string for the hover cards /// </summary> /// <param name="context">The context.</param> private void GetTwitterUserInfo([NotNull] HttpContext context) { try { var twitterName = context.Request.QueryString.GetFirstOrDefault("twitterinfo").ToType<string>(); if (!Config.IsTwitterEnabled) { context.Response.Write( "Error: Resource has been moved or is unavailable. Please contact the forum admin."); return; } var oAuth = new OAuthTwitter { ConsumerKey = Config.TwitterConsumerKey, ConsumerSecret = Config.TwitterConsumerSecret, Token = Config.TwitterToken, TokenSecret = Config.TwitterTokenSecret }; var tweetAPI = new TweetAPI(oAuth); context.Response.Write(tweetAPI.UsersLookupJson(twitterName)); HttpContext.Current.ApplicationInstance.CompleteRequest(); } catch (Exception x) { this.Get<ILogger>().Log(YafContext.Current.PageUserID, this, x, EventLogTypes.Information); context.Response.Write( "Error: Resource has been moved or is unavailable. Please contact the forum admin."); } }
// /// <summary> // /// Retweets Message thru the Twitter API // /// </summary> // /// <param name="sender"> // /// The source of the event. // /// </param> // /// <param name="e"> // /// The <see cref="System.EventArgs"/> instance containing the event data. // /// </param> protected void Retweet_Click(object sender, EventArgs e) { var twitterName = this.Get<YafBoardSettings>().TwitterUserName.IsSet() ? "@{0} ".FormatWith(this.Get<YafBoardSettings>().TwitterUserName) : string.Empty; //breaks here var twitterMsg = BBCodeHelper.StripBBCode( HtmlHelper.StripHtml(HtmlHelper.CleanHtmlString(this.PostInformation))).RemoveMultipleWhitespace(); if (Config.TwitterConsumerKey.IsSet() && Config.TwitterConsumerSecret.IsSet() && this.Get<IYafSession>().TwitterToken.IsSet() && this.Get<IYafSession>().TwitterTokenSecret.IsSet() && this.Get<IYafSession>().TwitterTokenSecret.IsSet() && this.PageContext.IsTwitterUser) { var oAuth = new OAuthTwitter { ConsumerKey = Config.TwitterConsumerKey, ConsumerSecret = Config.TwitterConsumerSecret, Token = this.Get<IYafSession>().TwitterToken, TokenSecret = this.Get<IYafSession>().TwitterTokenSecret }; var tweets = new TweetAPI(oAuth); tweets.UpdateStatus( TweetAPI.ResponseFormat.json, this.Server.UrlEncode("RT {1}: {0} {2}".FormatWith(twitterMsg.Truncate(100), twitterName, HttpContext.Current.Request.Url.AbsoluteUri)), string.Empty); } else { this.Get<HttpResponseBase>().Redirect( "http://twitter.com/share?url={0}&text={1}".FormatWith( this.Server.UrlEncode(this.Get<HttpRequestBase>().Url.ToString()), this.Server.UrlEncode( "RT {1}: {0} {2}".FormatWith(twitterMsg.Truncate(100), twitterName, HttpContext.Current.Request.Url.AbsoluteUri)))); } }