Skip to content
Browse files

Upgrade to v4

  • Loading branch information...
1 parent bfb2fd1 commit 7c488ea88dafc4f5e8241a7a4f920efad3a8c802 @mythz mythz committed
Showing with 16,233 additions and 2,841 deletions.
  1. +1 −1 .gitignore
  2. +13 −17 src/SocialBootstrapApi/AppHost.cs
  3. BIN src/SocialBootstrapApi/App_Data/UserAuth.mdf
  4. BIN src/SocialBootstrapApi/App_Data/UserAuth_log.LDF
  5. +362 −0 src/SocialBootstrapApi/Bundler.cs
  6. +1 −1 src/SocialBootstrapApi/Controllers/SecureController.cs
  7. +10 −1 src/SocialBootstrapApi/Global.asax.cs
  8. +15 −17 src/SocialBootstrapApi/Logic/TwitterGateway.cs
  9. +9 −8 src/SocialBootstrapApi/Models/CustomUserSession.cs
  10. +0 −289 src/SocialBootstrapApi/Mvc.Bundler.cs
  11. +4 −6 src/SocialBootstrapApi/ServiceInterface/AppFollowersServiceBase.cs
  12. +3 −3 src/SocialBootstrapApi/ServiceInterface/AppServiceBase.cs
  13. +1 −4 src/SocialBootstrapApi/ServiceInterface/AuthorService.cs
  14. +1 −3 src/SocialBootstrapApi/ServiceInterface/HelloService.cs
  15. +2 −5 src/SocialBootstrapApi/ServiceInterface/LoginService.cs
  16. +8 −8 src/SocialBootstrapApi/ServiceInterface/ResetService.cs
  17. +8 −9 src/SocialBootstrapApi/ServiceInterface/RestrictedServices.cs
  18. +1 −1 src/SocialBootstrapApi/ServiceInterface/TodoService.cs
  19. +2 −3 src/SocialBootstrapApi/ServiceInterface/TwitterDirectMessagesService.cs
  20. +5 −9 src/SocialBootstrapApi/ServiceInterface/TwitterFriendsService.cs
  21. +2 −3 src/SocialBootstrapApi/ServiceInterface/TwitterTimelinesService.cs
  22. +2 −4 src/SocialBootstrapApi/ServiceInterface/TwitterTweetsService.cs
  23. +0 −1 src/SocialBootstrapApi/ServiceInterface/TwitterUsersService.cs
  24. +5 −5 src/SocialBootstrapApi/ServiceInterface/UserAuths.cs
  25. +5 −7 src/SocialBootstrapApi/ServiceInterface/UserProfileService.cs
  26. +3 −5 src/SocialBootstrapApi/ServiceInterface/UsersService.cs
  27. +797 −39 src/SocialBootstrapApi/SocialBootstrapApi.csproj
  28. +5 −5 src/SocialBootstrapApi/Support/Async.cs
  29. +2 −5 src/SocialBootstrapApi/Support/HtmlHelpers.cs
  30. +4 −3 src/SocialBootstrapApi/Views/Shared/Index.cshtml
  31. +1 −1 src/SocialBootstrapApi/Views/Shared/_Layout.cshtml
  32. +1 −1 src/SocialBootstrapApi/Views/Web.config
  33. +104 −81 src/SocialBootstrapApi/Web.config
  34. BIN src/SocialBootstrapApi/bin/ServiceStack.Common.dll
  35. +52 −803 src/SocialBootstrapApi/bin/ServiceStack.Common.xml
  36. BIN src/SocialBootstrapApi/bin/ServiceStack.Interfaces.dll
  37. +392 −419 src/SocialBootstrapApi/bin/ServiceStack.Interfaces.xml
  38. BIN src/SocialBootstrapApi/bin/ServiceStack.OrmLite.SqlServer.dll
  39. BIN src/SocialBootstrapApi/bin/ServiceStack.OrmLite.dll
  40. BIN src/SocialBootstrapApi/bin/ServiceStack.Text.dll
  41. +124 −26 src/SocialBootstrapApi/bin/ServiceStack.Text.xml
  42. BIN src/SocialBootstrapApi/bin/ServiceStack.dll
  43. +3,022 −544 src/SocialBootstrapApi/bin/ServiceStack.xml
  44. +25 −0 src/SocialBootstrapApi/bundler/LICENSE
  45. +3 −1 src/SocialBootstrapApi/bundler/bundler.cmd
  46. +134 −68 src/SocialBootstrapApi/bundler/bundler.js
  47. BIN src/SocialBootstrapApi/bundler/node.exe
  48. +4,305 −0 src/SocialBootstrapApi/bundler/node_modules/LiveScript/lib/ast.js
  49. +57 −0 src/SocialBootstrapApi/bundler/node_modules/LiveScript/lib/browser.js
  50. +476 −0 src/SocialBootstrapApi/bundler/node_modules/LiveScript/lib/command.js
  51. +607 −0 src/SocialBootstrapApi/bundler/node_modules/LiveScript/lib/grammar.js
  52. +1 −0 src/SocialBootstrapApi/bundler/node_modules/LiveScript/lib/index.js
  53. +21 −0 src/SocialBootstrapApi/bundler/node_modules/LiveScript/lib/lang-ls.js
  54. +1,822 −0 src/SocialBootstrapApi/bundler/node_modules/LiveScript/lib/lexer.js
  55. +64 −0 src/SocialBootstrapApi/bundler/node_modules/LiveScript/lib/livescript.js
  56. +249 −0 src/SocialBootstrapApi/bundler/node_modules/LiveScript/lib/mode-ls.js
  57. +82 −0 src/SocialBootstrapApi/bundler/node_modules/LiveScript/lib/node.js
  58. +89 −0 src/SocialBootstrapApi/bundler/node_modules/LiveScript/lib/optparse.js
  59. +699 −0 src/SocialBootstrapApi/bundler/node_modules/LiveScript/lib/parser.js
  60. +91 −0 src/SocialBootstrapApi/bundler/node_modules/LiveScript/lib/slake.js
  61. +64 −0 src/SocialBootstrapApi/bundler/node_modules/LiveScript/package.json
  62. +1 −1 src/SocialBootstrapApi/bundler/node_modules/clean-css/index.js
  63. +290 −168 src/SocialBootstrapApi/bundler/node_modules/clean-css/lib/clean.js
  64. +50 −0 src/SocialBootstrapApi/bundler/node_modules/clean-css/lib/colors/hsl-to-hex.js
  65. +12 −0 src/SocialBootstrapApi/bundler/node_modules/clean-css/lib/colors/long-to-short-hex.js
  66. +16 −0 src/SocialBootstrapApi/bundler/node_modules/clean-css/lib/colors/rgb-to-hex.js
  67. +174 −0 src/SocialBootstrapApi/bundler/node_modules/clean-css/lib/colors/shortener.js
  68. +34 −0 src/SocialBootstrapApi/bundler/node_modules/clean-css/lib/images/url-rebase.js
  69. +53 −0 src/SocialBootstrapApi/bundler/node_modules/clean-css/lib/images/url-rewriter.js
  70. +144 −0 src/SocialBootstrapApi/bundler/node_modules/clean-css/lib/imports/inliner.js
  71. +228 −0 src/SocialBootstrapApi/bundler/node_modules/clean-css/lib/properties/optimizer.js
  72. +50 −0 src/SocialBootstrapApi/bundler/node_modules/clean-css/lib/properties/shorthand-notations.js
  73. +30 −0 src/SocialBootstrapApi/bundler/node_modules/clean-css/lib/selectors/empty-removal.js
  74. +221 −0 src/SocialBootstrapApi/bundler/node_modules/clean-css/lib/selectors/optimizer.js
  75. +121 −0 src/SocialBootstrapApi/bundler/node_modules/clean-css/lib/selectors/tokenizer.js
  76. +59 −0 src/SocialBootstrapApi/bundler/node_modules/clean-css/lib/text/comments.js
  77. +32 −0 src/SocialBootstrapApi/bundler/node_modules/clean-css/lib/text/escape-store.js
  78. +69 −0 src/SocialBootstrapApi/bundler/node_modules/clean-css/lib/text/expressions.js
  79. +76 −0 src/SocialBootstrapApi/bundler/node_modules/clean-css/lib/text/free.js
  80. +39 −0 src/SocialBootstrapApi/bundler/node_modules/clean-css/lib/text/urls.js
  81. +45 −19 src/SocialBootstrapApi/bundler/node_modules/coffee-script/lib/coffee-script/browser.js
  82. +8 −5 src/SocialBootstrapApi/bundler/node_modules/coffee-script/lib/coffee-script/cake.js
  83. +239 −48 src/SocialBootstrapApi/bundler/node_modules/coffee-script/lib/coffee-script/coffee-script.js
  84. +115 −89 src/SocialBootstrapApi/bundler/node_modules/coffee-script/lib/coffee-script/command.js
  85. +34 −15 src/SocialBootstrapApi/bundler/node_modules/coffee-script/lib/coffee-script/grammar.js
  86. +149 −3 src/SocialBootstrapApi/bundler/node_modules/coffee-script/lib/coffee-script/helpers.js
  87. +1 −1 src/SocialBootstrapApi/bundler/node_modules/coffee-script/lib/coffee-script/index.js
  88. +187 −86 src/SocialBootstrapApi/bundler/node_modules/coffee-script/lib/coffee-script/lexer.js
