Пример #1
0
        private async void SendHookMailAsync(MailHook mailHook, IErtisAuthEvent ertisAuthEvent)
        {
            if (mailHook.IsActive)
            {
                var membership = await this.membershipService.GetAsync(mailHook.MembershipId);

                if (membership?.MailSettings?.SmtpServer != null)
                {
                    var dynamicObject = await this.userService.GetAsync(membership.Id, ertisAuthEvent.UtilizerId);

                    var user = dynamicObject.Deserialize <User>();
                    if (user != null)
                    {
                        await Task.Run(async() =>
                        {
                            try
                            {
                                var formatter = new Ertis.TemplateEngine.Formatter();
                                var mailBody  = formatter.Format(mailHook.MailTemplate, ertisAuthEvent);
                                await this.mailService.SendMailAsync(
                                    membership.MailSettings.SmtpServer,
                                    mailHook.FromName,
                                    mailHook.FromAddress,
                                    $"{user.FirstName} {user.LastName}",
                                    user.EmailAddress,
                                    mailHook.MailSubject,
                                    mailBody
                                    );
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine("Hook mail could not sent!");
                                Console.WriteLine(ex);
                            }
                        });
                    }
                }
            }
        }
Пример #2
0
        public static Rbac GetRbacDefinition(this HttpContext httpContext, string utilizerId)
        {
            var endpoint  = httpContext.GetEndpoint();
            var formatter = new Ertis.TemplateEngine.Formatter(new Ertis.TemplateEngine.ParserOptions {
                OpenBrackets = "{", CloseBrackets = "}"
            });

            if (endpoint is RouteEndpoint routeEndpoint)
            {
                // Subject
                var rbacSubjectSegment = string.IsNullOrEmpty(utilizerId) ? RbacSegment.All : new RbacSegment(utilizerId);
                var subjectMetadata    = routeEndpoint.Metadata.FirstOrDefault(x => x.GetType() == typeof(RbacSubjectAttribute));
                if (subjectMetadata is RbacSubjectAttribute rbacSubjectAttribute)
                {
                    rbacSubjectSegment = rbacSubjectAttribute.Value;
                    if (!string.IsNullOrEmpty(rbacSubjectSegment.Value?.Trim()))
                    {
                        var rbacSubjectSegmentValue = rbacSubjectSegment.Value.Trim();
                        rbacSubjectSegmentValue = formatter.Format(rbacSubjectSegmentValue, httpContext.Request.RouteValues);
                        rbacSubjectSegment      = new RbacSegment(rbacSubjectSegmentValue);
                    }
                }

                // Resource
                var rbacResourceSegment = RbacSegment.All;
                var resourceMetadata    = routeEndpoint.Metadata.FirstOrDefault(x => x.GetType() == typeof(RbacResourceAttribute));
                if (resourceMetadata is RbacResourceAttribute rbacResourceAttribute)
                {
                    rbacResourceSegment = rbacResourceAttribute.Value;
                    if (!string.IsNullOrEmpty(rbacResourceSegment.Value?.Trim()))
                    {
                        var rbacResourceSegmentValue = rbacResourceSegment.Value.Trim();
                        rbacResourceSegmentValue = formatter.Format(rbacResourceSegmentValue, httpContext.Request.RouteValues);
                        rbacResourceSegment      = new RbacSegment(rbacResourceSegmentValue);
                    }
                }
                else
                {
                    var routePath = routeEndpoint.RoutePattern.RawText;
                    if (!string.IsNullOrEmpty(routePath))
                    {
                        rbacResourceSegment = new RbacSegment(routePath.Split('/').Last());
                    }
                }

                // Action
                var rbacActionSegment = RbacSegment.All;
                var actionMetadata    = routeEndpoint.Metadata.FirstOrDefault(x => x.GetType() == typeof(RbacActionAttribute));
                if (actionMetadata is RbacActionAttribute rbacActionAttribute)
                {
                    rbacActionSegment = rbacActionAttribute.Value;
                    if (!string.IsNullOrEmpty(rbacActionSegment.Value?.Trim()))
                    {
                        var rbacActionSegmentValue = rbacActionSegment.Value.Trim();
                        rbacActionSegmentValue = formatter.Format(rbacActionSegmentValue, httpContext.Request.RouteValues);
                        rbacActionSegment      = new RbacSegment(rbacActionSegmentValue);
                    }
                }

                // Object
                var rbacObjectSegment = RbacSegment.All;
                var objectMetadata    = routeEndpoint.Metadata.FirstOrDefault(x => x.GetType() == typeof(RbacObjectAttribute));
                if (objectMetadata is RbacObjectAttribute rbacObjectAttribute)
                {
                    rbacObjectSegment = rbacObjectAttribute.Value;
                    if (!string.IsNullOrEmpty(rbacObjectSegment.Value?.Trim()))
                    {
                        var rbacObjectSegmentValue = rbacObjectSegment.Value.Trim();
                        rbacObjectSegmentValue = formatter.Format(rbacObjectSegmentValue, httpContext.Request.RouteValues);
                        rbacObjectSegment      = new RbacSegment(rbacObjectSegmentValue);
                    }
                }

                // Rbac
                return(new Rbac(rbacSubjectSegment, rbacResourceSegment, rbacActionSegment, rbacObjectSegment));
            }

            return(default);