Example #1
0
    public DeviceRegistrationRequest(Guid applicationId, LiveDevice device)
        : this()
    {
        if (null == device)
        {
            throw new ArgumentNullException("device");
        }

        this.ClientInfo = new DeviceRegistrationClientInfo()
        {
            ApplicationId = applicationId, Version = "1.0"
        };
        this.Authentication = new DeviceRegistrationAuthentication()
        {
            MemberName = device.User.DeviceId,
            Password   = device.User.DecryptedPassword
        };
    }
        private static ClientCredentials RegisterDevice(Guid applicationId, Uri issuerUri, DeviceUserName userName)
        {
            var text       = DeviceIdManager.DiscoverEnvironment(issuerUri);
            var liveDevice = new LiveDevice
            {
                User    = userName,
                Version = 1
            };
            var registrationRequest        = new DeviceRegistrationRequest(applicationId, liveDevice);
            var deviceRegistrationResponse = DeviceIdManager.ExecuteRegistrationRequest(string.Format(CultureInfo.InvariantCulture, "https://login.live{0}.com/ppsecure/DeviceAddCredential.srf", string.IsNullOrWhiteSpace(text) ? null : ("-" + text)), registrationRequest);

            if (!deviceRegistrationResponse.IsSuccess)
            {
                throw new DeviceRegistrationFailedException((Microsoft.Xrm.Tooling.Connector.DeviceRegistrationErrorCode)deviceRegistrationResponse.Error.RegistrationErrorCode, deviceRegistrationResponse.ErrorSubCode);
            }
            DeviceIdManager.WriteDevice(text, liveDevice);
            return(liveDevice.User.ToClientCredentials());
        }
            /// <summary>
            /// Loads the device's credentials from the file system
            /// </summary>
            /// <param name="issuerUri">URL for the current token issuer</param>
            /// <returns>Device Credentials (if set) or null</returns>
            /// <remarks>
            /// The issuerUri can be retrieved from the IServiceConfiguration interface's CurrentIssuer property.
            /// </remarks>
            public static ClientCredentials LoadDeviceCredentials(Uri issuerUri)
            {
                //If the credentials should not be persisted to a file, then they won't be present on the disk.
                if (!PersistToFile)
                {
                    return(null);
                }

                EnvironmentConfiguration environment = DiscoverEnvironmentInternal(issuerUri);

                LiveDevice device = ReadExistingDevice(environment);

                if (null == device || null == device.User)
                {
                    return(null);
                }

                return(device.User.ToClientCredentials());
            }
            private static ClientCredentials RegisterDevice(Guid applicationId, Uri issuerUri, LiveDevice device)
            {
                EnvironmentConfiguration environment = DiscoverEnvironmentInternal(issuerUri);

                DeviceRegistrationRequest request = new DeviceRegistrationRequest(applicationId, device);

                string url = string.Format(CultureInfo.InvariantCulture, LiveIdConstants.RegistrationEndpointUriFormat,
                                           environment.HostName);

                DeviceRegistrationResponse response = ExecuteRegistrationRequest(url, request);

                if (!response.IsSuccess)
                {
                    bool throwException = true;
                    if (DeviceRegistrationErrorCode.DeviceAlreadyExists == response.Error.RegistrationErrorCode)
                    {
                        if (!PersistToFile)
                        {
                            //If the file is not persisted, the registration will always occur (since the credentials are not
                            //persisted to the disk. However, the credentials may already exist. To avoid an exception being continually
                            //processed by the calling user, DeviceAlreadyExists will be ignored if the credentials are not persisted to the disk.
                            return(device.User.ToClientCredentials());
                        }
                        else if (PersistIfDeviceAlreadyExists)
                        {
                            // This flag indicates that the
                            throwException = false;
                        }
                    }

                    if (throwException)
                    {
                        throw new DeviceRegistrationFailedException(response.Error.RegistrationErrorCode, response.ErrorSubCode);
                    }
                }

                if (PersistToFile || PersistIfDeviceAlreadyExists)
                {
                    WriteDevice(environment, device);
                }

                return(device.User.ToClientCredentials());
            }