Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
 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,
     });
 }
Пример #5
0
        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;
            }
        }