/// <summary>
        /// The background task started by dotnet core framework
        /// </summary>
        /// <param name="stoppingToken">Token used when stopping the application</param>
        protected async override Task ExecuteAsync(CancellationToken stoppingToken)
        {
            while (false == stoppingToken.IsCancellationRequested)
            {
                // Get next tigger call information
                var triggerCall = await _notificationQueue.DequeueAsync(stoppingToken);

                try
                {
                    // create new db context
                    using var scope = _serviceProvider.CreateScope();

                    // Create entry in history
                    ITriggerHistoryManager triggerHistoryManager = scope.ServiceProvider.GetRequiredService <ITriggerHistoryManager>();
                    await TriggerHistoryEntryAsync(triggerCall, triggerHistoryManager);

                    // evaludate notification rules and send messages
                    INotificationRulesManager notificationRulesManager = scope.ServiceProvider.GetRequiredService <INotificationRulesManager>();
                    await EvaluateNotificationRulesAsync(triggerCall, notificationRulesManager);
                }
                catch (Exception ex)
                {
                    this._logger.LogError(ex, $"Error occurred executing {nameof(triggerCall)}.");
                }
            }
        }
 public HomeController(ILogger <HomeController> logger,
                       ITriggerHistoryManager triggerHistoryManager,
                       INotificationRulesManager notificationRulesManager,
                       INotificationHistoryManager notificationHistoryManager)
 {
     _logger = logger;
     _triggerHistoryManager      = triggerHistoryManager;
     _notificationRulesManager   = notificationRulesManager;
     _notificationHistoryManager = notificationHistoryManager;
 }
        /// <summary>
        ///  Finds all notification rules for a trigger call and sends the notifications
        /// </summary>
        /// <param name="call">Trigger call</param>
        /// <returns></returns>
        private async Task EvaluateNotificationRulesAsync(TriggerCall call, INotificationRulesManager notificationRulesManager)
        {
            // Get all rules for the rigger
            var triggerRules = await notificationRulesManager.GetRulesOwnedTiggerType(call.Type).ToListAsync();

            // Apply filters
            var filteredRules = _conditionEval.EvalFilterAsync(triggerRules, call.EnvironmentVars, call.Input);

            // Send them notifications for each rule
            await foreach (var rule in filteredRules)
            {
                // Send notifications in parallel
                await RunRuleAsync(rule, call);
            }
        }
 public RulesController(ILogger <RulesController> logger,
                        PncDbContext dbContect,
                        IAuthorizationService authorizationService,
                        UserManager <User> userManager,
                        RoleManager <Role> roleManager,
                        INotificationRulesManager notificationRulesManager,
                        ITriggerHistoryManager triggerHistoryManager)
 {
     _logger = logger;
     _authorizationService     = authorizationService;
     _userManager              = userManager;
     _roleManager              = roleManager;
     _notificationRulesManager = notificationRulesManager;
     _triggerHistoryManager    = triggerHistoryManager;
 }
 public AdminController(ILogger <AdminController> logger,
                        UserManager <User> userManager,
                        RoleManager <Role> roleManager,
                        IAuthorizationService authorizationService,
                        ILdapService ldapService,
                        IAppSettingsManager appSettingsManager,
                        INotificationRulesManager rulesManager)
 {
     _logger               = logger;
     _userManager          = userManager;
     _roleManager          = roleManager;
     _authorizationService = authorizationService;
     _ldapService          = ldapService;
     _appSettingsManager   = appSettingsManager;
     _rulesManager         = rulesManager;
 }
        /// <summary>
        /// Deletes a role (group) and all recipient entries for this group
        /// </summary>
        /// <param name="roleManager">UserManager instance</param>
        /// <param name="id">ID of user to delete</param>
        /// <param name="rulesManager">NotificationRulesManager instance</param>
        /// <exception cref="System.Collections.Generic.KeyNotFoundException">Thrown when role is not found by ID</exception>
        /// <exception cref="System.InvalidOperationException">Thrown when role can't be deleted</exception>
        public static async Task DeleteByIdAsync(this RoleManager <Role> roleManager, string id, INotificationRulesManager rulesManager)
        {
            // Find user by ID
            var role = await roleManager.FindByIdAsync(id);

            if (role == null)
            {
                throw new KeyNotFoundException("Role was not found");
            }

            if (role.IsBuildIn)
            {
                throw new InvalidOperationException("Build-In groups can't be deleted");
            }

            // Delete rule recipielt entries
            await rulesManager.DeleteRoleRecipientAsync(role);

            // Delete role
            if (!(await roleManager.DeleteAsync(role)).Succeeded)
            {
                throw new InvalidOperationException("Group can't be deleted");
            }
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Deletes a user and all recipient entries for this user
        /// </summary>
        /// <param name="userManager">UserManager instance</param>
        /// <param name="id">ID of user to delete</param>
        /// <param name="rulesManager">NotificationRulesManager instance</param>
        /// <exception cref="System.InvalidOperationException">Thrown when user can't be deleted</exception>
        public static async Task DeleteByIdAsync(this UserManager <User> userManager, string id, INotificationRulesManager rulesManager)
        {
            // Find user by ID
            var user = await userManager.FindByIdAsync(id);

            if (user == null)
            {
                throw new KeyNotFoundException("User was not found");
            }

            // Delete rule recipielt entries
            await rulesManager.DeleteUserRecipientAsync(user);

            // Delete user
            if (!(await userManager.DeleteAsync(user)).Succeeded)
            {
                throw new InvalidOperationException("User can't be deleted");
            }
        }