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; } }
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; } }
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; } }