/*
         * These methods should be moved to the PrayerRequestsController after
         * they have been tweaked to be a bit more general use approved.
         *
         * Daniel Hazelbaker 9/29/2021
         */

        /// <summary>
        /// Prays for the specified request and optionally launches a workflow
        /// and/or records an interaction.
        /// </summary>
        /// <param name="prayerRequestGuid">The prayer request unique identifier that is being prayed for.</param>
        /// <param name="requestContext">The request context that describes the current request in process.</param>
        /// <param name="launchWorkflowGuid">The workflow type unique identifier to be launched.</param>
        /// <param name="recordInteraction">If set to <c>true</c> then an interaction will be recorded.</param>
        private bool PrayForRequest(Guid prayerRequestGuid, RockRequestContext requestContext, Guid?launchWorkflowGuid, bool recordInteraction)
        {
            return(PrayForRequest(prayerRequestGuid,
                                  requestContext.CurrentPerson,
                                  launchWorkflowGuid,
                                  recordInteraction,
                                  string.Empty,
                                  requestContext.ClientInformation?.UserAgent,
                                  requestContext.ClientInformation?.IpAddress,
                                  null));
        }
Exemplo n.º 2
0
 /// <summary>
 /// Gets the e-mail template option choices available to the individual.
 /// </summary>
 /// <param name="rockContext">The database context to use for data lookup.</param>
 /// <returns>A collection of view models that represent the e-mail templates.</returns>
 internal static List <ListItemViewModel> GetEmailTemplateOptions(RockContext rockContext, RockRequestContext requestContext)
 {
     return(new SystemCommunicationService(rockContext)
            .Queryable()
            .Where(c => c.IsActive == true)
            .ToList()
            .Where(c => c.IsAuthorized(Rock.Security.Authorization.VIEW, requestContext.CurrentPerson))
            .OrderBy(c => c.Title)
            .Select(c => new ListItemViewModel
     {
         Value = c.Guid.ToString(),
         Text = c.Title
     })
            .ToList());
 }
Exemplo n.º 3
0
        public async Task <IActionResult> Postback(int blockId, string actionName, [FromBody] JToken parameters, [FromServices] RockRequestContext rockRequestContext)
        {
            try
            {
                var blockCache = BlockCache.Get(blockId);
                var block      = blockCache.GetMappedBlockType(HttpContext.RequestServices);

                block.Block     = blockCache;
                block.PageCache = blockCache.Page;
                block.RockPage  = new RockPage(PageCache.Get(blockCache.PageId.Value), rockRequestContext);
                rockRequestContext.CurrentPage = block.RockPage;

                if (!(block is IAsyncActionBlock actionBlock))
                {
                    return(new BadRequestObjectResult("Block does not support actions."));
                }

                ActionData actionData;
                try
                {
                    actionData = parameters.ToObject <ActionData>();
                }
                catch
                {
                    return(new BadRequestObjectResult("Invalid parameter data."));
                }

                foreach (var q in Request.Query)
                {
                    actionData.Parameters.AddOrReplace(q.Key, JToken.FromObject(q.Value.ToString()));
                }

                return(await actionBlock.ProcessActionAsync(actionName, actionData));
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }
        }
