示例#1
0
        public IHttpActionResult GetOrganizations([FromUri] DynamicsCredentials credentials)
        {
            if (!ModelState.IsValid)
            {
                return(Unauthorized());
            }

            try
            {
                crmService = new DynamicsService(credentials);
                var organizations = crmService.GetOrganizations().Select(o => new
                {
                    o.UniqueName,
                    o.FriendlyName
                });

                return(Ok(organizations));
            }
            catch (MessageSecurityException)
            {
                return(Unauthorized());
            }
            catch (SecurityAccessDeniedException)
            {
                return(Unauthorized());
            }
        }
示例#2
0
        public IHttpActionResult GetMarketLists([FromUri] DynamicsCredentials credentials, [FromUri] bool translate = false)
        {
            if (!ModelState.IsValid)
            {
                return(Unauthorized());
            }

            try
            {
                crmService = new DynamicsService(credentials);

                var lists            = crmService.GetAllMarketLists();
                var goodLookingLists = GetValuesFromLists(lists, translate);

                return(Ok(goodLookingLists));
            }
            catch (MessageSecurityException)
            {
                return(Unauthorized());
            }
            catch (SecurityAccessDeniedException)
            {
                return(Unauthorized());
            }
        }
示例#3
0
        internal RuntimeSettings(string[] args)
        {
            Compile = args.Contains("compile");

            Save = args.Contains("save");

            Publish = args.Contains("publish");

            LogLevel = args.Contains("basic")
                ? LogLevel.Basic
                : LogLevel.Verbose;

            if (Publish)
            {
                var fileContents = File.ReadAllText("credentials.json");

                var model = JsonConvert
                            .DeserializeObject <DynamicsOnlineCredentialsModel>(
                    fileContents);

                Credentials = new DynamicsCredentials(
                    model.Url,
                    model.Username,
                    model.Password,
                    "",
                    DeploymentType.Online);
            }
        }
示例#4
0
        public IHttpActionResult ValidateCredentials([FromUri] DynamicsCredentials credentials)
        {
            if (!ModelState.IsValid)
            {
                return(Unauthorized());
            }

            try
            {
                if (!string.IsNullOrEmpty(credentials.Domain))
                {
                    crmService = new DynamicsService(credentials);
                }
                else
                {
                    //Will create service and try to fetch all lists to validate
                    new DynamicsService(credentials).GetAllMarketLists();
                }

                return(Ok());
            }
            catch (MessageSecurityException)
            {
                return(Unauthorized());
            }
            catch (SecurityAccessDeniedException)
            {
                return(Unauthorized());
            }
            catch (SecurityNegotiationException)
            {
                return(Unauthorized());
            }
        }
示例#5
0
        public CrmService(DynamicsCredentials credentials, string orgName)
        {
            userName = credentials.UserName;
            password = credentials.Password;
            domain   = credentials.Domain;
            organizationUniqueName = orgName;

            organizationServiceProxy = getOrganizationServiceProxy();
        }
        public IHttpActionResult ValidateCredentials([FromUri] DynamicsCredentials credentials)
        {
            try
            {
                crmService = new CrmService(credentials);
                var organizations = crmService.getOrganizations();
                crmService.logout();

                return(Ok(organizations));
            }
            catch (Exception ex) when(ex is MessageSecurityException || ex is ArgumentNullException)
            {
                return(Unauthorized());
            }
            catch (Exception ex)
            {
                return(InternalServerError(ex));
            }
        }
示例#7
0
        public IHttpActionResult UpdateBulkEmailForContact(string contactId, [FromUri] DynamicsCredentials credentials)
        {
            try
            {
                crmService = new DynamicsService(credentials);

                crmService.ChangeBulkEmail(contactId);

                return(Ok());
            }
            catch (MessageSecurityException)
            {
                return(Unauthorized());
            }
            catch (SecurityAccessDeniedException)
            {
                return(Unauthorized());
            }
        }
