Performed minor code cleanup and addressed authorization issue.
This commit is contained in:
Родитель
13ddd50d28
Коммит
0c1cfdb8fa
|
@ -0,0 +1,29 @@
|
|||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve
|
||||
|
||||
---
|
||||
|
||||
# Steps to reproduce
|
||||
|
||||
> What steps can reproduce the defect?
|
||||
> Please share the setup, commandline for vstest.console, sample project, target
|
||||
> framework etc.
|
||||
|
||||
## Expected behavior
|
||||
|
||||
> Share the expected output
|
||||
|
||||
## Actual behavior
|
||||
|
||||
> What is the behavior observed?
|
||||
|
||||
## Diagnostic logs
|
||||
|
||||
> Please share test platform diagnostics logs.
|
||||
> The logs may contain test assembly paths, kindly review and mask those before sharing.
|
||||
|
||||
## Environment
|
||||
|
||||
> Please share additional details about your environment.
|
||||
> Version
|
|
@ -0,0 +1,19 @@
|
|||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
|
||||
---
|
||||
|
||||
# Feature Request
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I am always frustrated when [...]
|
||||
|
||||
**Describe the solution you would like**
|
||||
A clear and concise description of what you want to happen.
|
||||
|
||||
**Describe alternatives you have considered**
|
||||
A clear and concise description of any alternative solutions or features you have considered.
|
||||
|
||||
**Additional context**
|
||||
Add any other context or screenshots about the feature request here.
|
|
@ -0,0 +1,7 @@
|
|||
# Description
|
||||
|
||||
Please add a meaningful description for this change. Ensure the PR has required unit tests.
|
||||
|
||||
## Related issue
|
||||
|
||||
Kindly link any related issues (e.g. Fixes #xyz).
|
|
@ -1,5 +1,7 @@
|
|||
## Ignore Visual Studio temporary files, build results, and
|
||||
## files generated by popular Visual Studio add-ons.
|
||||
##
|
||||
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
|
||||
|
||||
# User-specific files
|
||||
*.suo
|
||||
|
@ -40,9 +42,11 @@ TestResult.xml
|
|||
[Rr]eleasePS/
|
||||
dlldata.c
|
||||
|
||||
# DNX
|
||||
# .NET Core
|
||||
project.lock.json
|
||||
project.fragment.lock.json
|
||||
artifacts/
|
||||
**/Properties/launchSettings.json
|
||||
|
||||
*_i.c
|
||||
*_p.c
|
||||
|
@ -109,6 +113,10 @@ _TeamCity*
|
|||
# DotCover is a Code Coverage Tool
|
||||
*.dotCover
|
||||
|
||||
# Visual Studio code coverage results
|
||||
*.coverage
|
||||
*.coveragexml
|
||||
|
||||
# NCrunch
|
||||
_NCrunch_*
|
||||
.*crunch*.local.xml
|
||||
|
@ -158,7 +166,7 @@ PublishScripts/
|
|||
!**/packages/build/
|
||||
# Uncomment if necessary however generally it will be regenerated when needed
|
||||
#!**/packages/repositories.config
|
||||
# NuGet v3's project.json files produces more ignoreable files
|
||||
# NuGet v3's project.json files produces more ignorable files
|
||||
*.nuget.props
|
||||
*.nuget.targets
|
||||
|
||||
|
@ -188,9 +196,9 @@ ClientBin/
|
|||
*~
|
||||
*.dbmdl
|
||||
*.dbproj.schemaview
|
||||
*.jfm
|
||||
*.pfx
|
||||
*.publishsettings
|
||||
node_modules/
|
||||
orleans.codegen.cs
|
||||
|
||||
# Since there are multiple workflows, uncomment next line to ignore bower_components
|
||||
|
@ -211,6 +219,7 @@ UpgradeLog*.htm
|
|||
# SQL Server files
|
||||
*.mdf
|
||||
*.ldf
|
||||
*.ndf
|
||||
|
||||
# Business Intelligence projects
|
||||
*.rdl.data
|
||||
|
@ -225,6 +234,10 @@ FakesAssemblies/
|
|||
|
||||
# Node.js Tools for Visual Studio
|
||||
.ntvs_analysis.dat
|
||||
node_modules/
|
||||
|
||||
# Typescript v1 declaration files
|
||||
typings/
|
||||
|
||||
# Visual Studio 6 build log
|
||||
*.plg
|
||||
|
@ -232,6 +245,9 @@ FakesAssemblies/
|
|||
# Visual Studio 6 workspace options file
|
||||
*.opt
|
||||
|
||||
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
|
||||
*.vbw
|
||||
|
||||
# Visual Studio LightSwitch build output
|
||||
**/*.HTMLClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/GeneratedArtifacts
|
||||
|
@ -249,4 +265,31 @@ paket-files/
|
|||
|
||||
# JetBrains Rider
|
||||
.idea/
|
||||
*.sln.iml
|
||||
*.sln.iml
|
||||
|
||||
# CodeRush
|
||||
.cr/
|
||||
|
||||
# Python Tools for Visual Studio (PTVS)
|
||||
__pycache__/
|
||||
*.pyc
|
||||
|
||||
# Cake - Uncomment if you are using it
|
||||
# tools/**
|
||||
# !tools/packages.config
|
||||
|
||||
# Telerik's JustMock configuration file
|
||||
*.jmconfig
|
||||
|
||||
# BizTalk build output
|
||||
*.btp.cs
|
||||
*.btm.cs
|
||||
*.odx.cs
|
||||
*.xsd.cs
|
||||
|
||||
# Visual Studio Code
|
||||
.vscode/*
|
||||
!.vscode/settings.json
|
||||
!.vscode/tasks.json
|
||||
!.vscode/launch.json
|
||||
!.vscode/extensions.json
|
13
CHANGELOG.md
13
CHANGELOG.md
|
@ -1,13 +0,0 @@
|
|||
## Partner-Center-Explorer Changelog
|
||||
|
||||
<a name="0.0.1"></a>
|
||||
# 0.0.1 (3/24/2018)
|
||||
|
||||
*Features*
|
||||
* No new features
|
||||
|
||||
*Bug Fixes*
|
||||
* [Authentication loop](https://github.com/Microsoft/Partner-Center-Explorer/issues/3) whenever an authentication failure occurred
|
||||
|
||||
*Breaking Changes*
|
||||
* None
|
|
@ -1,5 +0,0 @@
|
|||
### Expected behavior
|
||||
|
||||
### Actual behavior
|
||||
|
||||
### Steps to reproduce the problem
|
|
@ -9,10 +9,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
|
|||
ProjectSection(SolutionItems) = preProject
|
||||
azuredeploy.json = azuredeploy.json
|
||||
azuredeploy.param.json = azuredeploy.param.json
|
||||
CHANGELOG.md = CHANGELOG.md
|
||||
CODE_OF_CONDUCT.md = CODE_OF_CONDUCT.md
|
||||
CONTRIBUTING.md = CONTRIBUTING.md
|
||||
ISSUE_TEMPLATE.md = ISSUE_TEMPLATE.md
|
||||
LICENSE = LICENSE
|
||||
README.md = README.md
|
||||
EndProjectSection
|
||||
|
|
|
@ -64,17 +64,23 @@
|
|||
"description": "The size of the new Azure Redis Cache instance."
|
||||
}
|
||||
},
|
||||
"partnerCenterAccountId": {
|
||||
"type": "string",
|
||||
"metadata": {
|
||||
"description": "Account identifier value from the Azure AD application configured to access the Partner Center API."
|
||||
}
|
||||
},
|
||||
"partnerCenterApplicationId": {
|
||||
"type": "string",
|
||||
"minLength": 1
|
||||
"metadata": {
|
||||
"description": "Application identifier value from the Azure AD application configured to access the Partner Center API."
|
||||
}
|
||||
},
|
||||
"partnerCenterApplicationSecret": {
|
||||
"type": "string",
|
||||
"minLength": 1
|
||||
},
|
||||
"partnerCenterApplicationTenantId": {
|
||||
"type": "string",
|
||||
"minLength": 1
|
||||
"type": "securestring",
|
||||
"metadata": {
|
||||
"description": "Secret key for the Azure AD application configured to access the Partner Center API."
|
||||
}
|
||||
},
|
||||
"repoUrl": {
|
||||
"type": "string",
|
||||
|
@ -220,8 +226,8 @@
|
|||
"ApplicationTenantId": "[parameters('applicationTenantId')]",
|
||||
"KeyVaultEndpoint": "[concat('https://', variables('keyVaultName'), '.vault.azure.net')]",
|
||||
"InstrumentationKey": "[reference(concat('Microsoft.Insights/components/', parameters('webSiteName'))).InstrumentationKey]",
|
||||
"PartnerCenterApplicationId": "[parameters('partnerCenterApplicationId')]",
|
||||
"PartnerCenterApplicationTenantId": "[parameters('partnerCenterApplicationTenantId')]"
|
||||
"PartnerCenterAccountId": "[parameters('partnerCenterAccountId')]",
|
||||
"PartnerCenterApplicationId": "[parameters('partnerCenterApplicationId')]"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
|
@ -7,11 +7,9 @@
|
|||
},
|
||||
"applicationSecret": {
|
||||
"value": ""
|
||||
|
||||
},
|
||||
"applicationTenantId": {
|
||||
"value": ""
|
||||
|
||||
},
|
||||
"branch": {
|
||||
"value": "master"
|
||||
|
@ -25,15 +23,15 @@
|
|||
"cacheSKUCapacity": {
|
||||
"value": 0
|
||||
},
|
||||
"partnerCenterAccountId": {
|
||||
"value": ""
|
||||
},
|
||||
"partnerCenterApplicationId": {
|
||||
"value": ""
|
||||
},
|
||||
"partnerCenterApplicationSecret": {
|
||||
"value": ""
|
||||
},
|
||||
"partnerCenterApplicationTenantId": {
|
||||
"value": ""
|
||||
},
|
||||
"repoUrl": {
|
||||
"value": "https://github.com/Microsoft/Partner-Center-Explorer"
|
||||
},
|
||||
|
|
|
@ -11,7 +11,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer
|
|||
/// <summary>
|
||||
/// Configures the bundles used by the application.
|
||||
/// </summary>
|
||||
public class BundleConfig
|
||||
public static class BundleConfig
|
||||
{
|
||||
/// <summary>
|
||||
/// Registers the bundles.
|
||||
|
|
|
@ -13,7 +13,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer
|
|||
/// <summary>
|
||||
/// Configures the application filters.
|
||||
/// </summary>
|
||||
public class FilterConfig
|
||||
public static class FilterConfig
|
||||
{
|
||||
/// <summary>
|
||||
/// Registers the global filters.
|
||||
|
@ -21,7 +21,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer
|
|||
/// <param name="filters">The global filter collection.</param>
|
||||
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
|
||||
{
|
||||
filters.Add(new AuthenticationFilter());
|
||||
filters.Add(new AuthenticationFilterAttribute());
|
||||
filters.Add(new TelemetryHandleErrorAttribute());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,7 +12,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer
|
|||
/// <summary>
|
||||
/// Configures routing for the application.
|
||||
/// </summary>
|
||||
public class RouteConfig
|
||||
public static class RouteConfig
|
||||
{
|
||||
/// <summary>
|
||||
/// Registers the routes for the application.
|
||||
|
|
|
@ -10,8 +10,8 @@ namespace Microsoft.Store.PartnerCenter.Explorer
|
|||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using global::Owin;
|
||||
using Logic;
|
||||
using IdentityModel.Tokens;
|
||||
using Logic;
|
||||
using Models;
|
||||
using Owin.Security;
|
||||
using Owin.Security.Cookies;
|
||||
|
|
|
@ -59,6 +59,33 @@
|
|||
-->
|
||||
</Add>
|
||||
<Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.QuickPulse.QuickPulseTelemetryModule, Microsoft.AI.PerfCounterCollector"/>
|
||||
<Add Type="Microsoft.ApplicationInsights.WindowsServer.AppServicesHeartbeatTelemetryModule, Microsoft.AI.WindowsServer"/>
|
||||
<Add Type="Microsoft.ApplicationInsights.WindowsServer.AzureInstanceMetadataTelemetryModule, Microsoft.AI.WindowsServer">
|
||||
<!--
|
||||
Remove individual fields collected here by adding them to the ApplicationInsighs.HeartbeatProvider
|
||||
with the following syntax:
|
||||
|
||||
<Add Type="Microsoft.ApplicationInsights.Extensibility.Implementation.Tracing.DiagnosticsTelemetryModule, Microsoft.ApplicationInsights">
|
||||
<ExcludedHeartbeatProperties>
|
||||
<Add>osType</Add>
|
||||
<Add>location</Add>
|
||||
<Add>name</Add>
|
||||
<Add>offer</Add>
|
||||
<Add>platformFaultDomain</Add>
|
||||
<Add>platformUpdateDomain</Add>
|
||||
<Add>publisher</Add>
|
||||
<Add>sku</Add>
|
||||
<Add>version</Add>
|
||||
<Add>vmId</Add>
|
||||
<Add>vmSize</Add>
|
||||
<Add>subscriptionId</Add>
|
||||
<Add>resourceGroupName</Add>
|
||||
</ExcludedHeartbeatProperties>
|
||||
</Add>
|
||||
|
||||
NOTE: exclusions will be lost upon upgrade.
|
||||
-->
|
||||
</Add>
|
||||
<Add Type="Microsoft.ApplicationInsights.WindowsServer.DeveloperModeWithDebuggerAttachedTelemetryModule, Microsoft.AI.WindowsServer"/>
|
||||
<Add Type="Microsoft.ApplicationInsights.WindowsServer.UnhandledExceptionTelemetryModule, Microsoft.AI.WindowsServer"/>
|
||||
<Add Type="Microsoft.ApplicationInsights.WindowsServer.UnobservedExceptionTelemetryModule, Microsoft.AI.WindowsServer">
|
||||
|
@ -85,8 +112,14 @@
|
|||
<Add Type="Microsoft.ApplicationInsights.Web.ExceptionTrackingTelemetryModule, Microsoft.AI.Web"/>
|
||||
<Add Type="Microsoft.ApplicationInsights.Web.AspNetDiagnosticTelemetryModule, Microsoft.AI.Web"/>
|
||||
</TelemetryModules>
|
||||
<ApplicationIdProvider Type="Microsoft.ApplicationInsights.Extensibility.Implementation.ApplicationId.ApplicationInsightsApplicationIdProvider, Microsoft.ApplicationInsights"/>
|
||||
<TelemetryProcessors>
|
||||
<Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.QuickPulse.QuickPulseTelemetryProcessor, Microsoft.AI.PerfCounterCollector"/>
|
||||
<Add Type="Microsoft.ApplicationInsights.SnapshotCollector.SnapshotCollectorTelemetryProcessor, Microsoft.ApplicationInsights.SnapshotCollector">
|
||||
<!-- Snapshot Debugging is usually disabled when debugging in Visual Studio, but you can enable it by setting this to true. -->
|
||||
<IsEnabledInDeveloperMode>false</IsEnabledInDeveloperMode>
|
||||
<!-- Other properties are documented at https://aka.ms/pnv0qt -->
|
||||
</Add>
|
||||
<Add Type="Microsoft.ApplicationInsights.Extensibility.AutocollectedMetricsExtractor, Microsoft.ApplicationInsights"/>
|
||||
<Add Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.AdaptiveSamplingTelemetryProcessor, Microsoft.AI.ServerTelemetryChannel">
|
||||
<MaxTelemetryItemsPerSecond>5</MaxTelemetryItemsPerSecond>
|
||||
|
@ -96,25 +129,6 @@
|
|||
<MaxTelemetryItemsPerSecond>5</MaxTelemetryItemsPerSecond>
|
||||
<IncludedTypes>Event</IncludedTypes>
|
||||
</Add>
|
||||
<Add Type="Microsoft.ApplicationInsights.SnapshotCollector.SnapshotCollectorTelemetryProcessor, Microsoft.ApplicationInsights.SnapshotCollector">
|
||||
<!-- The default is true, but you can disable Snapshot Debugging by setting it to false -->
|
||||
<IsEnabled>true</IsEnabled>
|
||||
<!-- Snapshot Debugging is usually disabled in developer mode, but you can enable it by setting this to true. -->
|
||||
<!-- DeveloperMode is a property on the active TelemetryChannel. -->
|
||||
<IsEnabledInDeveloperMode>false</IsEnabledInDeveloperMode>
|
||||
<!-- How many times we need to see an exception before we ask for snapshots. -->
|
||||
<ThresholdForSnapshotting>1</ThresholdForSnapshotting>
|
||||
<!-- The maximum number of snapshots we collect for a single problem. -->
|
||||
<MaximumSnapshotsRequired>3</MaximumSnapshotsRequired>
|
||||
<!-- The maximum number of problems that we can be tracking at any time. -->
|
||||
<MaximumCollectionPlanSize>50</MaximumCollectionPlanSize>
|
||||
<!-- How often to reset problem counters. -->
|
||||
<ProblemCounterResetInterval>24:00:00</ProblemCounterResetInterval>
|
||||
<!-- The maximum number of snapshots allowed per day. -->
|
||||
<SnapshotsPerDayLimit>30</SnapshotsPerDayLimit>
|
||||
<!--Whether or not to collect snapshot in low IO priority thread.-->
|
||||
<SnapshotInLowPriorityThread>true</SnapshotInLowPriorityThread>
|
||||
</Add>
|
||||
</TelemetryProcessors>
|
||||
<TelemetryChannel Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.ServerTelemetryChannel, Microsoft.AI.ServerTelemetryChannel"/>
|
||||
<!--
|
||||
|
|
|
@ -40,7 +40,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Controllers
|
|||
|
||||
HttpContext.GetOwinContext().Authentication.SignOut(
|
||||
new AuthenticationProperties { RedirectUri = callbackUrl },
|
||||
OpenIdConnectAuthenticationDefaults.AuthenticationType,
|
||||
OpenIdConnectAuthenticationDefaults.AuthenticationType,
|
||||
CookieAuthenticationDefaults.AuthenticationType);
|
||||
}
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Controllers
|
|||
/// Controller for Audit views.
|
||||
/// </summary>
|
||||
/// <seealso cref="System.Web.Mvc.Controller" />
|
||||
[AuthorizationFilter(Roles = UserRole.Partner)]
|
||||
[AuthorizationFilter(Roles = UserRoles.Partner)]
|
||||
public class AuditController : BaseController
|
||||
{
|
||||
/// <summary>
|
||||
|
|
|
@ -8,8 +8,6 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Controllers
|
|||
{
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Threading.Tasks;
|
||||
using System.Web.Mvc;
|
||||
using Logic;
|
||||
|
@ -22,7 +20,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Controllers
|
|||
/// <summary>
|
||||
/// Controller for all Customers views.
|
||||
/// </summary>
|
||||
[AuthorizationFilter(Roles = UserRole.Partner)]
|
||||
[AuthorizationFilter(Roles = UserRoles.Partner)]
|
||||
public class CustomersController : BaseController
|
||||
{
|
||||
/// <summary>
|
||||
|
@ -33,27 +31,6 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Controllers
|
|||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Deletes the specified customer.
|
||||
/// </summary>
|
||||
/// <param name="customerId">The customer identifier.</param>
|
||||
/// <returns>Returns the NoContent HTTP status code.</returns>
|
||||
/// <exception cref="ArgumentException">
|
||||
/// <paramref name="customerId"/> is empty or null.
|
||||
/// </exception>
|
||||
[HttpDelete]
|
||||
public async Task<HttpResponseMessage> Delete(string customerId)
|
||||
{
|
||||
customerId.AssertNotEmpty(nameof(customerId));
|
||||
|
||||
if (Provider.Configuration.IsIntegrationSandbox)
|
||||
{
|
||||
await Provider.PartnerOperations.DeleteCustomerAsync(customerId).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
return new HttpResponseMessage(HttpStatusCode.NoContent);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Serves the HTML template for the create view.
|
||||
/// </summary>
|
||||
|
@ -130,11 +107,9 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Controllers
|
|||
/// <returns>The HTML template for the list page.</returns>
|
||||
public async Task<ActionResult> List()
|
||||
{
|
||||
CustomersModel customersModel = new CustomersModel()
|
||||
{
|
||||
Customers = await GetCustomerModelsAsync().ConfigureAwait(false),
|
||||
IsSandboxEnvironment = Provider.Configuration.IsIntegrationSandbox
|
||||
};
|
||||
CustomersModel customersModel = new CustomersModel();
|
||||
|
||||
customersModel.Customers.AddRange(await GetCustomerModelsAsync().ConfigureAwait(false));
|
||||
|
||||
return PartialView(customersModel);
|
||||
}
|
||||
|
|
|
@ -18,7 +18,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Controllers
|
|||
/// <summary>
|
||||
/// Controller for all Domain views.
|
||||
/// </summary>
|
||||
[AuthorizationFilter(Roles = UserRole.Partner)]
|
||||
[AuthorizationFilter(Roles = UserRoles.Partner)]
|
||||
public class DomainsController : BaseController
|
||||
{
|
||||
/// <summary>
|
||||
|
@ -36,15 +36,19 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Controllers
|
|||
/// <returns>A collection of service configuration records for the specified domain in JSON.</returns>
|
||||
public async Task<PartialViewResult> ConfigurationRecords(string customerId, string domain)
|
||||
{
|
||||
ConfigurationRecordsModel configurationRecords;
|
||||
GraphClient client;
|
||||
List<DomainDnsRecord> records;
|
||||
|
||||
try
|
||||
{
|
||||
client = new GraphClient(Provider, customerId);
|
||||
configurationRecords = new ConfigurationRecordsModel();
|
||||
records = await client.GetDomainConfigurationRecordsAsync(domain).ConfigureAwait(false);
|
||||
|
||||
return PartialView(new ConfigurationRecordsModel { ServiceConfigurationRecords = records });
|
||||
configurationRecords.ServiceConfigurationRecords.AddRange(records);
|
||||
|
||||
return PartialView(configurationRecords);
|
||||
}
|
||||
finally
|
||||
{
|
||||
|
|
|
@ -22,7 +22,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Controllers
|
|||
/// <summary>
|
||||
/// Handles request for the Health views.
|
||||
/// </summary>
|
||||
[AuthorizationFilter(Roles = UserRole.Partner)]
|
||||
[AuthorizationFilter(Roles = UserRoles.Partner)]
|
||||
public class HealthController : BaseController
|
||||
{
|
||||
/// <summary>
|
||||
|
@ -47,6 +47,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Controllers
|
|||
public async Task<ActionResult> Index(string customerId, string subscriptionId)
|
||||
{
|
||||
Customer customer;
|
||||
List<IHealthEvent> events;
|
||||
SubscriptionHealthModel healthModel;
|
||||
Subscription subscription;
|
||||
|
||||
|
@ -69,13 +70,15 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Controllers
|
|||
|
||||
if (subscription.BillingType == BillingType.Usage)
|
||||
{
|
||||
healthModel.HealthEvents = await GetAzureSubscriptionHealthAsync(customerId, subscriptionId);
|
||||
events = await GetAzureSubscriptionHealthAsync(customerId, subscriptionId).ConfigureAwait(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
healthModel.HealthEvents = await GetOfficeSubscriptionHealthAsync(customerId).ConfigureAwait(false);
|
||||
events = await GetOfficeSubscriptionHealthAsync(customerId).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
healthModel.HealthEvents.AddRange(events);
|
||||
|
||||
return View(healthModel.ViewModel, healthModel);
|
||||
}
|
||||
finally
|
||||
|
|
|
@ -6,7 +6,6 @@
|
|||
|
||||
namespace Microsoft.Store.PartnerCenter.Explorer.Controllers
|
||||
{
|
||||
using System;
|
||||
using System.Web.Mvc;
|
||||
using Providers;
|
||||
using Security;
|
||||
|
@ -27,7 +26,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Controllers
|
|||
/// Handles the request for the index view.
|
||||
/// </summary>
|
||||
/// <returns>The HTML template for the index page.</returns>
|
||||
[AuthorizationFilter(Roles = UserRole.Partner)]
|
||||
[AuthorizationFilter(Roles = UserRoles.Partner)]
|
||||
public ActionResult Index()
|
||||
{
|
||||
return View();
|
||||
|
|
|
@ -23,7 +23,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Controllers
|
|||
/// <summary>
|
||||
/// Control invoice related operations.
|
||||
/// </summary>
|
||||
[AuthorizationFilter(Roles = UserRole.Partner)]
|
||||
[AuthorizationFilter(Roles = UserRoles.Partner)]
|
||||
public class InvoicesController : BaseController
|
||||
{
|
||||
/// <summary>
|
||||
|
@ -50,10 +50,10 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Controllers
|
|||
customerName.AssertNotEmpty(nameof(customerName));
|
||||
invoiceId.AssertNotEmpty(nameof(invoiceId));
|
||||
|
||||
InvoiceDetailsModel invoiceDetailsModel = new InvoiceDetailsModel()
|
||||
{
|
||||
InvoiceLineItems = await GetInvoiceLineItemsAsync(invoiceId, customerName, "Azure").ConfigureAwait(false)
|
||||
};
|
||||
InvoiceDetailsModel invoiceDetailsModel = new InvoiceDetailsModel();
|
||||
|
||||
invoiceDetailsModel.InvoiceLineItems.AddRange(
|
||||
await GetInvoiceLineItemsAsync(invoiceId, customerName, "Azure").ConfigureAwait(false));
|
||||
|
||||
return PartialView(invoiceDetailsModel);
|
||||
}
|
||||
|
@ -64,10 +64,9 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Controllers
|
|||
/// <returns>A view containing the InvoicesModel model.</returns>
|
||||
public async Task<ActionResult> Index()
|
||||
{
|
||||
InvoicesModel invoicesModel = new InvoicesModel()
|
||||
{
|
||||
Invoices = await Provider.PartnerOperations.GetInvoicesAsync().ConfigureAwait(false)
|
||||
};
|
||||
InvoicesModel invoicesModel = new InvoicesModel();
|
||||
|
||||
invoicesModel.Invoices.AddRange(await Provider.PartnerOperations.GetInvoicesAsync().ConfigureAwait(false));
|
||||
|
||||
return View(invoicesModel);
|
||||
}
|
||||
|
@ -196,10 +195,11 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Controllers
|
|||
customerName.AssertNotEmpty(nameof(customerName));
|
||||
invoiceId.AssertNotEmpty(nameof(invoiceId));
|
||||
|
||||
InvoiceDetailsModel invoiceDetailsModel = new InvoiceDetailsModel()
|
||||
{
|
||||
InvoiceLineItems = await GetInvoiceLineItemsAsync(invoiceId, customerName, "Office").ConfigureAwait(false)
|
||||
};
|
||||
InvoiceDetailsModel invoiceDetailsModel = new InvoiceDetailsModel();
|
||||
|
||||
invoiceDetailsModel.InvoiceLineItems.AddRange(
|
||||
await GetInvoiceLineItemsAsync(invoiceId, customerName, "Office").ConfigureAwait(false));
|
||||
|
||||
|
||||
return PartialView(invoiceDetailsModel);
|
||||
}
|
||||
|
@ -237,8 +237,8 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Controllers
|
|||
foreach (InvoiceDetail detail in invoice.InvoiceDetails)
|
||||
{
|
||||
data = await Provider.PartnerOperations.GetInvoiceLineItemsAsync(
|
||||
invoiceId,
|
||||
detail.BillingProvider,
|
||||
invoiceId,
|
||||
detail.BillingProvider,
|
||||
detail.InvoiceLineItemType).ConfigureAwait(false);
|
||||
|
||||
lineItems.AddRange(data);
|
||||
|
|
|
@ -25,7 +25,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Controllers
|
|||
/// <summary>
|
||||
/// Handles requests for the Manage views.
|
||||
/// </summary>
|
||||
[AuthorizationFilter(Roles = UserRole.Partner)]
|
||||
[AuthorizationFilter(Roles = UserRoles.Partner)]
|
||||
public class ManageController : BaseController
|
||||
{
|
||||
/// <summary>
|
||||
|
|
|
@ -40,31 +40,35 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Controllers
|
|||
public async Task<PartialViewResult> GetOffersAsync(string customerId)
|
||||
{
|
||||
List<Offer> offers;
|
||||
List<OfferModel> models;
|
||||
OffersModel offersModel;
|
||||
|
||||
try
|
||||
{
|
||||
offers = await Provider.PartnerOperations.GetOffersAsync().ConfigureAwait(false);
|
||||
|
||||
offersModel = new OffersModel
|
||||
offersModel = new OffersModel()
|
||||
{
|
||||
AvailableOffers = (from offer in offers
|
||||
where offer.IsAvailableForPurchase
|
||||
select new OfferModel()
|
||||
{
|
||||
Billing = offer.Billing,
|
||||
Description = offer.Description,
|
||||
Id = offer.Id,
|
||||
IsAddOn = offer.IsAddOn,
|
||||
IsAvailableForPurchase = offer.IsAvailableForPurchase,
|
||||
MaximumQuantity = offer.MaximumQuantity,
|
||||
MinimumQuantity = offer.MinimumQuantity,
|
||||
Name = offer.Name,
|
||||
PrerequisiteOffers = offer.PrerequisiteOffers
|
||||
}).ToList(),
|
||||
CustomerId = customerId
|
||||
};
|
||||
|
||||
models = (from offer in offers
|
||||
where offer.IsAvailableForPurchase
|
||||
select new OfferModel()
|
||||
{
|
||||
Billing = offer.Billing,
|
||||
Description = offer.Description,
|
||||
Id = offer.Id,
|
||||
IsAddOn = offer.IsAddOn,
|
||||
IsAvailableForPurchase = offer.IsAvailableForPurchase,
|
||||
MaximumQuantity = offer.MaximumQuantity,
|
||||
MinimumQuantity = offer.MinimumQuantity,
|
||||
Name = offer.Name,
|
||||
PrerequisiteOffers = offer.PrerequisiteOffers
|
||||
}).ToList();
|
||||
|
||||
offersModel.AvailableOffers.AddRange(models);
|
||||
|
||||
return PartialView("Offers", offersModel);
|
||||
}
|
||||
finally
|
||||
|
@ -94,7 +98,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Controllers
|
|||
offers = await Provider.PartnerOperations.GetOffersAsync().ConfigureAwait(false);
|
||||
|
||||
return Json(
|
||||
offers.Single(x => x.Id.Equals(offerId, StringComparison.CurrentCultureIgnoreCase)),
|
||||
offers.Single(x => x.Id.Equals(offerId, StringComparison.CurrentCultureIgnoreCase)),
|
||||
JsonRequestBehavior.AllowGet);
|
||||
}
|
||||
finally
|
||||
|
|
|
@ -19,7 +19,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Controllers
|
|||
/// <summary>
|
||||
/// Handles all request for Service Requests views.
|
||||
/// </summary>
|
||||
[AuthorizationFilter(Roles = UserRole.Partner)]
|
||||
[AuthorizationFilter(Roles = UserRoles.Partner)]
|
||||
public class ServiceRequestsController : BaseController
|
||||
{
|
||||
/// <summary>
|
||||
|
@ -47,10 +47,9 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Controllers
|
|||
/// <returns>The HTML template for the list view.</returns>
|
||||
public async Task<PartialViewResult> List()
|
||||
{
|
||||
ServiceRequestsModel serviceRequestsModel = new ServiceRequestsModel()
|
||||
{
|
||||
ServiceRequests = await GetServiceRequestsAsync().ConfigureAwait(false)
|
||||
};
|
||||
ServiceRequestsModel serviceRequestsModel = new ServiceRequestsModel();
|
||||
|
||||
serviceRequestsModel.ServiceRequests.AddRange(await GetServiceRequestsAsync().ConfigureAwait(false));
|
||||
|
||||
return PartialView(serviceRequestsModel);
|
||||
}
|
||||
|
|
|
@ -24,7 +24,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Controllers
|
|||
/// <summary>
|
||||
/// Handles request for the Subscriptions views.
|
||||
/// </summary>
|
||||
[AuthorizationFilter(Roles = UserRole.Partner)]
|
||||
[AuthorizationFilter(Roles = UserRoles.Partner)]
|
||||
public class SubscriptionsController : BaseController
|
||||
{
|
||||
/// <summary>
|
||||
|
@ -213,10 +213,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Controllers
|
|||
try
|
||||
{
|
||||
subscriptions = await Provider.PartnerOperations.GetSubscriptionsAsync(customerId).ConfigureAwait(false);
|
||||
subscriptionsModel = new SubscriptionsModel()
|
||||
{
|
||||
Subscriptions = new List<SubscriptionModel>()
|
||||
};
|
||||
subscriptionsModel = new SubscriptionsModel();
|
||||
|
||||
foreach (Subscription s in subscriptions.Where(x => x.Status != SubscriptionStatus.Deleted))
|
||||
{
|
||||
|
|
|
@ -19,7 +19,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Controllers
|
|||
/// <summary>
|
||||
/// Controller for all Usage views.
|
||||
/// </summary>
|
||||
[AuthorizationFilter(Roles = UserRole.Partner)]
|
||||
[AuthorizationFilter(Roles = UserRoles.Partner)]
|
||||
public class UsageController : BaseController
|
||||
{
|
||||
/// <summary>
|
||||
|
@ -60,10 +60,12 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Controllers
|
|||
CustomerId = customerId,
|
||||
SubscriptionId = subscriptionId,
|
||||
SubscriptionFriendlyName = subscription.FriendlyName,
|
||||
Usage = await Provider.PartnerOperations
|
||||
.GetSubscriptionUsageAsync(customerId, subscriptionId, DateTime.Now.AddMonths(-1), DateTime.Now).ConfigureAwait(false)
|
||||
};
|
||||
|
||||
usageModel.Usage.AddRange(await Provider.PartnerOperations
|
||||
.GetSubscriptionUsageAsync(customerId, subscriptionId, DateTime.Now.AddMonths(-1), DateTime.Now)
|
||||
.ConfigureAwait(false));
|
||||
|
||||
return View(usageModel);
|
||||
}
|
||||
finally
|
||||
|
|
|
@ -24,7 +24,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Controllers
|
|||
/// <summary>
|
||||
/// Controller for Users views.
|
||||
/// </summary>
|
||||
[AuthorizationFilter(Roles = UserRole.Partner)]
|
||||
[AuthorizationFilter(Roles = UserRoles.Partner)]
|
||||
public class UsersController : BaseController
|
||||
{
|
||||
/// <summary>
|
||||
|
@ -90,9 +90,10 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Controllers
|
|||
UsersModel usersModel = new UsersModel()
|
||||
{
|
||||
CustomerId = newUserModel.CustomerId,
|
||||
Users = await client.GetUsersAsync().ConfigureAwait(false)
|
||||
};
|
||||
|
||||
usersModel.Users.AddRange(await client.GetUsersAsync().ConfigureAwait(false));
|
||||
|
||||
return PartialView("List", usersModel);
|
||||
}
|
||||
finally
|
||||
|
@ -154,12 +155,13 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Controllers
|
|||
DisplayName = customerUser.DisplayName,
|
||||
FirstName = customerUser.FirstName,
|
||||
LastName = customerUser.LastName,
|
||||
Licenses = await GetLicenses(customerId, userId),
|
||||
UsageLocation = "US",
|
||||
UserId = userId,
|
||||
UserPrincipalName = customerUser.UserPrincipalName
|
||||
};
|
||||
|
||||
editUserModel.Licenses.AddRange(await GetLicenses(customerId, userId).ConfigureAwait(false));
|
||||
|
||||
return PartialView(editUserModel);
|
||||
}
|
||||
finally
|
||||
|
@ -202,9 +204,10 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Controllers
|
|||
UsersModel usersModel = new UsersModel()
|
||||
{
|
||||
CustomerId = editUserModel.CustomerId,
|
||||
Users = await client.GetUsersAsync().ConfigureAwait(false)
|
||||
};
|
||||
|
||||
usersModel.Users.AddRange(await client.GetUsersAsync().ConfigureAwait(false));
|
||||
|
||||
return PartialView("List", usersModel);
|
||||
}
|
||||
finally
|
||||
|
@ -235,9 +238,10 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Controllers
|
|||
UsersModel usersModel = new UsersModel()
|
||||
{
|
||||
CustomerId = customerId,
|
||||
Users = await client.GetUsersAsync().ConfigureAwait(false)
|
||||
};
|
||||
|
||||
usersModel.Users.AddRange(await client.GetUsersAsync().ConfigureAwait(false));
|
||||
|
||||
return PartialView(usersModel);
|
||||
}
|
||||
finally
|
||||
|
@ -276,7 +280,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Controllers
|
|||
ConsumedUnits = sku.ConsumedUnits,
|
||||
Id = sku.ProductSku.Id,
|
||||
IsAssigned = licenses.Items
|
||||
.SingleOrDefault(x => x.ProductSku.Name.Equals(sku.ProductSku.Name)) != null ? true : false,
|
||||
.SingleOrDefault(x => x.ProductSku.Name.Equals(sku.ProductSku.Name, StringComparison.InvariantCultureIgnoreCase)) != null ? true : false,
|
||||
Name = sku.ProductSku.Name,
|
||||
SkuPartNumber = sku.ProductSku.SkuPartNumber,
|
||||
TargetType = sku.ProductSku.TargetType,
|
||||
|
@ -327,7 +331,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Controllers
|
|||
|
||||
if (!item.IsAssigned && license.IsAssigned)
|
||||
{
|
||||
assignments.Add(new LicenseAssignment() { ExcludedPlans = null, SkuId = license.Id });
|
||||
assignments.Add(new LicenseAssignment { ExcludedPlans = null, SkuId = license.Id });
|
||||
}
|
||||
else if (item.IsAssigned && !license.IsAssigned)
|
||||
{
|
||||
|
|
|
@ -1,7 +1,11 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="..\..\packages\Microsoft.Net.Compilers.2.7.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\..\packages\Microsoft.Net.Compilers.2.7.0\build\Microsoft.Net.Compilers.props')" />
|
||||
<Import Project="..\..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" />
|
||||
<Import Project="..\..\packages\Text.Analyzers.2.6.1\build\Text.Analyzers.props" Condition="Exists('..\..\packages\Text.Analyzers.2.6.1\build\Text.Analyzers.props')" />
|
||||
<Import Project="..\..\packages\Microsoft.NetFramework.Analyzers.2.6.1\build\Microsoft.NetFramework.Analyzers.props" Condition="Exists('..\..\packages\Microsoft.NetFramework.Analyzers.2.6.1\build\Microsoft.NetFramework.Analyzers.props')" />
|
||||
<Import Project="..\..\packages\Microsoft.NetCore.Analyzers.2.6.1\build\Microsoft.NetCore.Analyzers.props" Condition="Exists('..\..\packages\Microsoft.NetCore.Analyzers.2.6.1\build\Microsoft.NetCore.Analyzers.props')" />
|
||||
<Import Project="..\..\packages\Microsoft.CodeQuality.Analyzers.2.6.1\build\Microsoft.CodeQuality.Analyzers.props" Condition="Exists('..\..\packages\Microsoft.CodeQuality.Analyzers.2.6.1\build\Microsoft.CodeQuality.Analyzers.props')" />
|
||||
<Import Project="..\..\packages\Microsoft.Net.Compilers.2.8.2\build\Microsoft.Net.Compilers.props" Condition="Exists('..\..\packages\Microsoft.Net.Compilers.2.8.2\build\Microsoft.Net.Compilers.props')" />
|
||||
<Import Project="..\..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.0\build\net46\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.0\build\net46\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" />
|
||||
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props" Condition="Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props')" />
|
||||
<Import Project="..\packages\Microsoft.Net.Compilers.1.3.2\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.1.3.2\build\Microsoft.Net.Compilers.props')" />
|
||||
<Import Project="..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.1\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.1\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" />
|
||||
|
@ -56,43 +60,43 @@
|
|||
<HintPath>..\..\packages\Antlr.3.5.0.2\lib\Antlr3.Runtime.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="CommonServiceLocator, Version=2.0.3.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Unity.5.7.3\lib\net46\CommonServiceLocator.dll</HintPath>
|
||||
<HintPath>..\..\packages\Unity.5.8.6\lib\net46\CommonServiceLocator.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="CsvHelper, Version=7.0.0.0, Culture=neutral, PublicKeyToken=8c4959082be5c823, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\CsvHelper.7.1.0\lib\net45\CsvHelper.dll</HintPath>
|
||||
<HintPath>..\..\packages\CsvHelper.7.1.1\lib\net45\CsvHelper.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.AI.Agent.Intercept, Version=2.4.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.ApplicationInsights.Agent.Intercept.2.4.0\lib\net45\Microsoft.AI.Agent.Intercept.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.AI.DependencyCollector, Version=2.5.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.ApplicationInsights.DependencyCollector.2.5.1\lib\net45\Microsoft.AI.DependencyCollector.dll</HintPath>
|
||||
<Reference Include="Microsoft.AI.DependencyCollector, Version=2.6.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.ApplicationInsights.DependencyCollector.2.6.4\lib\net45\Microsoft.AI.DependencyCollector.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.AI.PerfCounterCollector, Version=2.5.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.ApplicationInsights.PerfCounterCollector.2.5.1\lib\net45\Microsoft.AI.PerfCounterCollector.dll</HintPath>
|
||||
<Reference Include="Microsoft.AI.PerfCounterCollector, Version=2.6.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.ApplicationInsights.PerfCounterCollector.2.6.4\lib\net45\Microsoft.AI.PerfCounterCollector.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.AI.ServerTelemetryChannel, Version=2.5.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.2.5.1\lib\net45\Microsoft.AI.ServerTelemetryChannel.dll</HintPath>
|
||||
<Reference Include="Microsoft.AI.ServerTelemetryChannel, Version=2.6.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.2.6.4\lib\net45\Microsoft.AI.ServerTelemetryChannel.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.AI.Web, Version=2.5.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.ApplicationInsights.Web.2.5.1\lib\net45\Microsoft.AI.Web.dll</HintPath>
|
||||
<Reference Include="Microsoft.AI.Web, Version=2.6.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.ApplicationInsights.Web.2.6.4\lib\net45\Microsoft.AI.Web.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.AI.WindowsServer, Version=2.5.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.ApplicationInsights.WindowsServer.2.5.1\lib\net45\Microsoft.AI.WindowsServer.dll</HintPath>
|
||||
<Reference Include="Microsoft.AI.WindowsServer, Version=2.6.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.ApplicationInsights.WindowsServer.2.6.4\lib\net45\Microsoft.AI.WindowsServer.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.ApplicationInsights, Version=2.5.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.ApplicationInsights.2.5.1\lib\net46\Microsoft.ApplicationInsights.dll</HintPath>
|
||||
<Reference Include="Microsoft.ApplicationInsights, Version=2.6.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.ApplicationInsights.2.6.4\lib\net46\Microsoft.ApplicationInsights.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.ApplicationInsights.SnapshotCollector, Version=1.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.ApplicationInsights.SnapshotCollector.1.2.0\lib\net45\Microsoft.ApplicationInsights.SnapshotCollector.dll</HintPath>
|
||||
<Reference Include="Microsoft.ApplicationInsights.SnapshotCollector, Version=1.3.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.ApplicationInsights.SnapshotCollector.1.3.0\lib\net45\Microsoft.ApplicationInsights.SnapshotCollector.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.AspNet.TelemetryCorrelation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.AspNet.TelemetryCorrelation.1.0.0\lib\net45\Microsoft.AspNet.TelemetryCorrelation.dll</HintPath>
|
||||
<Reference Include="Microsoft.AspNet.TelemetryCorrelation, Version=1.0.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.AspNet.TelemetryCorrelation.1.0.3\lib\net45\Microsoft.AspNet.TelemetryCorrelation.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Azure.KeyVault, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.Azure.KeyVault.2.3.2\lib\net452\Microsoft.Azure.KeyVault.dll</HintPath>
|
||||
<Reference Include="Microsoft.Azure.KeyVault, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.Azure.KeyVault.3.0.0\lib\net452\Microsoft.Azure.KeyVault.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Azure.KeyVault.WebKey, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.Azure.KeyVault.WebKey.2.0.7\lib\net452\Microsoft.Azure.KeyVault.WebKey.dll</HintPath>
|
||||
<Reference Include="Microsoft.Azure.KeyVault.WebKey, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.Azure.KeyVault.WebKey.3.0.0\lib\net452\Microsoft.Azure.KeyVault.WebKey.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Azure.Management.ResourceManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.Azure.Management.ResourceManager.1.6.0-preview\lib\net452\Microsoft.Azure.Management.ResourceManager.dll</HintPath>
|
||||
|
@ -100,8 +104,8 @@
|
|||
<Reference Include="Microsoft.Azure.Services.AppAuthentication, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.Azure.Services.AppAuthentication.1.1.0-preview\lib\net452\Microsoft.Azure.Services.AppAuthentication.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.8.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\lib\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll</HintPath>
|
||||
<Reference Include="Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.0\lib\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="Microsoft.Data.Edm, Version=5.8.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
|
@ -113,32 +117,35 @@
|
|||
<Reference Include="Microsoft.Data.Services.Client, Version=5.8.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.Data.Services.Client.5.8.3\lib\net40\Microsoft.Data.Services.Client.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Graph, Version=1.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.Graph.1.8.0\lib\net45\Microsoft.Graph.dll</HintPath>
|
||||
<Reference Include="Microsoft.Graph, Version=1.9.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.Graph.1.9.0\lib\net45\Microsoft.Graph.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Graph.Core, Version=1.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.Graph.Core.1.8.1\lib\net45\Microsoft.Graph.Core.dll</HintPath>
|
||||
<Reference Include="Microsoft.Graph.Core, Version=1.9.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.Graph.Core.1.9.0\lib\net45\Microsoft.Graph.Core.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.IdentityModel.Clients.ActiveDirectory, Version=3.19.2.6005, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.IdentityModel.Clients.ActiveDirectory.3.19.2\lib\net45\Microsoft.IdentityModel.Clients.ActiveDirectory.dll</HintPath>
|
||||
<Reference Include="Microsoft.IdentityModel.Clients.ActiveDirectory, Version=3.19.8.16603, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.IdentityModel.Clients.ActiveDirectory.3.19.8\lib\net45\Microsoft.IdentityModel.Clients.ActiveDirectory.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.IdentityModel.Clients.ActiveDirectory.Platform, Version=3.19.2.6005, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.IdentityModel.Clients.ActiveDirectory.3.19.2\lib\net45\Microsoft.IdentityModel.Clients.ActiveDirectory.Platform.dll</HintPath>
|
||||
<Reference Include="Microsoft.IdentityModel.Clients.ActiveDirectory.Platform, Version=3.19.8.16603, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.IdentityModel.Clients.ActiveDirectory.3.19.8\lib\net45\Microsoft.IdentityModel.Clients.ActiveDirectory.Platform.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.IdentityModel.Logging, Version=5.2.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.IdentityModel.Logging.5.2.1\lib\net451\Microsoft.IdentityModel.Logging.dll</HintPath>
|
||||
<Reference Include="Microsoft.IdentityModel.JsonWebTokens, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.IdentityModel.JsonWebTokens.5.2.4\lib\net451\Microsoft.IdentityModel.JsonWebTokens.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.IdentityModel.Logging, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.IdentityModel.Logging.5.2.4\lib\net451\Microsoft.IdentityModel.Logging.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.IdentityModel.Protocol.Extensions, Version=1.0.40306.1554, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.IdentityModel.Protocol.Extensions.1.0.4.403061554\lib\net45\Microsoft.IdentityModel.Protocol.Extensions.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.IdentityModel.Protocols, Version=5.2.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.IdentityModel.Protocols.5.2.1\lib\net451\Microsoft.IdentityModel.Protocols.dll</HintPath>
|
||||
<Reference Include="Microsoft.IdentityModel.Protocols, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.IdentityModel.Protocols.5.2.4\lib\net451\Microsoft.IdentityModel.Protocols.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.IdentityModel.Protocols.OpenIdConnect, Version=5.2.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.IdentityModel.Protocols.OpenIdConnect.5.2.1\lib\net451\Microsoft.IdentityModel.Protocols.OpenIdConnect.dll</HintPath>
|
||||
<Reference Include="Microsoft.IdentityModel.Protocols.OpenIdConnect, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.IdentityModel.Protocols.OpenIdConnect.5.2.4\lib\net451\Microsoft.IdentityModel.Protocols.OpenIdConnect.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.IdentityModel.Tokens, Version=5.2.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.IdentityModel.Tokens.5.2.1\lib\net451\Microsoft.IdentityModel.Tokens.dll</HintPath>
|
||||
<Reference Include="Microsoft.IdentityModel.Tokens, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.IdentityModel.Tokens.5.2.4\lib\net451\Microsoft.IdentityModel.Tokens.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Owin, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.Owin.4.0.0\lib\net451\Microsoft.Owin.dll</HintPath>
|
||||
|
@ -161,14 +168,14 @@
|
|||
<Reference Include="Microsoft.Rest.ClientRuntime.Azure, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.Rest.ClientRuntime.Azure.3.3.12\lib\net452\Microsoft.Rest.ClientRuntime.Azure.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Store.PartnerCenter, Version=1.7.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.Store.PartnerCenter.1.7.1\lib\Net45\Microsoft.Store.PartnerCenter.dll</HintPath>
|
||||
<Reference Include="Microsoft.Store.PartnerCenter, Version=1.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.Store.PartnerCenter.1.8.0\lib\Net45\Microsoft.Store.PartnerCenter.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Store.PartnerCenter.Extensions, Version=1.7.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.Store.PartnerCenter.1.7.1\lib\Net45\Microsoft.Store.PartnerCenter.Extensions.dll</HintPath>
|
||||
<Reference Include="Microsoft.Store.PartnerCenter.Extensions, Version=1.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.Store.PartnerCenter.1.8.0\lib\Net45\Microsoft.Store.PartnerCenter.Extensions.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Store.PartnerCenter.Models, Version=1.7.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.Store.PartnerCenter.1.7.1\lib\Net45\Microsoft.Store.PartnerCenter.Models.dll</HintPath>
|
||||
<Reference Include="Microsoft.Store.PartnerCenter.Models, Version=1.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.Store.PartnerCenter.1.8.0\lib\Net45\Microsoft.Store.PartnerCenter.Models.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Threading.Tasks, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.Bcl.Async.1.0.168\lib\net40\Microsoft.Threading.Tasks.dll</HintPath>
|
||||
|
@ -183,7 +190,7 @@
|
|||
<HintPath>..\..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Newtonsoft.Json.11.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
<HintPath>..\..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Owin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f0ebd12fd5e55cc5, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Owin.1.0\lib\net40\Owin.dll</HintPath>
|
||||
|
@ -193,13 +200,13 @@
|
|||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Diagnostics.DiagnosticSource, Version=4.0.2.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\System.Diagnostics.DiagnosticSource.4.4.1\lib\net46\System.Diagnostics.DiagnosticSource.dll</HintPath>
|
||||
<Reference Include="System.Diagnostics.DiagnosticSource, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\System.Diagnostics.DiagnosticSource.4.5.0\lib\net46\System.Diagnostics.DiagnosticSource.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Drawing" />
|
||||
<Reference Include="System.IdentityModel" />
|
||||
<Reference Include="System.IdentityModel.Tokens.Jwt, Version=5.2.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\System.IdentityModel.Tokens.Jwt.5.2.1\lib\net451\System.IdentityModel.Tokens.Jwt.dll</HintPath>
|
||||
<Reference Include="System.IdentityModel.Tokens.Jwt, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\System.IdentityModel.Tokens.Jwt.5.2.4\lib\net451\System.IdentityModel.Tokens.Jwt.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.IO.Compression, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\System.IO.Compression.4.3.0\lib\net46\System.IO.Compression.dll</HintPath>
|
||||
|
@ -245,54 +252,54 @@
|
|||
<Reference Include="System.Web.Abstractions" />
|
||||
<Reference Include="System.Web.Extensions" />
|
||||
<Reference Include="System.Web.Helpers, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.AspNet.WebPages.3.2.4\lib\net45\System.Web.Helpers.dll</HintPath>
|
||||
<HintPath>..\..\packages\Microsoft.AspNet.WebPages.3.2.6\lib\net45\System.Web.Helpers.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.AspNet.Mvc.5.2.4\lib\net45\System.Web.Mvc.dll</HintPath>
|
||||
<Reference Include="System.Web.Mvc, Version=5.2.6.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.AspNet.Mvc.5.2.6\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.4\lib\net45\System.Web.Razor.dll</HintPath>
|
||||
<HintPath>..\..\packages\Microsoft.AspNet.Razor.3.2.6\lib\net45\System.Web.Razor.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Web.Routing" />
|
||||
<Reference Include="System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Microsoft.AspNet.WebPages.3.2.4\lib\net45\System.Web.WebPages.dll</HintPath>
|
||||
<HintPath>..\..\packages\Microsoft.AspNet.WebPages.3.2.6\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.4\lib\net45\System.Web.WebPages.Deployment.dll</HintPath>
|
||||
<HintPath>..\..\packages\Microsoft.AspNet.WebPages.3.2.6\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.4\lib\net45\System.Web.WebPages.Razor.dll</HintPath>
|
||||
<HintPath>..\..\packages\Microsoft.AspNet.WebPages.3.2.6\lib\net45\System.Web.WebPages.Razor.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="System.Configuration" />
|
||||
<Reference Include="System.Web.Services" />
|
||||
<Reference Include="System.EnterpriseServices" />
|
||||
<Reference Include="Unity.Abstractions, Version=3.3.0.0, Culture=neutral, PublicKeyToken=6d32ff45e0ccc69f, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Unity.Abstractions.3.3.0\lib\net45\Unity.Abstractions.dll</HintPath>
|
||||
<HintPath>..\..\packages\Unity.5.8.6\lib\net46\Unity.Abstractions.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.Configuration, Version=5.2.1.0, Culture=neutral, PublicKeyToken=6d32ff45e0ccc69f, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Unity.5.7.3\lib\net46\Unity.Configuration.dll</HintPath>
|
||||
<HintPath>..\..\packages\Unity.5.8.6\lib\net46\Unity.Configuration.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.Container, Version=5.7.3.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Unity.Container.5.7.3\lib\net46\Unity.Container.dll</HintPath>
|
||||
<Reference Include="Unity.Container, Version=5.8.6.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Unity.Container.5.8.6\lib\net46\Unity.Container.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.Interception, Version=5.5.1.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Unity.5.7.3\lib\net46\Unity.Interception.dll</HintPath>
|
||||
<HintPath>..\..\packages\Unity.5.8.6\lib\net46\Unity.Interception.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.Interception.Configuration, Version=5.1.4.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Unity.5.7.3\lib\net46\Unity.Interception.Configuration.dll</HintPath>
|
||||
<HintPath>..\..\packages\Unity.5.8.6\lib\net46\Unity.Interception.Configuration.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.Mvc, Version=5.0.13.0, Culture=neutral, PublicKeyToken=6d32ff45e0ccc69f, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Unity.Mvc.5.0.13\lib\net46\Unity.Mvc.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.RegistrationByConvention, Version=2.1.5.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Unity.5.7.3\lib\net46\Unity.RegistrationByConvention.dll</HintPath>
|
||||
<HintPath>..\..\packages\Unity.5.8.6\lib\net46\Unity.RegistrationByConvention.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.ServiceLocation, Version=2.1.2.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Unity.5.7.3\lib\net46\Unity.ServiceLocation.dll</HintPath>
|
||||
<HintPath>..\..\packages\Unity.5.8.6\lib\net46\Unity.ServiceLocation.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="WebActivatorEx, Version=2.0.0.0, Culture=neutral, PublicKeyToken=7b26dc2a43f6a0d4, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\WebActivatorEx.2.2.0\lib\net40\WebActivatorEx.dll</HintPath>
|
||||
|
@ -389,9 +396,9 @@
|
|||
<Compile Include="Logic\Office\StatusDetails.cs" />
|
||||
<Compile Include="Logic\GraphClient.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Security\AuthenticationFilter.cs" />
|
||||
<Compile Include="Security\AuthenticationFilterAttribute.cs" />
|
||||
<Compile Include="Security\CustomerPrincipal.cs" />
|
||||
<Compile Include="Security\UserRole.cs" />
|
||||
<Compile Include="Security\UserRoles.cs" />
|
||||
<Compile Include="Startup.cs" />
|
||||
<Compile Include="Subscriptions\AzureSubscriptionDetails.cs" />
|
||||
<Compile Include="Subscriptions\ISubscriptionDetails.cs" />
|
||||
|
@ -470,7 +477,6 @@
|
|||
<Content Include="Content\bootstrap-theme.min.css.map" />
|
||||
<Content Include="Content\bootstrap-theme.css.map" />
|
||||
<None Include="packages.config" />
|
||||
<None Include="Properties\PublishProfiles\partnercenterexplorer - Web Deploy.pubxml" />
|
||||
<None Include="Scripts\jquery-2.2.3.intellisense.js" />
|
||||
<Content Include="Scripts\ai.0.22.9-build00167.js" />
|
||||
<Content Include="Scripts\ai.0.22.9-build00167.min.js" />
|
||||
|
@ -486,9 +492,9 @@
|
|||
<Content Include="Scripts\jquery-3.3.1.slim.min.js" />
|
||||
<Content Include="Scripts\jquery-ui-1.12.1.js" />
|
||||
<Content Include="Scripts\jquery-ui-1.12.1.min.js" />
|
||||
<None Include="Scripts\jquery.validate-vsdoc.js" />
|
||||
<Content Include="Scripts\jquery.unobtrusive-ajax.js" />
|
||||
<Content Include="Scripts\jquery.unobtrusive-ajax.min.js" />
|
||||
<None Include="Scripts\jquery.validate-vsdoc.js" />
|
||||
<Content Include="Scripts\jquery.validate.js" />
|
||||
<Content Include="Scripts\jquery.validate.min.js" />
|
||||
<Content Include="Scripts\jquery.validate.unobtrusive.js" />
|
||||
|
@ -570,6 +576,16 @@
|
|||
<ItemGroup>
|
||||
<Service Include="{4A0DDDB5-7A95-4FBF-97CC-616D07737A77}" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Analyzer Include="..\..\packages\Microsoft.CodeQuality.Analyzers.2.6.1\analyzers\dotnet\cs\Microsoft.CodeQuality.Analyzers.dll" />
|
||||
<Analyzer Include="..\..\packages\Microsoft.CodeQuality.Analyzers.2.6.1\analyzers\dotnet\cs\Microsoft.CodeQuality.CSharp.Analyzers.dll" />
|
||||
<Analyzer Include="..\..\packages\Microsoft.NetCore.Analyzers.2.6.1\analyzers\dotnet\cs\Microsoft.NetCore.Analyzers.dll" />
|
||||
<Analyzer Include="..\..\packages\Microsoft.NetCore.Analyzers.2.6.1\analyzers\dotnet\cs\Microsoft.NetCore.CSharp.Analyzers.dll" />
|
||||
<Analyzer Include="..\..\packages\Microsoft.NetFramework.Analyzers.2.6.1\analyzers\dotnet\cs\Microsoft.NetFramework.Analyzers.dll" />
|
||||
<Analyzer Include="..\..\packages\Microsoft.NetFramework.Analyzers.2.6.1\analyzers\dotnet\cs\Microsoft.NetFramework.CSharp.Analyzers.dll" />
|
||||
<Analyzer Include="..\..\packages\Text.Analyzers.2.6.1\analyzers\dotnet\cs\Text.Analyzers.dll" />
|
||||
<Analyzer Include="..\..\packages\Text.Analyzers.2.6.1\analyzers\dotnet\cs\Text.CSharp.Analyzers.dll" />
|
||||
</ItemGroup>
|
||||
<PropertyGroup>
|
||||
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
|
||||
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
|
||||
|
@ -597,12 +613,14 @@
|
|||
</PropertyGroup>
|
||||
<Error Condition="!Exists('..\..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets'))" />
|
||||
<Error Condition="!Exists('..\..\packages\Microsoft.Azure.Services.AppAuthentication.1.1.0-preview\build\Microsoft.Azure.Services.AppAuthentication.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.Azure.Services.AppAuthentication.1.1.0-preview\build\Microsoft.Azure.Services.AppAuthentication.targets'))" />
|
||||
<Error Condition="!Exists('..\..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props'))" />
|
||||
<Error Condition="!Exists('..\..\packages\Microsoft.ApplicationInsights.SnapshotCollector.1.2.0\build\Microsoft.ApplicationInsights.SnapshotCollector.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.ApplicationInsights.SnapshotCollector.1.2.0\build\Microsoft.ApplicationInsights.SnapshotCollector.targets'))" />
|
||||
<Error Condition="!Exists('..\..\packages\Microsoft.Net.Compilers.2.7.0\build\Microsoft.Net.Compilers.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.Net.Compilers.2.7.0\build\Microsoft.Net.Compilers.props'))" />
|
||||
<Error Condition="!Exists('..\..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.0\build\net46\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.0\build\net46\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props'))" />
|
||||
<Error Condition="!Exists('..\..\packages\Microsoft.Net.Compilers.2.8.2\build\Microsoft.Net.Compilers.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.Net.Compilers.2.8.2\build\Microsoft.Net.Compilers.props'))" />
|
||||
<Error Condition="!Exists('..\..\packages\Microsoft.CodeQuality.Analyzers.2.6.1\build\Microsoft.CodeQuality.Analyzers.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.CodeQuality.Analyzers.2.6.1\build\Microsoft.CodeQuality.Analyzers.props'))" />
|
||||
<Error Condition="!Exists('..\..\packages\Microsoft.NetCore.Analyzers.2.6.1\build\Microsoft.NetCore.Analyzers.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.NetCore.Analyzers.2.6.1\build\Microsoft.NetCore.Analyzers.props'))" />
|
||||
<Error Condition="!Exists('..\..\packages\Microsoft.NetFramework.Analyzers.2.6.1\build\Microsoft.NetFramework.Analyzers.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.NetFramework.Analyzers.2.6.1\build\Microsoft.NetFramework.Analyzers.props'))" />
|
||||
<Error Condition="!Exists('..\..\packages\Text.Analyzers.2.6.1\build\Text.Analyzers.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Text.Analyzers.2.6.1\build\Text.Analyzers.props'))" />
|
||||
</Target>
|
||||
<Import Project="..\..\packages\Microsoft.Azure.Services.AppAuthentication.1.1.0-preview\build\Microsoft.Azure.Services.AppAuthentication.targets" Condition="Exists('..\..\packages\Microsoft.Azure.Services.AppAuthentication.1.1.0-preview\build\Microsoft.Azure.Services.AppAuthentication.targets')" />
|
||||
<Import Project="..\..\packages\Microsoft.ApplicationInsights.SnapshotCollector.1.2.0\build\Microsoft.ApplicationInsights.SnapshotCollector.targets" Condition="Exists('..\..\packages\Microsoft.ApplicationInsights.SnapshotCollector.1.2.0\build\Microsoft.ApplicationInsights.SnapshotCollector.targets')" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
|
|
|
@ -81,7 +81,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Logic.Azure
|
|||
/// or
|
||||
/// <paramref name="templateUri"/> is empty or null.
|
||||
/// </exception>
|
||||
public async Task<string> ApplyTemplateAsync(string subscriptionId, string resourceGroupName, string templateUri, string parametersUri)
|
||||
public async Task<string> ApplyTemplateAsync(string subscriptionId, string resourceGroupName, Uri templateUri, Uri parametersUri)
|
||||
{
|
||||
Deployment deployment;
|
||||
DeploymentExtended result;
|
||||
|
@ -89,7 +89,6 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Logic.Azure
|
|||
|
||||
subscriptionId.AssertNotEmpty(nameof(subscriptionId));
|
||||
resourceGroupName.AssertNotEmpty(nameof(resourceGroupName));
|
||||
templateUri.AssertNotEmpty(nameof(templateUri));
|
||||
|
||||
try
|
||||
{
|
||||
|
@ -100,13 +99,13 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Logic.Azure
|
|||
Properties = new DeploymentProperties()
|
||||
{
|
||||
Mode = DeploymentMode.Incremental,
|
||||
TemplateLink = new TemplateLink(templateUri)
|
||||
TemplateLink = new TemplateLink(templateUri.ToString())
|
||||
}
|
||||
};
|
||||
|
||||
if (!string.IsNullOrEmpty(parametersUri))
|
||||
if (parametersUri != null)
|
||||
{
|
||||
deployment.Properties.ParametersLink = new ParametersLink(parametersUri);
|
||||
deployment.Properties.ParametersLink = new ParametersLink(parametersUri.ToString());
|
||||
}
|
||||
|
||||
deploymentName = Guid.NewGuid().ToString();
|
||||
|
|
|
@ -118,10 +118,12 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Logic
|
|||
}));
|
||||
}
|
||||
|
||||
if (customerId.Equals(provider.Configuration.PartnerCenterApplicationTenantId))
|
||||
if (customerId.Equals(provider.Configuration.PartnerCenterAccountId, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
groups = directoryGroups.CurrentPage.OfType<Group>().Where(
|
||||
g => g.DisplayName.Equals("AdminAgents") || g.DisplayName.Equals("HelpdeskAgents") || g.DisplayName.Equals("SalesAgent")).ToList();
|
||||
g => g.DisplayName.Equals("AdminAgents", StringComparison.InvariantCultureIgnoreCase)
|
||||
|| g.DisplayName.Equals("HelpdeskAgents", StringComparison.InvariantCultureIgnoreCase)
|
||||
|| g.DisplayName.Equals("SalesAgent", StringComparison.InvariantCultureIgnoreCase)).ToList();
|
||||
|
||||
if (groups.Count > 0)
|
||||
{
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
|
||||
namespace Microsoft.Store.PartnerCenter.Explorer.Logic
|
||||
{
|
||||
using System;
|
||||
using System.Net.Http;
|
||||
using System.Net.Http.Headers;
|
||||
using System.Threading.Tasks;
|
||||
|
@ -38,11 +39,11 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Logic
|
|||
/// <paramref name="token"/> is empty or null.
|
||||
/// </exception>
|
||||
/// <exception cref="CommunicationException"></exception>
|
||||
public async Task<T> GetAsync<T>(string requestUri, string token)
|
||||
public async Task<T> GetAsync<T>(Uri requestUri, string token)
|
||||
{
|
||||
HttpResponseMessage response;
|
||||
|
||||
requestUri.AssertNotEmpty(nameof(requestUri));
|
||||
requestUri.AssertNotNull(nameof(requestUri));
|
||||
token.AssertNotEmpty(nameof(token));
|
||||
|
||||
try
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
|
||||
namespace Microsoft.Store.PartnerCenter.Explorer.Logic
|
||||
{
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
/// <summary>
|
||||
|
@ -20,6 +21,6 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Logic
|
|||
/// <param name="requestUri">The Uri where the request should be sent.</param>
|
||||
/// <param name="token">The access token value used to authorize the request.</param>
|
||||
/// <returns>The task object representing the asynchronous operation.</returns>
|
||||
Task<T> GetAsync<T>(string requestUri, string token);
|
||||
Task<T> GetAsync<T>(Uri requestUri, string token);
|
||||
}
|
||||
}
|
|
@ -14,6 +14,14 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Logic.Office
|
|||
/// </summary>
|
||||
public class OfficeHealthEvent : IHealthEvent
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="OfficeHealthEvent" /> class.
|
||||
/// </summary>
|
||||
public OfficeHealthEvent()
|
||||
{
|
||||
IncidentIds = new List<string>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the identifier.
|
||||
/// </summary>
|
||||
|
@ -27,7 +35,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Logic.Office
|
|||
/// <summary>
|
||||
/// Gets or sets a list of incidents.
|
||||
/// </summary>
|
||||
public List<string> IncidentIds { get; set; }
|
||||
public List<string> IncidentIds { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the status of the <see cref="IHealthEvent" />.
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
|
||||
namespace Microsoft.Store.PartnerCenter.Explorer.Logic.Office
|
||||
{
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
@ -56,13 +57,13 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Logic.Office
|
|||
public async Task<List<IHealthEvent>> GetCurrentStatusAsync(string customerId)
|
||||
{
|
||||
Result<OfficeHealthEvent> records;
|
||||
string requestUri;
|
||||
Uri requestUri;
|
||||
|
||||
customerId.AssertNotEmpty(nameof(customerId));
|
||||
|
||||
try
|
||||
{
|
||||
requestUri = $"{provider.Configuration.OfficeManagementEndpoint}/api/v1.0/{customerId}/ServiceComms/CurrentStatus";
|
||||
requestUri = new Uri($"{provider.Configuration.OfficeManagementEndpoint}/api/v1.0/{customerId}/ServiceComms/CurrentStatus");
|
||||
|
||||
records = await provider.Communication.GetAsync<Result<OfficeHealthEvent>>(
|
||||
requestUri,
|
||||
|
|
|
@ -14,15 +14,23 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Logic.Office
|
|||
/// </summary>
|
||||
public class StatusDetails
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="StatusDetails" /> class.
|
||||
/// </summary>
|
||||
public StatusDetails()
|
||||
{
|
||||
IncidentIds = new List<string>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the identifier.
|
||||
/// </summary>
|
||||
public string Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the incident identifiers associated with this status.
|
||||
/// Gets the incident identifiers associated with this status.
|
||||
/// </summary>
|
||||
public List<string> IncidentIds { get; set; }
|
||||
public List<string> IncidentIds { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the status.
|
||||
|
|
|
@ -8,6 +8,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Logic
|
|||
{
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Security.Claims;
|
||||
using System.Threading.Tasks;
|
||||
using Cache;
|
||||
|
@ -118,7 +119,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Logic
|
|||
{
|
||||
{ "CustomerId", principal.CustomerId },
|
||||
{ "Domain", domain },
|
||||
{ "Exists", exists.ToString() },
|
||||
{ "Exists", exists.ToString(CultureInfo.CurrentCulture) },
|
||||
{ "Name", principal.Name },
|
||||
{ "ParternCenterCorrelationId", correlationId.ToString() }
|
||||
};
|
||||
|
@ -164,7 +165,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Logic
|
|||
|
||||
principal = new CustomerPrincipal(ClaimsPrincipal.Current);
|
||||
|
||||
if (!principal.CustomerId.Equals(provider.Configuration.PartnerCenterApplicationTenantId))
|
||||
if (!principal.CustomerId.Equals(provider.Configuration.PartnerCenterAccountId, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
throw new UnauthorizedAccessException("You are not authorized to perform this operation.");
|
||||
}
|
||||
|
@ -225,9 +226,9 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Logic
|
|||
|
||||
principal = new CustomerPrincipal(ClaimsPrincipal.Current);
|
||||
|
||||
if (principal.CustomerId.Equals(provider.Configuration.PartnerCenterApplicationTenantId))
|
||||
if (principal.CustomerId.Equals(provider.Configuration.PartnerCenterAccountId, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
newEntity = await operations.Customers.ById(customerId).Orders.CreateAsync(newOrder);
|
||||
newEntity = await operations.Customers.ById(customerId).Orders.CreateAsync(newOrder).ConfigureAwait(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -297,7 +298,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Logic
|
|||
|
||||
principal = new CustomerPrincipal(ClaimsPrincipal.Current);
|
||||
|
||||
if (principal.CustomerId.Equals(provider.Configuration.PartnerCenterApplicationTenantId))
|
||||
if (principal.CustomerId.Equals(provider.Configuration.PartnerCenterAccountId, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
user = await operations.Customers.ById(customerId).Users.CreateAsync(newEntity).ConfigureAwait(false);
|
||||
}
|
||||
|
@ -359,7 +360,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Logic
|
|||
|
||||
principal = new CustomerPrincipal(ClaimsPrincipal.Current);
|
||||
|
||||
if (!principal.CustomerId.Equals(provider.Configuration.PartnerCenterApplicationTenantId))
|
||||
if (!principal.CustomerId.Equals(provider.Configuration.PartnerCenterAccountId, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
throw new UnauthorizedAccessException("You are not authorized to perform this operation.");
|
||||
}
|
||||
|
@ -423,7 +424,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Logic
|
|||
|
||||
principal = new CustomerPrincipal(ClaimsPrincipal.Current);
|
||||
|
||||
if (!principal.CustomerId.Equals(provider.Configuration.PartnerCenterApplicationTenantId))
|
||||
if (!principal.CustomerId.Equals(provider.Configuration.PartnerCenterAccountId, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
throw new UnauthorizedAccessException("You are not authorized to perform this operation.");
|
||||
}
|
||||
|
@ -533,7 +534,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Logic
|
|||
|
||||
principal = new CustomerPrincipal(ClaimsPrincipal.Current);
|
||||
|
||||
if (principal.CustomerId.Equals(provider.Configuration.PartnerCenterApplicationTenantId))
|
||||
if (principal.CustomerId.Equals(provider.Configuration.PartnerCenterAccountId, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
customer = await operations.Customers.ById(customerId).GetAsync().ConfigureAwait(false);
|
||||
}
|
||||
|
@ -594,7 +595,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Logic
|
|||
|
||||
customers = new List<Customer>();
|
||||
|
||||
if (principal.CustomerId.Equals(provider.Configuration.PartnerCenterApplicationTenantId))
|
||||
if (principal.CustomerId.Equals(provider.Configuration.PartnerCenterAccountId, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
seekCustomers = await operations.Customers.GetAsync().ConfigureAwait(false);
|
||||
customersEnumerator = operations.Enumerators.Customers.Create(seekCustomers);
|
||||
|
@ -667,8 +668,8 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Logic
|
|||
|
||||
principal = new CustomerPrincipal(ClaimsPrincipal.Current);
|
||||
|
||||
if (principal.CustomerId.Equals(provider.Configuration.PartnerCenterApplicationTenantId) ||
|
||||
principal.CustomerId.Equals(customerId))
|
||||
if (principal.CustomerId.Equals(provider.Configuration.PartnerCenterAccountId, StringComparison.InvariantCultureIgnoreCase) ||
|
||||
principal.CustomerId.Equals(customerId, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
skus = await operations.Customers.ById(customerId).SubscribedSkus.GetAsync().ConfigureAwait(false);
|
||||
}
|
||||
|
@ -731,7 +732,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Logic
|
|||
|
||||
principal = new CustomerPrincipal(ClaimsPrincipal.Current);
|
||||
|
||||
if (!principal.CustomerId.Equals(provider.Configuration.PartnerCenterApplicationTenantId))
|
||||
if (!principal.CustomerId.Equals(provider.Configuration.PartnerCenterAccountId, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
throw new UnauthorizedAccessException("You are not authorized to perform this operation.");
|
||||
}
|
||||
|
@ -793,7 +794,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Logic
|
|||
|
||||
principal = new CustomerPrincipal(ClaimsPrincipal.Current);
|
||||
|
||||
if (!principal.CustomerId.Equals(provider.Configuration.PartnerCenterApplicationTenantId))
|
||||
if (!principal.CustomerId.Equals(provider.Configuration.PartnerCenterAccountId, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
throw new UnauthorizedAccessException("You are not authorized to perform this operation.");
|
||||
}
|
||||
|
@ -849,7 +850,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Logic
|
|||
|
||||
principal = new CustomerPrincipal(ClaimsPrincipal.Current);
|
||||
|
||||
if (!principal.CustomerId.Equals(provider.Configuration.PartnerCenterApplicationTenantId))
|
||||
if (!principal.CustomerId.Equals(provider.Configuration.PartnerCenterAccountId, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
throw new UnauthorizedAccessException("You are not authorized to perform this operation.");
|
||||
}
|
||||
|
@ -909,7 +910,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Logic
|
|||
|
||||
if (offers == null)
|
||||
{
|
||||
offers = await operations.Offers.ByCountry("US").GetAsync();
|
||||
offers = await operations.Offers.ByCountry("US").GetAsync().ConfigureAwait(false);
|
||||
await provider.Cache.StoreAsync(CacheDatabaseType.DataStructures, OffersKey, offers, TimeSpan.FromDays(1)).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
|
@ -962,7 +963,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Logic
|
|||
|
||||
principal = new CustomerPrincipal(ClaimsPrincipal.Current);
|
||||
|
||||
if (principal.CustomerId.Equals(provider.Configuration.PartnerCenterApplicationTenantId))
|
||||
if (principal.CustomerId.Equals(provider.Configuration.PartnerCenterAccountId, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
requests = await operations.ServiceRequests.GetAsync().ConfigureAwait(false);
|
||||
}
|
||||
|
@ -1029,7 +1030,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Logic
|
|||
|
||||
principal = new CustomerPrincipal(ClaimsPrincipal.Current);
|
||||
|
||||
if (principal.CustomerId.Equals(provider.Configuration.PartnerCenterApplicationTenantId))
|
||||
if (principal.CustomerId.Equals(provider.Configuration.PartnerCenterAccountId, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
subscription = await operations.Customers.ById(customerId).Subscriptions.ById(subscriptionId).GetAsync().ConfigureAwait(false);
|
||||
}
|
||||
|
@ -1091,7 +1092,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Logic
|
|||
|
||||
principal = new CustomerPrincipal(ClaimsPrincipal.Current);
|
||||
|
||||
if (principal.CustomerId.Equals(provider.Configuration.PartnerCenterApplicationTenantId))
|
||||
if (principal.CustomerId.Equals(provider.Configuration.PartnerCenterAccountId, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
subscriptions = await operations.Customers.ById(customerId).Subscriptions.GetAsync().ConfigureAwait(false);
|
||||
}
|
||||
|
@ -1159,7 +1160,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Logic
|
|||
|
||||
usageRecords = new List<AzureUtilizationRecord>();
|
||||
|
||||
if (principal.CustomerId.Equals(provider.Configuration.PartnerCenterApplicationTenantId))
|
||||
if (principal.CustomerId.Equals(provider.Configuration.PartnerCenterAccountId, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
records = await operations.Customers.ById(customerId).Subscriptions.ById(subscriptionId)
|
||||
.Utilization.Azure.QueryAsync(startTime, endTime).ConfigureAwait(false);
|
||||
|
@ -1244,8 +1245,8 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Logic
|
|||
|
||||
principal = new CustomerPrincipal(ClaimsPrincipal.Current);
|
||||
|
||||
if (principal.CustomerId.Equals(provider.Configuration.PartnerCenterApplicationTenantId) ||
|
||||
principal.CustomerId.Equals(customerId))
|
||||
if (principal.CustomerId.Equals(provider.Configuration.PartnerCenterAccountId, StringComparison.InvariantCultureIgnoreCase) ||
|
||||
principal.CustomerId.Equals(customerId, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
user = await operations.Customers.ById(customerId).Users.ById(userId).GetAsync().ConfigureAwait(false);
|
||||
}
|
||||
|
@ -1312,8 +1313,8 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Logic
|
|||
|
||||
principal = new CustomerPrincipal(ClaimsPrincipal.Current);
|
||||
|
||||
if (principal.CustomerId.Equals(provider.Configuration.PartnerCenterApplicationTenantId) ||
|
||||
principal.CustomerId.Equals(customerId))
|
||||
if (principal.CustomerId.Equals(provider.Configuration.PartnerCenterAccountId, StringComparison.InvariantCultureIgnoreCase) ||
|
||||
principal.CustomerId.Equals(customerId, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
licenses = await operations.Customers.ById(customerId).Users.ById(userId).Licenses.GetAsync().ConfigureAwait(false);
|
||||
}
|
||||
|
@ -1381,7 +1382,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Logic
|
|||
|
||||
principal = new CustomerPrincipal(ClaimsPrincipal.Current);
|
||||
|
||||
if (principal.CustomerId.Equals(provider.Configuration.PartnerCenterApplicationTenantId))
|
||||
if (principal.CustomerId.Equals(provider.Configuration.PartnerCenterAccountId, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
updatedSubscription = await operations.Customers.ById(customerId).Subscriptions
|
||||
.ById(subscription.Id).PatchAsync(subscription).ConfigureAwait(false);
|
||||
|
@ -1446,8 +1447,8 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Logic
|
|||
|
||||
principal = new CustomerPrincipal(ClaimsPrincipal.Current);
|
||||
|
||||
if (principal.CustomerId.Equals(provider.Configuration.PartnerCenterApplicationTenantId) ||
|
||||
principal.CustomerId.Equals(customerId))
|
||||
if (principal.CustomerId.Equals(provider.Configuration.PartnerCenterAccountId, StringComparison.InvariantCultureIgnoreCase) ||
|
||||
principal.CustomerId.Equals(customerId, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
user = await operations.Customers.ById(customerId).Users.ById(userId).PatchAsync(entity).ConfigureAwait(false);
|
||||
}
|
||||
|
@ -1517,8 +1518,8 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Logic
|
|||
|
||||
principal = new CustomerPrincipal(ClaimsPrincipal.Current);
|
||||
|
||||
if (principal.CustomerId.Equals(provider.Configuration.PartnerCenterApplicationTenantId) ||
|
||||
principal.CustomerId.Equals(customerId))
|
||||
if (principal.CustomerId.Equals(provider.Configuration.PartnerCenterAccountId, StringComparison.InvariantCultureIgnoreCase) ||
|
||||
principal.CustomerId.Equals(customerId, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
await operations.Customers.ById(customerId).Users.ById(userId).LicenseUpdates.CreateAsync(entity).ConfigureAwait(false);
|
||||
}
|
||||
|
@ -1600,7 +1601,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Logic
|
|||
credentials = await PartnerCredentials.Instance.GenerateByApplicationCredentialsAsync(
|
||||
provider.Configuration.PartnerCenterApplicationId,
|
||||
provider.Configuration.PartnerCenterApplicationSecret.ToUnsecureString(),
|
||||
provider.Configuration.PartnerCenterApplicationTenantId).ConfigureAwait(false);
|
||||
provider.Configuration.PartnerCenterAccountId).ConfigureAwait(false);
|
||||
|
||||
await provider.Cache.StoreAsync(CacheDatabaseType.Authentication, PartnerCenterCacheKey, credentials).ConfigureAwait(false);
|
||||
|
||||
|
@ -1615,7 +1616,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Logic
|
|||
private async Task<IPartner> GetUserOperationsAsync(Guid correlationId)
|
||||
{
|
||||
AuthenticationResult token = await provider.AccessToken.GetAccessTokenAsync(
|
||||
$"{provider.Configuration.ActiveDirectoryEndpoint}/{provider.Configuration.PartnerCenterApplicationTenantId}",
|
||||
$"{provider.Configuration.ActiveDirectoryEndpoint}/{provider.Configuration.PartnerCenterAccountId}",
|
||||
provider.Configuration.PartnerCenterEndpoint,
|
||||
new Models.ApplicationCredential
|
||||
{
|
||||
|
|
|
@ -15,8 +15,16 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Models
|
|||
public class ConfigurationRecordsModel
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets or sets the service configuration records.
|
||||
/// Initializes a new instance of the <see cref="ConfigurationRecordsModel" /> class.
|
||||
/// </summary>
|
||||
public List<DomainDnsRecord> ServiceConfigurationRecords { get; set; }
|
||||
public ConfigurationRecordsModel()
|
||||
{
|
||||
ServiceConfigurationRecords = new List<DomainDnsRecord>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the service configuration records.
|
||||
/// </summary>
|
||||
public List<DomainDnsRecord> ServiceConfigurationRecords { get; }
|
||||
}
|
||||
}
|
|
@ -14,9 +14,27 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Models
|
|||
public class CustomersModel
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets or sets a collection of customer that belong to the configured partner.
|
||||
/// Initializes a new instance of the <see cref="CustomerModel" /> class.
|
||||
/// </summary>
|
||||
public List<CustomerModel> Customers { get; set; }
|
||||
public CustomersModel()
|
||||
{
|
||||
Customers = new List<CustomerModel>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="CustomerModel" /> class.
|
||||
/// </summary>
|
||||
/// <param name="items">Items to be added to the customers collection.</param>
|
||||
public CustomersModel(IList<CustomerModel> items)
|
||||
{
|
||||
Customers = new List<CustomerModel>(items);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Gets a collection of customer that belong to the configured partner.
|
||||
/// </summary>
|
||||
public List<CustomerModel> Customers { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating whether or not the configured tenant is the integration sandbox.
|
||||
|
|
|
@ -14,6 +14,14 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Models
|
|||
/// </summary>
|
||||
public class EditUserModel
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="EditUserModel" /> class.
|
||||
/// </summary>
|
||||
public EditUserModel()
|
||||
{
|
||||
Licenses = new List<LicenseModel>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the customer identifier.
|
||||
/// </summary>
|
||||
|
@ -43,7 +51,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Models
|
|||
/// <summary>
|
||||
/// Gets or sets licenses for the user.
|
||||
/// </summary>
|
||||
public List<LicenseModel> Licenses { get; set; }
|
||||
public List<LicenseModel> Licenses { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the password.
|
||||
|
|
|
@ -14,10 +14,19 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Models
|
|||
/// </summary>
|
||||
public class InvoiceDetailsModel
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="InvoiceDetailsModel" /> class.
|
||||
/// </summary>
|
||||
public InvoiceDetailsModel()
|
||||
{
|
||||
Customers = new List<string>();
|
||||
InvoiceLineItems = new List<InvoiceLineItem>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the customers.
|
||||
/// </summary>
|
||||
public List<string> Customers { get; set; }
|
||||
public List<string> Customers { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the invoice identifier.
|
||||
|
@ -27,6 +36,6 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Models
|
|||
/// <summary>
|
||||
/// Gets or sets the invoice line items.
|
||||
/// </summary>
|
||||
public List<InvoiceLineItem> InvoiceLineItems { get; set; }
|
||||
public List<InvoiceLineItem> InvoiceLineItems { get; }
|
||||
}
|
||||
}
|
|
@ -14,9 +14,17 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Models
|
|||
/// </summary>
|
||||
public class InvoicesModel
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="InvoicesModel" /> class.
|
||||
/// </summary>
|
||||
public InvoicesModel()
|
||||
{
|
||||
Invoices = new List<Invoice>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the invoices.
|
||||
/// </summary>
|
||||
public List<Invoice> Invoices { get; set; }
|
||||
public List<Invoice> Invoices { get; }
|
||||
}
|
||||
}
|
|
@ -6,6 +6,7 @@
|
|||
|
||||
namespace Microsoft.Store.PartnerCenter.Explorer.Models
|
||||
{
|
||||
using System;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
/// <summary>
|
||||
|
@ -23,7 +24,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Models
|
|||
/// </summary>
|
||||
[Display(Name = "Parameters Link")]
|
||||
[Required]
|
||||
public string ParametersUri { get; set; }
|
||||
public Uri ParametersUri { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the name of the resource group.
|
||||
|
@ -40,6 +41,6 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Models
|
|||
/// </summary>
|
||||
[Display(Name = "Template Link")]
|
||||
[Required]
|
||||
public string TemplateUri { get; set; }
|
||||
public Uri TemplateUri { get; set; }
|
||||
}
|
||||
}
|
|
@ -14,10 +14,19 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Models
|
|||
/// </summary>
|
||||
public class NewSubscriptionModel
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="NewSubscriptionModel" /> class.
|
||||
/// </summary>
|
||||
public NewSubscriptionModel()
|
||||
{
|
||||
AvailableOffers = new List<OfferModel>();
|
||||
LineItems = new List<OrderLineItem>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the collection available offers.
|
||||
/// </summary>
|
||||
public List<OfferModel> AvailableOffers { get; set; }
|
||||
public List<OfferModel> AvailableOffers { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the customer identifier.
|
||||
|
@ -27,6 +36,6 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Models
|
|||
/// <summary>
|
||||
/// Gets or sets the order line items.
|
||||
/// </summary>
|
||||
public List<OrderLineItem> LineItems { get; set; }
|
||||
public List<OrderLineItem> LineItems { get; }
|
||||
}
|
||||
}
|
|
@ -14,9 +14,17 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Models
|
|||
public class OffersModel
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets or sets the available offers from Partner Center.
|
||||
/// Initializes a new instance of the <see cref="OffersModel" /> class.
|
||||
/// </summary>
|
||||
public List<OfferModel> AvailableOffers { get; set; }
|
||||
public OffersModel()
|
||||
{
|
||||
AvailableOffers = new List<OfferModel>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the available offers from Partner Center.
|
||||
/// </summary>
|
||||
public List<OfferModel> AvailableOffers { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the customer identifier.
|
||||
|
|
|
@ -14,8 +14,16 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Models
|
|||
public class ServiceRequestsModel
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets or sets the service requests.
|
||||
/// Initializes a new instance of the <see cref="ServiceRequestsModel" /> class.
|
||||
/// </summary>
|
||||
public List<ServiceRequestModel> ServiceRequests { get; set; }
|
||||
public ServiceRequestsModel()
|
||||
{
|
||||
ServiceRequests = new List<ServiceRequestModel>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the service requests.
|
||||
/// </summary>
|
||||
public List<ServiceRequestModel> ServiceRequests { get; }
|
||||
}
|
||||
}
|
|
@ -14,6 +14,14 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Models
|
|||
/// </summary>
|
||||
public class SubscriptionHealthModel
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="SubscriptionHealthModel" /> class.
|
||||
/// </summary>
|
||||
public SubscriptionHealthModel()
|
||||
{
|
||||
HealthEvents = new List<IHealthEvent>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the name of the company.
|
||||
/// </summary>
|
||||
|
@ -32,7 +40,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Models
|
|||
/// <summary>
|
||||
/// Gets or sets the health events.
|
||||
/// </summary>
|
||||
public List<IHealthEvent> HealthEvents { get; set; }
|
||||
public List<IHealthEvent> HealthEvents { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the subscription identifier.
|
||||
|
|
|
@ -14,8 +14,16 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Models
|
|||
public class SubscriptionsModel
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets or sets the list of subscriptions owned by the customer.
|
||||
/// Initializes a new instance of the <see cref="SubscriptionsModel" /> class.
|
||||
/// </summary>
|
||||
public List<SubscriptionModel> Subscriptions { get; set; }
|
||||
public SubscriptionsModel()
|
||||
{
|
||||
Subscriptions = new List<SubscriptionModel>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the list of subscriptions owned by the customer.
|
||||
/// </summary>
|
||||
public List<SubscriptionModel> Subscriptions { get; }
|
||||
}
|
||||
}
|
|
@ -14,6 +14,14 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Models
|
|||
/// </summary>
|
||||
public class UsageModel
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="UsageModel" /> class.
|
||||
/// </summary>
|
||||
public UsageModel()
|
||||
{
|
||||
Usage = new List<AzureUtilizationRecord>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the name of the company.
|
||||
/// </summary>
|
||||
|
@ -35,8 +43,8 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Models
|
|||
public string SubscriptionFriendlyName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the utilization records for the subscription.
|
||||
/// Gets the utilization records for the subscription.
|
||||
/// </summary>
|
||||
public List<AzureUtilizationRecord> Usage { get; set; }
|
||||
public List<AzureUtilizationRecord> Usage { get; }
|
||||
}
|
||||
}
|
|
@ -13,14 +13,22 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Models
|
|||
/// </summary>
|
||||
public class UsersModel
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="UsersModel" /> class.
|
||||
/// </summary>
|
||||
public UsersModel()
|
||||
{
|
||||
Users = new List<UserModel>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the customer identifier.
|
||||
/// </summary>
|
||||
public string CustomerId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a collection of users that belong to a specific customer.
|
||||
/// Gets a collection of users that belong to a specific customer.
|
||||
/// </summary>
|
||||
public List<UserModel> Users { get; set; }
|
||||
public List<UserModel> Users { get; }
|
||||
}
|
||||
}
|
|
@ -6,7 +6,6 @@
|
|||
|
||||
namespace Microsoft.Store.PartnerCenter.Explorer.Providers
|
||||
{
|
||||
using System;
|
||||
using System.Configuration;
|
||||
using System.Security;
|
||||
using System.Threading.Tasks;
|
||||
|
@ -76,16 +75,16 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Providers
|
|||
/// </summary>
|
||||
public string KeyVaultEndpoint { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether or not the reseller tenant is the TIP tenant.
|
||||
/// </summary>
|
||||
public bool IsIntegrationSandbox => Convert.ToBoolean(ConfigurationManager.AppSettings["IsIntegrationSandbox"]);
|
||||
|
||||
/// <summary>
|
||||
/// Gets the Office 365 Management endpoint address.
|
||||
/// </summary>
|
||||
public string OfficeManagementEndpoint { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the Partner Center application tenant identifier.
|
||||
/// </summary>
|
||||
public string PartnerCenterAccountId { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the Partner Center application identifier.
|
||||
/// </summary>
|
||||
|
@ -96,11 +95,6 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Providers
|
|||
/// </summary>
|
||||
public SecureString PartnerCenterApplicationSecret { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the Partner Center application tenant identifier.
|
||||
/// </summary>
|
||||
public string PartnerCenterApplicationTenantId { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the Partner Center endpoint address.
|
||||
/// </summary>
|
||||
|
@ -117,7 +111,6 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Providers
|
|||
/// <returns>An instance of the <see cref="Task"/> class that represents the asynchronous operation.</returns>
|
||||
public async Task InitializeAsync()
|
||||
{
|
||||
|
||||
ActiveDirectoryEndpoint = ConfigurationManager.AppSettings["ActiveDirectoryEndpoint"];
|
||||
ApplicationId = ConfigurationManager.AppSettings["ApplicationId"];
|
||||
ApplicationTenantId = ConfigurationManager.AppSettings["ApplicationTenantId"];
|
||||
|
@ -126,8 +119,8 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Providers
|
|||
InstrumentationKey = ConfigurationManager.AppSettings["InstrumentationKey"];
|
||||
KeyVaultEndpoint = ConfigurationManager.AppSettings["KeyVaultEndpoint"];
|
||||
OfficeManagementEndpoint = ConfigurationManager.AppSettings["OfficeManagementEndpoint"];
|
||||
PartnerCenterAccountId = ConfigurationManager.AppSettings["PartnerCenterAccountId"];
|
||||
PartnerCenterApplicationId = ConfigurationManager.AppSettings["PartnerCenterApplicationId"];
|
||||
PartnerCenterApplicationTenantId = ConfigurationManager.AppSettings["PartnerCenterApplicationTenantId"];
|
||||
PartnerCenterEndpoint = ConfigurationManager.AppSettings["PartnerCenterEndpoint"];
|
||||
|
||||
ApplicationSecret = await service.Vault.GetAsync("ApplicationSecret").ConfigureAwait(false);
|
||||
|
|
|
@ -49,11 +49,6 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Providers
|
|||
/// </summary>
|
||||
string InstrumentationKey { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether or not the reseller tenant is the TIP tenant.
|
||||
/// </summary>
|
||||
bool IsIntegrationSandbox { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the endpoint address for the instance of Key Vault.
|
||||
/// </summary>
|
||||
|
@ -64,6 +59,11 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Providers
|
|||
/// </summary>
|
||||
string OfficeManagementEndpoint { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the Partner Center application tenant identifier.
|
||||
/// </summary>
|
||||
string PartnerCenterAccountId { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the Partner Center application identifier.
|
||||
/// </summary>
|
||||
|
@ -74,11 +74,6 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Providers
|
|||
/// </summary>
|
||||
SecureString PartnerCenterApplicationSecret { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the Partner Center application tenant identifier.
|
||||
/// </summary>
|
||||
string PartnerCenterApplicationTenantId { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the Partner Center endpoint address.
|
||||
/// </summary>
|
||||
|
|
|
@ -51,7 +51,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Providers
|
|||
/// <returns>A <see cref="Task"/> that represents the asynchronous operation.</returns>
|
||||
public async Task ClearAsync(CacheDatabaseType database)
|
||||
{
|
||||
await Task.FromResult(0);
|
||||
await Task.FromResult(0).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -65,8 +65,8 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Providers
|
|||
/// </exception>
|
||||
public async Task DeleteAsync(CacheDatabaseType database, string key = null)
|
||||
{
|
||||
IDatabase cache = await GetCacheReferenceAsync(database);
|
||||
await cache.KeyDeleteAsync(key);
|
||||
IDatabase cache = await GetCacheReferenceAsync(database).ConfigureAwait(false);
|
||||
await cache.KeyDeleteAsync(key).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -107,8 +107,8 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Providers
|
|||
{
|
||||
key.AssertNotEmpty(nameof(key));
|
||||
|
||||
IDatabase cache = await GetCacheReferenceAsync(database);
|
||||
RedisValue value = await cache.StringGetAsync(key);
|
||||
IDatabase cache = await GetCacheReferenceAsync(database).ConfigureAwait(false);
|
||||
RedisValue value = await cache.StringGetAsync(key).ConfigureAwait(false);
|
||||
|
||||
return value.HasValue ? DecompressEntity<TEntity>(value) : null;
|
||||
}
|
||||
|
@ -134,10 +134,10 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Providers
|
|||
key.AssertNotEmpty(nameof(key));
|
||||
entity.AssertNotNull(nameof(entity));
|
||||
|
||||
IDatabase cache = await GetCacheReferenceAsync(database);
|
||||
IDatabase cache = await GetCacheReferenceAsync(database).ConfigureAwait(false);
|
||||
|
||||
await cache.StringSetAsync(
|
||||
key, CompressEntity(entity), expiration);
|
||||
key, CompressEntity(entity), expiration).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -287,34 +287,10 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Providers
|
|||
if (connection == null)
|
||||
{
|
||||
connection = await ConnectionMultiplexer.ConnectAsync(
|
||||
provider.Configuration.RedisCacheConnectionString.ToUnsecureString());
|
||||
provider.Configuration.RedisCacheConnectionString.ToUnsecureString()).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
return connection.GetDatabase((int)database);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Executes an asynchronous method synchronously
|
||||
/// </summary>
|
||||
/// <typeparam name="T">The type to be returned.</typeparam>
|
||||
/// <param name="operation">The asynchronous operation to be executed.</param>
|
||||
/// <returns>The result from the operation.</returns>
|
||||
private static T SynchronousExecute<T>(Func<Task<T>> operation)
|
||||
{
|
||||
try
|
||||
{
|
||||
return Task.Run(async () => await operation?.Invoke()).Result;
|
||||
}
|
||||
catch (AggregateException ex)
|
||||
{
|
||||
if (ex.InnerException != null)
|
||||
{
|
||||
throw ex.InnerException;
|
||||
}
|
||||
|
||||
throw;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,21 +1,17 @@
|
|||
/* NUGET: BEGIN LICENSE TEXT
|
||||
*
|
||||
* Microsoft grants you the right to use these script files for the sole
|
||||
* purpose of either: (i) interacting through your browser with the Microsoft
|
||||
* website or online service, subject to the applicable licensing or use
|
||||
* terms; or (ii) using the files as included with a Microsoft product subject
|
||||
* to that product's license terms. Microsoft reserves all other rights to the
|
||||
* files not expressly granted by Microsoft, whether by implication, estoppel
|
||||
* or otherwise. Insofar as a script file is dual licensed under GPL,
|
||||
* Microsoft neither took the code under GPL nor distributes it thereunder but
|
||||
* under the terms set out in this paragraph. All notices and licenses
|
||||
* below are for informational purposes only.
|
||||
*
|
||||
* NUGET: END LICENSE TEXT */
|
||||
/*!
|
||||
** Unobtrusive Ajax support library for jQuery
|
||||
** Copyright (C) Microsoft Corporation. All rights reserved.
|
||||
*/
|
||||
// Unobtrusive Ajax support library for jQuery
|
||||
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||
// @version v3.2.5
|
||||
//
|
||||
// Microsoft grants you the right to use these script files for the sole
|
||||
// purpose of either: (i) interacting through your browser with the Microsoft
|
||||
// website or online service, subject to the applicable licensing or use
|
||||
// terms; or (ii) using the files as included with a Microsoft product subject
|
||||
// to that product's license terms. Microsoft reserves all other rights to the
|
||||
// files not expressly granted by Microsoft, whether by implication, estoppel
|
||||
// or otherwise. Insofar as a script file is dual licensed under GPL,
|
||||
// Microsoft neither took the code under GPL nor distributes it thereunder but
|
||||
// under the terms set out in this paragraph. All notices and licenses
|
||||
// below are for informational purposes only.
|
||||
|
||||
/*jslint white: true, browser: true, onevar: true, undef: true, nomen: true, eqeqeq: true, plusplus: true, bitwise: true, regexp: true, newcap: true, immed: true, strict: false */
|
||||
/*global window: false, jQuery: false */
|
||||
|
@ -56,19 +52,21 @@
|
|||
|
||||
mode = (element.getAttribute("data-ajax-mode") || "").toUpperCase();
|
||||
$(element.getAttribute("data-ajax-update")).each(function (i, update) {
|
||||
var top;
|
||||
|
||||
switch (mode) {
|
||||
case "BEFORE":
|
||||
$(update).prepend(data);
|
||||
break;
|
||||
case "AFTER":
|
||||
$(update).append(data);
|
||||
break;
|
||||
case "REPLACE-WITH":
|
||||
$(update).replaceWith(data);
|
||||
break;
|
||||
default:
|
||||
$(update).html(data);
|
||||
break;
|
||||
case "BEFORE":
|
||||
$(update).prepend(data);
|
||||
break;
|
||||
case "AFTER":
|
||||
$(update).append(data);
|
||||
break;
|
||||
case "REPLACE-WITH":
|
||||
$(update).replaceWith(data);
|
||||
break;
|
||||
default:
|
||||
$(update).html(data);
|
||||
break;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -87,7 +85,7 @@
|
|||
$.extend(options, {
|
||||
type: element.getAttribute("data-ajax-method") || undefined,
|
||||
url: element.getAttribute("data-ajax-url") || undefined,
|
||||
cache: !!element.getAttribute("data-ajax-cache"),
|
||||
cache: (element.getAttribute("data-ajax-cache") || "").toLowerCase() === "true",
|
||||
beforeSend: function (xhr) {
|
||||
var result;
|
||||
asyncOnBeforeSend(xhr, method);
|
||||
|
@ -168,7 +166,7 @@
|
|||
$(document).on("submit", "form[data-ajax=true]", function (evt) {
|
||||
var clickInfo = $(this).data(data_click) || [],
|
||||
clickTarget = $(this).data(data_target),
|
||||
isCancel = clickTarget && clickTarget.hasClass("cancel");
|
||||
isCancel = clickTarget && (clickTarget.hasClass("cancel") || clickTarget.attr('formnovalidate') !== undefined);
|
||||
evt.preventDefault();
|
||||
if (!isCancel && !validate(this)) {
|
||||
return;
|
||||
|
@ -179,4 +177,4 @@
|
|||
data: clickInfo.concat($(this).serializeArray())
|
||||
});
|
||||
});
|
||||
}(jQuery));
|
||||
}(jQuery));
|
||||
|
|
|
@ -1,33 +1,15 @@
|
|||
/* NUGET: BEGIN LICENSE TEXT
|
||||
*
|
||||
* Microsoft grants you the right to use these script files for the sole
|
||||
* purpose of either: (i) interacting through your browser with the Microsoft
|
||||
* website or online service, subject to the applicable licensing or use
|
||||
* terms; or (ii) using the files as included with a Microsoft product subject
|
||||
* to that product's license terms. Microsoft reserves all other rights to the
|
||||
* files not expressly granted by Microsoft, whether by implication, estoppel
|
||||
* or otherwise. Insofar as a script file is dual licensed under GPL,
|
||||
* Microsoft neither took the code under GPL nor distributes it thereunder but
|
||||
* under the terms set out in this paragraph. All notices and licenses
|
||||
* below are for informational purposes only.
|
||||
*
|
||||
* NUGET: END LICENSE TEXT */
|
||||
/* NUGET: BEGIN LICENSE TEXT
|
||||
*
|
||||
* Microsoft grants you the right to use these script files for the sole
|
||||
* purpose of either: (i) interacting through your browser with the Microsoft
|
||||
* website or online service, subject to the applicable licensing or use
|
||||
* terms; or (ii) using the files as included with a Microsoft product subject
|
||||
* to that product's license terms. Microsoft reserves all other rights to the
|
||||
* files not expressly granted by Microsoft, whether by implication, estoppel
|
||||
* or otherwise. Insofar as a script file is dual licensed under GPL,
|
||||
* Microsoft neither took the code under GPL nor distributes it thereunder but
|
||||
* under the terms set out in this paragraph. All notices and licenses
|
||||
* below are for informational purposes only.
|
||||
*
|
||||
* NUGET: END LICENSE TEXT */
|
||||
/*
|
||||
** Unobtrusive Ajax support library for jQuery
|
||||
** Copyright (C) Microsoft Corporation. All rights reserved.
|
||||
*/
|
||||
(function(a){var b="unobtrusiveAjaxClick",d="unobtrusiveAjaxClickTarget",h="unobtrusiveValidation";function c(d,b){var a=window,c=(d||"").split(".");while(a&&c.length)a=a[c.shift()];if(typeof a==="function")return a;b.push(d);return Function.constructor.apply(null,b)}function e(a){return a==="GET"||a==="POST"}function g(b,a){!e(a)&&b.setRequestHeader("X-HTTP-Method-Override",a)}function i(c,b,e){var d;if(e.indexOf("application/x-javascript")!==-1)return;d=(c.getAttribute("data-ajax-mode")||"").toUpperCase();a(c.getAttribute("data-ajax-update")).each(function(e,c){switch(d){case"BEFORE":a(c).prepend(b);break;case"AFTER":a(c).append(b);break;case"REPLACE-WITH":a(c).replaceWith(b);break;default:a(c).html(b)}})}function f(b,d){var j,k,f,h;j=b.getAttribute("data-ajax-confirm");if(j&&!window.confirm(j))return;k=a(b.getAttribute("data-ajax-loading"));h=parseInt(b.getAttribute("data-ajax-loading-duration"),10)||0;a.extend(d,{type:b.getAttribute("data-ajax-method")||undefined,url:b.getAttribute("data-ajax-url")||undefined,cache:!!b.getAttribute("data-ajax-cache"),beforeSend:function(d){var a;g(d,f);a=c(b.getAttribute("data-ajax-begin"),["xhr"]).apply(b,arguments);a!==false&&k.show(h);return a},complete:function(){k.hide(h);c(b.getAttribute("data-ajax-complete"),["xhr","status"]).apply(b,arguments)},success:function(a,e,d){i(b,a,d.getResponseHeader("Content-Type")||"text/html");c(b.getAttribute("data-ajax-success"),["data","status","xhr"]).apply(b,arguments)},error:function(){c(b.getAttribute("data-ajax-failure"),["xhr","status","error"]).apply(b,arguments)}});d.data.push({name:"X-Requested-With",value:"XMLHttpRequest"});f=d.type.toUpperCase();if(!e(f)){d.type="POST";d.data.push({name:"X-HTTP-Method-Override",value:f})}a.ajax(d)}function j(c){var b=a(c).data(h);return!b||!b.validate||b.validate()}a(document).on("click","a[data-ajax=true]",function(a){a.preventDefault();f(this,{url:this.href,type:"GET",data:[]})});a(document).on("click","form[data-ajax=true] input[type=image]",function(c){var g=c.target.name,e=a(c.target),f=a(e.parents("form")[0]),d=e.offset();f.data(b,[{name:g+".x",value:Math.round(c.pageX-d.left)},{name:g+".y",value:Math.round(c.pageY-d.top)}]);setTimeout(function(){f.removeData(b)},0)});a(document).on("click","form[data-ajax=true] :submit",function(e){var g=e.currentTarget.name,f=a(e.target),c=a(f.parents("form")[0]);c.data(b,g?[{name:g,value:e.currentTarget.value}]:[]);c.data(d,f);setTimeout(function(){c.removeData(b);c.removeData(d)},0)});a(document).on("submit","form[data-ajax=true]",function(h){var e=a(this).data(b)||[],c=a(this).data(d),g=c&&c.hasClass("cancel");h.preventDefault();if(!g&&!j(this))return;f(this,{url:this.action,type:this.method||"GET",data:e.concat(a(this).serializeArray())})})})(jQuery);
|
||||
// Unobtrusive Ajax support library for jQuery
|
||||
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||
// @version v3.2.5
|
||||
//
|
||||
// Microsoft grants you the right to use these script files for the sole
|
||||
// purpose of either: (i) interacting through your browser with the Microsoft
|
||||
// website or online service, subject to the applicable licensing or use
|
||||
// terms; or (ii) using the files as included with a Microsoft product subject
|
||||
// to that product's license terms. Microsoft reserves all other rights to the
|
||||
// files not expressly granted by Microsoft, whether by implication, estoppel
|
||||
// or otherwise. Insofar as a script file is dual licensed under GPL,
|
||||
// Microsoft neither took the code under GPL nor distributes it thereunder but
|
||||
// under the terms set out in this paragraph. All notices and licenses
|
||||
// below are for informational purposes only.
|
||||
!function(t){function a(t,a){for(var e=window,r=(t||"").split(".");e&&r.length;)e=e[r.shift()];return"function"==typeof e?e:(a.push(t),Function.constructor.apply(null,a))}function e(t){return"GET"===t||"POST"===t}function r(t,a){e(a)||t.setRequestHeader("X-HTTP-Method-Override",a)}function n(a,e,r){var n;r.indexOf("application/x-javascript")===-1&&(n=(a.getAttribute("data-ajax-mode")||"").toUpperCase(),t(a.getAttribute("data-ajax-update")).each(function(a,r){switch(n){case"BEFORE":t(r).prepend(e);break;case"AFTER":t(r).append(e);break;case"REPLACE-WITH":t(r).replaceWith(e);break;default:t(r).html(e)}}))}function u(u,i){var o,d,c,s;o=u.getAttribute("data-ajax-confirm"),o&&!window.confirm(o)||(d=t(u.getAttribute("data-ajax-loading")),s=parseInt(u.getAttribute("data-ajax-loading-duration"),10)||0,t.extend(i,{type:u.getAttribute("data-ajax-method")||void 0,url:u.getAttribute("data-ajax-url")||void 0,cache:"true"===(u.getAttribute("data-ajax-cache")||"").toLowerCase(),beforeSend:function(t){var e;return r(t,c),e=a(u.getAttribute("data-ajax-begin"),["xhr"]).apply(u,arguments),e!==!1&&d.show(s),e},complete:function(){d.hide(s),a(u.getAttribute("data-ajax-complete"),["xhr","status"]).apply(u,arguments)},success:function(t,e,r){n(u,t,r.getResponseHeader("Content-Type")||"text/html"),a(u.getAttribute("data-ajax-success"),["data","status","xhr"]).apply(u,arguments)},error:function(){a(u.getAttribute("data-ajax-failure"),["xhr","status","error"]).apply(u,arguments)}}),i.data.push({name:"X-Requested-With",value:"XMLHttpRequest"}),c=i.type.toUpperCase(),e(c)||(i.type="POST",i.data.push({name:"X-HTTP-Method-Override",value:c})),t.ajax(i))}function i(a){var e=t(a).data(c);return!e||!e.validate||e.validate()}var o="unobtrusiveAjaxClick",d="unobtrusiveAjaxClickTarget",c="unobtrusiveValidation";t(document).on("click","a[data-ajax=true]",function(t){t.preventDefault(),u(this,{url:this.href,type:"GET",data:[]})}),t(document).on("click","form[data-ajax=true] input[type=image]",function(a){var e=a.target.name,r=t(a.target),n=t(r.parents("form")[0]),u=r.offset();n.data(o,[{name:e+".x",value:Math.round(a.pageX-u.left)},{name:e+".y",value:Math.round(a.pageY-u.top)}]),setTimeout(function(){n.removeData(o)},0)}),t(document).on("click","form[data-ajax=true] :submit",function(a){var e=a.currentTarget.name,r=t(a.target),n=t(r.parents("form")[0]);n.data(o,e?[{name:e,value:a.currentTarget.value}]:[]),n.data(d,r),setTimeout(function(){n.removeData(o),n.removeData(d)},0)}),t(document).on("submit","form[data-ajax=true]",function(a){var e=t(this).data(o)||[],r=t(this).data(d),n=r&&(r.hasClass("cancel")||void 0!==r.attr("formnovalidate"));a.preventDefault(),(n||i(this))&&u(this,{url:this.action,type:this.method||"GET",data:e.concat(t(this).serializeArray())})})}(jQuery);
|
|
@ -1,26 +1,22 @@
|
|||
/* NUGET: BEGIN LICENSE TEXT
|
||||
*
|
||||
* Microsoft grants you the right to use these script files for the sole
|
||||
* purpose of either: (i) interacting through your browser with the Microsoft
|
||||
* website or online service, subject to the applicable licensing or use
|
||||
* terms; or (ii) using the files as included with a Microsoft product subject
|
||||
* to that product's license terms. Microsoft reserves all other rights to the
|
||||
* files not expressly granted by Microsoft, whether by implication, estoppel
|
||||
* or otherwise. Insofar as a script file is dual licensed under GPL,
|
||||
* Microsoft neither took the code under GPL nor distributes it thereunder but
|
||||
* under the terms set out in this paragraph. All notices and licenses
|
||||
* below are for informational purposes only.
|
||||
*
|
||||
* NUGET: END LICENSE TEXT */
|
||||
/*!
|
||||
** Unobtrusive validation support library for jQuery and jQuery Validate
|
||||
** Copyright (C) Microsoft Corporation. All rights reserved.
|
||||
*/
|
||||
// Unobtrusive validation support library for jQuery and jQuery Validate
|
||||
// Copyright (C) Microsoft Corporation. All rights reserved.
|
||||
// @version v3.2.10
|
||||
|
||||
/*jslint white: true, browser: true, onevar: true, undef: true, nomen: true, eqeqeq: true, plusplus: true, bitwise: true, regexp: true, newcap: true, immed: true, strict: false */
|
||||
/*global document: false, jQuery: false */
|
||||
|
||||
(function ($) {
|
||||
(function (factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
// AMD. Register as an anonymous module.
|
||||
define("jquery.validate.unobtrusive", ['jquery-validation'], factory);
|
||||
} else if (typeof module === 'object' && module.exports) {
|
||||
// CommonJS-like environments that support module.exports
|
||||
module.exports = factory(require('jquery-validation'));
|
||||
} else {
|
||||
// Browser global
|
||||
jQuery.validator.unobtrusive = factory(jQuery);
|
||||
}
|
||||
}(function ($) {
|
||||
var $jQval = $.validator,
|
||||
adapters,
|
||||
data_validation = "unobtrusiveValidation";
|
||||
|
@ -84,11 +80,12 @@
|
|||
}
|
||||
|
||||
function onSuccess(error) { // 'this' is the form element
|
||||
var container = error.data("unobtrusiveContainer"),
|
||||
replaceAttrValue = container.attr("data-valmsg-replace"),
|
||||
replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) : null;
|
||||
var container = error.data("unobtrusiveContainer");
|
||||
|
||||
if (container) {
|
||||
var replaceAttrValue = container.attr("data-valmsg-replace"),
|
||||
replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) : null;
|
||||
|
||||
container.addClass("field-validation-valid").removeClass("field-validation-error");
|
||||
error.removeData("unobtrusiveContainer");
|
||||
|
||||
|
@ -131,7 +128,7 @@
|
|||
execInContext = function (name, args) {
|
||||
var func = defaultOptions[name];
|
||||
func && $.isFunction(func) && func.apply(form, args);
|
||||
}
|
||||
};
|
||||
|
||||
if (!result) {
|
||||
result = {
|
||||
|
@ -422,8 +419,13 @@
|
|||
setValidationValues(options, "regex", options.params.regex);
|
||||
}
|
||||
});
|
||||
adapters.add("fileextensions", ["extensions"], function (options) {
|
||||
setValidationValues(options, "extension", options.params.extensions);
|
||||
});
|
||||
|
||||
$(function () {
|
||||
$jQval.unobtrusive.parse(document);
|
||||
});
|
||||
}(jQuery));
|
||||
|
||||
return $jQval.unobtrusive;
|
||||
}));
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -1,11 +1,13 @@
|
|||
// -----------------------------------------------------------------------
|
||||
// <copyright file="AuthenticationFilter.cs" company="Microsoft">
|
||||
// <copyright file="AuthenticationFilterAttribute.cs" company="Microsoft">
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// </copyright>
|
||||
// -----------------------------------------------------------------------
|
||||
|
||||
namespace Microsoft.Store.PartnerCenter.Explorer.Security
|
||||
{
|
||||
using System;
|
||||
using System.Security.Claims;
|
||||
using System.Web;
|
||||
using System.Web.Mvc;
|
||||
using System.Web.Mvc.Filters;
|
||||
|
@ -13,7 +15,8 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Security
|
|||
/// <summary>
|
||||
/// Augments MVC authentication by replacing the principal with a more usable customer portal principal object.
|
||||
/// </summary>
|
||||
public class AuthenticationFilter : ActionFilterAttribute, IAuthenticationFilter
|
||||
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)]
|
||||
public sealed class AuthenticationFilterAttribute : ActionFilterAttribute, IAuthenticationFilter
|
||||
{
|
||||
/// <summary>
|
||||
/// Injects a more friendly claims principal of type <see cref="CustomerPrincipal"/>.
|
||||
|
@ -21,7 +24,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Security
|
|||
/// <param name="filterContext">The context to use for authentication.</param>
|
||||
public void OnAuthentication(AuthenticationContext filterContext)
|
||||
{
|
||||
filterContext.Principal = new CustomerPrincipal(HttpContext.Current.User as System.Security.Claims.ClaimsPrincipal);
|
||||
filterContext.Principal = new CustomerPrincipal(HttpContext.Current.User as ClaimsPrincipal);
|
||||
}
|
||||
|
||||
/// <summary>
|
|
@ -17,12 +17,12 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Security
|
|||
/// Authorization filter attribute used to verify authenticated user has the specified claim and value.
|
||||
/// </summary>
|
||||
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
|
||||
public class AuthorizationFilterAttribute : AuthorizeAttribute
|
||||
public sealed class AuthorizationFilterAttribute : AuthorizeAttribute
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets or sets the required roles.
|
||||
/// </summary>
|
||||
public new UserRole Roles { get; set; }
|
||||
public new UserRoles Roles { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Verifies the authenticated user has the appropriate privileges.
|
||||
|
@ -37,7 +37,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Security
|
|||
{
|
||||
principal = httpContext.User as CustomerPrincipal;
|
||||
|
||||
foreach (string role in this.GetRoles(this.Roles))
|
||||
foreach (string role in GetRoles(Roles))
|
||||
{
|
||||
if (principal.HasClaim(System.Security.Claims.ClaimTypes.Role, role))
|
||||
{
|
||||
|
@ -65,9 +65,9 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Security
|
|||
new RouteValueDictionary(
|
||||
new
|
||||
{
|
||||
controller = "Error",
|
||||
action = "ShowError",
|
||||
errorMessage = "You do not have sufficient priviliges to view this page."
|
||||
controller = "Home",
|
||||
action = "Error",
|
||||
message = "You do not have sufficient priviliges to view this page."
|
||||
}));
|
||||
}
|
||||
else
|
||||
|
@ -81,38 +81,38 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Security
|
|||
/// </summary>
|
||||
/// <param name="requiredRole">User role required to perform the operation.</param>
|
||||
/// <returns>A list of roles that required to perform the operation.</returns>
|
||||
private List<string> GetRoles(UserRole requiredRole)
|
||||
private static List<string> GetRoles(UserRoles requiredRole)
|
||||
{
|
||||
List<string> required = new List<string>();
|
||||
|
||||
if (requiredRole.HasFlag(UserRole.AdminAgents))
|
||||
if (requiredRole.HasFlag(UserRoles.AdminAgents))
|
||||
{
|
||||
required.Add(UserRole.AdminAgents.GetDescription());
|
||||
required.Add(UserRoles.AdminAgents.GetDescription());
|
||||
}
|
||||
|
||||
if (requiredRole.HasFlag(UserRole.BillingAdmin))
|
||||
if (requiredRole.HasFlag(UserRoles.BillingAdmin))
|
||||
{
|
||||
required.Add(UserRole.BillingAdmin.GetDescription());
|
||||
required.Add(UserRoles.BillingAdmin.GetDescription());
|
||||
}
|
||||
|
||||
if (requiredRole.HasFlag(UserRole.GlobalAdmin))
|
||||
if (requiredRole.HasFlag(UserRoles.GlobalAdmin))
|
||||
{
|
||||
required.Add(UserRole.GlobalAdmin.GetDescription());
|
||||
required.Add(UserRoles.GlobalAdmin.GetDescription());
|
||||
}
|
||||
|
||||
if (requiredRole.HasFlag(UserRole.HelpdeskAgent))
|
||||
if (requiredRole.HasFlag(UserRoles.HelpdeskAgent))
|
||||
{
|
||||
required.Add(UserRole.HelpdeskAgent.GetDescription());
|
||||
required.Add(UserRoles.HelpdeskAgent.GetDescription());
|
||||
}
|
||||
|
||||
if (requiredRole.HasFlag(UserRole.User))
|
||||
if (requiredRole.HasFlag(UserRoles.User))
|
||||
{
|
||||
required.Add(UserRole.User.GetDescription());
|
||||
required.Add(UserRoles.User.GetDescription());
|
||||
}
|
||||
|
||||
if (requiredRole.HasFlag(UserRole.UserAdministrator))
|
||||
if (requiredRole.HasFlag(UserRoles.UserAdministrator))
|
||||
{
|
||||
required.Add(UserRole.UserAdministrator.GetDescription());
|
||||
required.Add(UserRoles.UserAdministrator.GetDescription());
|
||||
}
|
||||
|
||||
return required;
|
||||
|
|
|
@ -13,7 +13,7 @@ namespace Microsoft.Store.PartnerCenter.Explorer.Security
|
|||
/// Defines the various user roles.
|
||||
/// </summary>
|
||||
[Flags]
|
||||
public enum UserRole
|
||||
public enum UserRoles
|
||||
{
|
||||
/// <summary>
|
||||
/// Partner Center role that provides complete access to Partner Center.
|
|
@ -74,33 +74,19 @@
|
|||
<mimeMap fileExtension="woff2" mimeType="application/font-woff" />
|
||||
</staticContent>
|
||||
</system.webServer>
|
||||
<system.codedom>
|
||||
<compilers>
|
||||
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.8.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:1659;1699;1701" />
|
||||
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.8.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+" />
|
||||
</compilers>
|
||||
</system.codedom>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
|
||||
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
|
||||
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.1.2" newVersion="4.1.1.2" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.IdentityModel.Clients.ActiveDirectory" publicKeyToken="31bf3856ad364e35" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-3.19.2.6005" newVersion="3.19.2.6005" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-3.19.8.16603" newVersion="3.19.8.16603" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.IdentityModel.Clients.ActiveDirectory.Platform" publicKeyToken="31bf3856ad364e35" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-3.19.2.6005" newVersion="3.19.2.6005" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-3.19.8.16603" newVersion="3.19.8.16603" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
|
||||
|
@ -112,11 +98,11 @@
|
|||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Diagnostics.DiagnosticSource" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.2.1" newVersion="4.0.2.1" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.ApplicationInsights" publicKeyToken="31bf3856ad364e35" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-2.5.1.0" newVersion="2.5.1.0" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-2.6.4.0" newVersion="2.6.4.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" culture="neutral" />
|
||||
|
@ -124,7 +110,7 @@
|
|||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.IdentityModel.Tokens.Jwt" publicKeyToken="31bf3856ad364e35" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-5.2.1.0" newVersion="5.2.1.0" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-5.2.4.0" newVersion="5.2.4.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.IdentityModel.Protocol.Extensions" publicKeyToken="31bf3856ad364e35" culture="neutral" />
|
||||
|
@ -148,20 +134,38 @@
|
|||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.IdentityModel.Protocols.OpenIdConnect" publicKeyToken="31bf3856ad364e35" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-5.2.1.0" newVersion="5.2.1.0" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-5.2.4.0" newVersion="5.2.4.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.IdentityModel.Tokens" publicKeyToken="31bf3856ad364e35" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-5.2.1.0" newVersion="5.2.1.0" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-5.2.4.0" newVersion="5.2.4.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.IdentityModel.Protocols" publicKeyToken="31bf3856ad364e35" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-5.2.1.0" newVersion="5.2.1.0" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-5.2.4.0" newVersion="5.2.4.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
|
||||
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
|
||||
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-5.2.4.0" newVersion="5.2.4.0" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-5.2.6.0" newVersion="5.2.6.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.AspNet.TelemetryCorrelation" publicKeyToken="31bf3856ad364e35" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-1.0.3.0" newVersion="1.0.3.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
<system.codedom>
|
||||
<compilers>
|
||||
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:1659;1699;1701" />
|
||||
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+" />
|
||||
</compilers>
|
||||
</system.codedom>
|
||||
</configuration>
|
|
@ -2,48 +2,53 @@
|
|||
<packages>
|
||||
<package id="Antlr" version="3.5.0.2" targetFramework="net461" />
|
||||
<package id="bootstrap" version="3.3.7" targetFramework="net461" />
|
||||
<package id="CsvHelper" version="7.1.0" targetFramework="net461" />
|
||||
<package id="CsvHelper" version="7.1.1" targetFramework="net461" />
|
||||
<package id="FontAwesome" version="4.7.0" targetFramework="net461" />
|
||||
<package id="jQuery" version="3.3.1" targetFramework="net461" />
|
||||
<package id="jQuery.UI.Combined" version="1.12.1" targetFramework="net461" />
|
||||
<package id="jQuery.Validation" version="1.17.0" targetFramework="net461" />
|
||||
<package id="Microsoft.ApplicationInsights" version="2.5.1" targetFramework="net461" />
|
||||
<package id="Microsoft.ApplicationInsights" version="2.6.4" targetFramework="net461" />
|
||||
<package id="Microsoft.ApplicationInsights.Agent.Intercept" version="2.4.0" targetFramework="net461" />
|
||||
<package id="Microsoft.ApplicationInsights.DependencyCollector" version="2.5.1" targetFramework="net461" />
|
||||
<package id="Microsoft.ApplicationInsights.DependencyCollector" version="2.6.4" targetFramework="net461" />
|
||||
<package id="Microsoft.ApplicationInsights.JavaScript" version="0.22.9-build00167" targetFramework="net461" />
|
||||
<package id="Microsoft.ApplicationInsights.PerfCounterCollector" version="2.5.1" targetFramework="net461" />
|
||||
<package id="Microsoft.ApplicationInsights.SnapshotCollector" version="1.2.0" targetFramework="net461" />
|
||||
<package id="Microsoft.ApplicationInsights.Web" version="2.5.1" targetFramework="net461" />
|
||||
<package id="Microsoft.ApplicationInsights.WindowsServer" version="2.5.1" targetFramework="net461" />
|
||||
<package id="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel" version="2.5.1" targetFramework="net461" />
|
||||
<package id="Microsoft.AspNet.Mvc" version="5.2.4" targetFramework="net461" />
|
||||
<package id="Microsoft.AspNet.Razor" version="3.2.4" targetFramework="net461" />
|
||||
<package id="Microsoft.AspNet.TelemetryCorrelation" version="1.0.0" targetFramework="net461" />
|
||||
<package id="Microsoft.ApplicationInsights.PerfCounterCollector" version="2.6.4" targetFramework="net461" />
|
||||
<package id="Microsoft.ApplicationInsights.SnapshotCollector" version="1.3.0" targetFramework="net461" />
|
||||
<package id="Microsoft.ApplicationInsights.Web" version="2.6.4" targetFramework="net461" />
|
||||
<package id="Microsoft.ApplicationInsights.WindowsServer" version="2.6.4" targetFramework="net461" />
|
||||
<package id="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel" version="2.6.4" targetFramework="net461" />
|
||||
<package id="Microsoft.AspNet.Mvc" version="5.2.6" targetFramework="net461" />
|
||||
<package id="Microsoft.AspNet.Razor" version="3.2.6" targetFramework="net461" />
|
||||
<package id="Microsoft.AspNet.TelemetryCorrelation" version="1.0.3" targetFramework="net461" />
|
||||
<package id="Microsoft.AspNet.Web.Optimization" version="1.1.3" targetFramework="net461" />
|
||||
<package id="Microsoft.AspNet.WebPages" version="3.2.4" targetFramework="net461" />
|
||||
<package id="Microsoft.Azure.KeyVault" version="2.3.2" targetFramework="net461" />
|
||||
<package id="Microsoft.Azure.KeyVault.WebKey" version="2.0.7" targetFramework="net461" />
|
||||
<package id="Microsoft.AspNet.WebPages" version="3.2.6" targetFramework="net461" />
|
||||
<package id="Microsoft.Azure.KeyVault" version="3.0.0" targetFramework="net461" />
|
||||
<package id="Microsoft.Azure.KeyVault.WebKey" version="3.0.0" targetFramework="net461" />
|
||||
<package id="Microsoft.Azure.Management.ResourceManager" version="1.6.0-preview" targetFramework="net461" />
|
||||
<package id="Microsoft.Azure.Services.AppAuthentication" version="1.1.0-preview" targetFramework="net461" />
|
||||
<package id="Microsoft.Bcl" version="1.1.10" targetFramework="net461" />
|
||||
<package id="Microsoft.Bcl.Async" version="1.0.168" targetFramework="net461" />
|
||||
<package id="Microsoft.Bcl.Build" version="1.0.21" targetFramework="net461" />
|
||||
<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.8" targetFramework="net461" />
|
||||
<package id="Microsoft.CodeAnalysis.FxCopAnalyzers" version="2.6.1" targetFramework="net461" developmentDependency="true" />
|
||||
<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="2.0.0" targetFramework="net461" />
|
||||
<package id="Microsoft.CodeQuality.Analyzers" version="2.6.1" targetFramework="net461" developmentDependency="true" />
|
||||
<package id="Microsoft.Data.Edm" version="5.8.3" targetFramework="net461" />
|
||||
<package id="Microsoft.Data.OData" version="5.8.3" targetFramework="net461" />
|
||||
<package id="Microsoft.Data.Services.Client" version="5.8.3" targetFramework="net461" />
|
||||
<package id="Microsoft.Graph" version="1.8.0" targetFramework="net461" />
|
||||
<package id="Microsoft.Graph.Core" version="1.8.1" targetFramework="net461" />
|
||||
<package id="Microsoft.IdentityModel.Clients.ActiveDirectory" version="3.19.2" targetFramework="net461" />
|
||||
<package id="Microsoft.IdentityModel.Logging" version="5.2.1" targetFramework="net461" />
|
||||
<package id="Microsoft.Graph" version="1.9.0" targetFramework="net461" />
|
||||
<package id="Microsoft.Graph.Core" version="1.9.0" targetFramework="net461" />
|
||||
<package id="Microsoft.IdentityModel.Clients.ActiveDirectory" version="3.19.8" targetFramework="net461" />
|
||||
<package id="Microsoft.IdentityModel.JsonWebTokens" version="5.2.4" targetFramework="net461" />
|
||||
<package id="Microsoft.IdentityModel.Logging" version="5.2.4" targetFramework="net461" />
|
||||
<package id="Microsoft.IdentityModel.Protocol.Extensions" version="1.0.4.403061554" targetFramework="net461" />
|
||||
<package id="Microsoft.IdentityModel.Protocols" version="5.2.1" targetFramework="net461" />
|
||||
<package id="Microsoft.IdentityModel.Protocols.OpenIdConnect" version="5.2.1" targetFramework="net461" />
|
||||
<package id="Microsoft.IdentityModel.Tokens" version="5.2.1" targetFramework="net461" />
|
||||
<package id="Microsoft.jQuery.Unobtrusive.Ajax" version="3.2.4" targetFramework="net461" />
|
||||
<package id="Microsoft.jQuery.Unobtrusive.Validation" version="3.2.4" targetFramework="net461" />
|
||||
<package id="Microsoft.Net.Compilers" version="2.7.0" targetFramework="net461" developmentDependency="true" />
|
||||
<package id="Microsoft.IdentityModel.Protocols" version="5.2.4" targetFramework="net461" />
|
||||
<package id="Microsoft.IdentityModel.Protocols.OpenIdConnect" version="5.2.4" targetFramework="net461" />
|
||||
<package id="Microsoft.IdentityModel.Tokens" version="5.2.4" targetFramework="net461" />
|
||||
<package id="Microsoft.jQuery.Unobtrusive.Ajax" version="3.2.5" targetFramework="net461" />
|
||||
<package id="Microsoft.jQuery.Unobtrusive.Validation" version="3.2.10" targetFramework="net461" />
|
||||
<package id="Microsoft.Net.Compilers" version="2.8.2" targetFramework="net461" developmentDependency="true" />
|
||||
<package id="Microsoft.Net.Http" version="2.2.29" targetFramework="net461" />
|
||||
<package id="Microsoft.NetCore.Analyzers" version="2.6.1" targetFramework="net461" developmentDependency="true" />
|
||||
<package id="Microsoft.NetFramework.Analyzers" version="2.6.1" targetFramework="net461" developmentDependency="true" />
|
||||
<package id="Microsoft.Owin" version="4.0.0" targetFramework="net461" />
|
||||
<package id="Microsoft.Owin.Host.SystemWeb" version="4.0.0" targetFramework="net461" />
|
||||
<package id="Microsoft.Owin.Security" version="4.0.0" targetFramework="net461" />
|
||||
|
@ -51,16 +56,16 @@
|
|||
<package id="Microsoft.Owin.Security.OpenIdConnect" version="4.0.0" targetFramework="net461" />
|
||||
<package id="Microsoft.Rest.ClientRuntime" version="2.3.11" targetFramework="net461" />
|
||||
<package id="Microsoft.Rest.ClientRuntime.Azure" version="3.3.12" targetFramework="net461" />
|
||||
<package id="Microsoft.Store.PartnerCenter" version="1.7.1" targetFramework="net461" />
|
||||
<package id="Microsoft.Store.PartnerCenter" version="1.8.0" targetFramework="net461" />
|
||||
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net461" />
|
||||
<package id="Newtonsoft.Json" version="11.0.1" targetFramework="net461" />
|
||||
<package id="Newtonsoft.Json" version="11.0.2" targetFramework="net461" />
|
||||
<package id="Owin" version="1.0" targetFramework="net461" />
|
||||
<package id="Respond" version="1.4.2" targetFramework="net461" />
|
||||
<package id="StackExchange.Redis.StrongName" version="1.2.6" targetFramework="net461" />
|
||||
<package id="System.ComponentModel.EventBasedAsync" version="4.3.0" targetFramework="net461" />
|
||||
<package id="System.Diagnostics.DiagnosticSource" version="4.4.1" targetFramework="net461" />
|
||||
<package id="System.Diagnostics.DiagnosticSource" version="4.5.0" targetFramework="net461" />
|
||||
<package id="System.Dynamic.Runtime" version="4.3.0" targetFramework="net461" />
|
||||
<package id="System.IdentityModel.Tokens.Jwt" version="5.2.1" targetFramework="net461" />
|
||||
<package id="System.IdentityModel.Tokens.Jwt" version="5.2.4" targetFramework="net461" />
|
||||
<package id="System.IO.Compression" version="4.3.0" targetFramework="net461" />
|
||||
<package id="System.Linq.Queryable" version="4.3.0" targetFramework="net461" />
|
||||
<package id="System.Net.Http" version="4.3.3" targetFramework="net461" />
|
||||
|
@ -71,9 +76,10 @@
|
|||
<package id="System.Security.Cryptography.Primitives" version="4.3.0" targetFramework="net461" />
|
||||
<package id="System.Security.Cryptography.X509Certificates" version="4.3.2" targetFramework="net461" />
|
||||
<package id="System.Spatial" version="5.8.3" targetFramework="net461" />
|
||||
<package id="Unity" version="5.7.3" targetFramework="net461" />
|
||||
<package id="Text.Analyzers" version="2.6.1" targetFramework="net461" developmentDependency="true" />
|
||||
<package id="Unity" version="5.8.6" targetFramework="net461" />
|
||||
<package id="Unity.Abstractions" version="3.3.0" targetFramework="net461" />
|
||||
<package id="Unity.Container" version="5.7.3" targetFramework="net461" />
|
||||
<package id="Unity.Container" version="5.8.6" targetFramework="net461" />
|
||||
<package id="Unity.Mvc" version="5.0.13" targetFramework="net461" />
|
||||
<package id="WebActivatorEx" version="2.2.0" targetFramework="net461" />
|
||||
<package id="WebGrease" version="1.6.0" targetFramework="net461" />
|
||||
|
|
Загрузка…
Ссылка в новой задаче