aboutsummaryrefslogtreecommitdiff
path: root/ServiceStack
diff options
context:
space:
mode:
Diffstat (limited to 'ServiceStack')
-rw-r--r--ServiceStack/Properties/AssemblyInfo.cs25
-rw-r--r--ServiceStack/ReflectionExtensions.cs168
-rw-r--r--ServiceStack/RestPath.cs486
-rw-r--r--ServiceStack/ServiceStack.csproj117
-rw-r--r--ServiceStack/ServiceStack.nuget.targets6
-rw-r--r--ServiceStack/ServiceStackHost.cs42
-rw-r--r--ServiceStack/StringMapTypeDeserializer.cs121
-rw-r--r--ServiceStack/UrlExtensions.cs33
-rw-r--r--ServiceStack/packages.config3
-rw-r--r--ServiceStack/project.json17
10 files changed, 0 insertions, 1018 deletions
diff --git a/ServiceStack/Properties/AssemblyInfo.cs b/ServiceStack/Properties/AssemblyInfo.cs
deleted file mode 100644
index 6073dc0b4..000000000
--- a/ServiceStack/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using System.Reflection;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("ServiceStack")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("Service Stack LLC")]
-[assembly: AssemblyProduct("ServiceStack")]
-[assembly: AssemblyCopyright("Copyright (c) ServiceStack 2016")]
-[assembly: AssemblyTrademark("Service Stack")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("06704d66-af8e-411f-8260-8d05de5ce6ad")]
-
-[assembly: AssemblyVersion("4.0.0.0")]
-[assembly: AssemblyFileVersion("4.0.0.0")]
diff --git a/ServiceStack/ReflectionExtensions.cs b/ServiceStack/ReflectionExtensions.cs
deleted file mode 100644
index 4bbf9e6ac..000000000
--- a/ServiceStack/ReflectionExtensions.cs
+++ /dev/null
@@ -1,168 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Reflection;
-
-namespace ServiceStack
-{
- public static class ReflectionExtensions
- {
- public static Type FirstGenericType(this Type type)
- {
- while (type != null)
- {
- if (type.IsGeneric())
- return type;
-
- type = type.BaseType();
- }
- return null;
- }
-
- public static Type GetTypeWithGenericTypeDefinitionOf(this Type type, Type genericTypeDefinition)
- {
- foreach (var t in type.GetTypeInterfaces())
- {
- if (t.IsGeneric() && t.GetGenericTypeDefinition() == genericTypeDefinition)
- {
- return t;
- }
- }
-
- var genericType = type.FirstGenericType();
- if (genericType != null && genericType.GetGenericTypeDefinition() == genericTypeDefinition)
- {
- return genericType;
- }
-
- return null;
- }
-
- public static PropertyInfo[] GetPublicProperties(this Type type)
- {
- if (type.IsInterface())
- {
- var propertyInfos = new List<PropertyInfo>();
-
- var considered = new List<Type>();
- var queue = new Queue<Type>();
- considered.Add(type);
- queue.Enqueue(type);
-
- while (queue.Count > 0)
- {
- var subType = queue.Dequeue();
- foreach (var subInterface in subType.GetTypeInterfaces())
- {
- if (considered.Contains(subInterface)) continue;
-
- considered.Add(subInterface);
- queue.Enqueue(subInterface);
- }
-
- var typeProperties = subType.GetTypesPublicProperties();
-
- var newPropertyInfos = typeProperties
- .Where(x => !propertyInfos.Contains(x));
-
- propertyInfos.InsertRange(0, newPropertyInfos);
- }
-
- return propertyInfos.ToArray();
- }
-
- return type.GetTypesPublicProperties()
- .Where(t => t.GetIndexParameters().Length == 0) // ignore indexed properties
- .ToArray();
- }
-
- public const string DataMember = "DataMemberAttribute";
-
- internal static string[] IgnoreAttributesNamed = new[] {
- "IgnoreDataMemberAttribute",
- "JsonIgnoreAttribute"
- };
-
- public static PropertyInfo[] GetSerializableProperties(this Type type)
- {
- var properties = type.GetPublicProperties();
- return properties.OnlySerializableProperties(type);
- }
-
-
- private static List<Type> _excludeTypes = new List<Type> { typeof(Stream) };
-
- public static PropertyInfo[] OnlySerializableProperties(this PropertyInfo[] properties, Type type = null)
- {
- var readableProperties = properties.Where(x => x.PropertyGetMethod(nonPublic: false) != null);
-
- // else return those properties that are not decorated with IgnoreDataMember
- return readableProperties
- .Where(prop => prop.AllAttributes()
- .All(attr =>
- {
- var name = attr.GetType().Name;
- return !IgnoreAttributesNamed.Contains(name);
- }))
- .Where(prop => !_excludeTypes.Contains(prop.PropertyType))
- .ToArray();
- }
- }
-
- public static class PlatformExtensions //Because WinRT is a POS
- {
- public static bool IsInterface(this Type type)
- {
- return type.GetTypeInfo().IsInterface;
- }
-
- public static bool IsGeneric(this Type type)
- {
- return type.GetTypeInfo().IsGenericType;
- }
-
- public static Type BaseType(this Type type)
- {
- return type.GetTypeInfo().BaseType;
- }
-
- public static Type[] GetTypeInterfaces(this Type type)
- {
- return type.GetTypeInfo().ImplementedInterfaces.ToArray();
- }
-
- internal static PropertyInfo[] GetTypesPublicProperties(this Type subType)
- {
- var pis = new List<PropertyInfo>();
- foreach (var pi in subType.GetRuntimeProperties())
- {
- var mi = pi.GetMethod ?? pi.SetMethod;
- if (mi != null && mi.IsStatic) continue;
- pis.Add(pi);
- }
- return pis.ToArray();
- }
-
- public static MethodInfo PropertyGetMethod(this PropertyInfo pi, bool nonPublic = false)
- {
- return pi.GetMethod;
- }
-
- public static object[] AllAttributes(this PropertyInfo propertyInfo)
- {
- return propertyInfo.GetCustomAttributes(true).ToArray();
- }
-
- public static object[] AllAttributes(this Type type)
- {
- return type.GetTypeInfo().GetCustomAttributes(true).ToArray();
- }
-
- public static List<TAttr> AllAttributes<TAttr>(this Type type)
- where TAttr : Attribute
- {
- return type.GetTypeInfo().GetCustomAttributes<TAttr>(true).ToList();
- }
- }
-}
diff --git a/ServiceStack/RestPath.cs b/ServiceStack/RestPath.cs
deleted file mode 100644
index 5e86001d3..000000000
--- a/ServiceStack/RestPath.cs
+++ /dev/null
@@ -1,486 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using MediaBrowser.Model.Logging;
-using ServiceStack.Serialization;
-
-namespace ServiceStack
-{
- public class RestPath
- {
- private const string WildCard = "*";
- private const char WildCardChar = '*';
- private const string PathSeperator = "/";
- private const char PathSeperatorChar = '/';
- private const char ComponentSeperator = '.';
- private const string VariablePrefix = "{";
-
- readonly bool[] componentsWithSeparators;
-
- private readonly string restPath;
- private readonly string allowedVerbs;
- private readonly bool allowsAllVerbs;
- public bool IsWildCardPath { get; private set; }
-
- private readonly string[] literalsToMatch;
-
- private readonly string[] variablesNames;
-
- private readonly bool[] isWildcard;
- private readonly int wildcardCount = 0;
-
- public int VariableArgsCount { get; set; }
-
- /// <summary>
- /// The number of segments separated by '/' determinable by path.Split('/').Length
- /// e.g. /path/to/here.ext == 3
- /// </summary>
- public int PathComponentsCount { get; set; }
-
- /// <summary>
- /// The total number of segments after subparts have been exploded ('.')
- /// e.g. /path/to/here.ext == 4
- /// </summary>
- public int TotalComponentsCount { get; set; }
-
- public string[] Verbs
- {
- get
- {
- return allowsAllVerbs
- ? new[] { "ANY" }
- : AllowedVerbs.Split(new[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries);
- }
- }
-
- public Type RequestType { get; private set; }
-
- public string Path { get { return this.restPath; } }
-
- public string Summary { get; private set; }
-
- public string Notes { get; private set; }
-
- public bool AllowsAllVerbs { get { return this.allowsAllVerbs; } }
-
- public string AllowedVerbs { get { return this.allowedVerbs; } }
-
- public int Priority { get; set; } //passed back to RouteAttribute
-
- public static string[] GetPathPartsForMatching(string pathInfo)
- {
- var parts = pathInfo.ToLower().Split(PathSeperatorChar)
- .Where(x => !string.IsNullOrEmpty(x)).ToArray();
- return parts;
- }
-
- public static List<string> GetFirstMatchHashKeys(string[] pathPartsForMatching)
- {
- var hashPrefix = pathPartsForMatching.Length + PathSeperator;
- return GetPotentialMatchesWithPrefix(hashPrefix, pathPartsForMatching);
- }
-
- public static List<string> GetFirstMatchWildCardHashKeys(string[] pathPartsForMatching)
- {
- const string hashPrefix = WildCard + PathSeperator;
- return GetPotentialMatchesWithPrefix(hashPrefix, pathPartsForMatching);
- }
-
- private static List<string> GetPotentialMatchesWithPrefix(string hashPrefix, string[] pathPartsForMatching)
- {
- var list = new List<string>();
-
- foreach (var part in pathPartsForMatching)
- {
- list.Add(hashPrefix + part);
-
- var subParts = part.Split(ComponentSeperator);
- if (subParts.Length == 1) continue;
-
- foreach (var subPart in subParts)
- {
- list.Add(hashPrefix + subPart);
- }
- }
-
- return list;
- }
-
- public RestPath(Type requestType, string path, string verbs, string summary = null, string notes = null)
- {
- this.RequestType = requestType;
- this.Summary = summary;
- this.Notes = notes;
- this.restPath = path;
-
- this.allowsAllVerbs = verbs == null || string.Equals(verbs, WildCard, StringComparison.OrdinalIgnoreCase);
- if (!this.allowsAllVerbs)
- {
- this.allowedVerbs = verbs.ToUpper();
- }
-
- var componentsList = new List<string>();
-
- //We only split on '.' if the restPath has them. Allows for /{action}.{type}
- var hasSeparators = new List<bool>();
- foreach (var component in this.restPath.Split(PathSeperatorChar))
- {
- if (string.IsNullOrEmpty(component)) continue;
-
- if (StringContains(component, VariablePrefix)
- && component.IndexOf(ComponentSeperator) != -1)
- {
- hasSeparators.Add(true);
- componentsList.AddRange(component.Split(ComponentSeperator));
- }
- else
- {
- hasSeparators.Add(false);
- componentsList.Add(component);
- }
- }
-
- var components = componentsList.ToArray();
- this.TotalComponentsCount = components.Length;
-
- this.literalsToMatch = new string[this.TotalComponentsCount];
- this.variablesNames = new string[this.TotalComponentsCount];
- this.isWildcard = new bool[this.TotalComponentsCount];
- this.componentsWithSeparators = hasSeparators.ToArray();
- this.PathComponentsCount = this.componentsWithSeparators.Length;
- string firstLiteralMatch = null;
-
- var sbHashKey = new StringBuilder();
- for (var i = 0; i < components.Length; i++)
- {
- var component = components[i];
-
- if (component.StartsWith(VariablePrefix))
- {
- var variableName = component.Substring(1, component.Length - 2);
- if (variableName[variableName.Length - 1] == WildCardChar)
- {
- this.isWildcard[i] = true;
- variableName = variableName.Substring(0, variableName.Length - 1);
- }
- this.variablesNames[i] = variableName;
- this.VariableArgsCount++;
- }
- else
- {
- this.literalsToMatch[i] = component.ToLower();
- sbHashKey.Append(i + PathSeperatorChar.ToString() + this.literalsToMatch);
-
- if (firstLiteralMatch == null)
- {
- firstLiteralMatch = this.literalsToMatch[i];
- }
- }
- }
-
- for (var i = 0; i < components.Length - 1; i++)
- {
- if (!this.isWildcard[i]) continue;
- if (this.literalsToMatch[i + 1] == null)
- {
- throw new ArgumentException(
- "A wildcard path component must be at the end of the path or followed by a literal path component.");
- }
- }
-
- this.wildcardCount = this.isWildcard.Count(x => x);
- this.IsWildCardPath = this.wildcardCount > 0;
-
- this.FirstMatchHashKey = !this.IsWildCardPath
- ? this.PathComponentsCount + PathSeperator + firstLiteralMatch
- : WildCardChar + PathSeperator + firstLiteralMatch;
-
- this.IsValid = sbHashKey.Length > 0;
- this.UniqueMatchHashKey = sbHashKey.ToString();
-
- this.typeDeserializer = new StringMapTypeDeserializer(this.RequestType);
- RegisterCaseInsenstivePropertyNameMappings();
- }
-
- private void RegisterCaseInsenstivePropertyNameMappings()
- {
- foreach (var propertyInfo in RequestType.GetSerializableProperties())
- {
- var propertyName = propertyInfo.Name;
- propertyNamesMap.Add(propertyName.ToLower(), propertyName);
- }
- }
-
- public bool IsValid { get; set; }
-
- /// <summary>
- /// Provide for quick lookups based on hashes that can be determined from a request url
- /// </summary>
- public string FirstMatchHashKey { get; private set; }
-
- public string UniqueMatchHashKey { get; private set; }
-
- private readonly StringMapTypeDeserializer typeDeserializer;
-
- private readonly Dictionary<string, string> propertyNamesMap = new Dictionary<string, string>();
-
- public int MatchScore(string httpMethod, string[] withPathInfoParts, ILogger logger)
- {
- int wildcardMatchCount;
- var isMatch = IsMatch(httpMethod, withPathInfoParts, logger, out wildcardMatchCount);
- if (!isMatch)
- {
- return -1;
- }
-
- var score = 0;
-
- //Routes with least wildcard matches get the highest score
- score += Math.Max((100 - wildcardMatchCount), 1) * 1000;
-
- //Routes with less variable (and more literal) matches
- score += Math.Max((10 - VariableArgsCount), 1) * 100;
-
- //Exact verb match is better than ANY
- var exactVerb = string.Equals(httpMethod, AllowedVerbs, StringComparison.OrdinalIgnoreCase);
- score += exactVerb ? 10 : 1;
-
- return score;
- }
-
- private bool StringContains(string str1, string str2)
- {
- return str1.IndexOf(str2, StringComparison.OrdinalIgnoreCase) != -1;
- }
-
- /// <summary>
- /// For performance withPathInfoParts should already be a lower case string
- /// to minimize redundant matching operations.
- /// </summary>
- public bool IsMatch(string httpMethod, string[] withPathInfoParts, ILogger logger, out int wildcardMatchCount)
- {
- wildcardMatchCount = 0;
-
- if (withPathInfoParts.Length != this.PathComponentsCount && !this.IsWildCardPath)
- {
- //logger.Info("withPathInfoParts mismatch for {0} for {1}", httpMethod, string.Join("/", withPathInfoParts));
- return false;
- }
-
- if (!this.allowsAllVerbs && !StringContains(this.allowedVerbs, httpMethod))
- {
- //logger.Info("allowsAllVerbs mismatch for {0} for {1} allowedverbs {2}", httpMethod, string.Join("/", withPathInfoParts), this.allowedVerbs);
- return false;
- }
-
- if (!ExplodeComponents(ref withPathInfoParts))
- {
- //logger.Info("ExplodeComponents mismatch for {0} for {1}", httpMethod, string.Join("/", withPathInfoParts));
- return false;
- }
-
- if (this.TotalComponentsCount != withPathInfoParts.Length && !this.IsWildCardPath)
- {
- //logger.Info("TotalComponentsCount mismatch for {0} for {1}", httpMethod, string.Join("/", withPathInfoParts));
- return false;
- }
-
- int pathIx = 0;
- for (var i = 0; i < this.TotalComponentsCount; i++)
- {
- if (this.isWildcard[i])
- {
- if (i < this.TotalComponentsCount - 1)
- {
- // Continue to consume up until a match with the next literal
- while (pathIx < withPathInfoParts.Length && !LiteralsEqual(withPathInfoParts[pathIx], this.literalsToMatch[i + 1]))
- {
- pathIx++;
- wildcardMatchCount++;
- }
-
- // Ensure there are still enough parts left to match the remainder
- if ((withPathInfoParts.Length - pathIx) < (this.TotalComponentsCount - i - 1))
- {
- //logger.Info("withPathInfoParts length mismatch for {0} for {1}", httpMethod, string.Join("/", withPathInfoParts));
- return false;
- }
- }
- else
- {
- // A wildcard at the end matches the remainder of path
- wildcardMatchCount += withPathInfoParts.Length - pathIx;
- pathIx = withPathInfoParts.Length;
- }
- }
- else
- {
- var literalToMatch = this.literalsToMatch[i];
- if (literalToMatch == null)
- {
- // Matching an ordinary (non-wildcard) variable consumes a single part
- pathIx++;
- continue;
- }
-
- if (withPathInfoParts.Length <= pathIx || !LiteralsEqual(withPathInfoParts[pathIx], literalToMatch))
- {
- //logger.Info("withPathInfoParts2 length mismatch for {0} for {1}. not equals: {2} != {3}.", httpMethod, string.Join("/", withPathInfoParts), withPathInfoParts[pathIx], literalToMatch);
- return false;
- }
- pathIx++;
- }
- }
-
- return pathIx == withPathInfoParts.Length;
- }
-
- private bool LiteralsEqual(string str1, string str2)
- {
- // Most cases
- if (string.Equals(str1, str2, StringComparison.OrdinalIgnoreCase))
- {
- return true;
- }
-
- // Handle turkish i
- str1 = str1.ToUpperInvariant();
- str2 = str2.ToUpperInvariant();
-
- // Invariant IgnoreCase would probably be better but it's not available in PCL
- return string.Equals(str1, str2, StringComparison.CurrentCultureIgnoreCase);
- }
-
- private bool ExplodeComponents(ref string[] withPathInfoParts)
- {
- var totalComponents = new List<string>();
- for (var i = 0; i < withPathInfoParts.Length; i++)
- {
- var component = withPathInfoParts[i];
- if (string.IsNullOrEmpty(component)) continue;
-
- if (this.PathComponentsCount != this.TotalComponentsCount
- && this.componentsWithSeparators[i])
- {
- var subComponents = component.Split(ComponentSeperator);
- if (subComponents.Length < 2) return false;
- totalComponents.AddRange(subComponents);
- }
- else
- {
- totalComponents.Add(component);
- }
- }
-
- withPathInfoParts = totalComponents.ToArray();
- return true;
- }
-
- public object CreateRequest(string pathInfo, Dictionary<string, string> queryStringAndFormData, object fromInstance)
- {
- var requestComponents = pathInfo.Split(PathSeperatorChar)
- .Where(x => !string.IsNullOrEmpty(x)).ToArray();
-
- ExplodeComponents(ref requestComponents);
-
- if (requestComponents.Length != this.TotalComponentsCount)
- {
- var isValidWildCardPath = this.IsWildCardPath
- && requestComponents.Length >= this.TotalComponentsCount - this.wildcardCount;
-
- if (!isValidWildCardPath)
- throw new ArgumentException(string.Format(
- "Path Mismatch: Request Path '{0}' has invalid number of components compared to: '{1}'",
- pathInfo, this.restPath));
- }
-
- var requestKeyValuesMap = new Dictionary<string, string>();
- var pathIx = 0;
- for (var i = 0; i < this.TotalComponentsCount; i++)
- {
- var variableName = this.variablesNames[i];
- if (variableName == null)
- {
- pathIx++;
- continue;
- }
-
- string propertyNameOnRequest;
- if (!this.propertyNamesMap.TryGetValue(variableName.ToLower(), out propertyNameOnRequest))
- {
- if (string.Equals("ignore", variableName, StringComparison.OrdinalIgnoreCase))
- {
- pathIx++;
- continue;
- }
-
- throw new ArgumentException("Could not find property "
- + variableName + " on " + RequestType.GetOperationName());
- }
-
- var value = requestComponents.Length > pathIx ? requestComponents[pathIx] : null; //wildcard has arg mismatch
- if (value != null && this.isWildcard[i])
- {
- if (i == this.TotalComponentsCount - 1)
- {
- // Wildcard at end of path definition consumes all the rest
- var sb = new StringBuilder();
- sb.Append(value);
- for (var j = pathIx + 1; j < requestComponents.Length; j++)
- {
- sb.Append(PathSeperatorChar + requestComponents[j]);
- }
- value = sb.ToString();
- }
- else
- {
- // Wildcard in middle of path definition consumes up until it
- // hits a match for the next element in the definition (which must be a literal)
- // It may consume 0 or more path parts
- var stopLiteral = i == this.TotalComponentsCount - 1 ? null : this.literalsToMatch[i + 1];
- if (!string.Equals(requestComponents[pathIx], stopLiteral, StringComparison.OrdinalIgnoreCase))
- {
- var sb = new StringBuilder();
- sb.Append(value);
- pathIx++;
- while (!string.Equals(requestComponents[pathIx], stopLiteral, StringComparison.OrdinalIgnoreCase))
- {
- sb.Append(PathSeperatorChar + requestComponents[pathIx++]);
- }
- value = sb.ToString();
- }
- else
- {
- value = null;
- }
- }
- }
- else
- {
- // Variable consumes single path item
- pathIx++;
- }
-
- requestKeyValuesMap[propertyNameOnRequest] = value;
- }
-
- if (queryStringAndFormData != null)
- {
- //Query String and form data can override variable path matches
- //path variables < query string < form data
- foreach (var name in queryStringAndFormData)
- {
- requestKeyValuesMap[name.Key] = name.Value;
- }
- }
-
- return this.typeDeserializer.PopulateFromMap(fromInstance, requestKeyValuesMap);
- }
-
- public override int GetHashCode()
- {
- return UniqueMatchHashKey.GetHashCode();
- }
- }
-} \ No newline at end of file
diff --git a/ServiceStack/ServiceStack.csproj b/ServiceStack/ServiceStack.csproj
deleted file mode 100644
index 36c467b8e..000000000
--- a/ServiceStack/ServiceStack.csproj
+++ /dev/null
@@ -1,117 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProductVersion>9.0.30729</ProductVersion>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{680A1709-25EB-4D52-A87F-EE03FFD94BAA}</ProjectGuid>
- <OutputType>Library</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <RootNamespace>ServiceStack</RootNamespace>
- <AssemblyName>ServiceStack</AssemblyName>
- <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
- <TargetFrameworkProfile>Profile7</TargetFrameworkProfile>
- <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
- <FileAlignment>512</FileAlignment>
- <FileUpgradeFlags>
- </FileUpgradeFlags>
- <OldToolsVersion>3.5</OldToolsVersion>
- <UpgradeBackupLocation />
- <PublishUrl>publish\</PublishUrl>
- <Install>true</Install>
- <InstallFrom>Disk</InstallFrom>
- <UpdateEnabled>false</UpdateEnabled>
- <UpdateMode>Foreground</UpdateMode>
- <UpdateInterval>7</UpdateInterval>
- <UpdateIntervalUnits>Days</UpdateIntervalUnits>
- <UpdatePeriodically>false</UpdatePeriodically>
- <UpdateRequired>false</UpdateRequired>
- <MapFileExtensions>true</MapFileExtensions>
- <ApplicationRevision>0</ApplicationRevision>
- <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
- <IsWebBootstrapper>false</IsWebBootstrapper>
- <UseApplicationTrust>false</UseApplicationTrust>
- <BootstrapperEnabled>true</BootstrapperEnabled>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugSymbols>True</DebugSymbols>
- <DebugType>full</DebugType>
- <Optimize>False</Optimize>
- <OutputPath>bin\Debug\</OutputPath>
- <DefineConstants>TRACE;DEBUG;MONO</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- <Prefer32Bit>false</Prefer32Bit>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <DebugType>pdbonly</DebugType>
- <Optimize>True</Optimize>
- <OutputPath>bin\Release\</OutputPath>
- <DefineConstants>TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- <DocumentationFile>
- </DocumentationFile>
- <Prefer32Bit>false</Prefer32Bit>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Signed|AnyCPU'">
- <OutputPath>bin\Signed\</OutputPath>
- <DefineConstants>TRACE</DefineConstants>
- <DocumentationFile>bin\Release\ServiceStack.XML</DocumentationFile>
- <Optimize>true</Optimize>
- <DebugType>pdbonly</DebugType>
- <PlatformTarget>AnyCPU</PlatformTarget>
- <ErrorReport>prompt</ErrorReport>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- <Prefer32Bit>false</Prefer32Bit>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="ReflectionExtensions.cs" />
- <Compile Include="StringMapTypeDeserializer.cs" />
- <Compile Include="ServiceStackHost.cs" />
- <Compile Include="UrlExtensions.cs" />
- <Compile Include="RestPath.cs" />
- <Compile Include="Properties\AssemblyInfo.cs" />
- </ItemGroup>
- <ItemGroup>
- <None Include="packages.config" />
- </ItemGroup>
- <ItemGroup>
- <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
- <Install>false</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5 SP1</ProductName>
- <Install>true</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
- <Visible>False</Visible>
- <ProductName>Windows Installer 3.1</ProductName>
- <Install>true</Install>
- </BootstrapperPackage>
- </ItemGroup>
- <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
- <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
- Other similar extension points exist, see Microsoft.Common.targets.
- <Target Name="BeforeBuild">
- </Target>
- <Target Name="AfterBuild">
- </Target>
- -->
- <ItemGroup>
- <ProjectReference Include="..\MediaBrowser.Common\MediaBrowser.Common.csproj">
- <Project>{9142eefa-7570-41e1-bfcc-468bb571af2f}</Project>
- <Name>MediaBrowser.Common</Name>
- </ProjectReference>
- <ProjectReference Include="..\MediaBrowser.Model\MediaBrowser.Model.csproj">
- <Project>{7eeeb4bb-f3e8-48fc-b4c5-70f0fff8329b}</Project>
- <Name>MediaBrowser.Model</Name>
- </ProjectReference>
- </ItemGroup>
-</Project> \ No newline at end of file
diff --git a/ServiceStack/ServiceStack.nuget.targets b/ServiceStack/ServiceStack.nuget.targets
deleted file mode 100644
index e69ce0e64..000000000
--- a/ServiceStack/ServiceStack.nuget.targets
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="no"?>
-<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Target Name="EmitMSBuildWarning" BeforeTargets="Build">
- <Warning Text="Packages containing MSBuild targets and props files cannot be fully installed in projects targeting multiple frameworks. The MSBuild targets and props files have been ignored." />
- </Target>
-</Project> \ No newline at end of file
diff --git a/ServiceStack/ServiceStackHost.cs b/ServiceStack/ServiceStackHost.cs
deleted file mode 100644
index 09fe9a242..000000000
--- a/ServiceStack/ServiceStackHost.cs
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright (c) Service Stack LLC. All Rights Reserved.
-// License: https://raw.github.com/ServiceStack/ServiceStack/master/license.txt
-
-
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Threading.Tasks;
-using MediaBrowser.Model.Services;
-
-namespace ServiceStack
-{
- public abstract class ServiceStackHost : IDisposable
- {
- public static ServiceStackHost Instance { get; protected set; }
-
- protected ServiceStackHost()
- {
- GlobalResponseFilters = new List<Action<IRequest, IResponse, object>>();
- }
-
- public abstract object CreateInstance(Type type);
-
- public List<Action<IRequest, IResponse, object>> GlobalResponseFilters { get; set; }
-
- public abstract RouteAttribute[] GetRouteAttributes(Type requestType);
-
- public abstract Func<string, object> GetParseFn(Type propertyType);
-
- public abstract void SerializeToJson(object o, Stream stream);
- public abstract void SerializeToXml(object o, Stream stream);
- public abstract object DeserializeXml(Type type, Stream stream);
- public abstract object DeserializeJson(Type type, Stream stream);
-
- public virtual void Dispose()
- {
- //JsConfig.Reset(); //Clears Runtime Attributes
-
- Instance = null;
- }
- }
-}
diff --git a/ServiceStack/StringMapTypeDeserializer.cs b/ServiceStack/StringMapTypeDeserializer.cs
deleted file mode 100644
index 8b76c39d0..000000000
--- a/ServiceStack/StringMapTypeDeserializer.cs
+++ /dev/null
@@ -1,121 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Runtime.Serialization;
-using System.Linq;
-using System.Reflection;
-
-namespace ServiceStack.Serialization
-{
- /// <summary>
- /// Serializer cache of delegates required to create a type from a string map (e.g. for REST urls)
- /// </summary>
- public class StringMapTypeDeserializer
- {
- internal class PropertySerializerEntry
- {
- public PropertySerializerEntry(Action<object,object> propertySetFn, Func<string, object> propertyParseStringFn)
- {
- PropertySetFn = propertySetFn;
- PropertyParseStringFn = propertyParseStringFn;
- }
-
- public Action<object, object> PropertySetFn;
- public Func<string,object> PropertyParseStringFn;
- public Type PropertyType;
- }
-
- private readonly Type type;
- private readonly Dictionary<string, PropertySerializerEntry> propertySetterMap
- = new Dictionary<string, PropertySerializerEntry>(StringComparer.OrdinalIgnoreCase);
-
- public Func<string, object> GetParseFn(Type propertyType)
- {
- //Don't JSV-decode string values for string properties
- if (propertyType == typeof(string))
- return s => s;
-
- return ServiceStackHost.Instance.GetParseFn(propertyType);
- }
-
- public StringMapTypeDeserializer(Type type)
- {
- this.type = type;
-
- foreach (var propertyInfo in type.GetSerializableProperties())
- {
- var propertySetFn = TypeAccessor.GetSetPropertyMethod(type, propertyInfo);
- var propertyType = propertyInfo.PropertyType;
- var propertyParseStringFn = GetParseFn(propertyType);
- var propertySerializer = new PropertySerializerEntry(propertySetFn, propertyParseStringFn) { PropertyType = propertyType };
-
- propertySetterMap[propertyInfo.Name] = propertySerializer;
- }
- }
-
- public object PopulateFromMap(object instance, IDictionary<string, string> keyValuePairs)
- {
- string propertyName = null;
- string propertyTextValue = null;
- PropertySerializerEntry propertySerializerEntry = null;
-
- if (instance == null)
- instance = ServiceStackHost.Instance.CreateInstance(type);
-
- foreach (var pair in keyValuePairs.Where(x => !string.IsNullOrEmpty(x.Value)))
- {
- propertyName = pair.Key;
- propertyTextValue = pair.Value;
-
- if (!propertySetterMap.TryGetValue(propertyName, out propertySerializerEntry))
- {
- if (propertyName == "v")
- {
- continue;
- }
-
- continue;
- }
-
- if (propertySerializerEntry.PropertySetFn == null)
- {
- continue;
- }
-
- if (propertySerializerEntry.PropertyType == typeof(bool))
- {
- //InputExtensions.cs#530 MVC Checkbox helper emits extra hidden input field, generating 2 values, first is the real value
- propertyTextValue = LeftPart(propertyTextValue, ',');
- }
-
- var value = propertySerializerEntry.PropertyParseStringFn(propertyTextValue);
- if (value == null)
- {
- continue;
- }
- propertySerializerEntry.PropertySetFn(instance, value);
- }
-
- return instance;
- }
-
- public static string LeftPart(string strVal, char needle)
- {
- if (strVal == null) return null;
- var pos = strVal.IndexOf(needle);
- return pos == -1
- ? strVal
- : strVal.Substring(0, pos);
- }
- }
-
- internal class TypeAccessor
- {
- public static Action<object, object> GetSetPropertyMethod(Type type, PropertyInfo propertyInfo)
- {
- if (!propertyInfo.CanWrite || propertyInfo.GetIndexParameters().Any()) return null;
-
- var setMethodInfo = propertyInfo.SetMethod;
- return (instance, value) => setMethodInfo.Invoke(instance, new[] { value });
- }
- }
-}
diff --git a/ServiceStack/UrlExtensions.cs b/ServiceStack/UrlExtensions.cs
deleted file mode 100644
index 7b5a50ef1..000000000
--- a/ServiceStack/UrlExtensions.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-using System;
-
-namespace ServiceStack
-{
- /// <summary>
- /// Donated by Ivan Korneliuk from his post:
- /// http://korneliuk.blogspot.com/2012/08/servicestack-reusing-dtos.html
- ///
- /// Modified to only allow using routes matching the supplied HTTP Verb
- /// </summary>
- public static class UrlExtensions
- {
- public static string GetOperationName(this Type type)
- {
- var typeName = type.FullName != null //can be null, e.g. generic types
- ? LeftPart(type.FullName, "[[") //Generic Fullname
- .Replace(type.Namespace + ".", "") //Trim Namespaces
- .Replace("+", ".") //Convert nested into normal type
- : type.Name;
-
- return type.IsGenericParameter ? "'" + typeName : typeName;
- }
-
- public static string LeftPart(string strVal, string needle)
- {
- if (strVal == null) return null;
- var pos = strVal.IndexOf(needle, StringComparison.OrdinalIgnoreCase);
- return pos == -1
- ? strVal
- : strVal.Substring(0, pos);
- }
- }
-} \ No newline at end of file
diff --git a/ServiceStack/packages.config b/ServiceStack/packages.config
deleted file mode 100644
index 6b8deb9c9..000000000
--- a/ServiceStack/packages.config
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
-</packages> \ No newline at end of file
diff --git a/ServiceStack/project.json b/ServiceStack/project.json
deleted file mode 100644
index fbbe9eaf3..000000000
--- a/ServiceStack/project.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "frameworks":{
- "netstandard1.6":{
- "dependencies":{
- "NETStandard.Library":"1.6.0",
- }
- },
- ".NETPortable,Version=v4.5,Profile=Profile7":{
- "buildOptions": {
- "define": [ ]
- },
- "frameworkAssemblies":{
-
- }
- }
- }
-} \ No newline at end of file