Beispiel #1
0
        private async Task <string> Verify(
            EventReceiver eventReceiver,
            params Func <Task <bool> >[] verifiers)
        {
            foreach (var verify in verifiers)
            {
                if (await verify())
                {
                    eventReceiver.IsVerified = true;
                    var response = await _eventReceivers
                                   .UpdateEntityAsync(eventReceiver, eventReceiver.ETag);

                    return("Your domain now is verified.");
                }
            }
            return("We could't verify you. Please reconfigure your endpoint and try again.");
        }
Beispiel #2
0
        public async Task <IActionResult> Register(
            [HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequest req, ILogger log)
        {
            var query = string.Empty;

            try
            {
                var responseMessage = string.Empty;
                var token           = Guid.NewGuid().ToString().Replace("-", "");
                query = await req.ReadAsStringAsync();

                var queryString = HttpUtility.ParseQueryString(query);
                var hash        = queryString["hash"];
                var url         = queryString["data"].Base64ToUtf8();
                log.LogInformation(
                    nameof(Register),
                    new[] { new
                            {
                                hash,
                                url,
                                token
                            } });

                if (!Uri.TryCreate(url, UriKind.Absolute, out Uri _))
                {
                    return(new OkObjectResult("Please provide absolute URL."));
                }

                var entity = _eventReceivers
                             .Query <EventReceiver>($"PartitionKey eq '{hash }'")
                             .SingleOrDefault();

                if (entity == null)
                {
                    var response = await _eventReceivers.AddEntityAsync(new EventReceiver
                    {
                        PartitionKey = hash,
                        RowKey       = hash,
                        Url          = url,
                        Token        = token
                    });

                    responseMessage += $"URL '{url}' successfully added.\n\n";
                }
                else if (entity.Url != url)
                {
                    entity.Url        = url;
                    entity.IsVerified = false;
                    entity.Token      = token;
                    var response = await _eventReceivers.UpdateEntityAsync(entity, entity.ETag);

                    responseMessage += "URL '{url}' successfully updated.\n\n";
                }

                if (entity == null || !entity.IsVerified)
                {
                    responseMessage +=
                        $"Your token is: {token}\n\n" +

                        $"Please confirm ownership of entered domain.\n" +
                        $"You can verify it with one of the options:\n" +
                        $" - respond to HTTP GET request with a token\n" +
                        $" - add token TXT record to your DNS configuration with\n\n" +

                        $"After you will complete this step you can " +
                        $"proceed with domain verification by navigating " +
                        $"to: https://ton.azurewebsites.net/api/verify/{token}\n\n";
                }

                return(new OkObjectResult(responseMessage));
            }
            catch (Exception ex)
            {
                log.LogError(
                    ex,
                    nameof(Register),
                    new[] { new
                            {
                                query
                            } });
                throw;
            }
        }