public WebApiAuthProvider(
            IMemoryCache memoryCache,
            IConfiguration configuration,
            IOptionsMonitor <AppOptions> appOptions,
            IHttpContextAccessor httpContextAccessor)
        {
            _appOptions = appOptions.CurrentValue;

            var azureOptions = new AzureAdOptions();

            configuration.Bind("AzureAd", azureOptions);
            var dynamicsConfiguration = new Dynamics365Configuration();

            configuration.Bind(Dynamics365Configuration.ConfigurationName, dynamicsConfiguration);

            proposalManagerClientId = azureOptions.ClientId;

            _clientId        = azureOptions.ClientId;
            _aadInstance     = azureOptions.Instance;
            _appSecret       = azureOptions.ClientSecret;
            _credential      = new Microsoft.Identity.Client.ClientCredential(_appSecret); // For development mode purposes only. Production apps should use a client certificate.
            _scopes          = azureOptions.GraphScopes.Split(new[] { ' ' });
            _redirectUri     = azureOptions.BaseUrl + azureOptions.CallbackPath;
            _graphResourceId = azureOptions.GraphResourceId;
            _tenantId        = azureOptions.TenantId;

            _memoryCache = memoryCache;

            _authority           = azureOptions.Authority;
            _httpContextAccessor = httpContextAccessor;

            _publicClientApplication = new PublicClientApplication(_clientId, _authority);
        }
        public DynamicsController(
            ILogger <DocumentController> logger,
            IOptions <AppOptions> appOptions,
            IDocumentService documentService,
            IOpportunityService opportunityService,
            IGraphClientAppContext graphClientAppContext,
            IOneDriveLinkService oneDriveLinkService,
            IConfiguration configuration,
            IDynamicsLinkService dynamicsLinkService,
            IProposalManagerClientFactory proposalManagerClientFactory) : base(logger, appOptions)
        {
            this.oneDriveLinkService          = oneDriveLinkService;
            this.graphClientAppContext        = graphClientAppContext;
            this.dynamicsLinkService          = dynamicsLinkService;
            this.opportunityService           = opportunityService;
            this.proposalManagerClientFactory = proposalManagerClientFactory;

            oneDriveConfiguration = new OneDriveConfiguration();
            configuration.Bind(OneDriveConfiguration.ConfigurationName, oneDriveConfiguration);

            dynamicsConfiguration = new Dynamics365Configuration();
            configuration.Bind(Dynamics365Configuration.ConfigurationName, dynamicsConfiguration);

            proposalManagerConfiguration = new ProposalManagerConfiguration();
            configuration.Bind(ProposalManagerConfiguration.ConfigurationName, proposalManagerConfiguration);
        }
Ejemplo n.º 3
0
        public OneDriveLinkService(
            IGraphClientAppContext graphClientContext,
            IProposalManagerClientFactory proposalManagerClientFactory,
            IConfiguration configuration,
            IOpportunityRepository opportunityRepository,
            IDeltaLinksStorage deltaLinksStorage)
        {
            this.graphClientContext           = graphClientContext;
            this.proposalManagerClientFactory = proposalManagerClientFactory;

            oneDriveConfiguration = new OneDriveConfiguration();
            configuration.Bind(OneDriveConfiguration.ConfigurationName, oneDriveConfiguration);

            dynamics365Configuration = new Dynamics365Configuration();
            configuration.Bind(Dynamics365Configuration.ConfigurationName, dynamics365Configuration);

            azureAdOptions = new AzureAdOptions();
            configuration.Bind("AzureAd", azureAdOptions);

            appOptions = new AppOptions();
            configuration.Bind("ProposalManagement", appOptions);

            this.opportunityRepository = opportunityRepository;
            this.deltaLinksStorage     = deltaLinksStorage;

            InitializeTemporaryFolderDelta();
        }
 public DynamicsClientFactory(IConfiguration configuration)
 {
     dynamicsConfiguration = new Dynamics365Configuration();
     configuration.Bind(Dynamics365Configuration.ConfigurationName, dynamicsConfiguration);
     azureAdConfiguration = new AzureAdOptions();
     configuration.Bind("AzureAd", azureAdConfiguration);
 }
Ejemplo n.º 5
0
 public UserRepository(
     IConfiguration configuration,
     IDynamicsClientFactory dynamicsClientFactory)
 {
     dynamicsConfiguration = new Dynamics365Configuration();
     configuration.Bind(Dynamics365Configuration.ConfigurationName, dynamicsConfiguration);
     Users = new UserDataAccessor(dynamicsConfiguration, dynamicsClientFactory);
 }
        public ContactRepository(IConfiguration configuration,
                                 IDynamicsClientFactory dynamicsClientFactory)
        {
            dynamicsConfiguration = new Dynamics365Configuration();
            configuration.Bind(Dynamics365Configuration.ConfigurationName, dynamicsConfiguration);

            Contacts = new ContactNameAccessor(dynamicsConfiguration, dynamicsClientFactory);
        }
