コード例 #1
0
        // POST api/values
        public async Task<IHttpActionResult> Post(DeviceRegistrationRequest request)
        {
            var registrationKeyStorage = new RegistrationKeyStorage(ConfigurationManager.AppSettings["StorageConnectionString"]);
            var registrationKey = registrationKeyStorage.GetRegistrationKey(request.RegistrationKey);
            if (registrationKey != null
                && registrationKey.ValidUntil > DateTime.UtcNow
                && !registrationKey.UsedOn.HasValue)
            {
                registrationKey.UsedOn = DateTime.UtcNow;
                await registrationKeyStorage.UpdateRegistrationKey(registrationKey);

                var registryManager = RegistryManager.CreateFromConnectionString(ConfigurationManager.AppSettings["IoTHubConnectionString"]);
                try
                {
                    var device = await registryManager.AddDeviceAsync(new Device(request.DeviceId));

                    var iotHubConnectionStringBuilder = IotHubConnectionStringBuilder.Create(ConfigurationManager.AppSettings["IoTHubConnectionString"]);
                    return Ok(new DeviceRegistrationResponse
                    {
                        HostName = iotHubConnectionStringBuilder.HostName,
                        AccessKey = device.Authentication.SymmetricKey.PrimaryKey
                    });
                }
                catch (DeviceAlreadyExistsException)
                {
                }
            }
            return BadRequest();
        }
コード例 #2
0
        // POST api/values
        public async Task <IHttpActionResult> Post(DeviceRegistrationRequest request)
        {
            var registrationKeyStorage = new RegistrationKeyStorage(ConfigurationManager.AppSettings["StorageConnectionString"]);
            var registrationKey        = registrationKeyStorage.GetRegistrationKey(request.RegistrationKey);

            if (registrationKey != null &&
                registrationKey.ValidUntil > DateTime.UtcNow &&
                !registrationKey.UsedOn.HasValue)
            {
                registrationKey.UsedOn = DateTime.UtcNow;
                await registrationKeyStorage.UpdateRegistrationKey(registrationKey);

                var registryManager = RegistryManager.CreateFromConnectionString(ConfigurationManager.AppSettings["IoTHubConnectionString"]);
                try
                {
                    var device = await registryManager.AddDeviceAsync(new Device(request.DeviceId));

                    var iotHubConnectionStringBuilder = IotHubConnectionStringBuilder.Create(ConfigurationManager.AppSettings["IoTHubConnectionString"]);
                    return(Ok(new DeviceRegistrationResponse
                    {
                        HostName = iotHubConnectionStringBuilder.HostName,
                        AccessKey = device.Authentication.SymmetricKey.PrimaryKey
                    }));
                }
                catch (DeviceAlreadyExistsException)
                {
                }
            }
            return(BadRequest());
        }
コード例 #3
0
        public async Task <IActionResult> UnsubscribePushNotification([FromBody] string DeviceID)
        {
            ApplicationUser user = await _userManager.GetUserAsync(HttpContext.User);

            DeviceRegistrationRequest Request  = new DeviceRegistrationRequest();
            CommunicationResponse     Response = new CommunicationResponse();

            try
            {
                if (user == null)
                {
                    Response.ReturnCode = enResponseCode.Fail;
                    Response.ReturnMsg  = EnResponseMessage.StandardLoginfailed;
                    Response.ErrorCode  = enErrorCode.StandardLoginfailed;
                }
                else
                {
                    Request.DeviceID         = DeviceID;
                    Request.UserID           = user.Id;
                    Request.SubsscrptionType = EnDeviceSubsscrptionType.UnSubsscribe;
                    Response = await _mediator.Send(Request);
                }
                return(Ok(Response));
            }
            catch (Exception ex)
            {
                Response.ReturnCode = enResponseCode.InternalError;
                return(BadRequest(new BizResponseClass {
                    ReturnCode = enResponseCode.InternalError, ReturnMsg = ex.ToString(), ErrorCode = enErrorCode.Status500InternalServerError
                }));
            }
        }
コード例 #4
0
    private static ClientCredentials RegisterDevice(Guid applicationId, Uri issuerUri, DeviceUserName userName)
    {
        bool doContinue = true;
        int  attempt    = 1;

        while (doContinue)
        {
            string environment = DiscoverEnvironment(issuerUri);

            LiveDevice device = new LiveDevice()
            {
                User = userName, Version = 1
            };

            DeviceRegistrationRequest request = new DeviceRegistrationRequest(applicationId, device);

            string url = string.Format(CultureInfo.InvariantCulture, LiveIdConstants.RegistrationEndpointUriFormat,
                                       string.IsNullOrWhiteSpace(environment) ? null : "-" + environment);


            try
            {
                DeviceRegistrationResponse response = ExecuteRegistrationRequest(url, request);
                if (!response.IsSuccess)
                {
                    throw new DeviceRegistrationFailedException(response.RegistrationErrorCode.GetValueOrDefault(), response.ErrorSubCode);
                }

                WriteDevice(environment, device);
            }
            catch (Exception error)
            {
                if (error.Message.ToLower().Contains("unknown"))
                {
                    if (attempt > 3)
                    {
                        if (MessageBox.Show("Failed to connect 3 times.\r\n\r\nDo you want to retry?", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No)
                        {
                            doContinue = false;
                        }
                    }

                    attempt++;
                }
                else
                {
                    throw error;
                }
            }

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

        return(null);
    }
        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());
        }