示例#8
0
        public IHttpActionResult GetContacts(string listId, [FromUri] DynamicsCredentials credentials, [FromUri] string[] fields, [FromUri] int top = 0, [FromUri] bool translate = true)
        {
            try
            {
                crmService = new DynamicsService(credentials);

                var contacts            = crmService.GetContactsInList(listId, fields, top);
                var goodLookingContacts = GetValuesFromContacts(contacts, translate, fields);

                return(Ok(goodLookingContacts));
            }
            catch (MessageSecurityException)
            {
                return(Unauthorized());
            }
            catch (SecurityAccessDeniedException)
            {
                return(Unauthorized());
            }
        }
示例#9
0
        public DynamicsService(DynamicsCredentials credentials)
        {
            string organizationEndpoint;

            if (!string.IsNullOrEmpty(credentials.Domain))
            {
                var discoveryProxy = GetDiscoveryServiceProxy(credentials.DiscoveryUrl, credentials);
                organizations = DiscoverOrganizations(discoveryProxy);
                var organization = organizations.FirstOrDefault(detail => detail.UniqueName.Equals(credentials.Organization)) ?? organizations.FirstOrDefault();

                organizationEndpoint = organization?.Endpoints[EndpointType.OrganizationService];
            }
            else
            {
                //Bygger upp organizationEndpoint Url med hjälp av discoveryUrl
                organizationEndpoint = credentials.DiscoveryUrl.Remove(credentials.DiscoveryUrl.LastIndexOf('/') + 1);
                organizationEndpoint = string.Concat(organizationEndpoint, "Organization.svc");
            }

            organizationServiceProxy = GetOrganizationServiceProxy(organizationEndpoint, credentials);
        }
        public IHttpActionResult GetListsWithAllAttributes(string orgName, [FromUri] DynamicsCredentials credentials, [FromUri] bool translate = false, [FromUri] bool allAttributes = true)
        {
            try
            {
                crmService = new CrmService(credentials, orgName);
                helper     = new CrmApiHelper(crmService);

                var lists            = crmService.getAllLists(allAttributes);
                var goodLookingLists = helper.getValuesFromLists(lists, translate, allAttributes);
                crmService.logout();

                return(Ok(goodLookingLists));
            }
            catch (Exception ex) when(ex is MessageSecurityException || ex is ArgumentNullException)
            {
                return(Unauthorized());
            }
            catch (NullReferenceException)
            {
                return(BadRequest());
            }
        }
示例#11
0
        public IHttpActionResult GetContactFields([FromUri] DynamicsCredentials credentials)
        {
            if (!ModelState.IsValid)
            {
                return(Unauthorized());
            }

            try
            {
                crmService = new DynamicsService(credentials);

                var attributes = crmService.GetAttributeDisplayName("contact");

                return(Ok(attributes));
            }
            catch (MessageSecurityException)
            {
                return(Unauthorized());
            }
            catch (SecurityAccessDeniedException)
            {
                return(Unauthorized());
            }
        }
示例#12
0
        private static AuthenticationCredentials GetCredentials <TService>(IServiceManagement <TService> service, AuthenticationProviderType endpointType, DynamicsCredentials credentials)
        {
            if (!Enum.IsDefined(typeof(AuthenticationProviderType), endpointType))
            {
                throw new ArgumentOutOfRangeException(nameof(endpointType));
            }

            var domain          = "";
            var authCredentials = new AuthenticationCredentials();

            if (!string.IsNullOrEmpty(credentials.Domain))
            {
                domain = credentials.Domain;
            }

            //if (credentials == null) return authCredentials;
            var userName = credentials.UserName;
            var password = credentials.Password;

            endpointType = AuthenticationProviderType.OnlineFederation;

            switch (endpointType)
            {
            case AuthenticationProviderType.ActiveDirectory:
                authCredentials.ClientCredentials.Windows.ClientCredential =
                    new System.Net.NetworkCredential(userName,
                                                     password,
                                                     domain);
                break;

            case AuthenticationProviderType.LiveId:
                authCredentials.ClientCredentials.UserName.UserName = userName;
                authCredentials.ClientCredentials.UserName.Password = password;
                authCredentials.SupportingCredentials = new AuthenticationCredentials
                {
                    ClientCredentials = Microsoft.Crm.Services.Utility.DeviceIdManager.LoadOrRegisterDevice()
                };
                break;

            case AuthenticationProviderType.None:
                break;

            case AuthenticationProviderType.Federation:
                break;

            /*
             * case AuthenticationProviderType.OnlineFederation:
             *  break;
             */
            default:
                authCredentials.ClientCredentials.UserName.UserName = userName;
                authCredentials.ClientCredentials.UserName.Password = password;

                if (endpointType == AuthenticationProviderType.OnlineFederation)
                {
                    var provider = service.GetIdentityProvider(authCredentials.ClientCredentials.UserName.UserName);
                    if (provider != null && provider.IdentityProviderType == IdentityProviderType.LiveId)
                    {
                        authCredentials.SupportingCredentials = new AuthenticationCredentials
                        {
                            ClientCredentials =
                                Microsoft.Crm.Services.Utility.DeviceIdManager.LoadOrRegisterDevice()
                        };
                    }
                    //

                    /*    authCredentials.SupportingCredentials = new AuthenticationCredentials
                     * {
                     *  ClientCredentials =
                     *          Microsoft.Crm.Services.Utility.DeviceIdManager.LoadOrRegisterDevice()
                     * };*/
                    //
                }

                break;
            }

            return(authCredentials);
        }
