Esempio n. 1
0
        /// <summary>
        /// Converts a dictionary object to a query string representation such as:
        /// firstname=shannon&lastname=deminick
        /// </summary>
        /// <param name="d"></param>
        /// <param name="urlEncoder"></param>
        /// <returns></returns>
        public static string ToQueryString(this IDictionary<string, object> d, IUrlEncoder urlEncoder)
        {
            if (!d.Any()) return "";

            var builder = new StringBuilder();
            foreach (var i in d)
            {
                builder.Append($"{urlEncoder.UrlEncode(i.Key)}={(i.Value == null ? string.Empty : urlEncoder.UrlEncode(i.Value.ToString()))}&");
            }
            return builder.ToString().TrimEnd('&');
        }
Esempio n. 2
0
        /// <summary>
        /// This is used in methods like BeginUmbracoForm and SurfaceAction to generate an encrypted string which gets submitted in a request for which
        /// Umbraco can decrypt during the routing process in order to delegate the request to a specific MVC Controller.
        /// </summary>
        /// <param name="urlEncoder"></param>
        /// <param name="controllerName"></param>
        /// <param name="controllerAction"></param>
        /// <param name="area"></param>
        /// <param name="additionalRouteVals"></param>
        /// <returns></returns>
        public string CreateEncryptedRouteString(IUrlEncoder urlEncoder, string controllerName, string controllerAction, string area, object additionalRouteVals = null)
        {
            //need to create a params string as Base64 to put into our hidden field to use during the routes
            var surfaceRouteParams = $"{ReservedAdditionalKeys.Controller}={urlEncoder.UrlEncode(controllerName)}&{ReservedAdditionalKeys.Action}={urlEncoder.UrlEncode(controllerAction)}&{ReservedAdditionalKeys.Area}={area}";

            var additionalRouteValsAsQuery = additionalRouteVals?.ToDictionary<object>().ToQueryString(urlEncoder);

            if (string.IsNullOrWhiteSpace(additionalRouteValsAsQuery) == false)
                surfaceRouteParams += "&" + additionalRouteValsAsQuery;

            return Convert.ToBase64String(_dataProtector.Protect(Encoding.UTF8.GetBytes(surfaceRouteParams)));
        }
        //TODO: Need to implement something similar
        /// <summary>
        /// This is used in methods like BeginUmbracoForm and SurfaceAction to generate an encrypted string which gets submitted in a request for which
        /// Umbraco can decrypt during the routing process in order to delegate the request to a specific MVC Controller.
        /// </summary>
        /// <param name="urlEncoder"></param>
        /// <param name="controllerName"></param>
        /// <param name="controllerAction"></param>
        /// <param name="area"></param>
        /// <param name="additionalRouteVals"></param>
        /// <returns></returns>
        internal static string CreateEncryptedRouteString(IUrlEncoder urlEncoder, string controllerName, string controllerAction, string area, object additionalRouteVals = null)
        {
            //need to create a params string as Base64 to put into our hidden field to use during the routes
            var surfaceRouteParams = $"c={urlEncoder.UrlEncode(controllerName)}&a={urlEncoder.UrlEncode(controllerAction)}&ar={area}";

            var additionalRouteValsAsQuery = additionalRouteVals ?. ToDictionary<object>().ToQueryString(urlEncoder);

            if (string.IsNullOrWhiteSpace(additionalRouteValsAsQuery) == false)
                surfaceRouteParams += "&" + additionalRouteValsAsQuery;

            //TODO: We need to encrypt! for now we'll base64 :(
            //return surfaceRouteParams.EncryptWithMachineKey();

            return Convert.ToBase64String(Encoding.UTF8.GetBytes(surfaceRouteParams));
        }