Exemplo n.º 4
0
        public HttpResponseMessage GetTvmlForPage(Guid pageGuid)
        {
            var response = new HttpResponseMessage();

            var currentPerson = GetPerson();

            var page = PageCache.Get(pageGuid);

            // If page is null return 404
            if (page == null)
            {
                response.StatusCode = HttpStatusCode.NotFound;
                return(response);
            }

            // Check security
            if (!page.IsAuthorized(Rock.Security.Authorization.VIEW, currentPerson))
            {
                response.StatusCode = HttpStatusCode.Unauthorized;
                return(response);
            }

            // Get requested cache control from client (client trumps server. We'll use this to set the reponse header to help inform any CDNs
            var cacheRequest = this.Request.GetHeader("X-Rock-Tv-RequestedCacheControl");

            if (cacheRequest.IsNotNullOrWhiteSpace())
            {
                var cacheParts = cacheRequest.Split(':');

                switch (cacheParts[0])
                {
                case "public":
                {
                    var maxAgeInSeconds = cacheParts[1] != null ? cacheParts[1].AsInteger() : 777;
                    response.Headers.CacheControl = new CacheControlHeaderValue()
                    {
                        Public = true,
                        MaxAge = new TimeSpan(0, 0, maxAgeInSeconds)
                    };
                    break;
                }

                case "private":
                {
                    response.Headers.CacheControl = new CacheControlHeaderValue()
                    {
                        Private = true
                    };
                    break;
                }
                }
            }
            else
            {
                // Use cache from database
                if (page.CacheControlHeaderSettings.IsNotNullOrWhiteSpace())
                {
                    switch (page.CacheControlHeader.RockCacheablityType)
                    {
                    case Rock.Utility.RockCacheablityType.Public:
                    {
                        response.Headers.CacheControl = new CacheControlHeaderValue()
                        {
                            Public       = true,
                            MaxAge       = new TimeSpan(0, 0, page.CacheControlHeader.MaxAge.ToSeconds()),
                            SharedMaxAge = new TimeSpan(0, 0, page.CacheControlHeader.SharedMaxAge.ToSeconds())
                        };
                        break;
                    }

                    case Rock.Utility.RockCacheablityType.Private:
                    {
                        response.Headers.CacheControl = new CacheControlHeaderValue()
                        {
                            Private = true
                        };
                        break;
                    }
                    }
                }
            }

            // Get content and return it
            try
            {
                var site = SiteCache.Get(page.SiteId);
                var applicationSettings = JsonConvert.DeserializeObject <AppleTvApplicationSettings>(site.AdditionalSettings);

                var mergeFields = RockRequestContext.GetCommonMergeFields();
                mergeFields.Add("SiteStyles", applicationSettings.ApplicationStyles);
                mergeFields.Add("CurrentPage", page);
                mergeFields.Add("CurrentPersonCanEdit", page.IsAuthorized(Rock.Security.Authorization.EDIT, currentPerson));
                mergeFields.Add("CurrentPersonCanAdministrate", page.IsAuthorized(Rock.Security.Authorization.ADMINISTRATE, currentPerson));
                //mergeFields.Add( "PageParameter", this.Request.GetQueryNameValuePairs() );
                mergeFields.Add("TvShellVersion", RockRequestContext.GetHeader("X-Rock-TvShellVersion"));
                mergeFields.Add("TvAppTheme", RockRequestContext.GetHeader("X-Rock-AppTheme"));
                mergeFields.Add("IsDemoModeEnabled", RockRequestContext.GetHeader("X-Rock-IsDemoModeEnabled"));

                // Get device data
                var deviceData = this.Request.GetHeader("X-Rock-DeviceData");

                if (deviceData.IsNotNullOrWhiteSpace())
                {
                    mergeFields.Add("DeviceData", JsonConvert.DeserializeObject <DeviceData>(deviceData));
                }

                // Get the page response content from the AdditionalSettings property
                var pageResponse = JsonConvert.DeserializeObject <ApplePageResponse>(page.AdditionalSettings);

                // Run Lava across the content
                pageResponse.Content = pageResponse.Content.ResolveMergeFields(mergeFields, currentPerson, "All");

                response.Content    = new StringContent(pageResponse.ToJson(), System.Text.Encoding.UTF8, "application/json");
                response.StatusCode = HttpStatusCode.OK;
                return(response);
            }
            catch
            {
                // Ooops...
                response.StatusCode = HttpStatusCode.InternalServerError;
                return(response);
            }
        }
Exemplo n.º 5
0
 /// <summary>
 /// Initializes a new instance of the <see cref="RockPage"/> class.
 /// </summary>
 /// <param name="id">The identifier.</param>
 /// <exception cref="System.Exception">Page not found</exception>
 public RockPage(PageCache pageCache, RockRequestContext context)
 {
     PageCache = pageCache ?? throw new ArgumentNullException(nameof(pageCache), "pageCache cannot be null.");
     Context   = context;
 }