Sorry, we could not display the entire diff because too many files (1,668) changed.
View
2 .gitignore
@@ -22,7 +22,7 @@ Thumbs.db
*.cache
*.ilk
*.log
-#[Bb]in/
+[Bb]in/
[Dd]ebug*/
*.lib
*.sbr
View
30 src/SocialBootstrapApi/AppHost.cs
@@ -1,23 +1,18 @@
-using System;
using System.Collections.Generic;
using System.Web.Mvc;
+using ServiceStack;
using ServiceStack.Api.Swagger;
+using ServiceStack.Auth;
using ServiceStack.Authentication.OpenId;
-using ServiceStack.CacheAccess;
-using ServiceStack.CacheAccess.Providers;
-using ServiceStack.Common.Web;
+using ServiceStack.Caching;
using ServiceStack.Configuration;
+using ServiceStack.Data;
using ServiceStack.FluentValidation;
using ServiceStack.MiniProfiler;
using ServiceStack.MiniProfiler.Data;
using ServiceStack.Mvc;
using ServiceStack.OrmLite;
using ServiceStack.OrmLite.SqlServer;
-using ServiceStack.ServiceInterface;
-using ServiceStack.ServiceInterface.Admin;
-using ServiceStack.ServiceInterface.Auth;
-using ServiceStack.ServiceInterface.Cors;
-using ServiceStack.WebHost.Endpoints;
using SocialBootstrapApi.Controllers;
using SocialBootstrapApi.Logic;
using SocialBootstrapApi.Models;
@@ -44,7 +39,7 @@ namespace SocialBootstrapApi
//Hold App wide configuration you want to accessible by your services
public class AppConfig
{
- public AppConfig(IResourceManager appSettings)
+ public AppConfig(IAppSettings appSettings)
{
this.Env = appSettings.Get("Env", Env.Local);
this.EnableCdn = appSettings.Get("EnableCdn", false);
@@ -110,8 +105,8 @@ public override void Configure(Funq.Container container)
ConfigureAuth(container);
//Create your own custom User table
- var dbFactory = container.Resolve<IDbConnectionFactory>();
- dbFactory.Run(db => db.DropAndCreateTable<User>());
+ using (var db = container.Resolve<IDbConnectionFactory>().Open())
+ db.DropAndCreateTable<User>();
//Register application services
container.Register(new TodoRepository());
@@ -122,9 +117,9 @@ public override void Configure(Funq.Container container)
//Change the default ServiceStack configuration
//const Feature disableFeatures = Feature.Jsv | Feature.Soap;
- SetConfig(new EndpointHostConfig {
+ SetConfig(new HostConfig {
//EnableFeatures = Feature.All.Remove(disableFeatures),
- AppendUtf8CharsetOnContentTypes = new HashSet<string> { ContentType.Html },
+ AppendUtf8CharsetOnContentTypes = new HashSet<string> { MimeTypes.Html },
});
Plugins.Add(new SwaggerFeature());
@@ -167,7 +162,8 @@ private void ConfigureAuth(Funq.Container container)
{
//Enable and register existing services you want this host to make use of.
//Look in Web.config for examples on how to configure your oauth providers, e.g. oauth.facebook.AppId, etc.
- var appSettings = new AppSettings();
+ var appSettings = new AppSettings(tier: "dev");
+ //var appSettings = new AppSettings(); //uncomment to use "live" config appSettings
//Register all Authentication methods you want to enable for this web app.
Plugins.Add(new AuthFeature(
@@ -187,7 +183,7 @@ private void ConfigureAuth(Funq.Container container)
Plugins.Add(new RegistrationFeature());
//override the default registration validation with your own custom implementation
- container.RegisterAs<CustomRegistrationValidator, IValidator<Registration>>();
+ container.RegisterAs<CustomRegistrationValidator, IValidator<Register>>();
//Create a DB Factory configured to access the UserAuth SQL Server DB
var connStr = appSettings.Get("SQLSERVER_CONNECTION_STRING", //AppHarbor or Local connection string
@@ -206,7 +202,7 @@ private void ConfigureAuth(Funq.Container container)
if (appSettings.Get("RecreateAuthTables", false))
authRepo.DropAndReCreateTables(); //Drop and re-create all Auth and registration tables
else
- authRepo.CreateMissingTables(); //Create only the missing tables
+ authRepo.InitSchema(); //Create only the missing tables
Plugins.Add(new RequestLogsFeature());
}
View
BIN src/SocialBootstrapApi/App_Data/UserAuth.mdf
Binary file not shown.
View
BIN src/SocialBootstrapApi/App_Data/UserAuth_log.LDF
Binary file not shown.
View
362 src/SocialBootstrapApi/Bundler.cs
@@ -0,0 +1,362 @@
+using System;
+using System.Collections.Concurrent;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Reflection;
+using System.Text;
+using System.Web;
+using System.Web.Hosting;
+using System.Web.Mvc;
+using System.Web.Routing;
+
+//Dummy namespaces to keep compiler happy when MVC isn't referenced
+namespace System.Web.Mvc { }
+namespace System.Web.Routing { }
+
+namespace ServiceStack
+{
+ public enum BundleOptions
+ {
+ Normal,
+ Minified,
+ Combined,
+ MinifiedAndCombined
+ }
+
+ public static class Bundler
+ {
+ public static Func<bool> CachePaths = IsProduction;
+ public static Func<string, BundleOptions, string> DefaultUrlFilter = ProcessVirtualPathDefault;
+ public static bool UseMvc;
+
+ static Bundler()
+ {
+ var mvcControllerExists = AppDomain.CurrentDomain.GetAssemblies().Any(x => x.GetType("System.Web.Mvc.Controller") != null);
+ UseMvc = mvcControllerExists;
+ }
+
+ // Logic to determine if the app is running in production or dev environment
+ public static bool IsProduction()
+ {
+ return (HttpContext.Current != null && !HttpContext.Current.IsDebuggingEnabled);
+ }
+
+ public static bool FileExists(string virtualPath)
+ {
+ if (!HostingEnvironment.IsHosted) return false;
+ var filePath = HostingEnvironment.MapPath(virtualPath);
+ return File.Exists(filePath);
+ }
+
+ static DateTime centuryBegin = new DateTime(2001, 1, 1);
+ public static string TimestampString(string virtualPath)
+ {
+ try
+ {
+ if (HostingEnvironment.IsHosted)
+ {
+ var filePath = HostingEnvironment.MapPath(virtualPath);
+ return Convert.ToString((File.GetLastWriteTimeUtc(filePath).Ticks - centuryBegin.Ticks) / 1000000000, 16);
+ }
+ }
+ catch { } //ignore
+ return string.Empty;
+ }
+
+ private static TVal GetOrAdd<TKey, TVal>(this Dictionary<TKey, TVal> map, TKey key, Func<TKey, TVal> factoryFn)
+ {
+ lock (map)
+ {
+ TVal ret;
+ if (!map.TryGetValue(key, out ret))
+ {
+ map[key] = ret = factoryFn(key);
+ }
+ return ret;
+ }
+ }
+
+ private static void SafeClear<TKey, TVal>(this Dictionary<TKey, TVal> map)
+ {
+ lock (map) map.Clear();
+ }
+
+ static readonly Dictionary<string, string> VirutalPathCache = new Dictionary<string, string>();
+ private static string ProcessVirtualPathDefault(string virtualPath, BundleOptions options)
+ {
+ if (!CachePaths()) VirutalPathCache.SafeClear();
+
+ return VirutalPathCache.GetOrAdd(virtualPath, str =>
+ {
+ // The path that comes in starts with ~/ and must first be made absolute
+
+ if (options == BundleOptions.Minified || options == BundleOptions.MinifiedAndCombined)
+ {
+ if (virtualPath.EndsWith(".js") && !virtualPath.EndsWith(".min.js"))
+ {
+ var minPath = virtualPath.Replace(".js", ".min.js");
+ if (FileExists(minPath))
+ virtualPath = minPath;
+ }
+ else if (virtualPath.EndsWith(".css") && !virtualPath.EndsWith(".min.css"))
+ {
+ var minPath = virtualPath.Replace(".css", ".min.css");
+ if (FileExists(minPath))
+ virtualPath = minPath;
+ }
+ }
+
+ var path = virtualPath;
+ if (virtualPath.IndexOf("://", StringComparison.Ordinal) == -1)
+ {
+ path = VirtualPathUtility.ToAbsolute(virtualPath);
+
+ var cacheBreaker = TimestampString(virtualPath);
+ if (!string.IsNullOrEmpty(cacheBreaker))
+ {
+ path += path.IndexOf('?') == -1
+ ? "?" + cacheBreaker
+ : "&" + cacheBreaker;
+ }
+ }
+
+ // Add your own modifications here before returning the path
+ return path;
+ });
+ }
+
+ private static string RewriteUrl(this string relativePath, BundleOptions options = BundleOptions.Normal)
+ {
+ return DefaultUrlFilter(relativePath, options);
+ }
+
+ public static MvcHtmlString ToMvcHtmlString(this string s)
+ {
+ return MvcHtmlString.Create(s);
+ }
+
+ public static MvcHtmlString ToMvcHtmlString(this TagBuilder t)
+ {
+ return t.ToString().ToMvcHtmlString();
+ }
+
+ public static MvcHtmlString ToMvcHtmlString(this TagBuilder t, TagRenderMode mode)
+ {
+ return t.ToString(mode).ToMvcHtmlString();
+ }
+
+ public delegate T ObjectActivator<T>(params object[] args);
+ private static ObjectActivator<object> RouteValueDictionaryFactoryFn;
+
+ public static ObjectActivator<T> GetActivator<T>(ConstructorInfo ctor)
+ {
+ var pis = ctor.GetParameters();
+ var param = Expression.Parameter(typeof(object[]), "args");
+ var argsExpr = new Expression[pis.Length];
+ for (int i = 0; i < pis.Length; i++)
+ {
+ var index = Expression.Constant(i);
+ var paramType = pis[i].ParameterType;
+ var paramAccessorExp = Expression.ArrayIndex(param, index);
+ var paramCastExp = Expression.Convert(paramAccessorExp, paramType);
+ argsExpr[i] = paramCastExp;
+ }
+ var newExpr = Expression.New(ctor, argsExpr);
+ var lambda = Expression.Lambda(typeof(ObjectActivator<T>), newExpr, param);
+
+ var compiled = (ObjectActivator<T>)lambda.Compile();
+ return compiled;
+ }
+
+ public static IDictionary<string, object> ToRouteValueDictionary(this object attrs)
+ {
+ if (RouteValueDictionaryFactoryFn == null)
+ {
+ var typeName = UseMvc
+ ? "System.Web.Routing.RouteValueDictionary"
+ : "ServiceStack.Html.RouteValueDictionary";
+
+ var assembly = AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault(x => x.GetType(typeName) != null);
+ if (assembly == null)
+ throw new Exception(string.Format("Could not find type '{0}' in loaded assemblies", typeName));
+
+ var type = assembly.GetType(typeName);
+ var ci = type.GetConstructor(new[] { typeof(object) });
+
+ RouteValueDictionaryFactoryFn = GetActivator<object>(ci);
+ }
+ return (IDictionary<string, object>)RouteValueDictionaryFactoryFn(attrs);
+ }
+
+ public static MvcHtmlString Link(this HtmlHelper html, string rel, string href, object htmlAttributes = null, BundleOptions options = BundleOptions.Normal)
+ {
+ if (string.IsNullOrEmpty(href))
+ return MvcHtmlString.Empty;
+
+ if (href.StartsWith("~/"))
+ href = href.Replace("~/", VirtualPathUtility.ToAbsolute("~"));
+
+ var tag = new TagBuilder("link");
+ tag.MergeAttribute("rel", rel);
+
+ tag.MergeAttribute("href", href.RewriteUrl(options));
+
+ if (htmlAttributes != null)
+ tag.MergeAttributes(htmlAttributes.ToRouteValueDictionary());
+
+ return tag.ToString(TagRenderMode.SelfClosing).ToMvcHtmlString();
+ }
+
+ public static MvcHtmlString Css(this HtmlHelper html, string href, string media = null, BundleOptions options = BundleOptions.Minified)
+ {
+ return media != null
+ ? html.Link("stylesheet", href, new { media }, options)
+ : html.Link("stylesheet", href, null, options);
+ }
+
+ public static T If<T>(this HtmlHelper html, bool predicate, T whenTrue, T whenFalse)
+ {
+ return predicate ? whenTrue : whenFalse;
+ }
+
+ public static MvcHtmlString Img(this HtmlHelper html, string src, string alt, string link = null, object htmlAttributes = null)
+ {
+ if (string.IsNullOrEmpty(src))
+ return MvcHtmlString.Empty;
+
+ if (src.StartsWith("~/"))
+ src = src.Replace("~/", VirtualPathUtility.ToAbsolute("~"));
+
+ var tag = new TagBuilder("img");
+
+ tag.MergeAttribute("src", src.RewriteUrl());
+ tag.MergeAttribute("alt", alt);
+ if (htmlAttributes != null)
+ tag.MergeAttributes(htmlAttributes.ToRouteValueDictionary());
+
+ if (!string.IsNullOrEmpty(link))
+ {
+ var a = new TagBuilder("a");
+ a.MergeAttribute("href", link);
+ a.InnerHtml = tag.ToString(TagRenderMode.Normal);
+ return a.ToMvcHtmlString();
+ }
+
+ return tag.ToString(TagRenderMode.SelfClosing).ToMvcHtmlString();
+ }
+
+ public static MvcHtmlString Js(this HtmlHelper html, string src, BundleOptions options = BundleOptions.Minified)
+ {
+ if (string.IsNullOrEmpty(src))
+ return MvcHtmlString.Empty;
+
+ if (src.StartsWith("~/"))
+ src = src.Replace("~/", VirtualPathUtility.ToAbsolute("~"));
+
+ var tag = new TagBuilder("script");
+ tag.MergeAttribute("type", "text/javascript");
+
+ tag.MergeAttribute("src", src.RewriteUrl(options));
+
+ return tag.ToString(TagRenderMode.Normal).ToMvcHtmlString();
+ }
+
+ public static MvcHtmlString Img(this HtmlHelper html, Uri url, string alt, Uri link = null, object htmlAttributes = null)
+ {
+ return html.Img(url.ToString(), alt, link != null ? link.ToString() : "", htmlAttributes);
+ }
+
+ public static string ToJsBool(this bool value)
+ {
+ return value.ToString(CultureInfo.InvariantCulture).ToLower();
+ }
+
+ static readonly Dictionary<string, MvcHtmlString> BundleCache = new Dictionary<string, MvcHtmlString>();
+
+ public static MvcHtmlString RenderJsBundle(this HtmlHelper html, string bundlePath, BundleOptions options = BundleOptions.Minified)
+ {
+ if (string.IsNullOrEmpty(bundlePath))
+ return MvcHtmlString.Empty;
+
+ if (!CachePaths()) BundleCache.SafeClear();
+
+ return BundleCache.GetOrAdd(bundlePath, str =>
+ {
+ var filePath = HostingEnvironment.MapPath(bundlePath);
+
+ var baseUrl = VirtualPathUtility.GetDirectory(bundlePath);
+
+ if (options == BundleOptions.Combined)
+ return html.Js(bundlePath.Replace(".bundle", ""), options);
+ if (options == BundleOptions.MinifiedAndCombined)
+ return html.Js(bundlePath.Replace(".js.bundle", ".min.js"), options);
+
+ var jsFiles = File.ReadAllLines(filePath);
+
+ var scripts = new StringBuilder();
+ foreach (var file in jsFiles)
+ {
+ if (file.StartsWith("#"))
+ continue;
+
+ var jsFile = file.Trim()
+ .Replace(".coffee", ".js")
+ .Replace(".ls", ".js");
+
+ var jsSrc = Path.Combine(baseUrl, jsFile);
+
+ scripts.AppendLine(
+ html.Js(jsSrc, options).ToString()
+ );
+ }
+
+ return scripts.ToString().ToMvcHtmlString();
+ });
+ }
+
+ public static MvcHtmlString RenderCssBundle(this HtmlHelper html, string bundlePath, BundleOptions options = BundleOptions.Minified, string media = null)
+ {
+ if (string.IsNullOrEmpty(bundlePath))
+ return MvcHtmlString.Empty;
+
+ if (!CachePaths()) BundleCache.SafeClear();
+
+ return BundleCache.GetOrAdd(bundlePath, str =>
+ {
+ var filePath = HostingEnvironment.MapPath(bundlePath);
+
+ var baseUrl = VirtualPathUtility.GetDirectory(bundlePath);
+
+ if (options == BundleOptions.Combined)
+ return html.Css(bundlePath.Replace(".bundle", ""), media, options);
+ if (options == BundleOptions.MinifiedAndCombined)
+ return html.Css(bundlePath.Replace(".css.bundle", ".min.css"), media, options);
+
+ var cssFiles = File.ReadAllLines(filePath);
+
+ var styles = new StringBuilder();
+ foreach (var file in cssFiles)
+ {
+ if (file.StartsWith("#"))
+ continue;
+
+ var cssFile = file.Trim()
+ .Replace(".less", ".css")
+ .Replace(".sass", ".css")
+ .Replace(".scss", ".css")
+ .Replace(".styl", ".css");
+ var cssSrc = Path.Combine(baseUrl, cssFile);
+
+ styles.AppendLine(
+ html.Css(cssSrc, media, options).ToString()
+ );
+ }
+
+ return styles.ToString().ToMvcHtmlString();
+ });
+ }
+ }
+}
View
2 src/SocialBootstrapApi/Controllers/SecureController.cs
@@ -1,5 +1,5 @@
using System.Web.Mvc;
-using ServiceStack.ServiceInterface;
+using ServiceStack;
namespace SocialBootstrapApi.Controllers
{
View
11 src/SocialBootstrapApi/Global.asax.cs
@@ -1,6 +1,10 @@
using System;
+using System.Configuration;
+using System.IO;
using System.Web.Mvc;
using System.Web.Routing;
+using ServiceStack;
+using ServiceStack.Configuration;
using ServiceStack.MiniProfiler;
namespace SocialBootstrapApi
@@ -34,7 +38,12 @@ public static void RegisterRoutes(RouteCollection routes)
protected void Application_Start()
{
- AreaRegistration.RegisterAllAreas();
+ if (File.Exists(@"C:\src\appsettings.license.txt"))
+ Licensing.RegisterLicenseFromFile(@"C:\src\appsettings.license.txt");
+ else if (string.IsNullOrEmpty(ConfigUtils.GetNullableAppSetting("servicestack:license")))
+ throw new ConfigurationErrorsException("A valid license key is required for this demo");
+
+ AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
View
32 src/SocialBootstrapApi/Logic/TwitterGateway.cs
@@ -4,11 +4,8 @@
using System.Net;
using System.Threading.Tasks;
using ChaweetApi.ServiceModel;
-using ServiceStack.Common;
-using ServiceStack.Common.Web;
-using ServiceStack.ServiceClient.Web;
-using ServiceStack.ServiceInterface;
-using ServiceStack.ServiceInterface.Auth;
+using ServiceStack;
+using ServiceStack.Auth;
using ServiceStack.Text;
using SocialBootstrapApi.Support;
@@ -33,12 +30,12 @@ public class TwitterGateway : ITwitterGateway
{
public const int DefaultTake = 100;
public const int ApiBatchSize = 100;
- public const string UserUrl = "http://api.twitter.com/1/users/lookup.json";
- public const string FollowersUrl = "http://api.twitter.com/1/followers/ids.json";
- public const string FriendsUrl = "http://api.twitter.com/1/friends/ids.json";
- public const string UserTimelineUrl = "http://api.twitter.com/1/statuses/user_timeline.json?include_entities=1&screen_name={0}";
- public const string TweetsUrl = "http://api.twitter.com/1/statuses/following_timeline.json?include_entities=1&screen_name={0}";
- public const string DirectMessagesUrl = "https://api.twitter.com/1/direct_messages.json";
+ public const string UserUrl = "https://api.twitter.com/1.1/users/lookup.json";
+ public const string FollowersUrl = "https://api.twitter.com/1.1/followers/ids.json";
+ public const string FriendsUrl = "https://api.twitter.com/1.1/friends/ids.json";
+ public const string UserTimelineUrl = "https://api.twitter.com/1.1/statuses/user_timeline.json?include_entities=1&screen_name={0}";
+ public const string HomeTimelineUrl = "https://api.twitter.com/1.1/statuses/home_timeline.json?include_entities=1&screen_name={0}";
+ public const string DirectMessagesUrl = "https://api.twitter.com/1.1/direct_messages.json";
public TwitterAuth Auth { get; set; }
@@ -125,7 +122,7 @@ public List<Tweet> GetTweets(string screenName, string sinceId = null, string ma
if (screenName == null)
throw new ArgumentNullException("screenName");
- var url = TweetsUrl.Fmt(screenName).AddQueryParam("count", take.GetValueOrDefault(DefaultTake));
+ var url = UserTimelineUrl.Fmt(screenName).AddQueryParam("count", take.GetValueOrDefault(DefaultTake));
if (!string.IsNullOrEmpty(sinceId))
url = url.AddQueryParam("since_id", sinceId);
if (!string.IsNullOrEmpty(maxId))
@@ -142,7 +139,7 @@ public List<Tweet> GetTimeline(string screenName, string sinceId = null, string
if (screenName == null)
throw new ArgumentNullException("screenName");
- var url = UserTimelineUrl.Fmt(screenName).AddQueryParam("count", take.GetValueOrDefault(DefaultTake));
+ var url = HomeTimelineUrl.Fmt(screenName).AddQueryParam("count", take.GetValueOrDefault(DefaultTake));
if (!string.IsNullOrEmpty(sinceId))
url = url.AddQueryParam("since_id", sinceId);
if (!string.IsNullOrEmpty(maxId))
@@ -188,7 +185,7 @@ public static string DownloadJsonFromUrl(this string url, TwitterAuth twitterAut
var uri = new Uri(url);
var webReq = (HttpWebRequest)WebRequest.Create(uri);
- webReq.Accept = ContentType.Json;
+ webReq.Accept = MimeTypes.Json;
if (twitterAuth.AccessToken != null)
{
webReq.Headers[HttpRequestHeader.Authorization] = OAuthAuthorizer.AuthorizeRequest(
@@ -196,15 +193,16 @@ public static string DownloadJsonFromUrl(this string url, TwitterAuth twitterAut
}
using (var webRes = webReq.GetResponse())
- return webRes.DownloadText();
+ return webRes.ReadToEnd();
}
public static List<Task<string>> DownloadAllJsonAsync(this IEnumerable<string> urls, TwitterAuth twitterAuth)
{
if (twitterAuth == null)
- return urls.DownloadAllAsync(ContentType.Json);
+ return urls.DownloadAllAsync(MimeTypes.Json);
- return urls.DownloadAllAsync(ContentType.Json, (webReq, uri) => {
+ return urls.DownloadAllAsync(MimeTypes.Json, (webReq, uri) =>
+ {
if (twitterAuth.AccessToken != null)
{
View
17 src/SocialBootstrapApi/Models/CustomUserSession.cs
@@ -1,12 +1,12 @@
using System.Collections.Generic;
using System.Security.Cryptography;
using System.Text;
+using ServiceStack;
+using ServiceStack.Auth;
using ServiceStack.Authentication.OpenId;
-using ServiceStack.Common;
+using ServiceStack.Configuration;
+using ServiceStack.Data;
using ServiceStack.OrmLite;
-using ServiceStack.ServiceInterface;
-using ServiceStack.ServiceInterface.Auth;
-using ServiceStack.Text;
namespace SocialBootstrapApi.Models
{
@@ -19,12 +19,12 @@ public class CustomUserSession : AuthUserSession
{
public string CustomId { get; set; }
- public override void OnAuthenticated(IServiceBase authService, IAuthSession session, IOAuthTokens tokens, Dictionary<string, string> authInfo)
+ public override void OnAuthenticated(IServiceBase authService, IAuthSession session, IAuthTokens tokens, Dictionary<string, string> authInfo)
{
base.OnAuthenticated(authService, session, tokens, authInfo);
//Populate all matching fields from this session to your own custom User table
- var user = session.TranslateTo<User>();
+ var user = session.ConvertTo<User>();
user.Id = int.Parse(session.UserAuthId);
user.GravatarImageUrl64 = !session.Email.IsNullOrEmpty()
? CreateGravatarUrl(session.Email, 64)
@@ -41,7 +41,7 @@ public override void OnAuthenticated(IServiceBase authService, IAuthSession sess
}
else if (authToken.Provider == TwitterAuthProvider.Name)
{
- user.TwitterName = authToken.DisplayName;
+ user.TwitterName = user.DisplayName = authToken.UserName;
}
else if (authToken.Provider == GoogleOpenIdOAuthProvider.Name)
{
@@ -70,7 +70,8 @@ public override void OnAuthenticated(IServiceBase authService, IAuthSession sess
}
//Resolve the DbFactory from the IOC and persist the user info
- authService.TryResolve<IDbConnectionFactory>().Run(db => db.Save(user));
+ using (var db = authService.TryResolve<IDbConnectionFactory>().Open())
+ db.Save(user);
}
private static string CreateGravatarUrl(string email, int size = 64)
View
289 src/SocialBootstrapApi/Mvc.Bundler.cs
@@ -1,289 +0,0 @@
-using System;
-using System.Collections.Concurrent;
-using System.Collections.Generic;
-using System.Globalization;
-using System.IO;
-using System.Text;
-using System.Web;
-using System.Web.Hosting;
-using System.Web.Mvc;
-using System.Web.Routing;
-
-namespace ServiceStack.Mvc
-{
- public enum BundleOptions
- {
- Normal,
- Minified,
- Combined,
- MinifiedAndCombined
- }
-
- public static class Bundler
- {
- public static Func<bool> CachePaths = IsProduction;
- public static Func<string, BundleOptions, string> DefaultUrlFilter = ProcessVirtualPathDefault;
-
- // Logic to determine if the app is running in production or dev environment
- public static bool IsProduction()
- {
- return (HttpContext.Current != null && !HttpContext.Current.IsDebuggingEnabled);
- }
-
- public static bool FileExists(string virtualPath)
- {
- if (!HostingEnvironment.IsHosted) return false;
- var filePath = HostingEnvironment.MapPath(virtualPath);
- return File.Exists(filePath);
- }
-
- static DateTime centuryBegin = new DateTime(2001, 1, 1);
- public static string TimestampString(string virtualPath)
- {
- try
- {
- if (HostingEnvironment.IsHosted)
- {
- var filePath = HostingEnvironment.MapPath(virtualPath);
- return Convert.ToString((File.GetLastWriteTimeUtc(filePath).Ticks - centuryBegin.Ticks) / 1000000000, 16);
- }
- }
- catch { } //ignore
- return string.Empty;
- }
-
- private static TVal GetOrAdd<TKey, TVal>(this Dictionary<TKey, TVal> map, TKey key, Func<TKey, TVal> factoryFn)
- {
- lock (map)
- {
- TVal ret;
- if (!map.TryGetValue(key, out ret))
- {
- map[key] = ret = factoryFn(key);
- }
- return ret;
- }
- }
-
- private static void SafeClear<TKey, TVal>(this Dictionary<TKey, TVal> map)
- {
- lock (map) map.Clear();
- }
-
- static readonly Dictionary<string,string> VirutalPathCache = new Dictionary<string, string>();
- private static string ProcessVirtualPathDefault(string virtualPath, BundleOptions options)
- {
- if (!CachePaths()) VirutalPathCache.SafeClear();
-
- return VirutalPathCache.GetOrAdd(virtualPath, str => {
- // The path that comes in starts with ~/ and must first be made absolute
-
- if (options == BundleOptions.Minified || options == BundleOptions.MinifiedAndCombined)
- {
- if (virtualPath.EndsWith(".js") && !virtualPath.EndsWith(".min.js"))
- {
- var minPath = virtualPath.Replace(".js", ".min.js");
- if (FileExists(minPath))
- virtualPath = minPath;
- }
- else if (virtualPath.EndsWith(".css") && !virtualPath.EndsWith(".min.css"))
- {
- var minPath = virtualPath.Replace(".css", ".min.css");
- if (FileExists(minPath))
- virtualPath = minPath;
- }
- }
-
- var path = virtualPath;
- if (virtualPath.IndexOf("://", StringComparison.Ordinal) == -1)
- {
- path = VirtualPathUtility.ToAbsolute(virtualPath);
-
- var cacheBreaker = TimestampString(virtualPath);
- if (!string.IsNullOrEmpty(cacheBreaker))
- {
- path += path.IndexOf('?') == -1
- ? "?" + cacheBreaker
- : "&" + cacheBreaker;
- }
- }
-
- // Add your own modifications here before returning the path
- return path;
- });
- }
-
- private static string RewriteUrl(this string relativePath, BundleOptions options=BundleOptions.Normal)
- {
- return DefaultUrlFilter(relativePath, options);
- }
-
- public static MvcHtmlString ToMvcHtmlString(this string s)
- {
- return MvcHtmlString.Create(s);
- }
-
- public static MvcHtmlString ToMvcHtmlString(this TagBuilder t)
- {
- return t.ToString().ToMvcHtmlString();
- }
-
- public static MvcHtmlString ToMvcHtmlString(this TagBuilder t, TagRenderMode mode)
- {
- return t.ToString(mode).ToMvcHtmlString();
- }
-
- public static MvcHtmlString Link(this HtmlHelper html, string rel, string href, object htmlAttributes = null, BundleOptions options = BundleOptions.Normal)
- {
- if (string.IsNullOrEmpty(href))
- return MvcHtmlString.Empty;
-
- if (href.StartsWith("~/"))
- href = href.Replace("~/", VirtualPathUtility.ToAbsolute("~"));
-
- var tag = new TagBuilder("link");
- tag.MergeAttribute("rel", rel);
-
- tag.MergeAttribute("href", href.RewriteUrl(options));
-
- if (htmlAttributes != null)
- tag.MergeAttributes(new RouteValueDictionary(htmlAttributes));
-
- return tag.ToString(TagRenderMode.SelfClosing).ToMvcHtmlString();
- }
-
- public static MvcHtmlString Css(this HtmlHelper html, string href, string media = null, BundleOptions options = BundleOptions.Minified)
- {
- return media != null
- ? html.Link("stylesheet", href, new { media }, options)
- : html.Link("stylesheet", href, null, options);
- }
-
- public static T If<T>(this HtmlHelper html, bool predicate, T whenTrue, T whenFalse)
- {
- return predicate ? whenTrue : whenFalse;
- }
-
- public static MvcHtmlString Img(this HtmlHelper html, string src, string alt, string link = null, object htmlAttributes = null)
- {
- if (string.IsNullOrEmpty(src))
- return MvcHtmlString.Empty;
-
- if (src.StartsWith("~/"))
- src = src.Replace("~/", VirtualPathUtility.ToAbsolute("~"));
-
- var tag = new TagBuilder("img");
-
- tag.MergeAttribute("src", src.RewriteUrl());
- tag.MergeAttribute("alt", alt);
- if (htmlAttributes != null)
- tag.MergeAttributes(new RouteValueDictionary(htmlAttributes));
-
- if (!string.IsNullOrEmpty(link))
- {
- var a = new TagBuilder("a");
- a.MergeAttribute("href", link);
- a.InnerHtml = tag.ToString(TagRenderMode.Normal);
- return a.ToMvcHtmlString();
- }
-
- return tag.ToString(TagRenderMode.SelfClosing).ToMvcHtmlString();
- }
-
- public static MvcHtmlString Js(this HtmlHelper html, string src, BundleOptions options = BundleOptions.Minified)
- {
- if (string.IsNullOrEmpty(src))
- return MvcHtmlString.Empty;
-
- if (src.StartsWith("~/"))
- src = src.Replace("~/", VirtualPathUtility.ToAbsolute("~"));
-
- var tag = new TagBuilder("script");
- tag.MergeAttribute("type", "text/javascript");
-
- tag.MergeAttribute("src", src.RewriteUrl(options));
-
- return tag.ToString(TagRenderMode.Normal).ToMvcHtmlString();
- }
-
- public static MvcHtmlString Img(this HtmlHelper html, Uri url, string alt, Uri link = null, object htmlAttributes = null)
- {
- return html.Img(url.ToString(), alt, link != null ? link.ToString() : "", htmlAttributes);
- }
-
- public static string ToJsBool(this bool value)
- {
- return value.ToString(CultureInfo.InvariantCulture).ToLower();
- }
-
- static readonly Dictionary<string, MvcHtmlString> BundleCache = new Dictionary<string, MvcHtmlString>();
-
- public static MvcHtmlString RenderJsBundle(this HtmlHelper html, string bundlePath, BundleOptions options = BundleOptions.Minified)
- {
- if (string.IsNullOrEmpty(bundlePath))
- return MvcHtmlString.Empty;
-
- if (!CachePaths()) BundleCache.SafeClear();
-
- return BundleCache.GetOrAdd(bundlePath, str => {
- var filePath = HostingEnvironment.MapPath(bundlePath);
-
- var baseUrl = VirtualPathUtility.GetDirectory(bundlePath);
-
- if (options == BundleOptions.Combined)
- return html.Js(bundlePath.Replace(".bundle", ""), options);
- if (options == BundleOptions.MinifiedAndCombined)
- return html.Js(bundlePath.Replace(".js.bundle", ".min.js"), options);
-
- var jsFiles = File.ReadAllLines(filePath);
-
- var scripts = new StringBuilder();
- foreach (var file in jsFiles)
- {
- var jsFile = file.Trim().Replace(".coffee", ".js");
- var jsSrc = Path.Combine(baseUrl, jsFile);
-
- scripts.AppendLine(
- html.Js(jsSrc, options).ToString()
- );
- }
-
- return scripts.ToString().ToMvcHtmlString();
- });
- }
-
- public static MvcHtmlString RenderCssBundle(this HtmlHelper html, string bundlePath, BundleOptions options = BundleOptions.Minified)
- {
- if (string.IsNullOrEmpty(bundlePath))
- return MvcHtmlString.Empty;
-
- if (!CachePaths()) BundleCache.SafeClear();
-
- return BundleCache.GetOrAdd(bundlePath, str => {
- var filePath = HostingEnvironment.MapPath(bundlePath);
-
- var baseUrl = VirtualPathUtility.GetDirectory(bundlePath);
-
- if (options == BundleOptions.Combined)
- return html.Css(bundlePath.Replace(".bundle", ""), null, options);
- if (options == BundleOptions.MinifiedAndCombined)
- return html.Css(bundlePath.Replace(".css.bundle", ".min.css"), null, options);
-
- var cssFiles = File.ReadAllLines(filePath);
-
- var styles = new StringBuilder();
- foreach (var file in cssFiles)
- {
- var cssFile = file.Trim().Replace(".less", ".css");
- var cssSrc = Path.Combine(baseUrl, cssFile);
-
- styles.AppendLine(
- html.Css(cssSrc, null, options).ToString()
- );
- }
-
- return styles.ToString().ToMvcHtmlString();
- });
- }
- }
-}
View
10 src/SocialBootstrapApi/ServiceInterface/AppFollowersServiceBase.cs
@@ -1,9 +1,7 @@
using System;
using System.Collections.Generic;
using ChaweetApi.ServiceModel;
-using ServiceStack.Common;
-using ServiceStack.ServiceHost;
-using ServiceStack.ServiceInterface.ServiceModel;
+using ServiceStack;
namespace SocialBootstrapApi.ServiceInterface
{
@@ -48,11 +46,11 @@ public object Any(TwitterFollowers request)
//This caches and returns the most optimal result the browser can handle, e.g.
//If browser requests json and accepts deflate - it returns a deflated json payload from cache
- return base.RequestContext.ToOptimizedResultUsingCache(Cache, cacheKey, () =>
+ return base.Request.ToOptimizedResultUsingCache(Cache, cacheKey, () =>
new TwitterFollowersResponse {
Results = hasId
- ? TwitterGateway.GetFollowers(ulong.Parse(request.UserId), request.Skip)
- : TwitterGateway.GetFollowers(request.ScreenName, request.Skip)
+ ? AuthTwitterGateway.GetFollowers(ulong.Parse(request.UserId), request.Skip)
+ : AuthTwitterGateway.GetFollowers(request.ScreenName, request.Skip)
});
}
}
View
6 src/SocialBootstrapApi/ServiceInterface/AppServiceBase.cs
@@ -1,6 +1,6 @@
using System.Linq;
-using ServiceStack.ServiceInterface;
-using ServiceStack.ServiceInterface.Auth;
+using ServiceStack;
+using ServiceStack.Auth;
using SocialBootstrapApi.Logic;
using SocialBootstrapApi.Models;
@@ -25,7 +25,7 @@ public ITwitterGateway AuthTwitterGateway
{
if (authGateway != null) return authGateway;
- var authProvider = AuthService.AuthProviders.FirstOrDefault(x => x is TwitterAuthProvider) as TwitterAuthProvider;
+ var authProvider = AuthenticateService.AuthProviders.FirstOrDefault(x => x is TwitterAuthProvider) as TwitterAuthProvider;
var oAuthTokens = UserSession.GetOAuthTokens(TwitterAuthProvider.Name);
return authGateway = TwitterGateway.CreateAuthroizedGateway(
View
5 src/SocialBootstrapApi/ServiceInterface/AuthorService.cs
@@ -1,11 +1,8 @@
using System;
using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
+using ServiceStack;
using ServiceStack.DataAnnotations;
using ServiceStack.OrmLite;
-using ServiceStack.ServiceHost;
-using ServiceStack.ServiceInterface;
-using ServiceStack.ServiceInterface.ServiceModel;
namespace SocialBootstrapApi.ServiceInterface
{
View
4 src/SocialBootstrapApi/ServiceInterface/HelloService.cs
@@ -1,9 +1,7 @@
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
-using ServiceStack.ServiceHost;
-using ServiceStack.ServiceInterface;
-using ServiceStack.Text;
+using ServiceStack;
namespace SocialBootstrapApi.ServiceInterface
{
View
7 src/SocialBootstrapApi/ServiceInterface/LoginService.cs
@@ -1,9 +1,6 @@
#define UseEmbeddedHtmlForm
-using ServiceStack.Common.Web;
-using ServiceStack.ServiceHost;
-using ServiceStack.ServiceInterface;
-using ServiceStack.Text;
+using ServiceStack;
namespace SocialBootstrapApi.ServiceInterface
{
@@ -41,7 +38,7 @@ public class LoginService : Service
</body>
</html>";
- [AddHeader(ContentType = ContentType.Html)] //HTML is ASP.NET's default, but nice to be explicit
+ [AddHeader(ContentType = MimeTypes.Html)] //HTML is ASP.NET's default, but nice to be explicit
public object Any(Login request)
{
return HtmlBody.Fmt(request.Redirect);
View
16 src/SocialBootstrapApi/ServiceInterface/ResetService.cs
@@ -1,7 +1,8 @@
+using ServiceStack;
+using ServiceStack.Auth;
+using ServiceStack.Data;
using ServiceStack.OrmLite;
-using ServiceStack.ServiceHost;
-using ServiceStack.ServiceInterface;
-using ServiceStack.ServiceInterface.Auth;
+using ServiceStack.Web;
using SocialBootstrapApi.Models;
namespace SocialBootstrapApi.ServiceInterface
@@ -19,15 +20,14 @@ public class ResetResponse
public class ResetService : Service
{
- public IDbConnectionFactory DbFactory { get; set; }
-
- public object Any(Reset request)
+ //public
+ object Any(Reset request)
{
Db.DeleteAll<User>();
Db.DeleteAll<UserAuth>();
- Db.DeleteAll<UserOAuthProvider>();
+ Db.DeleteAll<UserAuthDetails>();
- var httpRes = base.RequestContext.Get<IHttpResponse>();
+ var httpRes = (IHttpResponse)base.Request.Response;
httpRes.Cookies.DeleteCookie("ss-id");
httpRes.Cookies.DeleteCookie("ss-pid");
View
17 src/SocialBootstrapApi/ServiceInterface/RestrictedServices.cs
@@ -1,27 +1,26 @@
-using ServiceStack.ServiceHost;
-using ServiceStack.ServiceInterface;
+using ServiceStack;
namespace SocialBootstrapApi.ServiceInterface
{
- [Restrict(EndpointAttributes.Json)]
+ [Restrict(RequestAttributes.Json)]
public class JsonOnly { }
- [Restrict(EndpointAttributes.Xml)]
+ [Restrict(RequestAttributes.Xml)]
public class XmlOnly { }
- [Restrict(VisibilityTo = EndpointAttributes.Json)]
+ [Restrict(VisibilityTo = RequestAttributes.Json)]
public class VisibleToJsonOnly { }
- [Restrict(VisibilityTo = EndpointAttributes.Xml)]
+ [Restrict(VisibilityTo = RequestAttributes.Xml)]
public class VisibleToXmlOnly { }
- [Restrict(EndpointAttributes.Localhost)]
+ [Restrict(RequestAttributes.Localhost)]
public class LocalhostOnly { }
- [Restrict(EndpointAttributes.InternalNetworkAccess)]
+ [Restrict(RequestAttributes.InternalNetworkAccess)]
public class InternalOnly { }
- [Restrict(EndpointAttributes.External)]
+ [Restrict(RequestAttributes.External)]
public class ExternalOnly { }
public class GetOnly { }
View
2 src/SocialBootstrapApi/ServiceInterface/TodoService.cs
@@ -1,7 +1,7 @@
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
-using ServiceStack.ServiceInterface;
+using ServiceStack;
namespace SocialBootstrapApi.ServiceInterface
{
View
5 src/SocialBootstrapApi/ServiceInterface/TwitterDirectMessagesService.cs
@@ -1,7 +1,6 @@
using System.Collections.Generic;
using ChaweetApi.ServiceModel;
-using ServiceStack.Common;
-using ServiceStack.ServiceHost;
+using ServiceStack;
namespace SocialBootstrapApi.ServiceInterface
{
@@ -30,7 +29,7 @@ public object Any(TwitterDirectMessages request)
//This caches and returns the most optimal result the browser can handle, e.g.
//If the browser requests json and accepts deflate - it returns a deflated json payload from cache
- return base.RequestContext.ToOptimizedResultUsingCache(Cache, cacheKey, () =>
+ return base.Request.ToOptimizedResultUsingCache(Cache, cacheKey, () =>
new TwitterDirectMessagesResponse {
Results = AuthTwitterGateway.GetDirectMessages(
request.SinceId, request.MaxId, request.Take)
View
14 src/SocialBootstrapApi/ServiceInterface/TwitterFriendsService.cs
@@ -1,9 +1,7 @@
using System;
using System.Collections.Generic;
using ChaweetApi.ServiceModel;
-using ServiceStack.Common;
-using ServiceStack.ServiceHost;
-using ServiceStack.ServiceInterface;
+using ServiceStack;
using SocialBootstrapApi.Logic;
namespace SocialBootstrapApi.ServiceInterface
@@ -27,10 +25,8 @@ public TwitterFriendsResponse()
public List<TwitterUser> Results { get; set; }
}
- public class TwitterFriendsService : Service
+ public class TwitterFriendsService : AppServiceBase
{
- public ITwitterGateway TwitterGateway { get; set; } //Injected in IOC as defined in AppHost
-
//Available on all HTTP Verbs (GET, POST, PUT, DELETE, etc) and endpoints JSON, XMl, JSV, etc
public object Any(TwitterFriends request)
{
@@ -47,11 +43,11 @@ public object Any(TwitterFriends request)
//This caches and returns the most optimal result the browser can handle, e.g.
//If the browser requests json and accepts deflate - it returns a deflated json payload from cache
- return base.RequestContext.ToOptimizedResultUsingCache(Cache, cacheKey, () =>
+ return base.Request.ToOptimizedResultUsingCache(Cache, cacheKey, () =>
new TwitterFriendsResponse {
Results = hasId
- ? TwitterGateway.GetFriends(ulong.Parse(request.UserId), request.Skip)
- : TwitterGateway.GetFriends(request.ScreenName, request.Skip)
+ ? AuthTwitterGateway.GetFriends(ulong.Parse(request.UserId), request.Skip)
+ : AuthTwitterGateway.GetFriends(request.ScreenName, request.Skip)
});
}
}
View
5 src/SocialBootstrapApi/ServiceInterface/TwitterTimelinesService.cs
@@ -1,7 +1,6 @@
using System.Collections.Generic;
using ChaweetApi.ServiceModel;
-using ServiceStack.Common;
-using ServiceStack.ServiceHost;
+using ServiceStack;
namespace SocialBootstrapApi.ServiceInterface
{
@@ -32,7 +31,7 @@ public object Any(TwitterTimelines request)
//This caches and returns the most optimal result the browser can handle, e.g.
//If the browser requests json and accepts deflate - it returns a deflated json payload from cache
- return base.RequestContext.ToOptimizedResultUsingCache(Cache, cacheKey, () =>
+ return base.Request.ToOptimizedResultUsingCache(Cache, cacheKey, () =>
new TwitterTimelinesResponse {
Results = AuthTwitterGateway.GetTimeline(
request.ScreenName, request.SinceId, request.MaxId, request.Take)
View
6 src/SocialBootstrapApi/ServiceInterface/TwitterTweetsService.cs
@@ -1,8 +1,6 @@
using System.Collections.Generic;
using ChaweetApi.ServiceModel;
-using ServiceStack.Common;
-using ServiceStack.ServiceHost;
-using ServiceStack.ServiceInterface.ServiceModel;
+using ServiceStack;
namespace SocialBootstrapApi.ServiceInterface
{
@@ -33,7 +31,7 @@ public object Any(TwitterTweets request)
//This caches and returns the most optimal result the browser can handle, e.g.
//If the browser requests json and accepts deflate - it returns a deflated json payload from cache
- return base.RequestContext.ToOptimizedResultUsingCache(Cache, cacheKey, () =>
+ return base.Request.ToOptimizedResultUsingCache(Cache, cacheKey, () =>
new TwitterTweetsResponse {
Results = AuthTwitterGateway.GetTweets(
request.ScreenName, request.SinceId, request.MaxId, request.Take)
View
1 src/SocialBootstrapApi/ServiceInterface/TwitterUsersService.cs
@@ -1,6 +1,5 @@
using System.Collections.Generic;
using ChaweetApi.ServiceModel;
-using ServiceStack.ServiceInterface.ServiceModel;
namespace SocialBootstrapApi.ServiceInterface
{
View
10 src/SocialBootstrapApi/ServiceInterface/UserAuths.cs
@@ -1,7 +1,7 @@
using System.Collections.Generic;
+using ServiceStack;
+using ServiceStack.Auth;
using ServiceStack.OrmLite;
-using ServiceStack.ServiceHost;
-using ServiceStack.ServiceInterface.Auth;
using SocialBootstrapApi.Models;
namespace SocialBootstrapApi.ServiceInterface
@@ -18,7 +18,7 @@ public UserAuthsResponse()
{
this.Users = new List<User>();
this.UserAuths = new List<UserAuth>();
- this.OAuthProviders = new List<UserOAuthProvider>();
+ this.OAuthProviders = new List<UserAuthDetails>();
}
public CustomUserSession UserSession { get; set; }
@@ -26,7 +26,7 @@ public UserAuthsResponse()
public List<UserAuth> UserAuths { get; set; }
- public List<UserOAuthProvider> OAuthProviders { get; set; }
+ public List<UserAuthDetails> OAuthProviders { get; set; }
}
//Implementation. Can be called via any endpoint or format, see: http://servicestack.net/ServiceStack.Hello/
@@ -38,7 +38,7 @@ public object Any(UserAuths request)
UserSession = base.UserSession,
Users = Db.Select<User>(),
UserAuths = Db.Select<UserAuth>(),
- OAuthProviders = Db.Select<UserOAuthProvider>(),
+ OAuthProviders = Db.Select<UserAuthDetails>(),
};
response.UserAuths.ForEach(x => x.PasswordHash = "[Redacted]");
View
12 src/SocialBootstrapApi/ServiceInterface/UserProfileService.cs
@@ -1,10 +1,8 @@
using System.Linq;
+using ServiceStack;
+using ServiceStack.Auth;
using ServiceStack.Authentication.OpenId;
-using ServiceStack.Common;
using ServiceStack.OrmLite;
-using ServiceStack.ServiceInterface;
-using ServiceStack.ServiceInterface.Auth;
-using ServiceStack.ServiceInterface.ServiceModel;
using SocialBootstrapApi.Models;
namespace SocialBootstrapApi.ServiceInterface
@@ -46,13 +44,13 @@ public object Get(UserProfile request)
{
var session = base.UserSession;
- var userProfile = session.TranslateTo<UserProfile>();
+ var userProfile = session.ConvertTo<UserProfile>();
userProfile.Id = int.Parse(session.UserAuthId);
- var user = Db.QueryById<User>(userProfile.Id);
+ var user = Db.SingleById<User>(userProfile.Id);
userProfile.PopulateWith(user);
- var userAuths = Db.Select<UserOAuthProvider>("UserAuthId = {0}", session.UserAuthId.ToInt());
+ var userAuths = Db.Select<UserAuthDetails>(q => q.UserAuthId == session.UserAuthId.ToInt());
var googleAuth = userAuths.FirstOrDefault(x => x.Provider == GoogleOpenIdOAuthProvider.Name);
if (googleAuth != null)
View
8 src/SocialBootstrapApi/ServiceInterface/UsersService.cs
@@ -1,8 +1,6 @@
using System.Collections.Generic;
-using ServiceStack.Common;
+using ServiceStack;
using ServiceStack.OrmLite;
-using ServiceStack.ServiceInterface;
-using ServiceStack.ServiceInterface.ServiceModel;
using SocialBootstrapApi.Models;
namespace SocialBootstrapApi.ServiceInterface
@@ -33,9 +31,9 @@ public object Get(Users request)
if (request.UserIds.Length == 0)
return response;
- var users = Db.Ids<User>(request.UserIds);
+ var users = Db.SelectByIds<User>(request.UserIds);
- var userInfos = users.ConvertAll(x => x.TranslateTo<UserInfo>());
+ var userInfos = users.ConvertAll(x => x.ConvertTo<UserInfo>());
return new UsersResponse {
Results = userInfos
View
836 src/SocialBootstrapApi/SocialBootstrapApi.csproj
@@ -13,7 +13,7 @@
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>SocialBootstrapApi</RootNamespace>
<AssemblyName>SocialBootstrapApi</AssemblyName>
- <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+ <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<MvcBuildViews>false</MvcBuildViews>
<UseIISExpress>false</UseIISExpress>
<FileUpgradeFlags>
@@ -24,6 +24,7 @@
<IISExpressAnonymousAuthentication />
<IISExpressWindowsAuthentication />
<IISExpressUseClassicPipelineMode />
+ <TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
@@ -33,6 +34,7 @@
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
+ <Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
@@ -41,54 +43,72 @@
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
+ <Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
- <Reference Include="DotNetOpenAuth, Version=4.2.0.0, Culture=neutral, PublicKeyToken=2780ccd10d57b246, processorArchitecture=MSIL">
+ <Reference Include="DotNetOpenAuth, Version=4.3.0.0, Culture=neutral, PublicKeyToken=2780ccd10d57b246, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
- <HintPath>packages\DotNetOpenAuth.Ultimate.4.2.2.13055\lib\net40-full\DotNetOpenAuth.dll</HintPath>
+ <HintPath>packages\DotNetOpenAuth.Ultimate.4.3.4.13329\lib\net40-full\DotNetOpenAuth.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CSharp" />
- <Reference Include="ServiceStack, Version=3.9.42.0, Culture=neutral, processorArchitecture=MSIL">
+ <Reference Include="ServiceStack, Version=4.0.7.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
- <HintPath>packages\ServiceStack.3.9.42\lib\net35\ServiceStack.dll</HintPath>
+ <HintPath>packages\ServiceStack.4.0.7\lib\net40\ServiceStack.dll</HintPath>
</Reference>
- <Reference Include="ServiceStack.Api.Swagger">
- <HintPath>packages\ServiceStack.Api.Swagger.3.9.42\lib\net35\ServiceStack.Api.Swagger.dll</HintPath>
+ <Reference Include="ServiceStack.Api.Swagger, Version=4.0.7.0, Culture=neutral, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>packages\ServiceStack.Api.Swagger.4.0.7\lib\net40\ServiceStack.Api.Swagger.dll</HintPath>
</Reference>
- <Reference Include="ServiceStack.Authentication.OpenId, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
- <HintPath>packages\ServiceStack.Authentication.OpenId.3.9.42\lib\net35\ServiceStack.Authentication.OpenId.dll</HintPath>
+ <Reference Include="ServiceStack.Authentication.OAuth2, Version=4.0.7.0, Culture=neutral, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>packages\ServiceStack.Authentication.OAuth2.4.0.7\lib\net40\ServiceStack.Authentication.OAuth2.dll</HintPath>
</Reference>
- <Reference Include="ServiceStack.Common, Version=3.9.42.0, Culture=neutral, processorArchitecture=MSIL">
+ <Reference Include="ServiceStack.Authentication.OpenId, Version=4.0.7.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
- <HintPath>packages\ServiceStack.Common.3.9.42\lib\net35\ServiceStack.Common.dll</HintPath>
+ <HintPath>packages\ServiceStack.Authentication.OpenId.4.0.7\lib\net40\ServiceStack.Authentication.OpenId.dll</HintPath>
</Reference>
- <Reference Include="ServiceStack.FluentValidation.Mvc3, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
- <HintPath>packages\ServiceStack.Mvc.3.9.42\lib\net40\ServiceStack.FluentValidation.Mvc3.dll</HintPath>
+ <Reference Include="ServiceStack.Client, Version=4.0.7.0, Culture=neutral, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>packages\ServiceStack.Client.4.0.7\lib\net40\ServiceStack.Client.dll</HintPath>
</Reference>
- <Reference Include="ServiceStack.Interfaces, Version=3.9.42.0, Culture=neutral, processorArchitecture=MSIL">
+ <Reference Include="ServiceStack.Common, Version=4.0.7.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
- <HintPath>packages\ServiceStack.Common.3.9.42\lib\net35\ServiceStack.Interfaces.dll</HintPath>
+ <HintPath>packages\ServiceStack.Common.4.0.7\lib\net40\ServiceStack.Common.dll</HintPath>
</Reference>
- <Reference Include="ServiceStack.OrmLite, Version=3.9.42.0, Culture=neutral, processorArchitecture=MSIL">
+ <Reference Include="ServiceStack.Interfaces, Version=4.0.0.0, Culture=neutral, PublicKeyToken=e06fbc6124f57c43, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
- <HintPath>packages\ServiceStack.OrmLite.SqlServer.3.9.42\lib\ServiceStack.OrmLite.dll</HintPath>
+ <HintPath>packages\ServiceStack.Interfaces.4.0.7\lib\net40\ServiceStack.Interfaces.dll</HintPath>
</Reference>
- <Reference Include="ServiceStack.OrmLite.SqlServer, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
- <HintPath>packages\ServiceStack.OrmLite.SqlServer.3.9.42\lib\ServiceStack.OrmLite.SqlServer.dll</HintPath>
+ <Reference Include="ServiceStack.Mvc, Version=4.0.7.0, Culture=neutral, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>packages\ServiceStack.Mvc.4.0.7\lib\net40\ServiceStack.Mvc.dll</HintPath>
</Reference>
- <Reference Include="ServiceStack.Redis, Version=3.9.42.0, Culture=neutral, processorArchitecture=MSIL">
+ <Reference Include="ServiceStack.OrmLite, Version=4.0.7.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
- <HintPath>packages\ServiceStack.Redis.3.9.42\lib\net35\ServiceStack.Redis.dll</HintPath>
+ <HintPath>packages\ServiceStack.OrmLite.4.0.7\lib\net40\ServiceStack.OrmLite.dll</HintPath>
</Reference>
- <Reference Include="ServiceStack.ServiceInterface, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
- <HintPath>packages\ServiceStack.3.9.42\lib\net35\ServiceStack.ServiceInterface.dll</HintPath>
+ <Reference Include="ServiceStack.OrmLite.SqlServer, Version=4.0.7.0, Culture=neutral, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>packages\ServiceStack.OrmLite.SqlServer.4.0.7\lib\net40\ServiceStack.OrmLite.SqlServer.dll</HintPath>
+ </Reference>
+ <Reference Include="ServiceStack.Redis, Version=4.0.7.0, Culture=neutral, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>packages\ServiceStack.Redis.4.0.7\lib\net40\ServiceStack.Redis.dll</HintPath>
</Reference>
- <Reference Include="ServiceStack.Text, Version=3.9.42.0, Culture=neutral, processorArchitecture=MSIL">
+ <Reference Include="ServiceStack.Server, Version=4.0.7.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
- <HintPath>packages\ServiceStack.Text.3.9.42\lib\net35\ServiceStack.Text.dll</HintPath>
+ <HintPath>packages\ServiceStack.Server.4.0.7\lib\net40\ServiceStack.Server.dll</HintPath>
</Reference>
+ <Reference Include="ServiceStack.Text, Version=4.0.7.0, Culture=neutral, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>packages\ServiceStack.Text.4.0.7\lib\net40\ServiceStack.Text.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Data.Entity" />
+ <Reference Include="System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
<Reference Include="System.Runtime.Serialization" />
+ <Reference Include="System.Web.DynamicData" />
+ <Reference Include="System.Web.Extensions" />
<Reference Include="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
<Reference Include="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
<Reference Include="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
@@ -98,21 +118,20 @@
<Reference Include="System.Web.Entity" />
<Reference Include="System.Web.ApplicationServices" />
<Reference Include="System.ComponentModel.DataAnnotations" />
- <Reference Include="System.Core" />
- <Reference Include="System.Xml.Linq" />
<Reference Include="System.Web" />
- <Reference Include="System.Web.Extensions" />
<Reference Include="System.Web.Abstractions" />
<Reference Include="System.Web.Routing" />
<Reference Include="System.Xml" />
<Reference Include="System.Configuration" />
<Reference Include="System.Web.Services" />
+ <Reference Include="System.Xml.Linq" />
<Reference Include="WebActivator, Version=1.5.1.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>packages\WebActivator.1.5.1\lib\net40\WebActivator.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
+ <Compile Include="Bundler.cs" />
<Compile Include="Controllers\ControllerBase.cs" />
<Compile Include="Controllers\SecureController.cs" />
<Compile Include="Controllers\PublicController.cs" />
@@ -120,7 +139,6 @@
<Compile Include="Models\User.cs" />
<Compile Include="Logic\TwitterGateway.cs" />
<Compile Include="Models\TwitterDtos.cs" />
- <Compile Include="Mvc.Bundler.cs" />
<Compile Include="ServiceInterface\AuthorService.cs" />
<Compile Include="ServiceInterface\AppServiceBase.cs" />
<Compile Include="ServiceInterface\LoginService.cs" />
@@ -147,19 +165,753 @@
<Compile Include="Support\HtmlHelpers.cs" />
</ItemGroup>
<ItemGroup>
- <None Include="bundler\bundler.cmd" />
- <None Include="bundler\coffee.cmd" />
- <None Include="Content\app.css.bundle" />
- <None Include="Content\default.less">
- <LastGenOutput>default.css</LastGenOutput>
- <Generator>LessGenerator</Generator>
- </None>
<Content Include="App_Data\UserAuth.mdf" />
<Content Include="App_Data\UserAuth_log.ldf">
<DependentUpon>UserAuth.mdf</DependentUpon>
</Content>
<Content Include="bundler\bundler.js" />
<Content Include="bundler\node.exe" />
+ <Content Include="bundler\node_modules\clean-css\index.js" />
+ <Content Include="bundler\node_modules\clean-css\lib\clean.js" />
+ <Content Include="bundler\node_modules\clean-css\lib\colors\hsl-to-hex.js" />
+ <Content Include="bundler\node_modules\clean-css\lib\colors\long-to-short-hex.js" />
+ <Content Include="bundler\node_modules\clean-css\lib\colors\rgb-to-hex.js" />
+ <Content Include="bundler\node_modules\clean-css\lib\colors\shortener.js" />
+ <Content Include="bundler\node_modules\clean-css\lib\images\url-rebase.js" />
+ <Content Include="bundler\node_modules\clean-css\lib\images\url-rewriter.js" />
+ <Content Include="bundler\node_modules\clean-css\lib\imports\inliner.js" />
+ <Content Include="bundler\node_modules\clean-css\lib\properties\optimizer.js" />
+ <Content Include="bundler\node_modules\clean-css\lib\properties\shorthand-notations.js" />
+ <Content Include="bundler\node_modules\clean-css\lib\selectors\empty-removal.js" />
+ <Content Include="bundler\node_modules\clean-css\lib\selectors\optimizer.js" />
+ <Content Include="bundler\node_modules\clean-css\lib\selectors\tokenizer.js" />
+ <Content Include="bundler\node_modules\clean-css\lib\text\comments.js" />
+ <Content Include="bundler\node_modules\clean-css\lib\text\escape-store.js" />
+ <Content Include="bundler\node_modules\clean-css\lib\text\expressions.js" />
+ <Content Include="bundler\node_modules\clean-css\lib\text\free.js" />
+ <Content Include="bundler\node_modules\clean-css\lib\text\urls.js" />
+ <Content Include="bundler\node_modules\clean-css\node_modules\optimist\index.js" />
+ <Content Include="bundler\node_modules\coffee-script\lib\coffee-script\browser.js" />
+ <Content Include="bundler\node_modules\coffee-script\lib\coffee-script\cake.js" />
+ <Content Include="bundler\node_modules\coffee-script\lib\coffee-script\coffee-script.js" />
+ <Content Include="bundler\node_modules\coffee-script\lib\coffee-script\command.js" />
+ <Content Include="bundler\node_modules\coffee-script\lib\coffee-script\grammar.js" />
+ <Content Include="bundler\node_modules\coffee-script\lib\coffee-script\helpers.js" />
+ <Content Include="bundler\node_modules\coffee-script\lib\coffee-script\index.js" />
+ <Content Include="bundler\node_modules\coffee-script\lib\coffee-script\lexer.js" />
+ <Content Include="bundler\node_modules\coffee-script\lib\coffee-script\nodes.js" />
+ <Content Include="bundler\node_modules\coffee-script\lib\coffee-script\optparse.js" />
+ <Content Include="bundler\node_modules\coffee-script\lib\coffee-script\parser.js" />
+ <Content Include="bundler\node_modules\coffee-script\lib\coffee-script\repl.js" />
+ <Content Include="bundler\node_modules\coffee-script\lib\coffee-script\rewriter.js" />
+ <Content Include="bundler\node_modules\coffee-script\lib\coffee-script\scope.js" />
+ <Content Include="bundler\node_modules\coffee-script\lib\coffee-script\sourcemap.js" />
+ <Content Include="bundler\node_modules\debug\debug.js" />
+ <Content Include="bundler\node_modules\debug\index.js" />
+ <Content Include="bundler\node_modules\debug\lib\debug.js" />
+ <Content Include="bundler\node_modules\less\lib\less\browser.js" />
+ <Content Include="bundler\node_modules\less\lib\less\colors.js" />
+ <Content Include="bundler\node_modules\less\lib\less\cssmin.js" />
+ <Content Include="bundler\node_modules\less\lib\less\env.js" />
+ <Content Include="bundler\node_modules\less\lib\less\extend-visitor.js" />
+ <Content Include="bundler\node_modules\less\lib\less\functions.js" />
+ <Content Include="bundler\node_modules\less\lib\less\import-visitor.js" />
+ <Content Include="bundler\node_modules\less\lib\less\index.js" />
+ <Content Include="bundler\node_modules\less\lib\less\join-selector-visitor.js" />
+ <Content Include="bundler\node_modules\less\lib\less\lessc_helper.js" />
+ <Content Include="bundler\node_modules\less\lib\less\parser.js" />
+ <Content Include="bundler\node_modules\less\lib\less\rhino.js" />
+ <Content Include="bundler\node_modules\less\lib\less\source-map-output.js" />
+ <Content Include="bundler\node_modules\less\lib\less\to-css-visitor.js" />
+ <Content Include="bundler\node_modules\less\lib\less\tree.js" />
+ <Content Include="bundler\node_modules\less\lib\less\tree\alpha.js" />
+ <Content Include="bundler\node_modules\less\lib\less\tree\anonymous.js" />
+ <Content Include="bundler\node_modules\less\lib\less\tree\assignment.js" />
+ <Content Include="bundler\node_modules\less\lib\less\tree\call.js" />
+ <Content Include="bundler\node_modules\less\lib\less\tree\color.js" />
+ <Content Include="bundler\node_modules\less\lib\less\tree\comment.js" />
+ <Content Include="bundler\node_modules\less\lib\less\tree\condition.js" />
+ <Content Include="bundler\node_modules\less\lib\less\tree\dimension.js" />
+ <Content Include="bundler\node_modules\less\lib\less\tree\directive.js" />
+ <Content Include="bundler\node_modules\less\lib\less\tree\element.js" />
+ <Content Include="bundler\node_modules\less\lib\less\tree\expression.js" />
+ <Content Include="bundler\node_modules\less\lib\less\tree\extend.js" />
+ <Content Include="bundler\node_modules\less\lib\less\tree\import.js" />
+ <Content Include="bundler\node_modules\less\lib\less\tree\javascript.js" />
+ <Content Include="bundler\node_modules\less\lib\less\tree\keyword.js" />
+ <Content Include="bundler\node_modules\less\lib\less\tree\media.js" />
+ <Content Include="bundler\node_modules\less\lib\less\tree\mixin.js" />
+ <Content Include="bundler\node_modules\less\lib\less\tree\negative.js" />
+ <Content Include="bundler\node_modules\less\lib\less\tree\operation.js" />
+ <Content Include="bundler\node_modules\less\lib\less\tree\paren.js" />
+ <Content Include="bundler\node_modules\less\lib\less\tree\quoted.js" />
+ <Content Include="bundler\node_modules\less\lib\less\tree\rule.js" />
+ <Content Include="bundler\node_modules\less\lib\less\tree\ruleset.js" />
+ <Content Include="bundler\node_modules\less\lib\less\tree\selector.js" />
+ <Content Include="bundler\node_modules\less\lib\less\tree\unicode-descriptor.js" />
+ <Content Include="bundler\node_modules\less\lib\less\tree\url.js" />
+ <Content Include="bundler\node_modules\less\lib\less\tree\value.js" />
+ <Content Include="bundler\node_modules\less\lib\less\tree\variable.js" />
+ <Content Include="bundler\node_modules\less\lib\less\visitor.js" />
+ <Content Include="bundler\node_modules\lib\parse-js.js" />
+ <Content Include="bundler\node_modules\lib\process.js" />
+ <Content Include="bundler\node_modules\lib\squeeze-more.js" />
+ <Content Include="bundler\node_modules\LiveScript\lib\ast.js" />
+ <Content Include="bundler\node_modules\LiveScript\lib\browser.js" />
+ <Content Include="bundler\node_modules\LiveScript\lib\command.js" />
+ <Content Include="bundler\node_modules\LiveScript\lib\grammar.js" />
+ <Content Include="bundler\node_modules\LiveScript\lib\index.js" />
+ <Content Include="bundler\node_modules\LiveScript\lib\lang-ls.js" />
+ <Content Include="bundler\node_modules\LiveScript\lib\lexer.js" />
+ <Content Include="bundler\node_modules\LiveScript\lib\livescript.js" />
+ <Content Include="bundler\node_modules\LiveScript\lib\mode-ls.js" />
+ <Content Include="bundler\node_modules\LiveScript\lib\node.js" />
+ <Content Include="bundler\node_modules\LiveScript\lib\optparse.js" />
+ <Content Include="bundler\node_modules\LiveScript\lib\parser.js" />
+ <Content Include="bundler\node_modules\LiveScript\lib\slake.js" />
+ <Content Include="bundler\node_modules\nib\iconic\demo.html" />
+ <Content Include="bundler\node_modules\nib\iconic\iconic.css" />
+ <Content Include="bundler\node_modules\nib\iconic\iconic_stroke.svg" />
+ <Content Include="bundler\node_modules\nib\lib\nib.js" />
+ <Content Include="bundler\node_modules\nib\lib\nodes\color-image.js" />
+ <Content Include="bundler\node_modules\nib\lib\nodes\gradient.js" />
+ <Content Include="bundler\node_modules\nib\lib\nodes\vendor-helpers.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\bm.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\index.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\browserify.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\colors.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\convert\css.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\errors.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\functions\image.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\functions\index.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\functions\resolver.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\functions\url.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\lexer.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\middleware.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\nodes\arguments.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\nodes\binop.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\nodes\block.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\nodes\boolean.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\nodes\call.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\nodes\charset.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\nodes\comment.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\nodes\each.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\nodes\expression.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\nodes\extend.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\nodes\fontface.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\nodes\function.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\nodes\group.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\nodes\hsla.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\nodes\ident.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\nodes\if.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\nodes\import.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\nodes\index.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\nodes\jsliteral.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\nodes\keyframes.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\nodes\literal.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\nodes\media.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\nodes\mozdocument.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\nodes\node.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\nodes\null.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\nodes\page.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\nodes\params.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\nodes\property.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\nodes\return.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\nodes\rgba.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\nodes\root.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\nodes\selector.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\nodes\string.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\nodes\ternary.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\nodes\unaryop.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\nodes\unit.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\parser.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\renderer.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\stack\frame.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\stack\index.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\stack\scope.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\stylus.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\token.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\units.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\utils.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\visitor\compiler.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\visitor\evaluator.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\visitor\index.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\lib\visitor\normalizer.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\cssom\lib\clone.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\cssom\lib\CSSFontFaceRule.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\cssom\lib\CSSImportRule.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\cssom\lib\CSSKeyframeRule.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\cssom\lib\CSSKeyframesRule.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\cssom\lib\CSSMediaRule.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\cssom\lib\CSSRule.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\cssom\lib\CSSStyleDeclaration.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\cssom\lib\CSSStyleRule.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\cssom\lib\CSSStyleSheet.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\cssom\lib\index.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\cssom\lib\MediaList.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\cssom\lib\parse.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\cssom\lib\StyleSheet.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\mkdirp\examples\pow.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\mkdirp\index.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\mkdirp\test\chmod.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\mkdirp\test\clobber.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\mkdirp\test\mkdirp.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\mkdirp\test\perm.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\mkdirp\test\perm_sync.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\mkdirp\test\race.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\mkdirp\test\rel.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\mkdirp\test\return.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\mkdirp\test\return_sync.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\mkdirp\test\root.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\mkdirp\test\sync.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\mkdirp\test\umask.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\mkdirp\test\umask_sync.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\examples\big-not-pretty.xml" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\examples\example.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\examples\get-products.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\examples\hello-world.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\examples\not-pretty.xml" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\examples\pretty-print.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\examples\shopping.xml" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\examples\test.html" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\examples\test.xml" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\lib\sax.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\LICENSE-W3C.html" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\test\attribute-name.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\test\buffer-overrun.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\test\case.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\test\cdata-chunked.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\test\cdata-end-split.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\test\cdata-fake-end.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\test\cdata-multiple.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\test\cdata.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\test\cyrillic.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\test\duplicate-attribute.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\test\entities.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\test\entity-mega.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\test\index.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\test\issue-23.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\test\issue-30.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\test\issue-35.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\test\issue-47.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\test\issue-49.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\test\issue-84.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\test\parser-position.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\test\script-close-better.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\test\script.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\test\self-closing-child-strict.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\test\self-closing-child.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\test\self-closing-tag.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\test\stray-ending.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\test\trailing-attribute-no-value.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\test\trailing-non-whitespace.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\test\unclosed-root.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\test\unquoted.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\test\utf8-split.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\test\xmlns-issue-41.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\test\xmlns-rebinding.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\test\xmlns-strict.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\test\xmlns-unbound-element.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\test\xmlns-unbound.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\test\xmlns-xml-default-ns.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\test\xmlns-xml-default-prefix-attribute.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\test\xmlns-xml-default-prefix.js" />
+ <Content Include="bundler\node_modules\nib\node_modules\stylus\node_modules\sax\test\xmlns-xml-default-redefine.js" />
+ <Content Include="bundler\node_modules\node-sass\build.js" />
+ <Content Include="bundler\node_modules\node-sass\lib\cli.js" />
+ <Content Include="bundler\node_modules\node-sass\lib\middleware.js" />
+ <Content Include="bundler\node_modules\node-sass\lib\render.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\colors\colors.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\colors\example.html" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\colors\example.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\colors\MIT-LICENSE.txt" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\colors\test.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mkdirp\examples\pow.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mkdirp\index.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mkdirp\test\chmod.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mkdirp\test\clobber.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mkdirp\test\mkdirp.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mkdirp\test\perm.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mkdirp\test\perm_sync.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mkdirp\test\race.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mkdirp\test\rel.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mkdirp\test\return.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mkdirp\test\return_sync.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mkdirp\test\root.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mkdirp\test\sync.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mkdirp\test\umask.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mkdirp\test\umask_sync.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\images\error.png" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\images\ok.png" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\index.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\lib\browser\debug.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\lib\browser\events.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\lib\browser\fs.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\lib\browser\path.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\lib\browser\progress.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\lib\browser\tty.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\lib\context.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\lib\hook.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\lib\interfaces\bdd.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\lib\interfaces\exports.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\lib\interfaces\index.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\lib\interfaces\qunit.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\lib\interfaces\tdd.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\lib\mocha.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\lib\ms.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\lib\reporters\base.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\lib\reporters\doc.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\lib\reporters\dot.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\lib\reporters\html-cov.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\lib\reporters\html.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\lib\reporters\index.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\lib\reporters\json-cov.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\lib\reporters\json-stream.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\lib\reporters\json.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\lib\reporters\landing.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\lib\reporters\list.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\lib\reporters\markdown.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\lib\reporters\min.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\lib\reporters\nyan.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\lib\reporters\progress.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\lib\reporters\spec.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\lib\reporters\tap.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\lib\reporters\teamcity.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\lib\reporters\templates\script.html" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\lib\reporters\templates\style.html" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\lib\reporters\xunit.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\lib\runnable.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\lib\runner.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\lib\suite.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\lib\template.html" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\lib\test.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\lib\utils.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\mocha.css" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\mocha.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\node_modules\commander\index.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\node_modules\commander\lib\commander.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\node_modules\diff\diff.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\node_modules\glob\examples\g.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\node_modules\glob\examples\usr-local.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\node_modules\glob\glob.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\node_modules\glob\node_modules\graceful-fs\graceful-fs.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\node_modules\glob\node_modules\graceful-fs\polyfills.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\node_modules\glob\node_modules\graceful-fs\test\open.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\node_modules\glob\node_modules\inherits\inherits.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\node_modules\glob\node_modules\inherits\inherits_browser.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\node_modules\glob\node_modules\inherits\test.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\node_modules\glob\node_modules\minimatch\minimatch.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\node_modules\glob\node_modules\minimatch\node_modules\lru-cache\bench.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\node_modules\glob\node_modules\minimatch\node_modules\lru-cache\lib\lru-cache.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\node_modules\glob\node_modules\minimatch\node_modules\lru-cache\test\basic.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\node_modules\glob\node_modules\minimatch\node_modules\lru-cache\test\foreach.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\node_modules\glob\node_modules\minimatch\node_modules\lru-cache\test\memory-leak.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\node_modules\glob\node_modules\minimatch\node_modules\sigmund\bench.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\node_modules\glob\node_modules\minimatch\node_modules\sigmund\sigmund.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\node_modules\glob\node_modules\minimatch\node_modules\sigmund\test\basic.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\node_modules\glob\node_modules\minimatch\test\basic.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\node_modules\glob\node_modules\minimatch\test\brace-expand.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\node_modules\glob\node_modules\minimatch\test\caching.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\node_modules\glob\node_modules\minimatch\test\defaults.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\node_modules\glob\test\00-setup.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\node_modules\glob\test\bash-comparison.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\node_modules\glob\test\cwd-test.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\node_modules\glob\test\globstar-match.js" />
+ <Content Include="bundler\node_modules\node-sass\node_modules\mocha\node_modules\glob\test\mark.js" />