示例#13
0
        public OrganizationServiceProxy GetOrganizationServiceProxy(string organizationEndpoint, DynamicsCredentials dynamicsCredentials)
        {
            if (string.IsNullOrEmpty(organizationEndpoint))
            {
                throw new ArgumentNullException(nameof(organizationEndpoint));
            }

            var serviceManagement = ServiceConfigurationFactory.CreateManagement <IDiscoveryService>(new Uri(dynamicsCredentials.DiscoveryUrl));
            var endpointType      = serviceManagement.AuthenticationType;

            var orgServiceManagement =
                ServiceConfigurationFactory.CreateManagement <IOrganizationService>(
                    new Uri(organizationEndpoint));

            var credentials = GetCredentials(orgServiceManagement, endpointType, dynamicsCredentials);

            var proxy = GetProxy <IOrganizationService, OrganizationServiceProxy>(orgServiceManagement, credentials);

            proxy.EnableProxyTypes();

            return(proxy);
        }
示例#14
0
        public DiscoveryServiceProxy GetDiscoveryServiceProxy(string discoveryServiceAddress, DynamicsCredentials credentials)
        {
            var serviceManagement = ServiceConfigurationFactory.CreateManagement <IDiscoveryService>(new Uri(discoveryServiceAddress));

            var endpointType    = serviceManagement.AuthenticationType;
            var authCredentials = GetCredentials(serviceManagement, endpointType, credentials);
            var discoveryProxy  = GetProxy <IDiscoveryService, DiscoveryServiceProxy>(serviceManagement, authCredentials);

            return(discoveryProxy);
        }
        public IHttpActionResult GetContactsWithAttributes(string orgName, string listId, [FromUri] DynamicsCredentials credentials, [FromUri] int top = 0, [FromUri] bool translate = true, [FromUri] bool allAttributes = true)
        {
            try
            {
                crmService = new CrmService(credentials, orgName);
                helper     = new CrmApiHelper(crmService);

                var contacts            = crmService.getContactsInList(listId, allAttributes, top);
                var goodLookingContacts = helper.getValuesFromContacts(contacts, translate, allAttributes);
                crmService.logout();

                return(Ok(goodLookingContacts));
            }
            catch (Exception ex) when(ex is MessageSecurityException || ex is ArgumentNullException)
            {
                return(Unauthorized());
            }
            catch (Exception ex) when(ex is NullReferenceException || ex is FormatException)
            {
                return(BadRequest());
            }
        }
        public IHttpActionResult UpdateBulkEmailForContact(string orgName, string contactId, [FromUri] DynamicsCredentials credentials)
        {
            try
            {
                crmService = new CrmService(credentials, orgName);

                crmService.changeBulkEmail(contactId);
                crmService.logout();

                return(Ok());
            }
            catch (Exception ex) when(ex is MessageSecurityException || ex is ArgumentNullException)
            {
                return(Unauthorized());
            }
            catch (Exception ex) when(ex is NullReferenceException || ex is FormatException || ex is FaultException)
            {
                return(BadRequest());
            }
        }
示例#17
0
 public CrmService(DynamicsCredentials credentials) : this(credentials, "")
 {
 }