Beispiel #1
0
        public static async Task <HttpResponseMessage> PushForUsersAsync([HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequestMessage req, TraceWriter log)
        {
            log.Info("C# HTTP trigger function processed a request.");

            var appCenterToken = GetEnvironmentVariable("AppCenterToken");
            var ownerName      = GetEnvironmentVariable("OwnerName");

            if (!IsProperlyConfigured(appCenterToken, ownerName, log))
            {
                return(req.CreateResponse(HttpStatusCode.ExpectationFailed, new
                {
                    Error = "Server Fault.The Server is missing critical configuration settings."
                }));
            }

            try
            {
                string requestBody = await req.Content.ReadAsStringAsync();

                if (string.IsNullOrWhiteSpace(requestBody))
                {
                    return(req.CreateResponse(HttpStatusCode.BadRequest, "The request has no content"));
                }

                var request = JsonConvert.DeserializeObject <UserNotificationRequest>(requestBody);
                var db      = new AppCenterUserTrackingContext();

                var registrations = db.UserRegistrations.Where(reg => request.Users.Contains(reg.UserId));

                var targets = new Dictionary <string, NotificationTarget>();
                foreach (var platform in registrations.Select(r => r.Platform).Distinct())
                {
                    var target = new NotificationTarget
                    {
                        Type    = TargetType.Devices,
                        Devices = registrations.Where(r => r.Platform == platform).Select(r => r.DeviceId)
                    };
                    targets.Add(platform, target);
                }

                var notificationRequest = new NotificationRequest
                {
                    Targets = targets,
                    Content = request.Content
                };
                var responses = await ProcessTargetsAsync(notificationRequest, ownerName, appCenterToken, log);

                return(GenerateResponse(req, responses));
            }
            catch (Exception ex)
            {
                log.Error("Unexpected Error occurred", ex);
                return(req.CreateErrorResponse(HttpStatusCode.InternalServerError, ex));
            }
        }
Beispiel #2
0
        public static void Run([ServiceBusTrigger("knownuser", AccessRights.Listen, Connection = "")] string myQueueItem, TraceWriter log)
        {
            log.Info($"C# ServiceBus queue trigger function processed message: {myQueueItem}");
            var user = JsonConvert.DeserializeObject <AppCenterPushRelay.Models.UserRegistration>(myQueueItem);

            var db = new AppCenterUserTrackingContext();

            if (!db.UserRegistrations.Any(ur => ur.UserId == user.UserId && ur.DeviceId == user.DeviceId))
            {
                db.UserRegistrations.Add(user);
                db.SaveChanges();
            }
        }