Ejemplo n.º 7
0
 public ConnectionRoleRepository(
     IConfiguration configuration,
     IDynamicsClientFactory dynamicsClientFactory,
     IConnectionRolesCache connectionRolesCache)
 {
     dynamicsConfiguration = new Dynamics365Configuration();
     configuration.Bind(Dynamics365Configuration.ConfigurationName, dynamicsConfiguration);
     this.connectionRolesCache = connectionRolesCache;
     if (connectionRolesCache.ConnectionRoles is null)
     {
         dynamicsClient = dynamicsClientFactory.GetDynamicsAuthorizedWebClientAsync().Result;
         var result          = dynamicsClient.GetAsync($"/api/data/v9.0/connectionroles?$filter=category eq {dynamicsConfiguration.ProposalManagerCategoryId}&$select=name").Result;
         var connectionRoles = JsonConvert.DeserializeObject <JObject>(result.Content.ReadAsStringAsync().Result)["value"].AsJEnumerable();
         connectionRolesCache.ConnectionRoles = new Dictionary <string, string>(from cr in connectionRoles
                                                                                select new KeyValuePair <string, string>(cr["connectionroleid"].ToString(), cr["name"].ToString()));
     }
 }
Ejemplo n.º 8
0
        public ConnectionRoleRepository(
            IConfiguration configuration,
            IDynamicsClientFactory dynamicsClientFactory,
            IConnectionRolesCache connectionRolesCache)
        {
            dynamicsConfiguration = new Dynamics365Configuration();
            configuration.Bind(Dynamics365Configuration.ConfigurationName, dynamicsConfiguration);
            this.connectionRolesCache = connectionRolesCache;
            if (connectionRolesCache.ConnectionRoles is null)
            {
                dynamicsClient = dynamicsClientFactory.GetDynamicsAuthorizedWebClientAsync().Result;
                var     result          = dynamicsClient.GetAsync($"/api/data/v9.0/connectionroles?$filter=category eq {dynamicsConfiguration.ProposalManagerCategoryId}&$select=name").Result;
                JObject responseJObject = result.Content.ReadAsAsync <JObject>().Result;

                if (responseJObject == null || responseJObject["value"] == null)
                {
                    throw new Exception("Invalid or null response from Dynamics when querying for connection roles.");
                }

                var connectionRoles = responseJObject["value"].AsJEnumerable();
                connectionRolesCache.ConnectionRoles = new Dictionary <string, string>(from cr in connectionRoles
                                                                                       select new KeyValuePair <string, string>(cr["connectionroleid"].ToString(), cr["name"].ToString()));
            }
        }
 public UserDataAccessor(Dynamics365Configuration dynamicsConfiguration, IDynamicsClientFactory dynamicsClientFactory)
 {
     this.dynamicsConfiguration = dynamicsConfiguration;
     this.dynamicsClientFactory = dynamicsClientFactory;
 }
