private static DeviceUserName GenerateDeviceUserName() { return(new DeviceUserName { DeviceName = DeviceIdManager.GenerateRandomString("0123456789abcdefghijklmnopqrstuvqxyz", 24), DecryptedPassword = DeviceIdManager.GenerateRandomString("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^*()-_=+;,./?`~", 24) }); }
private static void WriteDevice(string environment, LiveDevice device) { var deviceFile = DeviceIdManager.GetDeviceFile(environment); if (deviceFile.Directory != null && !deviceFile.Directory.Exists) { deviceFile.Directory.Create(); } using (var fileStream = deviceFile.Open(FileMode.CreateNew, FileAccess.Write, FileShare.None)) { DeviceIdManager.Serialize <LiveDevice>(fileStream, device); } }
private static LiveDevice ReadExistingDevice(string environment) { var deviceFile = DeviceIdManager.GetDeviceFile(environment); if (!deviceFile.Exists) { return(null); } LiveDevice result; using (var fileStream = deviceFile.Open(FileMode.Open, FileAccess.Read, FileShare.Read)) { result = DeviceIdManager.Deserialize <LiveDevice>(fileStream); } return(result); }
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> /// Registers the given device with Live ID /// </summary> /// <param name="applicationId">ID for the application</param> /// <param name="issuerUri">URL for the current token issuer</param> /// <param name="deviceName">Device name that should be registered</param> /// <param name="devicePassword">Device password that should be registered</param> /// <returns>ClientCredentials that were registered</returns> /// <remarks> /// The issuerUri can be retrieved from the IServiceConfiguration interface's CurrentIssuer property. /// </remarks> public static ClientCredentials RegisterDevice(Guid applicationId, Uri issuerUri, string deviceName, string devicePassword) { if (string.IsNullOrWhiteSpace(deviceName) != string.IsNullOrWhiteSpace(devicePassword)) { throw new ArgumentNullException("deviceName", "Either deviceName/devicePassword should both be specified or they should be null."); } DeviceUserName userName; if (string.IsNullOrWhiteSpace(deviceName)) { userName = DeviceIdManager.GenerateDeviceUserName(); } else { userName = new DeviceUserName { DeviceName = deviceName, DecryptedPassword = devicePassword }; } return(DeviceIdManager.RegisterDevice(applicationId, issuerUri, userName)); }
private static DeviceRegistrationResponse ExecuteRegistrationRequest(string url, DeviceRegistrationRequest registrationRequest) { var webRequest = WebRequest.Create(url); webRequest.ContentType = "application/soap+xml; charset=UTF-8"; webRequest.Method = "POST"; webRequest.Timeout = 180000; using (var requestStream = webRequest.GetRequestStream()) { DeviceIdManager.Serialize <DeviceRegistrationRequest>(requestStream, registrationRequest); } DeviceRegistrationResponse result; try { using (var response = webRequest.GetResponse()) { using (var responseStream = response.GetResponseStream()) { result = DeviceIdManager.Deserialize <DeviceRegistrationResponse>(responseStream); } } } catch (WebException ex) { if (ex.Response != null) { using (var responseStream2 = ex.Response.GetResponseStream()) { return(DeviceIdManager.Deserialize <DeviceRegistrationResponse>(responseStream2)); } } throw; } return(result); }
/// <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) { var liveDevice = DeviceIdManager.ReadExistingDevice(DeviceIdManager.DiscoverEnvironment(issuerUri)); return(liveDevice?.User?.ToClientCredentials()); }
/// <summary> /// Registers the given device with Live ID /// </summary> /// <param name="applicationId">ID for the application</param> /// <param name="issuerUri">URL for the current token issuer</param> /// <returns>ClientCredentials that were registered</returns> /// <remarks> /// The issuerUri can be retrieved from the IServiceConfiguration interface's CurrentIssuer property. /// </remarks> public static ClientCredentials RegisterDevice(Guid applicationId, Uri issuerUri) { return(DeviceIdManager.RegisterDevice(applicationId, issuerUri, null, null)); }
/// <summary> /// Loads the device credentials (if they exist). If they don't /// </summary> /// <param name="applicationId">Application id</param> /// <param name="issuerUri">URL for the current token issuer</param> /// <remarks> /// The issuerUri can be retrieved from the IServiceConfiguration interface's CurrentIssuer property. /// </remarks> public static ClientCredentials LoadOrRegisterDevice(Guid applicationId, Uri issuerUri) { var clientCredentials = DeviceIdManager.LoadDeviceCredentials(issuerUri) ?? DeviceIdManager.RegisterDevice(applicationId, issuerUri); return(clientCredentials); }