Beispiel #1
0
        public static async Task Run(
            [EventHubTrigger(HubNames.ClickEventsHub, Connection = "CloudSettings:EventHubListenerConnectionString")] LinkClickedMessage events,
            [Table(TableNames.Hits)] CloudTable table,
            ILogger log)
        {
            var entity = new HitEntity
            {
                PartitionKey = PartitionKeys.Hit,
                RowKey       = Guid.NewGuid().ToString(),
                CreatedOn    = events.ClickedAt,
                ShortCode    = events.Key,
                Timestamp    = DateTimeOffset.UtcNow
            };

            var operation = TableOperation.Insert(entity);

            await table.CreateIfNotExistsAsync();

            await table.ExecuteAsync(operation);
        }
        public async Task <IActionResult> ResolveShortCode(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "{path?}")]
            HttpRequest req,
            [EventHub(HubNames.ClickEventsHub, Connection = "CloudSettings:EventHubSenderConnectionString")]
            IAsyncCollector <LinkClickedMessage> outputEvents,
            string path)
        {
            var targetUrl = "https://app.4dn.me/";
            var now       = DateTimeOffset.UtcNow;

            if (!string.IsNullOrWhiteSpace(path) && Regex.IsMatch(path, Constants.ShortCodeRegularExpression))
            {
                var targetEndpoint = await _shortLinksService.ResolveAsync(path);

                if (!string.IsNullOrWhiteSpace(targetEndpoint))
                {
                    _logger.LogInformation($"Path '{path}' was resolved to endpoint {targetEndpoint}, now redirecting.");
                    targetUrl = targetEndpoint;
                    var message = new LinkClickedMessage
                    {
                        Key       = path,
                        ClickedAt = now
                    };
                    await outputEvents.AddAsync(message);

                    await outputEvents.FlushAsync();
                }
                else
                {
                    _logger.LogInformation($"The path ({path}) was not configured as a valid shortlink");
                }
            }
            else
            {
                _logger.LogInformation($"No matching path came in ({path}) so redirecting to the app");
            }

            return(new RedirectResult(targetUrl, true));
        }