Esempio n. 4
0
        //TODO: Need to implement something similar
        /// <summary>
        /// This is used in methods like BeginUmbracoForm and SurfaceAction to generate an encrypted string which gets submitted in a request for which
        /// Umbraco can decrypt during the routing process in order to delegate the request to a specific MVC Controller.
        /// </summary>
        /// <param name="urlEncoder"></param>
        /// <param name="controllerName"></param>
        /// <param name="controllerAction"></param>
        /// <param name="area"></param>
        /// <param name="additionalRouteVals"></param>
        /// <returns></returns>
        internal static string CreateEncryptedRouteString(IUrlEncoder urlEncoder, string controllerName, string controllerAction, string area, object additionalRouteVals = null)
        {
            //need to create a params string as Base64 to put into our hidden field to use during the routes
            var surfaceRouteParams = $"c={urlEncoder.UrlEncode(controllerName)}&a={urlEncoder.UrlEncode(controllerAction)}&ar={area}";

            var additionalRouteValsAsQuery = additionalRouteVals?.ToDictionary <object>().ToQueryString(urlEncoder);

            if (string.IsNullOrWhiteSpace(additionalRouteValsAsQuery) == false)
            {
                surfaceRouteParams += "&" + additionalRouteValsAsQuery;
            }

            //TODO: We need to encrypt! for now we'll base64 :(
            //return surfaceRouteParams.EncryptWithMachineKey();

            return(Convert.ToBase64String(Encoding.UTF8.GetBytes(surfaceRouteParams)));
        }
        /// <summary>
        /// URL-encodes a string and writes the result to the supplied output.
        /// </summary>
        /// <remarks>
        /// The encoded value is safe for use in the segment, query, or
        /// fragment portion of a URI.
        /// </remarks>
        public static void UrlEncode(this IUrlEncoder urlEncoder, string value, TextWriter output)
        {
            if (urlEncoder == null)
            {
                throw new ArgumentNullException(nameof(urlEncoder));
            }

            if (!String.IsNullOrEmpty(value))
            {
                urlEncoder.UrlEncode(value, 0, value.Length, output);
            }
        }
Esempio n. 6
0
        /// <summary>
        /// This is used in methods like BeginUmbracoForm and SurfaceAction to generate an encrypted string which gets submitted in a request for which
        /// Umbraco can decrypt during the routing process in order to delegate the request to a specific MVC Controller.
        /// </summary>
        /// <param name="urlEncoder"></param>
        /// <param name="controllerName"></param>
        /// <param name="controllerAction"></param>
        /// <param name="area"></param>
        /// <param name="additionalRouteVals"></param>
        /// <returns></returns>
        public string CreateEncryptedRouteString(IUrlEncoder urlEncoder, string controllerName, string controllerAction, string area, object additionalRouteVals = null)
        {
            //need to create a params string as Base64 to put into our hidden field to use during the routes
            var surfaceRouteParams = $"{ReservedAdditionalKeys.Controller}={urlEncoder.UrlEncode(controllerName)}&{ReservedAdditionalKeys.Action}={urlEncoder.UrlEncode(controllerAction)}&{ReservedAdditionalKeys.Area}={area}";

            var additionalRouteValsAsQuery = additionalRouteVals?.ToDictionary <object>().ToQueryString(urlEncoder);

            if (string.IsNullOrWhiteSpace(additionalRouteValsAsQuery) == false)
            {
                surfaceRouteParams += "&" + additionalRouteValsAsQuery;
            }

            return(Convert.ToBase64String(_dataProtector.Protect(Encoding.UTF8.GetBytes(surfaceRouteParams))));
        }
Esempio n. 7
0
        /// <summary>
        /// Converts a dictionary object to a query string representation such as:
        /// firstname=shannon&lastname=deminick
        /// </summary>
        /// <param name="d"></param>
        /// <param name="urlEncoder"></param>
        /// <returns></returns>
        public static string ToQueryString(this IDictionary <string, object> d, IUrlEncoder urlEncoder)
        {
            if (!d.Any())
            {
                return("");
            }

            var builder = new StringBuilder();

            foreach (var i in d)
            {
                builder.Append($"{urlEncoder.UrlEncode(i.Key)}={(i.Value == null ? string.Empty : urlEncoder.UrlEncode(i.Value.ToString()))}&");
            }
            return(builder.ToString().TrimEnd('&'));
        }