private static ClientCredentials RegisterDevice(Guid applicationId, Uri issuerUri, LiveDevice device) { var environment = DiscoverEnvironmentInternal(issuerUri); var request = new DeviceRegistrationRequest(applicationId, device); var url = string.Format(CultureInfo.InvariantCulture, LiveIdConstants.RegistrationEndpointUriFormat, environment.HostName); var response = ExecuteRegistrationRequest(url, request); if (!response.IsSuccess) { var 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()); }
public DeviceRegistrationRequest(Guid applicationId, LiveDevice device) : this() { if (null == device) { throw new ArgumentNullException("device"); } ClientInfo = new DeviceRegistrationClientInfo { ApplicationId = applicationId, Version = "1.0" }; Authentication = new DeviceRegistrationAuthentication { MemberName = device.User.DeviceId, Password = device.User.DecryptedPassword }; }