Ejemplo n.º 10
0
        public SharePointLocationRepository(
            IConfiguration configuration,
            IDynamicsClientFactory dynamicsClientFactory,
            ISharePointLocationsCache sharePointLocationsCache,
            IGraphClientAppContext graphClientContext)
        {
            dynamicsConfiguration = new Dynamics365Configuration();
            appOptions            = new AppOptions();
            configuration.Bind(Dynamics365Configuration.ConfigurationName, dynamicsConfiguration);
            configuration.Bind("ProposalManagement", appOptions);
            this.sharePointLocationsCache = sharePointLocationsCache;
            graphClient = graphClientContext.GraphClient;
            this.dynamicsClientFactory = dynamicsClientFactory;
            if (!Guid.TryParse(sharePointLocationsCache.ProposalManagerSiteId, out Guid existingSiteId))
            {
                var     result          = dynamicsClientFactory.GetDynamicsAuthorizedWebClientAsync().Result.GetAsync($"/api/data/v9.0/sharepointsites?$filter=absoluteurl eq 'https://{appOptions.SharePointHostName}'").Result;
                JObject responseJObject = result.Content.ReadAsAsync <JObject>().Result;

                if (responseJObject == null || responseJObject["value"] == null)
                {
                    throw new Exception("DYNAMICS INTEGRATION ENGINE: Invalid or null response from Dynamics when querying for Tenant Site.");
                }

                var site = responseJObject["value"].AsJEnumerable().SingleOrDefault();

                if (site == null)
                {
                    throw new Exception("DYNAMICS INTEGRATION ENGINE: Tenant Site is not registered in Dynamics.");
                }

                sharePointLocationsCache.ProposalManagerSiteId = site["sharepointsiteid"].ToString();

                if (!Guid.TryParse(sharePointLocationsCache.ProposalManagerSiteId, out existingSiteId))
                {
                    throw new Exception("DYNAMICS INTEGRATION ENGINE: Malformed GUID for Tenant Site.");
                }
            }
            if (!Guid.TryParse(sharePointLocationsCache.ProposalManagerBaseSiteId, out Guid existingBaseSiteId))
            {
                var     result          = dynamicsClientFactory.GetDynamicsAuthorizedWebClientAsync().Result.GetAsync($"/api/data/v9.0/sharepointsites?$filter=parentsite/sharepointsiteid eq '{sharePointLocationsCache.ProposalManagerSiteId}' and relativeurl eq 'sites/{appOptions.SharePointSiteRelativeName}'").Result;
                JObject responseJObject = result.Content.ReadAsAsync <JObject>().Result;

                if (responseJObject == null || responseJObject["value"] == null)
                {
                    throw new Exception("DYNAMICS INTEGRATION ENGINE: Invalid or null response from Dynamics when querying for Proposal Manager Site.");
                }

                var sites = responseJObject["value"].AsJEnumerable().SingleOrDefault();

                if (sites == null)
                {
                    throw new Exception("DYNAMICS INTEGRATION ENGINE: Proposal Manager Site is not registered in Dynamics.");
                }

                sharePointLocationsCache.ProposalManagerBaseSiteId = sites["sharepointsiteid"].ToString();

                if (!Guid.TryParse(sharePointLocationsCache.ProposalManagerBaseSiteId, out existingSiteId))
                {
                    throw new Exception("DYNAMICS INTEGRATION ENGINE: Malformed GUID for Proposal Manager Site.");
                }
            }
            if (!Guid.TryParse(sharePointLocationsCache.RootDriveLocationId, out Guid existingDriveId))
            {
                var     result          = dynamicsClientFactory.GetDynamicsAuthorizedWebClientAsync().Result.GetAsync($"/api/data/v9.0/sharepointdocumentlocations?$filter=parentsiteorlocation_sharepointsite/sharepointsiteid eq '{sharePointLocationsCache.ProposalManagerBaseSiteId}' and relativeurl eq '{dynamicsConfiguration.RootDrive}'").Result;
                JObject responseJObject = result.Content.ReadAsAsync <JObject>().Result;

                if (responseJObject == null || responseJObject["value"] == null)
                {
                    throw new Exception("DYNAMICS INTEGRATION ENGINE: Invalid or null response from Dynamics when querying for Proposal Manger Site Drive.");
                }

                var location = responseJObject["value"].AsJEnumerable().SingleOrDefault();

                if (location == null)
                {
                    throw new Exception("DYNAMICS INTEGRATION ENGINE: Proposal Manager Site Drive is not registered in Dynamics.");
                }

                sharePointLocationsCache.RootDriveLocationId = location["sharepointdocumentlocationid"].ToString();

                if (!Guid.TryParse(sharePointLocationsCache.RootDriveLocationId, out existingSiteId))
                {
                    throw new Exception("DYNAMICS INTEGRATION ENGINE: Malformed GUID for Proposal Manager Site Drive.");
                }
            }
            if (!Guid.TryParse(sharePointLocationsCache.TempFolderLocationId, out Guid existingTempFolderId))
            {
                var     result          = dynamicsClientFactory.GetDynamicsAuthorizedWebClientAsync().Result.GetAsync($"/api/data/v9.0/sharepointdocumentlocations?$filter=parentsiteorlocation_sharepointdocumentlocation/sharepointdocumentlocationid eq '{sharePointLocationsCache.RootDriveLocationId}' and relativeurl eq '{TempFolderName}'").Result;
                JObject responseJObject = result.Content.ReadAsAsync <JObject>().Result;

                if (responseJObject == null || responseJObject["value"] == null)
                {
                    throw new Exception("DYNAMICS INTEGRATION ENGINE: Invalid or null response from Dynamics when querying for Proposal Manager Temporary Folder.");
                }

                var location = responseJObject["value"].AsJEnumerable().SingleOrDefault();

                if (location == null)
                {
                    throw new Exception("DYNAMICS INTEGRATION ENGINE: Proposal Manager Temporary Folder is not registered in Dynamics.");
                }

                sharePointLocationsCache.TempFolderLocationId = location["sharepointdocumentlocationid"].ToString();

                if (!Guid.TryParse(sharePointLocationsCache.TempFolderLocationId, out existingSiteId))
                {
                    throw new Exception("DYNAMICS INTEGRATION ENGINE: Malformed GUID for Proposal Manager Temporary Folder.");
                }
            }
        }
 public AccountNameAccessor(Dynamics365Configuration dynamicsConfiguration, IDynamicsClientFactory dynamicsClientFactory)
 {
     this.dynamicsConfiguration = dynamicsConfiguration;
     this.dynamicsClientFactory = dynamicsClientFactory;
 }
