示例#1
0
        public async Task Publish <T> (T content, string notificationTitle = null, string notificationMessage = null, UserRoles?publishTo = null)
            where T : Content
        {
            if (content?.HasId ?? false)
            {
                try
                {
                    var updateMessage = new DocumentUpdatedMessage(content.Id, typeof(T).Name, publishTo ?? content.PublishedTo)
                    {
                        Title   = notificationTitle,
                        Message = notificationMessage
                    };

                    Log.Debug(updateMessage.NotificationTags);

                    NetworkIndicator.ToggleVisibility(true);

                    var response = await HttpClient.PostAsync(Routes.PublishContent, new StringContent (JsonConvert.SerializeObject(updateMessage), Encoding.UTF8, Routes.Json));

                    if (!response.IsSuccessStatusCode)
                    {
                        throw new Exception($"Error posting document update message: {updateMessage}");
                    }
                }
                catch (Exception ex)
                {
                    Log.Error(ex);
                    throw;
                }
                finally
                {
                    NetworkIndicator.ToggleVisibility(false);
                }
            }
        }
        public static void Run(
            [QueueTrigger(MessageQueues.AvContent)] ContentEncodedMessage contentMessage,
            [DocumentDB(nameof(Content), nameof(AvContent), Id = "{documentId}")] AvContent avContent,
            [Queue(MessageQueues.DocumentUpdate)] out DocumentUpdatedMessage updatedMessage, TraceWriter log)
        {
            try
            {
                log.Info(contentMessage.ToString());

                FunctionExtensions.HasValueOrThrow(avContent?.Id, "avContent", $"Unable to find record with Id: {contentMessage?.DocumentId}");

                FunctionExtensions.HasValueOrThrow(contentMessage?.RemoteAssetUri, "RemoteAssetUri");

                avContent.RemoteAssetUri = contentMessage.RemoteAssetUri;

                updatedMessage = new DocumentUpdatedMessage(contentMessage.DocumentId, contentMessage.CollectionId, contentMessage.NotificationTags)
                {
                    Title   = $"New {avContent.ContentType}!",
                    Message = avContent.DisplayName
                };
            }
            catch (Exception ex)
            {
                log.Error(ex.Message, ex);
                throw;
            }
        }
示例#3
0
        public static async Task <HttpResponseMessage> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, Routes.Post, Route = Routes.PublishContent)] DocumentUpdatedMessage updateMessage,
            [NotificationHub(ConnectionStringSetting = EnvironmentVariables.AzureWebJobsNotificationHubsConnectionString, /*Platform = NotificationPlatform.Apns,*/ TagExpression = "{NotificationTags}")] IAsyncCollector <Notification> notification,
            TraceWriter log)
        {
            log.Info(updateMessage?.ToString());

            UserStore userStore = null;

            var userId = Thread.CurrentPrincipal.GetClaimsIdentity()?.UniqueIdentifier();

            if (!string.IsNullOrEmpty(userId))
            {
                log.Info($"User is authenticated and has userId: {userId}");

                userStore = await DocumentClient.GetUserStore(userId, log);
            }


            if (!userStore?.UserRole.CanWrite() ?? false)
            {
                log.Info("Not authenticated");

                throw new HttpResponseException(HttpStatusCode.Unauthorized);
            }

            try
            {
                FunctionExtensions.HasValueOrThrow(updateMessage?.CollectionId, DocumentUpdatedMessage.CollectionIdKey);

                var template = PushTemplate.FromMessage(updateMessage);

                await notification.AddAsync(new TemplateNotification (template.GetProperties()));

                throw new HttpResponseException(HttpStatusCode.Accepted);
            }
            catch (HttpResponseException response)
            {
                return(response.Response);
            }
            catch (Exception ex)
            {
                log.Error(ex.Message, ex);
                throw;
            }
        }
示例#4
0
        public static async Task Run(
            [QueueTrigger(MessageQueues.DocumentUpdate, Connection = EnvironmentVariables.AzureWebJobsStorage)] DocumentUpdatedMessage updateMessage,
            [NotificationHub(ConnectionStringSetting = EnvironmentVariables.AzureWebJobsNotificationHubsConnectionString, TagExpression = "{NotificationTags}")] IAsyncCollector <Notification> notification,
            TraceWriter log)
        {
            try
            {
                log.Info(updateMessage?.ToString());

                FunctionExtensions.HasValueOrThrow(updateMessage?.CollectionId, DocumentUpdatedMessage.CollectionIdKey);

                var template = PushTemplate.FromMessage(updateMessage);

                await notification.AddAsync(new TemplateNotification (template.GetProperties()));
            }
            catch (Exception ex)
            {
                log.Error(ex.Message);
                throw;
            }
        }