コード例 #6
0
            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());
            }
コード例 #7
0
        public async Task <IActionResult> Register(DeviceRegistrationRequest registration)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            if (TryExtractPlatform(out MobilePlatform platform))
            {
                var registrationId = await _pushNotificationService.CreateRegistrationId(registration.Handle);

                await _pushNotificationService.Register(platform, registration.Handle, registrationId, new[] { registration.Tag });

                return(Ok(new DeviceRegistrationResult {
                    RegistrationId = registrationId
                }));
            }

            return(BadRequest("Unknown device platform or missing user-agent."));
        }
コード例 #8
0
    private static DeviceRegistrationResponse ExecuteRegistrationRequest(string url, DeviceRegistrationRequest registrationRequest)
    {
        //Create the request that will submit the request to the server
        WebRequest request = WebRequest.Create(url);

        request.ContentType       = "application/soap+xml; charset=UTF-8";
        request.Method            = "POST";
        request.Timeout           = 180000;
        request.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;

        //Write the envelope to the RequestStream
        using (Stream stream = request.GetRequestStream())
        {
            Serialize(stream, registrationRequest);
        }

        // Read the response into an XmlDocument and return that doc
        try
        {
            using (WebResponse response = request.GetResponse())
            {
                using (Stream stream = response.GetResponseStream())
                {
                    return(Deserialize <DeviceRegistrationResponse>(stream));
                }
            }
        }
        catch (WebException ex)
        {
            if (null != ex.Response)
            {
                using (Stream stream = ex.Response.GetResponseStream())
                {
                    return(Deserialize <DeviceRegistrationResponse>(stream));
                }
            }

            throw;
        }
    }
コード例 #9
0
        private async Task Authenticate(string accessToken)
        {
            using (var client = new HttpClient())
            {
                client.DefaultRequestHeaders.Add("User-Agent", "AGSLauncher/1.0.0");
                var reqData = new DeviceRegistrationRequest();
                reqData.auth_data.access_token          = accessToken;
                reqData.registration_data.app_name      = "AGSLauncher for Windows";
                reqData.registration_data.app_version   = "1.0.0";
                reqData.registration_data.device_model  = "Windows";
                reqData.registration_data.device_serial = Computer.GetMachineGuid().ToString("N");
                reqData.registration_data.device_type   = "A2UMVHOX7UP4V7";
                reqData.registration_data.domain        = "Device";
                reqData.registration_data.os_version    = Environment.OSVersion.Version.ToString(4);
                reqData.requested_extensions            = new List <string> {
                    "customer_info", "device_info"
                };
                reqData.requested_token_type = new List <string> {
                    "bearer", "mac_dms"
                };

                var authPostContent = Serialization.ToJson(reqData, true);

                var authResponse = await client.PostAsync(
                    @"https://api.amazon.com/auth/register",
                    new StringContent(authPostContent, Encoding.UTF8, "application/json"));

                var authResponseContent = await authResponse.Content.ReadAsStringAsync();

                var authData = Serialization.FromJson <DeviceRegistrationResponse>(authResponseContent);
                if (authData.response?.success != null)
                {
                    FileSystem.WriteStringToFile(tokensPath, Serialization.ToJson(authData.response.success.tokens.bearer));
                }
            }
        }
コード例 #10
0
        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);
        }
コード例 #11
0
            private static DeviceRegistrationResponse ExecuteRegistrationRequest(string url, DeviceRegistrationRequest registrationRequest)
            {
                //Create the request that will submit the request to the server
                WebRequest request = WebRequest.Create(url);

                request.ContentType = "application/soap+xml; charset=UTF-8";
                request.Method      = "POST";
                request.Timeout     = 180000;

                //Write the envelope to the RequestStream
                using (Stream stream = request.GetRequestStream()) {
                    Serialize(stream, registrationRequest);
                }

                // Read the response into an XmlDocument and return that doc
                try {
                    using (WebResponse response = request.GetResponse()) {
                        using (Stream stream = response.GetResponseStream()) {
                            return(Deserialize <DeviceRegistrationResponse>("Deserializing Registration Response", stream));
                        }
                    }
                } catch (WebException ex) {
                    System.Diagnostics.Trace.TraceError("Microsoft account Device Registration Failed (HTTP Code: {0}): {1}",
                                                        ex.Status, ex.Message);

                    if (null != ex.Response)
                    {
                        using (Stream stream = ex.Response.GetResponseStream()) {
                            return(Deserialize <DeviceRegistrationResponse>("Deserializing Failed Registration Response", stream));
                        }
                    }

                    throw;
                }
            }
コード例 #12
0
        public async Task <IActionResult> RegisterDevice([FromRoute] string DeviceId, [FromBody] DeviceRegistrationRequest deviceRegistrationRequest)
        {
            try
            {
                if (deviceRegistrationRequest.DeviceId != DeviceId)
                {
                    throw new ApplicationException("The device id posted does not correspond to the device id specified in the URL.");
                }

                throw new NotImplementedException("Devices registration is not available at the moment.");
            }
            catch (Exception exc)
            {
                return(await Task.Run(() => StatusCode(StatusCodes.Status501NotImplemented, exc)));
            }

            // return Ok();
        }