private void HandleMsg(ChatUser user, string[] parts) { if (_repository.Users.Count() == 1) { throw new InvalidOperationException("You're the only person in here..."); } if (parts.Length < 2 || String.IsNullOrWhiteSpace(parts[1])) { throw new InvalidOperationException("Who are you trying send a private message to?"); } var toUserName = parts[1]; ChatUser toUser = _repository.VerifyUser(toUserName); if (toUser == user) { throw new InvalidOperationException("You can't private message yourself!"); } string messageText = String.Join(" ", parts.Skip(2)).Trim(); if (String.IsNullOrEmpty(messageText)) { throw new InvalidOperationException(String.Format("What did you want to say to '{0}'.", toUser.Name)); } HashSet <string> urls; var transform = new TextTransform(_repository); messageText = transform.Parse(messageText); messageText = TextTransform.TransformAndExtractUrls(messageText, out urls); _notificationService.SendPrivateMessage(user, toUser, messageText); }
public override void Execute(CommandContext context, CallerContext callerContext, ChatUser callingUser, string[] args) { if (context.Repository.Users.Count() == 1) { throw new InvalidOperationException("You're the only person in here..."); } if (args.Length == 0 || String.IsNullOrWhiteSpace(args[0])) { throw new InvalidOperationException("Who are you trying send a private message to?"); } var toUserName = HttpUtility.HtmlDecode(args[0]); ChatUser toUser = context.Repository.VerifyUser(toUserName); if (toUser == callingUser) { throw new InvalidOperationException("You can't private message yourself!"); } string messageText = String.Join(" ", args.Skip(1)).Trim(); if (String.IsNullOrEmpty(messageText)) { throw new InvalidOperationException(String.Format("What did you want to say to '{0}'?", toUser.Name)); } HashSet <string> urls; var transform = new TextTransform(context.Repository); messageText = transform.Parse(messageText); messageText = TextTransform.TransformAndExtractUrls(messageText, out urls); context.NotificationService.SendPrivateMessage(callingUser, toUser, messageText); }
private string ParseChatMessageText(string content, out HashSet <string> links) { var textTransform = new TextTransform(_repository); string message = textTransform.Parse(content); return(TextTransform.TransformAndExtractUrls(message, out links)); }
private string ConvertUrlsAndRoomLinks(string message) { TextTransform textTransform = new TextTransform(_repository); message = textTransform.ConvertHashtagsToRoomLinks(message); HashSet <string> urls; return(TextTransform.TransformAndExtractUrls(message, out urls)); }
public void DoNotUnescapeHtmlEntities() { //arrange var message = System.Web.HttpUtility.HtmlEncode("<a href=\"#\" onclick=\"alert('fail')>clickme</a>"); HashSet <string> extractedUrls; //act var result = TextTransform.TransformAndExtractUrls(message, out extractedUrls); //assert Assert.Equal(message, result); }
public void EncodedUrlWithTrailingQuotationsMatchesUrlButNotTrailingQuotation() { // Arrange var message = ""Visit http://www.jabbr.net/""; HashSet <string> extractedUrls; // Act var result = TextTransform.TransformAndExtractUrls(message, out extractedUrls); // Assert Assert.Equal("\"Visit <a rel=\"nofollow external\" target=\"_blank\" href=\"http://www.jabbr.net/\" title=\"http://www.jabbr.net/\">http://www.jabbr.net/</a>\"", result); }
public void UrlWithHttpsIsTransformed() { //arrange var message = "message https://www.jabbr.net continues on"; HashSet <string> extractedUrls; //act var result = TextTransform.TransformAndExtractUrls(message, out extractedUrls); //assert Assert.Equal("message <a rel=\"nofollow external\" target=\"_blank\" href=\"https://www.jabbr.net\" title=\"https://www.jabbr.net\">https://www.jabbr.net</a> continues on", result); }
public void UrlWithAmpersand() { //arrange var message = "message http://google.com/?1&2 continues on"; HashSet <string> extractedUrls; //act var result = TextTransform.TransformAndExtractUrls(message, out extractedUrls); //assert Assert.Equal("message <a rel=\"nofollow external\" target=\"_blank\" href=\"http://google.com/?1&2\" title=\"http://google.com/?1&2\">http://google.com/?1&2</a> continues on", result); }
public void UrlWithCallbacks() { //arrange var message = @"http://a.co/a.png#"onerror='alert("Eek!")'"; HashSet <string> extractedUrls; //act var result = TextTransform.TransformAndExtractUrls(message, out extractedUrls); //assert Assert.Equal(@"http://a.co/a.png#"onerror='alert("Eek!")'", result); }
public void UrlWithEllipsisIsTransformed() { //arrange var message = "message https://github.com/NuGet/NuGetGallery/compare/345ea25491...90a05bc3e0 continues on"; HashSet <string> extractedUrls; //act var result = TextTransform.TransformAndExtractUrls(message, out extractedUrls); //assert Assert.Equal("message <a rel=\"nofollow external\" target=\"_blank\" href=\"https://github.com/NuGet/NuGetGallery/compare/345ea25491...90a05bc3e0\" title=\"https://github.com/NuGet/NuGetGallery/compare/345ea25491...90a05bc3e0\">https://github.com/NuGet/NuGetGallery/compare/345ea25491...90a05bc3e0</a> continues on", result); }
public void UrlWithUnicodeIsTransformed() { //arrange var message = "message http://➡.ws/䨹 continues on"; HashSet <string> extractedUrls; //act var result = TextTransform.TransformAndExtractUrls(message, out extractedUrls); //assert Assert.Equal("message <a rel=\"nofollow external\" target=\"_blank\" href=\"http://➡.ws/䨹\" title=\"http://➡.ws/䨹\">http://➡.ws/䨹</a> continues on", result); }
public void UrlWithInvalidButEscapedCharactersMatchesValidUrlSection() { //arrange var message = "message http://google.com/<a> continues on"; HashSet <string> extractedUrls; //act var result = TextTransform.TransformAndExtractUrls(message, out extractedUrls); //assert Assert.Equal("message <a rel=\"nofollow external\" target=\"_blank\" href=\"http://google.com/\" title=\"http://google.com/\">http://google.com/</a><a> continues on", result); }
public void BothParenthesis() { //arrange var message = @"(http://foo.com)"; HashSet <string> extractedUrls; //act var result = TextTransform.TransformAndExtractUrls(message, out extractedUrls); //assert Assert.Equal("(<a rel=\"nofollow external\" target=\"_blank\" href=\"http://foo.com\" title=\"http://foo.com\">http://foo.com</a>)", result); }
public void UrlWithInvalidButEscapedCharacters() { //arrange var message = "message http://google.com/<a> continues on"; HashSet <string> extractedUrls; //act var result = TextTransform.TransformAndExtractUrls(message, out extractedUrls); //assert Assert.Equal("message http://google.com/<a> continues on", result); }
public void UrlInsideAQuotedSentence() { //arrange var message = "This is a sentence with quotes and a url ... see \"http://foo.com\""; HashSet <string> extractedUrls; //act var result = TextTransform.TransformAndExtractUrls(message, out extractedUrls); //assert Assert.Equal("This is a sentence with quotes and a url ... see \"<a rel=\"nofollow external\" target=\"_blank\" href=\"http://foo.com\" title=\"http://foo.com\">http://foo.com</a>\"", result); }
public void UrlEndsWithSlashInsideAQuotedSentence() { //arrange var message = "\"Visit http://www.jabbr.net/\""; HashSet <string> extractedUrls; //act var result = TextTransform.TransformAndExtractUrls(message, out extractedUrls); //assert Assert.Equal("\"Visit <a rel=\"nofollow external\" target=\"_blank\" href=\"http://www.jabbr.net/\" title=\"http://www.jabbr.net/\">http://www.jabbr.net/</a>\"", result); }
public void UnicodeInParens() { //arrange var message = @"http://foo.com/unicode_(✪)_in_parens"; HashSet <string> extractedUrls; //act var result = TextTransform.TransformAndExtractUrls(message, out extractedUrls); //assert Assert.Equal("<a rel=\"nofollow external\" target=\"_blank\" href=\"http://foo.com/unicode_(✪)_in_parens\" title=\"http://foo.com/unicode_(✪)_in_parens\">http://foo.com/unicode_(✪)_in_parens</a>", result); }
public void SomethingAfterParens() { //arrange var message = @"http://foo.com/(something)?after=parens"; HashSet <string> extractedUrls; //act var result = TextTransform.TransformAndExtractUrls(message, out extractedUrls); //assert Assert.Equal("<a rel=\"nofollow external\" target=\"_blank\" href=\"http://foo.com/(something)?after=parens\" title=\"http://foo.com/(something)?after=parens\">http://foo.com/(something)?after=parens</a>", result); }
public void WikiWithParensAndMoreAndHash() { //arrange var message = @"http://foo.com/blah_(wikipedia)_blah#cite-1"; HashSet <string> extractedUrls; //act var result = TextTransform.TransformAndExtractUrls(message, out extractedUrls); //assert Assert.Equal("<a rel=\"nofollow external\" target=\"_blank\" href=\"http://foo.com/blah_(wikipedia)_blah#cite-1\" title=\"http://foo.com/blah_(wikipedia)_blah#cite-1\">http://foo.com/blah_(wikipedia)_blah#cite-1</a>", result); }
public void BitLyWithoutHttp() { //arrange var message = @"bit.ly/foo"; HashSet <string> extractedUrls; //act var result = TextTransform.TransformAndExtractUrls(message, out extractedUrls); //assert Assert.Equal("<a rel=\"nofollow external\" target=\"_blank\" href=\"http://bit.ly/foo\" title=\"bit.ly/foo\">bit.ly/foo</a>", result); }
public void MSDN() { //arrange var message = @"http://msdn.microsoft.com/en-us/library/system.linq.enumerable(v=vs.110).aspx"; HashSet <string> extractedUrls; //act var result = TextTransform.TransformAndExtractUrls(message, out extractedUrls); //assert Assert.Equal("<a rel=\"nofollow external\" target=\"_blank\" href=\"http://msdn.microsoft.com/en-us/library/system.linq.enumerable(v=vs.110).aspx\" title=\"http://msdn.microsoft.com/en-us/library/system.linq.enumerable(v=vs.110).aspx\">http://msdn.microsoft.com/en-us/library/system.linq.enumerable(v=vs.110).aspx</a>", result); }
public void MoreThanOneSetOfParens() { //arrange var message = @"http://foo.com/more_(than)_one_(parens)"; HashSet <string> extractedUrls; //act var result = TextTransform.TransformAndExtractUrls(message, out extractedUrls); //assert Assert.Equal("<a rel=\"nofollow external\" target=\"_blank\" href=\"http://foo.com/more_(than)_one_(parens)\" title=\"http://foo.com/more_(than)_one_(parens)\">http://foo.com/more_(than)_one_(parens)</a>", result); }
public void UrlWithSingleTrailingParanthesisMatchesCloseBracketAsText() { // Arrange var message = "(message http://www.jabbr.net/) doesn't match the outside brackets"; HashSet <string> extractedUrls; // Act var result = TextTransform.TransformAndExtractUrls(message, out extractedUrls); // Assert Assert.Equal("(message <a rel=\"nofollow external\" target=\"_blank\" href=\"http://www.jabbr.net/\" title=\"http://www.jabbr.net/\">http://www.jabbr.net/</a>) doesn't match the outside brackets", result); }
public void UrlsThatContainCommasAreEncodedEntirely() { // Arrange var message = @"found him, hes https://twitter.com/d,r,e,a,m,e,r,3, sent him a tweet"; HashSet <string> extractedUrls; // Act var result = TextTransform.TransformAndExtractUrls(message, out extractedUrls); // Assert Assert.Equal("found him, hes <a rel=\"nofollow external\" target=\"_blank\" href=\"https://twitter.com/d,r,e,a,m,e,r,3\" title=\"https://twitter.com/d,r,e,a,m,e,r,3\">https://twitter.com/d,r,e,a,m,e,r,3</a>, sent him a tweet", result); }
public void UrlsFollowedByACommaDontEncodeTheComma() { // Arrange var message = @"found him, hes https://twitter.com/dreamer3, sent him a tweet"; HashSet <string> extractedUrls; // Act var result = TextTransform.TransformAndExtractUrls(message, out extractedUrls); // Assert Assert.Equal("found him, hes <a rel=\"nofollow external\" target=\"_blank\" href=\"https://twitter.com/dreamer3\" title=\"https://twitter.com/dreamer3\">https://twitter.com/dreamer3</a>, sent him a tweet", result); }
public void LocalHost() { //arrange var message = @"http://localhost/foo"; HashSet <string> extractedUrls; //act var result = TextTransform.TransformAndExtractUrls(message, out extractedUrls); //assert Assert.Equal("<a rel=\"nofollow external\" target=\"_blank\" href=\"http://localhost/foo\" title=\"http://localhost/foo\">http://localhost/foo</a>", result); }
public void GoogleUrlWithQueryStringParams() { //arrange var message = "https://www.google.com/search?q=test+search&sugexp=chrome,mod=14&sourceid=chrome&ie=UTF-8"; HashSet <string> extractedUrls; //act var result = TextTransform.TransformAndExtractUrls(message, out extractedUrls); //assert Assert.Equal("<a rel=\"nofollow external\" target=\"_blank\" href=\"https://www.google.com/search?q=test+search&sugexp=chrome,mod=14&sourceid=chrome&ie=UTF-8\" title=\"https://www.google.com/search?q=test+search&sugexp=chrome,mod=14&sourceid=chrome&ie=UTF-8\">https://www.google.com/search?q=test+search&sugexp=chrome,mod=14&sourceid=chrome&ie=UTF-8</a>", result); //Assert.Equal("<a rel=\"nofollow external\" target=\"_blank\" href=\"https://www.google.com/search?q=test+search&sugexp=chrome,mod=14&sourceid=chrome&ie=UTF-8\" title=\"https://www.google.com/search?q=test+search&sugexp=chrome,mod=14&sourceid=chrome&ie=UTF-8\">https://www.google.com/search?q=test+search&sugexp=chrome,mod=14&sourceid=chrome&ie=UTF-8</a>", result); }
public override void ExecuteAdminOperation(CommandContext context, CallerContext callerContext, Models.ChatUser callingUser, string[] args) { string messageText = String.Join(" ", args).Trim(); if (String.IsNullOrEmpty(messageText)) { throw new InvalidOperationException("What did you want to broadcast?"); } HashSet <string> urls; var transform = new TextTransform(context.Repository); messageText = transform.Parse(messageText); messageText = TextTransform.TransformAndExtractUrls(messageText, out urls); context.NotificationService.BroadcastMessage(callingUser, messageText); }
private void HandleBroadcast(ChatUser user, string[] parts) { if (!user.IsAdmin) { throw new InvalidOperationException("You are not an admin."); } string messageText = String.Join(" ", parts.Skip(1)).Trim(); if (String.IsNullOrEmpty(messageText)) { throw new InvalidOperationException("What did you want to broadcast?"); } HashSet <string> urls; var transform = new TextTransform(_repository); messageText = transform.Parse(messageText); messageText = TextTransform.TransformAndExtractUrls(messageText, out urls); _notificationService.BroadcastMessage(user, messageText); }