private static ReadOnlyUrl GetUrl(TinyUrlMapping mapping) { if (string.IsNullOrEmpty(mapping.Definition)) { return(mapping.LongUrl); } // Add in tracking parameters. var url = mapping.LongUrl.AsNonReadOnly(); // If it is a login or activation page then change the returnUrl parameter. if (url.Path.EndsWith("/login") || url.Path.EndsWith("/activation")) { var queryStringReturnUrl = url.QueryString["returnUrl"]; if (queryStringReturnUrl != null) { var returnUrl = new ApplicationUrl(queryStringReturnUrl); AddTracking(mapping.Definition, returnUrl); url.QueryString["returnUrl"] = returnUrl.PathAndQuery; return(url); } } AddTracking(mapping.Definition, url); return(url); }
private void AssertTinyUrl(ReadOnlyUrl url, TinyUrlMapping mapping) { Get(url); var expectedUrl = mapping.LongUrl.AsNonReadOnly(); expectedUrl.QueryString["utm_source"] = "linkme"; expectedUrl.QueryString["utm_medium"] = "email"; expectedUrl.QueryString["utm_campaign"] = mapping.Definition.ToLower(); AssertUrl(expectedUrl); }
public void TestTinyUrlBracket() { var mapping = new TinyUrlMapping { TinyId = Guid.NewGuid(), Definition = "PasswordReminderEmail", LongUrl = new ReadOnlyApplicationUrl("~/terms"), }; _tinyUrlCommand.CreateMappings(new[] { mapping }); var url = new ReadOnlyApplicationUrl("~/url/" + mapping.TinyId.ToString("n") + ">"); AssertTinyUrl(url, mapping); }
public static TinyUrlMappingEntity Map(this TinyUrlMapping mapping, string longUrl, bool secure) { return(new TinyUrlMappingEntity { createdTime = mapping.CreatedTime, tinyId = mapping.TinyId, webSite = (byte)mapping.WebSite, verticalId = mapping.VerticalId ?? Guid.Empty, secure = secure, longUrl = longUrl, contextId = mapping.ContextId, definition = mapping.Definition, mimeType = mapping.MimeType, instance = mapping.Instance, userId = mapping.UserId, }); }
private void GetLongUrlDetails(TinyUrlMapping mapping, out string longUrl, out bool secure) { secure = mapping.LongUrl.Scheme == Url.SecureScheme; // If the long url is not an application url then just return the absolute values. if (!(mapping.LongUrl is ApplicationUrl || mapping.LongUrl is ReadOnlyApplicationUrl)) { longUrl = mapping.LongUrl.AbsoluteUri; return; } // Compare the url against the root url to determine whether the long url can be stored as am application relative value. var applicationRootUrl = _webSiteQuery.GetUrl(mapping.WebSite, mapping.VerticalId, secure, "~/"); if (!mapping.LongUrl.AbsoluteUri.StartsWith(applicationRootUrl.AbsoluteUri, StringComparison.InvariantCultureIgnoreCase)) { longUrl = mapping.LongUrl.AbsoluteUri; } else { // Use the application relative path. string appRelativePathAndQuery; if (mapping.LongUrl is ApplicationUrl) { appRelativePathAndQuery = ((ApplicationUrl)mapping.LongUrl).AppRelativePathAndQuery; } else { appRelativePathAndQuery = ((ReadOnlyApplicationUrl)mapping.LongUrl).AppRelativePathAndQuery; } longUrl = "~" + appRelativePathAndQuery; } }