Ejemplo n.º 12
0
 public SharePointLocationRepository(
     IConfiguration configuration,
     IDynamicsClientFactory dynamicsClientFactory,
     ISharePointLocationsCache sharePointLocationsCache,
     IGraphClientAppContext graphClientContext)
 {
     dynamicsConfiguration = new Dynamics365Configuration();
     appOptions            = new AppOptions();
     configuration.Bind(Dynamics365Configuration.ConfigurationName, dynamicsConfiguration);
     configuration.Bind("ProposalManagement", appOptions);
     this.sharePointLocationsCache = sharePointLocationsCache;
     graphClient = graphClientContext.GraphClient;
     this.dynamicsClientFactory = dynamicsClientFactory;
     if (!Guid.TryParse(sharePointLocationsCache.ProposalManagerSiteId, out Guid existingSiteId))
     {
         var result = dynamicsClientFactory.GetDynamicsAuthorizedWebClientAsync().Result.GetAsync($"/api/data/v9.0/sharepointsites?$filter=absoluteurl eq 'https://{appOptions.SharePointHostName}'").Result;
         if (!Guid.TryParse(
                 sharePointLocationsCache.ProposalManagerSiteId =
                     JsonConvert.DeserializeObject <JObject>(result.Content.ReadAsStringAsync().Result)["value"].AsJEnumerable()
                     .Single()["sharepointsiteid"].ToString()
                 , out existingSiteId))
         {
             throw new Exception("DYNAMICS INTEGRATION ENGINE: Tenant Site is not registered in Dynamics.");
         }
     }
     if (!Guid.TryParse(sharePointLocationsCache.ProposalManagerBaseSiteId, out Guid existingBaseSiteId))
     {
         var result = dynamicsClientFactory.GetDynamicsAuthorizedWebClientAsync().Result.GetAsync($"/api/data/v9.0/sharepointsites?$filter=parentsite/sharepointsiteid eq '{sharePointLocationsCache.ProposalManagerSiteId}' and relativeurl eq 'sites/{appOptions.SharePointSiteRelativeName}'").Result;
         if (!Guid.TryParse(
                 sharePointLocationsCache.ProposalManagerBaseSiteId =
                     JsonConvert.DeserializeObject <JObject>(result.Content.ReadAsStringAsync().Result)["value"].AsJEnumerable()
                     .Single()["sharepointsiteid"].ToString()
                 , out existingSiteId))
         {
             throw new Exception("DYNAMICS INTEGRATION ENGINE: Proposal Manager Site is not registered in Dynamics.");
         }
     }
     if (!Guid.TryParse(sharePointLocationsCache.RootDriveLocationId, out Guid existingDriveId))
     {
         var result = dynamicsClientFactory.GetDynamicsAuthorizedWebClientAsync().Result.GetAsync($"/api/data/v9.0/sharepointdocumentlocations?$filter=parentsiteorlocation_sharepointsite/sharepointsiteid eq '{sharePointLocationsCache.ProposalManagerBaseSiteId}' and relativeurl eq '{dynamicsConfiguration.RootDrive}'").Result;
         if (!Guid.TryParse(
                 sharePointLocationsCache.RootDriveLocationId =
                     JsonConvert.DeserializeObject <JObject>(result.Content.ReadAsStringAsync().Result)["value"].AsJEnumerable()
                     .Single()["sharepointdocumentlocationid"].ToString()
                 , out existingSiteId))
         {
             throw new Exception("DYNAMICS INTEGRATION ENGINE: Proposal Manager Site Drive is not registered in Dynamics.");
         }
     }
     if (!Guid.TryParse(sharePointLocationsCache.TempFolderLocationId, out Guid existingTempFolderId))
     {
         var result = dynamicsClientFactory.GetDynamicsAuthorizedWebClientAsync().Result.GetAsync($"/api/data/v9.0/sharepointdocumentlocations?$filter=parentsiteorlocation_sharepointdocumentlocation/sharepointdocumentlocationid eq '{sharePointLocationsCache.RootDriveLocationId}' and relativeurl eq '{TempFolderName}'").Result;
         if (!Guid.TryParse(
                 sharePointLocationsCache.TempFolderLocationId =
                     JsonConvert.DeserializeObject <JObject>(result.Content.ReadAsStringAsync().Result)["value"].AsJEnumerable()
                     .Single()["sharepointdocumentlocationid"].ToString()
                 , out existingSiteId))
         {
             throw new Exception("DYNAMICS INTEGRATION ENGINE: Proposal Manager Temporary Folder is not registered in Dynamics.");
         }
     }
 }