diff options
| author | Roy Ben-Shabat <Roy@Twine-s.com> | 2018-12-24 14:46:55 +0200 |
|---|---|---|
| committer | Roy Ben-Shabat <Roy@Twine-s.com> | 2018-12-24 14:46:55 +0200 |
| commit | 0fb83fb3abb456ee6707b7f3cabc6b0c1ab2281b (patch) | |
| tree | 6b0076b6c1daacd51c2aab18aaaf15e6edb19d9e /Software/Visual_Studio/Tango.Web | |
| parent | 2f77ad3cebf771bdf02188174c9712027b004d41 (diff) | |
| download | Tango-0fb83fb3abb456ee6707b7f3cabc6b0c1ab2281b.tar.gz Tango-0fb83fb3abb456ee6707b7f3cabc6b0c1ab2281b.zip | |
Moved all common web components to Tango.Web
Changed app keys names.
Fixed issue with machine studio and the initialization of observables static collections.
Diffstat (limited to 'Software/Visual_Studio/Tango.Web')
15 files changed, 919 insertions, 0 deletions
diff --git a/Software/Visual_Studio/Tango.Web/ApplicationInsights.config b/Software/Visual_Studio/Tango.Web/ApplicationInsights.config new file mode 100644 index 000000000..75e12df9d --- /dev/null +++ b/Software/Visual_Studio/Tango.Web/ApplicationInsights.config @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8"?> +<ApplicationInsights xmlns="http://schemas.microsoft.com/ApplicationInsights/2013/Settings" />
\ No newline at end of file diff --git a/Software/Visual_Studio/Tango.Web/Controllers/JsonController.cs b/Software/Visual_Studio/Tango.Web/Controllers/JsonController.cs new file mode 100644 index 000000000..a581d9ec7 --- /dev/null +++ b/Software/Visual_Studio/Tango.Web/Controllers/JsonController.cs @@ -0,0 +1,72 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Net.Http; +using System.Security.Authentication; +using System.Threading; +using System.Threading.Tasks; +using System.Web; +using System.Web.Http; +using System.Web.Http.Controllers; +using Tango.Logging; + +namespace Tango.Web.Controllers +{ + public class JsonController : ApiController + { + protected LogManager LogManager { get; private set; } + + public JsonController() + { + LogManager = LogManager.Default; + } + + public override async Task<HttpResponseMessage> ExecuteAsync(HttpControllerContext context, CancellationToken cancellationToken) + { + string controllerName = String.Empty; + string actionName = String.Empty; + + try + { + var routeData = HttpContext.Current.Request.RequestContext.RouteData; + actionName = routeData.Values["action"].ToString(); + controllerName = routeData.Values["controller"].ToString(); + } + catch { } + + try + { + String request = String.Empty; + + try + { + request = context.Request.Content.ReadAsStringAsync().Result; + } + catch {} + + LogManager.Log($"Request Received on {controllerName + "/" + actionName}: \n{request}"); + + var result = await base.ExecuteAsync(context, cancellationToken); + return result; + } + catch (Exception ex) + { + LogManager.Log(ex, $"An error occurred while processing the request message on {controllerName + "/" + actionName}."); + + HttpStatusCode code = HttpStatusCode.InternalServerError; + + if (ex is ArgumentException) + { + code = HttpStatusCode.BadRequest; + } + else if (ex is AuthenticationException) + { + code = HttpStatusCode.Unauthorized; + } + + throw new HttpResponseException(Request.CreateErrorResponse(code, ex.Message)); + } + } + } +}
\ No newline at end of file diff --git a/Software/Visual_Studio/Tango.Web/Controllers/ProtoController.cs b/Software/Visual_Studio/Tango.Web/Controllers/ProtoController.cs new file mode 100644 index 000000000..090638f3a --- /dev/null +++ b/Software/Visual_Studio/Tango.Web/Controllers/ProtoController.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Net.Http; +using System.Security.Authentication; +using System.Threading; +using System.Threading.Tasks; +using System.Web; +using System.Web.Http; +using System.Web.Http.Controllers; +using Tango.Logging; + +namespace Tango.Web.Controllers +{ + public class ProtoController : ApiController + { + protected LogManager LogManager { get; private set; } + + public ProtoController() + { + LogManager = LogManager.Default; + } + + public override async Task<HttpResponseMessage> ExecuteAsync(HttpControllerContext context, CancellationToken cancellationToken) + { + string controllerName = String.Empty; + string actionName = String.Empty; + + try + { + var routeData = HttpContext.Current.Request.RequestContext.RouteData; + actionName = routeData.Values["action"].ToString(); + controllerName = routeData.Values["controller"].ToString(); + } + catch { } + + try + { + LogManager.Log($"Request Received on {controllerName + "/" + actionName}."); + + var result = await base.ExecuteAsync(context, cancellationToken); + return result; + } + catch (Exception ex) + { + LogManager.Log(ex, $"An error occurred while processing the request message on {controllerName + "/" + actionName}."); + + HttpStatusCode code = HttpStatusCode.InternalServerError; + + if (ex is ArgumentException) + { + code = HttpStatusCode.BadRequest; + } + else if (ex is AuthenticationException) + { + code = HttpStatusCode.Unauthorized; + } + + throw new HttpResponseException(Request.CreateErrorResponse(code, ex.Message)); + } + } + } +}
\ No newline at end of file diff --git a/Software/Visual_Studio/Tango.Web/Formatters/JsonNetFormatter.cs b/Software/Visual_Studio/Tango.Web/Formatters/JsonNetFormatter.cs new file mode 100644 index 000000000..7912f810f --- /dev/null +++ b/Software/Visual_Studio/Tango.Web/Formatters/JsonNetFormatter.cs @@ -0,0 +1,89 @@ +using Newtonsoft.Json; +using Newtonsoft.Json.Serialization; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Net; +using System.Net.Http; +using System.Net.Http.Formatting; +using System.Net.Http.Headers; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; +using System.Web; +using Tango.BL; + +namespace Tango.Web.Formatters +{ + public class JsonNetFormatter : MediaTypeFormatter + { + private class JsonIgnoreAttributeIgnorerContractResolver : DefaultContractResolver + { + protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization) + { + var property = base.CreateProperty(member, memberSerialization); + + if (typeof(IObservableEntity).IsAssignableFrom(property.PropertyType)) + { + property.Ignored = false; + } + return property; + } + } + + private JsonSerializerSettings _jsonSerializerSettings; + + public JsonNetFormatter(JsonSerializerSettings jsonSerializerSettings) + { + _jsonSerializerSettings = jsonSerializerSettings ?? new JsonSerializerSettings(); + _jsonSerializerSettings.ContractResolver = new JsonIgnoreAttributeIgnorerContractResolver(); + + SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/json")); + } + + public override bool CanReadType(Type type) + { + return true; + } + + public override bool CanWriteType(Type type) + { + return true; + } + + public override Task<object> ReadFromStreamAsync(Type type, Stream readStream, HttpContent content, IFormatterLogger formatterLogger) + { + // Create a serializer + JsonSerializer serializer = JsonSerializer.Create(_jsonSerializerSettings); + + // Create task reading the content + return Task.Factory.StartNew(() => + { + using (StreamReader streamReader = new StreamReader(readStream)) + { + using (JsonTextReader jsonTextReader = new JsonTextReader(streamReader)) + { + return serializer.Deserialize(jsonTextReader, type); + } + } + }); + } + + public override Task WriteToStreamAsync(Type type, object value, Stream writeStream, HttpContent content, TransportContext transportContext) + { + // Create a serializer + JsonSerializer serializer = JsonSerializer.Create(_jsonSerializerSettings); + + // Create task writing the serialized content + return Task.Factory.StartNew(() => + { + using (JsonTextWriter jsonTextWriter = new JsonTextWriter(new StreamWriter(writeStream)) { CloseOutput = false }) + { + serializer.Serialize(jsonTextWriter, value); + jsonTextWriter.Flush(); + } + }); + } + } +}
\ No newline at end of file diff --git a/Software/Visual_Studio/Tango.Web/Formatters/ProtoBufFormatter.cs b/Software/Visual_Studio/Tango.Web/Formatters/ProtoBufFormatter.cs new file mode 100644 index 000000000..eee35ec6b --- /dev/null +++ b/Software/Visual_Studio/Tango.Web/Formatters/ProtoBufFormatter.cs @@ -0,0 +1,143 @@ +using Google.Protobuf; +using System; +using System.IO; +using System.Net; +using System.Net.Http; +using System.Net.Http.Formatting; +using System.Net.Http.Headers; +using System.Threading.Tasks; +using System.Web.Http; +using Tango.PMR.Stubs; +using Tango.PMR.Synchronization; + +namespace Tango.Web.Formatters +{ + /// <summary> + /// Represents a protobuf web request/response formatter capable of formatting messages using protobuf. + /// </summary> + /// <seealso cref="System.Net.Http.Formatting.MediaTypeFormatter" /> + public class ProtoBufFormatter : MediaTypeFormatter + { + private static readonly MediaTypeHeaderValue mediaType = new MediaTypeHeaderValue("application/x-protobuf"); + + /// <summary> + /// Initializes a new instance of the <see cref="ProtoBufFormatter"/> class. + /// </summary> + public ProtoBufFormatter() + { + SupportedMediaTypes.Add(mediaType); + } + + /// <summary> + /// Gets the default type of the media. + /// </summary> + /// <value> + /// The default type of the media. + /// </value> + public static MediaTypeHeaderValue DefaultMediaType + { + get { return mediaType; } + } + + /// <summary> + /// Queries whether this <see cref="T:System.Net.Http.Formatting.MediaTypeFormatter" /> can deserializean object of the specified type. + /// </summary> + /// <param name="type">The type to deserialize.</param> + /// <returns> + /// true if the <see cref="T:System.Net.Http.Formatting.MediaTypeFormatter" /> can deserialize the type; otherwise, false. + /// </returns> + public override bool CanReadType(Type type) + { + return true; + } + + /// <summary> + /// Queries whether this <see cref="T:System.Net.Http.Formatting.MediaTypeFormatter" /> can serializean object of the specified type. + /// </summary> + /// <param name="type">The type to serialize.</param> + /// <returns> + /// true if the <see cref="T:System.Net.Http.Formatting.MediaTypeFormatter" /> can serialize the type; otherwise, false. + /// </returns> + public override bool CanWriteType(Type type) + { + return true; + } + + /// <summary> + /// Reads from stream asynchronous. + /// </summary> + /// <param name="type">The type.</param> + /// <param name="stream">The stream.</param> + /// <param name="content">The content.</param> + /// <param name="formatterLogger">The formatter logger.</param> + /// <returns></returns> + public override Task<object> ReadFromStreamAsync(Type type, Stream stream, HttpContent content, IFormatterLogger formatterLogger) + { + var tcs = new TaskCompletionSource<object>(); + + try + { + MessageParser parser = type.GetProperty("Parser").GetValue(null, null) as MessageParser; + IMessage req = parser.ParseFrom(stream); + tcs.SetResult(req); + } + catch (Exception ex) + { + tcs.SetException(ex); + } + + return tcs.Task; + } + + /// <summary> + /// Writes to stream asynchronous. + /// </summary> + /// <param name="type">The type.</param> + /// <param name="value">The value.</param> + /// <param name="stream">The stream.</param> + /// <param name="content">The content.</param> + /// <param name="transportContext">The transport context.</param> + /// <returns></returns> + public override Task WriteToStreamAsync(Type type, object value, Stream stream, HttpContent content, TransportContext transportContext) + { + var tcs = new TaskCompletionSource<object>(); + + if (value is IMessage) + { + try + { + (value as IMessage).WriteTo(stream); + tcs.SetResult(null); + } + catch (Exception ex) + { + tcs.SetException(ex); + } + + return tcs.Task; + } + else if (value is HttpError) + { + var httpError = value as HttpError; + + try + { + HttpProtoException msg = new HttpProtoException(); + msg.Message = httpError["Message"].ToString(); + msg.StatusCode = (int)HttpStatusCode.InternalServerError; + + msg.WriteTo(stream); + tcs.SetResult(null); + } + catch (Exception ex) + { + tcs.SetException(ex); + } + + return tcs.Task; + } + + return base.WriteToStreamAsync(type, value, stream, content, transportContext); + } + } +}
\ No newline at end of file diff --git a/Software/Visual_Studio/Tango.Web/Helpers/AzureDirectoryHelper.cs b/Software/Visual_Studio/Tango.Web/Helpers/AzureDirectoryHelper.cs new file mode 100644 index 000000000..27b5e7cf5 --- /dev/null +++ b/Software/Visual_Studio/Tango.Web/Helpers/AzureDirectoryHelper.cs @@ -0,0 +1,19 @@ +using Microsoft.IdentityModel.Clients.ActiveDirectory; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; + +namespace Tango.Web.Helpers +{ + public static class AzureDirectoryHelper + { + public static AuthenticationResult AuthenticateUser(String email, String password) + { + var authContext = new AuthenticationContext("https://login.microsoftonline.com/2ebd63a5-bc2f-41dc-9066-4409ed5e5dd4"); + UserCredential userCredential = new UserCredential(email, password); + AuthenticationResult authResult = authContext.AcquireToken("https://graph.windows.net/", "ec612854-7abc-457b-808a-5d0c5ba80c57", userCredential); + return authResult; + } + } +}
\ No newline at end of file diff --git a/Software/Visual_Studio/Tango.Web/Helpers/ObservablesContextHelper.cs b/Software/Visual_Studio/Tango.Web/Helpers/ObservablesContextHelper.cs new file mode 100644 index 000000000..fcf6eb599 --- /dev/null +++ b/Software/Visual_Studio/Tango.Web/Helpers/ObservablesContextHelper.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Linq; +using System.Web; +using Tango.BL; +using Tango.Core; + +namespace Tango.Web.Helpers +{ + public static class ObservablesContextHelper + { + public static ObservablesContext CreateContext() + { + return new ObservablesContext(new DataSource() + { + Address = WebConfig.DB_ADDRESS, + Catalog = WebConfig.DB_CATALOG, + IntegratedSecurity = false, + Type = DataSourceType.SQLServer, + UserName = WebConfig.DB_USER_NAME, + Password = WebConfig.DB_PASSWORD + }); + } + } +}
\ No newline at end of file diff --git a/Software/Visual_Studio/Tango.Web/Properties/AssemblyInfo.cs b/Software/Visual_Studio/Tango.Web/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..1471db897 --- /dev/null +++ b/Software/Visual_Studio/Tango.Web/Properties/AssemblyInfo.cs @@ -0,0 +1,7 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +[assembly: AssemblyTitle("Tango - Web Components")] +[assembly: AssemblyVersion("2.0.11.1608")] +[assembly: ComVisible(false)]
\ No newline at end of file diff --git a/Software/Visual_Studio/Tango.Web/SMO/SmoManager.cs b/Software/Visual_Studio/Tango.Web/SMO/SmoManager.cs new file mode 100644 index 000000000..86953d233 --- /dev/null +++ b/Software/Visual_Studio/Tango.Web/SMO/SmoManager.cs @@ -0,0 +1,73 @@ +using Microsoft.SqlServer.Management.Common; +using Microsoft.SqlServer.Management.Smo; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using Tango.Core.DB; + +namespace Tango.Web.SMO +{ + public class SmoManager : IDisposable + { + private ServerConnection _connection; + private Server _server; + private static Random random = new Random(); + + public SmoManager() + { + _connection = new ServerConnection(WebConfig.DB_ADDRESS, WebConfig.DB_USER_NAME, WebConfig.DB_PASSWORD); + _server = new Server(_connection); + } + + public DbCredentials CreateRandomLoginAndUser() + { + var database = _server.Databases.OfType<Database>().SingleOrDefault(x => x.Name == WebConfig.DB_CATALOG); + + String userName = GetRandomString(36); + String password = System.Web.Security.Membership.GeneratePassword(16, 2); + + Login login = new Login(_server, userName); + login.LoginType = LoginType.SqlLogin; + login.DefaultDatabase = WebConfig.DB_CATALOG; + login.PasswordPolicyEnforced = false; + login.Create(password); + + User user = new User(database, userName); + user.Login = userName; + user.Create(); + user.AddToRole("db_datareader"); + + return new DbCredentials() { UserName = userName, Password = password }; + } + + public void DeleteLoginAndUser(String userName) + { + var database = _server.Databases.OfType<Database>().SingleOrDefault(x => x.Name == WebConfig.DB_CATALOG); + + var user = database.Users.OfType<User>().SingleOrDefault(x => x.Name == userName); + + if (user != null) + { + user.Drop(); + } + + Login login = _server.Logins.OfType<Login>().SingleOrDefault(x => x.Name == userName); + if (login != null) + { + login.Drop(); + } + } + + public string GetRandomString(int length) + { + const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + return "TEMP_" + new string(Enumerable.Repeat(chars, length).Select(s => s[random.Next(s.Length)]).ToArray()); + } + + public void Dispose() + { + _connection.Disconnect(); + } + } +}
\ No newline at end of file diff --git a/Software/Visual_Studio/Tango.Web/Storage/ExtensionMethods.cs b/Software/Visual_Studio/Tango.Web/Storage/ExtensionMethods.cs new file mode 100644 index 000000000..4acd10082 --- /dev/null +++ b/Software/Visual_Studio/Tango.Web/Storage/ExtensionMethods.cs @@ -0,0 +1,48 @@ +using Microsoft.WindowsAzure.Storage.Blob; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.Web.Storage +{ + public static class ExtensionMethods + { + public static CloudBlockBlob CreateEmptyBlob(this CloudBlobContainer container, String name) + { + CloudBlockBlob emptyBlob = container.GetBlockBlobReference(name); + using (MemoryStream ms = new MemoryStream()) + { + emptyBlob.UploadFromStream(ms);//Empty memory stream. Will create an empty blob. + } + + return emptyBlob; + } + + public static String GenerateReadSignature(this CloudBlockBlob blob, TimeSpan duration) + { + String signature = blob.GetSharedAccessSignature(new SharedAccessBlobPolicy() + { + SharedAccessStartTime = DateTime.UtcNow, + SharedAccessExpiryTime = DateTime.UtcNow.Add(duration), + Permissions = SharedAccessBlobPermissions.Read + }); + + return new Uri(blob.Uri + signature).ToString(); + } + + public static String GenerateWriteSignature(this CloudBlockBlob blob, TimeSpan duration) + { + String signature = blob.GetSharedAccessSignature(new SharedAccessBlobPolicy() + { + SharedAccessStartTime = DateTime.UtcNow, + SharedAccessExpiryTime = DateTime.UtcNow.Add(duration), + Permissions = SharedAccessBlobPermissions.Write + }); + + return new Uri(blob.Uri + signature).ToString(); + } + } +} diff --git a/Software/Visual_Studio/Tango.Web/Storage/StorageManager.cs b/Software/Visual_Studio/Tango.Web/Storage/StorageManager.cs new file mode 100644 index 000000000..17b01d1e2 --- /dev/null +++ b/Software/Visual_Studio/Tango.Web/Storage/StorageManager.cs @@ -0,0 +1,27 @@ +using Microsoft.WindowsAzure.Storage; +using Microsoft.WindowsAzure.Storage.Blob; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.Web.Storage +{ + public class StorageManager + { + private CloudBlobClient _client; + + public StorageManager() + { + CloudStorageAccount storageAccount = CloudStorageAccount.Parse(WebConfig.STORAGE_ACCOUNT); + _client = storageAccount.CreateCloudBlobClient(); + } + + public CloudBlobContainer GetContainer(String name) + { + var container = _client.GetContainerReference(name); + return container; + } + } +} diff --git a/Software/Visual_Studio/Tango.Web/Tango.Web.csproj b/Software/Visual_Studio/Tango.Web/Tango.Web.csproj new file mode 100644 index 000000000..9d199a409 --- /dev/null +++ b/Software/Visual_Studio/Tango.Web/Tango.Web.csproj @@ -0,0 +1,276 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.3\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.3\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" /> + <Import Project="..\packages\Microsoft.Net.Compilers.2.4.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.2.4.0\build\Microsoft.Net.Compilers.props')" /> + <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <ProjectGuid>{5001990F-977B-48FF-B217-0236A5022AD8}</ProjectGuid> + <OutputType>Library</OutputType> + <AppDesignerFolder>Properties</AppDesignerFolder> + <RootNamespace>Tango.Web</RootNamespace> + <AssemblyName>Tango.Web</AssemblyName> + <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion> + <FileAlignment>512</FileAlignment> + <Deterministic>true</Deterministic> + <NuGetPackageImportStamp> + </NuGetPackageImportStamp> + <WebGreaseLibPath>..\packages\WebGrease.1.5.2\lib</WebGreaseLibPath> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> + <DebugSymbols>true</DebugSymbols> + <DebugType>full</DebugType> + <Optimize>false</Optimize> + <OutputPath>..\Build\Core\Debug\</OutputPath> + <DefineConstants>DEBUG;TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> + <DebugType>pdbonly</DebugType> + <Optimize>true</Optimize> + <OutputPath>..\Build\Core\Release\</OutputPath> + <DefineConstants>TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <ItemGroup> + <Reference Include="Antlr3.Runtime, Version=3.4.1.9004, Culture=neutral, PublicKeyToken=eb42632606e9261f, processorArchitecture=MSIL"> + <HintPath>..\packages\Antlr.3.4.1.9004\lib\Antlr3.Runtime.dll</HintPath> + </Reference> + <Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"> + <HintPath>..\packages\EntityFramework.6.0.0\lib\net45\EntityFramework.dll</HintPath> + </Reference> + <Reference Include="EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"> + <HintPath>..\packages\EntityFramework.6.0.0\lib\net45\EntityFramework.SqlServer.dll</HintPath> + </Reference> + <Reference Include="Google.Protobuf, Version=3.4.1.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604, processorArchitecture=MSIL"> + <HintPath>..\packages\Google.Protobuf.3.4.1\lib\net45\Google.Protobuf.dll</HintPath> + </Reference> + <Reference Include="Microsoft.AI.Agent.Intercept, Version=2.0.6.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.ApplicationInsights.Agent.Intercept.2.0.6\lib\net45\Microsoft.AI.Agent.Intercept.dll</HintPath> + </Reference> + <Reference Include="Microsoft.AI.DependencyCollector, Version=2.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.ApplicationInsights.DependencyCollector.2.2.0\lib\net45\Microsoft.AI.DependencyCollector.dll</HintPath> + </Reference> + <Reference Include="Microsoft.AI.PerfCounterCollector, Version=2.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.ApplicationInsights.PerfCounterCollector.2.2.0\lib\net45\Microsoft.AI.PerfCounterCollector.dll</HintPath> + </Reference> + <Reference Include="Microsoft.AI.ServerTelemetryChannel, Version=2.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.2.2.0\lib\net45\Microsoft.AI.ServerTelemetryChannel.dll</HintPath> + </Reference> + <Reference Include="Microsoft.AI.Web, Version=2.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.ApplicationInsights.Web.2.2.0\lib\net45\Microsoft.AI.Web.dll</HintPath> + </Reference> + <Reference Include="Microsoft.AI.WindowsServer, Version=2.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.ApplicationInsights.WindowsServer.2.2.0\lib\net45\Microsoft.AI.WindowsServer.dll</HintPath> + </Reference> + <Reference Include="Microsoft.ApplicationInsights, Version=2.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.ApplicationInsights.2.2.0\lib\net46\Microsoft.ApplicationInsights.dll</HintPath> + </Reference> + <Reference Include="Microsoft.Azure.Common, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" /> + <Reference Include="Microsoft.Azure.Common.NetFramework, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" /> + <Reference Include="Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.3\lib\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll</HintPath> + </Reference> + <Reference Include="Microsoft.IdentityModel.Clients.ActiveDirectory, Version=2.7.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.IdentityModel.Clients.ActiveDirectory.2.7.10707.1513-rc\lib\net45\Microsoft.IdentityModel.Clients.ActiveDirectory.dll</HintPath> + </Reference> + <Reference Include="Microsoft.IdentityModel.Clients.ActiveDirectory.WindowsForms, Version=2.7.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.IdentityModel.Clients.ActiveDirectory.2.7.10707.1513-rc\lib\net45\Microsoft.IdentityModel.Clients.ActiveDirectory.WindowsForms.dll</HintPath> + </Reference> + <Reference Include="Microsoft.SqlServer.AzureStorageEnum, Version=14.100.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.SqlServer.SqlManagementObjects.140.17283.0\lib\net40\Microsoft.SqlServer.AzureStorageEnum.dll</HintPath> + </Reference> + <Reference Include="Microsoft.SqlServer.BatchParserClient, Version=14.100.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.SqlServer.SqlManagementObjects.140.17283.0\lib\net40\Microsoft.SqlServer.BatchParserClient.dll</HintPath> + </Reference> + <Reference Include="Microsoft.SqlServer.ConnectionInfo, Version=14.100.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.SqlServer.SqlManagementObjects.140.17283.0\lib\net40\Microsoft.SqlServer.ConnectionInfo.dll</HintPath> + </Reference> + <Reference Include="Microsoft.SqlServer.ConnectionInfoExtended, Version=14.100.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.SqlServer.SqlManagementObjects.140.17283.0\lib\net40\Microsoft.SqlServer.ConnectionInfoExtended.dll</HintPath> + </Reference> + <Reference Include="Microsoft.SqlServer.Diagnostics.Strace, Version=14.100.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.SqlServer.SqlManagementObjects.140.17283.0\lib\net40\Microsoft.SqlServer.Diagnostics.Strace.dll</HintPath> + </Reference> + <Reference Include="Microsoft.SqlServer.Dmf, Version=14.100.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.SqlServer.SqlManagementObjects.140.17283.0\lib\net40\Microsoft.SqlServer.Dmf.dll</HintPath> + </Reference> + <Reference Include="Microsoft.SqlServer.Dmf.Common, Version=14.100.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.SqlServer.SqlManagementObjects.140.17283.0\lib\net40\Microsoft.SqlServer.Dmf.Common.dll</HintPath> + </Reference> + <Reference Include="Microsoft.SqlServer.Management.Collector, Version=14.100.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.SqlServer.SqlManagementObjects.140.17283.0\lib\net40\Microsoft.SqlServer.Management.Collector.dll</HintPath> + </Reference> + <Reference Include="Microsoft.SqlServer.Management.CollectorEnum, Version=14.100.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.SqlServer.SqlManagementObjects.140.17283.0\lib\net40\Microsoft.SqlServer.Management.CollectorEnum.dll</HintPath> + </Reference> + <Reference Include="Microsoft.SqlServer.Management.RegisteredServers, Version=14.100.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.SqlServer.SqlManagementObjects.140.17283.0\lib\net40\Microsoft.SqlServer.Management.RegisteredServers.dll</HintPath> + </Reference> + <Reference Include="Microsoft.SqlServer.Management.Sdk.Sfc, Version=14.100.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.SqlServer.SqlManagementObjects.140.17283.0\lib\net40\Microsoft.SqlServer.Management.Sdk.Sfc.dll</HintPath> + </Reference> + <Reference Include="Microsoft.SqlServer.Management.SqlParser, Version=14.100.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.SqlServer.SqlManagementObjects.140.17283.0\lib\net40\Microsoft.SqlServer.Management.SqlParser.dll</HintPath> + </Reference> + <Reference Include="Microsoft.SqlServer.Management.Utility, Version=14.100.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.SqlServer.SqlManagementObjects.140.17283.0\lib\net40\Microsoft.SqlServer.Management.Utility.dll</HintPath> + </Reference> + <Reference Include="Microsoft.SqlServer.Management.UtilityEnum, Version=14.100.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.SqlServer.SqlManagementObjects.140.17283.0\lib\net40\Microsoft.SqlServer.Management.UtilityEnum.dll</HintPath> + </Reference> + <Reference Include="Microsoft.SqlServer.Management.XEvent, Version=14.100.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.SqlServer.SqlManagementObjects.140.17283.0\lib\net40\Microsoft.SqlServer.Management.XEvent.dll</HintPath> + </Reference> + <Reference Include="Microsoft.SqlServer.Management.XEventDbScoped, Version=14.100.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.SqlServer.SqlManagementObjects.140.17283.0\lib\net40\Microsoft.SqlServer.Management.XEventDbScoped.dll</HintPath> + </Reference> + <Reference Include="Microsoft.SqlServer.Management.XEventDbScopedEnum, Version=14.100.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.SqlServer.SqlManagementObjects.140.17283.0\lib\net40\Microsoft.SqlServer.Management.XEventDbScopedEnum.dll</HintPath> + </Reference> + <Reference Include="Microsoft.SqlServer.Management.XEventEnum, Version=14.100.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.SqlServer.SqlManagementObjects.140.17283.0\lib\net40\Microsoft.SqlServer.Management.XEventEnum.dll</HintPath> + </Reference> + <Reference Include="Microsoft.SqlServer.PolicyEnum, Version=14.100.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.SqlServer.SqlManagementObjects.140.17283.0\lib\net40\Microsoft.SqlServer.PolicyEnum.dll</HintPath> + </Reference> + <Reference Include="Microsoft.SqlServer.RegSvrEnum, Version=14.100.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.SqlServer.SqlManagementObjects.140.17283.0\lib\net40\Microsoft.SqlServer.RegSvrEnum.dll</HintPath> + </Reference> + <Reference Include="Microsoft.SqlServer.ServiceBrokerEnum, Version=14.100.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.SqlServer.SqlManagementObjects.140.17283.0\lib\net40\Microsoft.SqlServer.ServiceBrokerEnum.dll</HintPath> + </Reference> + <Reference Include="Microsoft.SqlServer.Smo, Version=14.100.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.SqlServer.SqlManagementObjects.140.17283.0\lib\net40\Microsoft.SqlServer.Smo.dll</HintPath> + </Reference> + <Reference Include="Microsoft.SqlServer.SmoExtended, Version=14.100.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.SqlServer.SqlManagementObjects.140.17283.0\lib\net40\Microsoft.SqlServer.SmoExtended.dll</HintPath> + </Reference> + <Reference Include="Microsoft.SqlServer.SqlClrProvider, Version=14.100.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.SqlServer.SqlManagementObjects.140.17283.0\lib\net40\Microsoft.SqlServer.SqlClrProvider.dll</HintPath> + </Reference> + <Reference Include="Microsoft.SqlServer.SqlEnum, Version=14.100.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.SqlServer.SqlManagementObjects.140.17283.0\lib\net40\Microsoft.SqlServer.SqlEnum.dll</HintPath> + </Reference> + <Reference Include="Microsoft.SqlServer.SqlTDiagm, Version=14.100.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.SqlServer.SqlManagementObjects.140.17283.0\lib\net40\Microsoft.SqlServer.SqlTDiagm.dll</HintPath> + </Reference> + <Reference Include="Microsoft.SqlServer.SqlWmiManagement, Version=14.100.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.SqlServer.SqlManagementObjects.140.17283.0\lib\net40\Microsoft.SqlServer.SqlWmiManagement.dll</HintPath> + </Reference> + <Reference Include="Microsoft.SqlServer.SString, Version=14.100.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.SqlServer.SqlManagementObjects.140.17283.0\lib\net40\Microsoft.SqlServer.SString.dll</HintPath> + </Reference> + <Reference Include="Microsoft.SqlServer.Types, Version=14.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.SqlServer.SqlManagementObjects.140.17283.0\lib\net40\Microsoft.SqlServer.Types.dll</HintPath> + </Reference> + <Reference Include="Microsoft.SqlServer.WmiEnum, Version=14.100.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.SqlServer.SqlManagementObjects.140.17283.0\lib\net40\Microsoft.SqlServer.WmiEnum.dll</HintPath> + </Reference> + <Reference Include="Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath> + </Reference> + <Reference Include="Microsoft.WindowsAzure.Storage, Version=4.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" /> + <Reference Include="Newtonsoft.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> + <HintPath>..\packages\Newtonsoft.Json.8.0.3\lib\net45\Newtonsoft.Json.dll</HintPath> + </Reference> + <Reference Include="System" /> + <Reference Include="System.ComponentModel.DataAnnotations" /> + <Reference Include="System.Configuration" /> + <Reference Include="System.Core" /> + <Reference Include="System.Net.Http.Formatting, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.AspNet.WebApi.Client.5.2.3\lib\net45\System.Net.Http.Formatting.dll</HintPath> + </Reference> + <Reference Include="System.Runtime.Serialization" /> + <Reference Include="System.Security" /> + <Reference Include="System.Web" /> + <Reference Include="System.Web.Helpers, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.AspNet.WebPages.3.2.3\lib\net45\System.Web.Helpers.dll</HintPath> + </Reference> + <Reference Include="System.Web.Http, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.AspNet.WebApi.Core.5.2.3\lib\net45\System.Web.Http.dll</HintPath> + </Reference> + <Reference Include="System.Web.Http.WebHost, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.AspNet.WebApi.WebHost.5.2.3\lib\net45\System.Web.Http.WebHost.dll</HintPath> + </Reference> + <Reference Include="System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.AspNet.Mvc.5.2.3\lib\net45\System.Web.Mvc.dll</HintPath> + </Reference> + <Reference Include="System.Web.Optimization, Version=1.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.AspNet.Web.Optimization.1.1.3\lib\net40\System.Web.Optimization.dll</HintPath> + </Reference> + <Reference Include="System.Web.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.AspNet.Razor.3.2.3\lib\net45\System.Web.Razor.dll</HintPath> + </Reference> + <Reference Include="System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.AspNet.WebPages.3.2.3\lib\net45\System.Web.WebPages.dll</HintPath> + </Reference> + <Reference Include="System.Web.WebPages.Deployment, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.AspNet.WebPages.3.2.3\lib\net45\System.Web.WebPages.Deployment.dll</HintPath> + </Reference> + <Reference Include="System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.AspNet.WebPages.3.2.3\lib\net45\System.Web.WebPages.Razor.dll</HintPath> + </Reference> + <Reference Include="System.Xml.Linq" /> + <Reference Include="System.Data.DataSetExtensions" /> + <Reference Include="Microsoft.CSharp" /> + <Reference Include="System.Data" /> + <Reference Include="System.Net.Http" /> + <Reference Include="System.Xml" /> + <Reference Include="WebGrease, Version=1.5.2.14234, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> + <HintPath>..\packages\WebGrease.1.5.2\lib\WebGrease.dll</HintPath> + </Reference> + </ItemGroup> + <ItemGroup> + <Compile Include="..\Versioning\GlobalVersionInfo.cs"> + <Link>GlobalVersionInfo.cs</Link> + </Compile> + <Compile Include="Storage\ExtensionMethods.cs" /> + <Compile Include="Storage\StorageManager.cs" /> + <Compile Include="WebConfig.cs" /> + <Compile Include="Controllers\JsonController.cs" /> + <Compile Include="Formatters\JsonNetFormatter.cs" /> + <Compile Include="Helpers\AzureDirectoryHelper.cs" /> + <Compile Include="Helpers\ObservablesContextHelper.cs" /> + <Compile Include="Properties\AssemblyInfo.cs" /> + <Compile Include="Formatters\ProtoBufFormatter.cs" /> + <Compile Include="Controllers\ProtoController.cs" /> + <Compile Include="SMO\SmoManager.cs" /> + <Compile Include="WebApiException.cs" /> + </ItemGroup> + <ItemGroup> + <None Include="packages.config" /> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="..\Tango.BL\Tango.BL.csproj"> + <Project>{f441feee-322a-4943-b566-110e12fd3b72}</Project> + <Name>Tango.BL</Name> + </ProjectReference> + <ProjectReference Include="..\Tango.Core\Tango.Core.csproj"> + <Project>{a34ee0f0-649d-41c8-8489-b6f1cc6924ee}</Project> + <Name>Tango.Core</Name> + </ProjectReference> + <ProjectReference Include="..\Tango.Logging\Tango.Logging.csproj"> + <Project>{bc932dbd-7cdb-488c-99e4-f02cf441f55e}</Project> + <Name>Tango.Logging</Name> + </ProjectReference> + <ProjectReference Include="..\Tango.PMR\Tango.PMR.csproj"> + <Project>{e4927038-348d-4295-aaf4-861c58cb3943}</Project> + <Name>Tango.PMR</Name> + </ProjectReference> + </ItemGroup> + <ItemGroup /> + <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> + <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> + <PropertyGroup> + <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> + </PropertyGroup> + <Error Condition="!Exists('..\packages\Microsoft.Net.Compilers.2.4.0\build\Microsoft.Net.Compilers.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Net.Compilers.2.4.0\build\Microsoft.Net.Compilers.props'))" /> + <Error Condition="!Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.3\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.3\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props'))" /> + <Error Condition="!Exists('..\packages\Microsoft.SqlServer.SqlManagementObjects.140.17283.0\build\net40\Microsoft.SqlServer.SqlManagementObjects.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.SqlServer.SqlManagementObjects.140.17283.0\build\net40\Microsoft.SqlServer.SqlManagementObjects.targets'))" /> + </Target> + <Import Project="..\packages\Microsoft.SqlServer.SqlManagementObjects.140.17283.0\build\net40\Microsoft.SqlServer.SqlManagementObjects.targets" Condition="Exists('..\packages\Microsoft.SqlServer.SqlManagementObjects.140.17283.0\build\net40\Microsoft.SqlServer.SqlManagementObjects.targets')" /> +</Project>
\ No newline at end of file diff --git a/Software/Visual_Studio/Tango.Web/WebApiException.cs b/Software/Visual_Studio/Tango.Web/WebApiException.cs new file mode 100644 index 000000000..c9b464c6f --- /dev/null +++ b/Software/Visual_Studio/Tango.Web/WebApiException.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Web; + +namespace Tango.Web +{ + public class WebApiException : Exception + { + public HttpStatusCode StatusCode { get; set; } + + public WebApiException(HttpStatusCode statusCode, String message) : base(message) + { + StatusCode = statusCode; + } + } +}
\ No newline at end of file diff --git a/Software/Visual_Studio/Tango.Web/WebConfig.cs b/Software/Visual_Studio/Tango.Web/WebConfig.cs new file mode 100644 index 000000000..a10da3321 --- /dev/null +++ b/Software/Visual_Studio/Tango.Web/WebConfig.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Linq; +using System.Web; + +namespace Tango.Web +{ + public class WebConfig + { + public static String DB_ADDRESS => ConfigurationManager.AppSettings[nameof(DB_ADDRESS)].ToString(); + public static String DB_USER_NAME => ConfigurationManager.AppSettings[nameof(DB_USER_NAME)].ToString(); + public static String DB_PASSWORD => ConfigurationManager.AppSettings[nameof(DB_PASSWORD)].ToString(); + public static String DB_CATALOG => ConfigurationManager.AppSettings[nameof(DB_CATALOG)].ToString(); + + public static String STORAGE_ACCOUNT => ConfigurationManager.AppSettings[nameof(STORAGE_ACCOUNT)].ToString(); + + public static String TENANT_ID => ConfigurationManager.AppSettings[nameof(TENANT_ID)].ToString(); + public static String CLIENT_ID => ConfigurationManager.AppSettings[nameof(CLIENT_ID)].ToString(); + public static String APP_SECRET => ConfigurationManager.AppSettings[nameof(APP_SECRET)].ToString(); + + } +} + diff --git a/Software/Visual_Studio/Tango.Web/packages.config b/Software/Visual_Studio/Tango.Web/packages.config new file mode 100644 index 000000000..6266503ba --- /dev/null +++ b/Software/Visual_Studio/Tango.Web/packages.config @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="Antlr" version="3.4.1.9004" targetFramework="net461" /> + <package id="EntityFramework" version="6.0.0" targetFramework="net461" /> + <package id="Google.Protobuf" version="3.4.1" targetFramework="net461" /> + <package id="Microsoft.ApplicationInsights" version="2.2.0" targetFramework="net461" /> + <package id="Microsoft.ApplicationInsights.Agent.Intercept" version="2.0.6" targetFramework="net461" /> + <package id="Microsoft.ApplicationInsights.DependencyCollector" version="2.2.0" targetFramework="net461" /> + <package id="Microsoft.ApplicationInsights.PerfCounterCollector" version="2.2.0" targetFramework="net461" /> + <package id="Microsoft.ApplicationInsights.Web" version="2.2.0" targetFramework="net461" /> + <package id="Microsoft.ApplicationInsights.WindowsServer" version="2.2.0" targetFramework="net461" /> + <package id="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel" version="2.2.0" targetFramework="net461" /> + <package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net461" /> + <package id="Microsoft.AspNet.Razor" version="3.2.3" targetFramework="net461" /> + <package id="Microsoft.AspNet.Web.Optimization" version="1.1.3" targetFramework="net461" /> + <package id="Microsoft.AspNet.WebApi" version="5.2.3" targetFramework="net461" /> + <package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net461" /> + <package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net461" /> + <package id="Microsoft.AspNet.WebApi.HelpPage" version="5.2.3" targetFramework="net461" /> + <package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.3" targetFramework="net461" /> + <package id="Microsoft.AspNet.WebPages" version="3.2.3" targetFramework="net461" /> + <package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.3" targetFramework="net461" /> + <package id="Microsoft.IdentityModel.Clients.ActiveDirectory" version="2.7.10707.1513-rc" targetFramework="net461" /> + <package id="Microsoft.Net.Compilers" version="2.4.0" targetFramework="net461" developmentDependency="true" /> + <package id="Microsoft.SqlServer.SqlManagementObjects" version="140.17283.0" targetFramework="net461" /> + <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net461" /> + <package id="Modernizr" version="2.6.2" targetFramework="net461" /> + <package id="Newtonsoft.Json" version="8.0.3" targetFramework="net461" /> + <package id="Respond" version="1.2.0" targetFramework="net461" /> + <package id="WebGrease" version="1.5.2" targetFramework="net461" /> +</packages>
\ No newline at end of file |
