Esempio n. 1
0
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            List <Type> typeToRegisters = new List <Type>();

            foreach (var module in GlobalContext.Modules.Where(x => x.ModuleStatus == (int)NccModule.NccModuleStatus.Active).ToList())
            {
                try
                {
                    typeToRegisters.AddRange(module.Assembly.DefinedTypes.Select(t => t.AsType()));
                }
                catch (Exception ex)
                {
                    GlobalMessageRegistry.RegisterMessage(
                        new GlobalMessage()
                    {
                        For         = GlobalMessage.MessageFor.Admin,
                        Registrater = "OnModelCreating",
                        Text        = ex.Message,
                        Type        = GlobalMessage.MessageType.Error
                    },
                        new TimeSpan(0, 0, 60)
                        );
                }
            }

            //ScanEntities(modelBuilder, typeToRegisters);
            //SetTableNameByConvention(modelBuilder);
            base.OnModelCreating(modelBuilder);
            RegisterUserModuleModels(modelBuilder, typeToRegisters);
            RegisterCoreModels(modelBuilder);
        }
        public async Task LoadModuleMenus(ILogger logger)
        {
            _logger = logger;

            foreach (var item in instantiatedModuleList.Where(x => x.ModuleStatus == (int)NccModule.NccModuleStatus.Active).ToList())
            {
                try
                {
                    item.Menus = LoadMenus(item);
                }
                catch (Exception ex)
                {
                    _logger.LogError(ex.Message, ex);
                    GlobalMessageRegistry.RegisterMessage(
                        new GlobalMessage()
                    {
                        For         = GlobalMessage.MessageFor.Admin,
                        Registrater = "LoadMenus",
                        Text        = ex.Message,
                        Type        = GlobalMessage.MessageType.Error
                    },
                        new TimeSpan(0, 2, 0)
                        );
                }
            }
        }
Esempio n. 3
0
        public void AddModuleAuthorizationHandlers(IServiceCollection services)
        {
            services.AddScoped <NccAuthRequireHandler>();
            var activeModules = instantiatedModuleList.Where(x => x.ModuleStatus == (int)NccModule.NccModuleStatus.Active).ToList();

            foreach (var module in activeModules)
            {
                try
                {
                    var actionFilters = module.Assembly.GetTypes().Where(x => typeof(INccAuthorizationHandler).IsAssignableFrom(x)).ToList();
                    foreach (var item in actionFilters)
                    {
                        services.AddScoped(item);
                    }
                }
                catch (Exception ex)
                {
                    GlobalMessageRegistry.RegisterMessage(
                        new GlobalMessage()
                    {
                        For         = GlobalMessage.MessageFor.Admin,
                        Registrater = "AddModuleAuthorizationHandlers",
                        Text        = ex.Message,
                        Type        = GlobalMessage.MessageType.Error
                    },
                        new TimeSpan(0, 0, 30)
                        );
                }
            }
        }
        public void AddShortcodes(IServiceCollection services, ILogger logger)
        {
            _logger = logger;
            var activeModules = instantiatedModuleList.Where(x => x.ModuleStatus == (int)NccModule.NccModuleStatus.Active).ToList();

            foreach (var module in activeModules)
            {
                try
                {
                    var shortCodeTypeList = module.Assembly.GetTypes().Where(x => typeof(IShortCode).IsAssignableFrom(x)).ToList();
                    foreach (var item in shortCodeTypeList)
                    {
                        services.AddScoped(item);
                    }
                }
                catch (Exception ex)
                {
                    _logger.LogError(ex.Message, ex);
                    GlobalMessageRegistry.RegisterMessage(
                        new GlobalMessage()
                    {
                        For         = GlobalMessage.MessageFor.Admin,
                        Registrater = "AddShortcodes",
                        Text        = ex.Message,
                        Type        = GlobalMessage.MessageType.Error
                    },
                        new TimeSpan(0, 0, 30)
                        );
                }
            }
        }
Esempio n. 5
0
 public void AddModuleWidgets(IServiceCollection services)
 {
     foreach (var module in instantiatedModuleList)
     {
         try
         {
             module.Widgets = new List <Widget>();
             var widgetTypeList = module.Assembly.GetTypes().Where(x => typeof(Widget).IsAssignableFrom(x)).ToList();
             foreach (var widgetType in widgetTypeList)
             {
                 services.AddScoped(widgetType);
             }
         }
         catch (Exception ex)
         {
             GlobalMessageRegistry.RegisterMessage(
                 new GlobalMessage()
             {
                 For         = GlobalMessage.MessageFor.Admin,
                 Registrater = "AddModuleWidgets",
                 Text        = ex.Message,
                 Type        = GlobalMessage.MessageType.Error
             },
                 new TimeSpan(0, 0, 30)
                 );
         }
     }
 }
Esempio n. 6
0
        private static void RegisterUserModuleModels(ModelBuilder modelBuilder, IEnumerable <Type> typeToRegisters)
        {
            var customModelBuilderTypes = typeToRegisters.Where(x => typeof(IModelBuilder).IsAssignableFrom(x));

            foreach (var builderType in customModelBuilderTypes)
            {
                try
                {
                    if (builderType != null && builderType != typeof(IModelBuilder))
                    {
                        var builder = (IModelBuilder)Activator.CreateInstance(builderType);
                        builder.Build(modelBuilder);
                    }
                }
                catch (Exception ex)
                {
                    GlobalMessageRegistry.RegisterMessage(
                        new GlobalMessage()
                    {
                        For         = GlobalMessage.MessageFor.Admin,
                        Registrater = "RegisterUserModuleModels",
                        Text        = ex.Message,
                        Type        = GlobalMessage.MessageType.Error
                    },
                        new TimeSpan(0, 0, 60)
                        );
                }
            }
        }
Esempio n. 7
0
 public JsonResult RemoveGlobalMessage(string id)
 {
     GlobalMessageRegistry.UnRegisterMessage(id);
     return(Json(new ApiResponse()
     {
         IsSuccess = true, Message = "Success"
     }));
 }
Esempio n. 8
0
        /// <summary>
        /// Provide admin menu and it's items
        /// </summary>
        /// <returns>A dictionary of menu and menu items. Key is the menu and valus is a list of menu items.</returns>
        public static Dictionary <AdminMenu, List <AdminMenuItem> > GetModulesAdminMenus()
        {
            Dictionary <AdminMenu, List <AdminMenuItem> > adminMenuDic = new Dictionary <AdminMenu, List <AdminMenuItem> >();

            foreach (var module in GlobalContext.GetActiveModules())
            {
                var controllers = module.Assembly.DefinedTypes.Select(t => t.AsType()).Where(x => typeof(NccController).IsAssignableFrom(x));
                foreach (var controller in controllers)
                {
                    try
                    {
                        var atrib = controller.GetTypeInfo().GetCustomAttribute <AdminMenu>();
                        if (atrib != null && atrib.IsVisible)
                        {
                            var key = adminMenuDic.Keys.Where(x => x.Name == atrib.Name).FirstOrDefault();

                            if (key == null)
                            {
                                adminMenuDic.Add(atrib, new List <AdminMenuItem>());
                                key = atrib;
                            }
                            var actions = controller.GetMethods();
                            foreach (var item in actions)
                            {
                                var menuItem = item.GetCustomAttribute <AdminMenuItem>();
                                if (menuItem != null && menuItem.IsVisible)
                                {
                                    menuItem.Module     = module.ModuleName;
                                    menuItem.Area       = module.Area;
                                    menuItem.Controller = controller.Name.Substring(0, controller.Name.Length - 10);
                                    menuItem.Action     = item.Name;
                                    adminMenuDic[key].Add(menuItem);

                                    if (string.IsNullOrWhiteSpace(module.Area))
                                    {
                                        menuItem.Url = "/" + menuItem.Controller + "/" + menuItem.Action;
                                    }
                                    else
                                    {
                                        menuItem.Url = "/" + module.Area + "/" + menuItem.Controller + "/" + menuItem.Action;
                                    }
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        GlobalMessageRegistry.RegisterMessage(new GlobalMessage()
                        {
                            For = GlobalMessage.MessageFor.Admin, Registrater = "MenuHelper", Text = ex.Message, Type = GlobalMessage.MessageType.Error
                        }, new TimeSpan(0, 1, 0));
                    }
                }
            }
            return(adminMenuDic);
        }
 public ThemeActivity Handle(OnThemeActivity message)
 {
     GlobalMessageRegistry.RegisterMessage(new GlobalMessage()
     {
         For         = GlobalMessage.MessageFor.Both,
         Registrater = "CoreModule",
         Text        = message.Data.ActivityType.ToString(),
         Type        = GlobalMessage.MessageType.Info
     }, new System.TimeSpan(0, 0, 10));
     return(message.Data);
 }
Esempio n. 10
0
 private void RegisterErrorMessage(string message)
 {
     GlobalMessageRegistry.RegisterMessage(
         new GlobalMessage()
     {
         Registrater = typeof(ThemeManager).Name,
         Text        = message,
         Type        = GlobalMessage.MessageType.Error,
         For         = GlobalMessage.MessageFor.Admin
     },
         new TimeSpan(0, 1, 0)
         );
 }
Esempio n. 11
0
 public void OnException(ExceptionContext context)
 {
     _logger.LogError(context.Exception, "Global Exception Filter");
     GlobalMessageRegistry.RegisterMessage(
         new GlobalMessage()
     {
         For         = GlobalMessage.MessageFor.Admin,
         Registrater = "GlobalExceptionFilter",
         Text        = context.Exception?.Message,
         Type        = GlobalMessage.MessageType.Error
     },
         new TimeSpan(0, 0, 10)
         );
 }
Esempio n. 12
0
        public List <Widget> RegisterModuleWidgets(IMvcBuilder mvcBuilder, IServiceCollection services, IServiceProvider serviceProvider, ILogger logger)
        {
            _logger = logger;
            var widgetList = new List <Widget>();

            foreach (var module in instantiatedModuleList)
            {
                try
                {
                    if (module.ModuleStatus == (int)NccModule.NccModuleStatus.Active)
                    {
                        module.Widgets = new List <Widget>();
                        var widgetTypeList = module.Assembly.GetTypes().Where(x => typeof(Widget).IsAssignableFrom(x)).ToList();

                        foreach (var widgetType in widgetTypeList)
                        {
                            //var widgetInstance = (IWidget)Activator.CreateInstance(widgetType);
                            var widgetInstance = (Widget)serviceProvider.GetService(widgetType);
                            module.Widgets.Add(widgetInstance);
                            widgetList.Add(widgetInstance);
                            GlobalContext.Widgets.Add(widgetInstance);
                            //GlobalContext.WidgetTypes.Add(widgetInstance.WidgetId, widgetType);
                        }
                    }
                }
                catch (Exception ex)
                {
                    _logger.LogError(ex.Message, ex);
                    GlobalMessageRegistry.RegisterMessage(
                        new GlobalMessage()
                    {
                        For         = GlobalMessage.MessageFor.Admin,
                        Registrater = "RegisterModuleWidget",
                        Text        = ex.Message,
                        Type        = GlobalMessage.MessageType.Error
                    },
                        new TimeSpan(0, 0, 30)
                        );
                }
            }
            return(widgetList);
        }
Esempio n. 13
0
        public Task SendEmailAsync(string email, string subject, string message)
        {
            var smtpSettings = _nccSettingsService.GetByKey <SmtpSettings>();

            if (smtpSettings == null)
            {
                _logger.LogError("SMTP Settings not found");
                GlobalMessageRegistry.RegisterMessage(
                    new GlobalMessage()
                {
                    For         = GlobalMessage.MessageFor.Both,
                    Registrater = nameof(AuthMessageSender),
                    Type        = GlobalMessage.MessageType.Error,
                    Text        = "Email Send Failed. SMTP Settings not set yet."
                },
                    new System.TimeSpan(0, 1, 0)
                    );
            }
            else
            {
                var emailMessage = new MimeMessage();

                emailMessage.From.Add(new MailboxAddress(smtpSettings.FromName, smtpSettings.FromEmail));
                emailMessage.To.Add(new MailboxAddress("User", email));
                emailMessage.Subject = subject;
                emailMessage.Body    = new TextPart(TextFormat.Html)
                {
                    Text = message
                };

                using (var client = new SmtpClient())
                {
                    client.LocalDomain = smtpSettings.Host;
                    client.ConnectAsync(smtpSettings.Host, smtpSettings.Port, smtpSettings.UseSSL).Wait();
                    client.Authenticate(new NetworkCredential(smtpSettings.UserName, smtpSettings.Password));
                    client.SendAsync(emailMessage).Wait();
                    client.DisconnectAsync(true).Wait();
                }
            }

            return(Task.FromResult(0));
        }
Esempio n. 14
0
        public void LoadModuleInfo(IModule module, IModule moduleInfo)
        {
            var moduleConfigFile = Path.Combine(moduleInfo.Path, Constants.ModuleConfigFileName);

            if (File.Exists(moduleConfigFile))
            {
                var moduleInfoFileJson = File.ReadAllText(moduleConfigFile);
                var loadedModule       = JsonConvert.DeserializeObject <Module>(moduleInfoFileJson);
                module.ModuleId      = loadedModule.ModuleId;
                module.AntiForgery   = loadedModule.AntiForgery;
                module.Author        = loadedModule.Author;
                module.Category      = loadedModule.Category;
                module.Dependencies  = loadedModule.Dependencies;
                module.Description   = loadedModule.Description;
                module.ModuleId      = loadedModule.ModuleId;
                module.TablePrefix   = loadedModule.TablePrefix;
                module.ModuleTitle   = loadedModule.ModuleTitle;
                module.MinNccVersion = loadedModule.MinNccVersion;
                module.MaxNccVersion = loadedModule.MaxNccVersion;
                module.SortName      = loadedModule.SortName;
                module.Version       = loadedModule.Version;
                module.Website       = loadedModule.Website;
                module.Assembly      = moduleInfo.Assembly;
                module.Path          = moduleInfo.Path;
                module.ModuleStatus  = moduleInfo.ModuleStatus;
                module.Folder        = moduleInfo.Folder;
            }
            else
            {
                GlobalMessageRegistry.RegisterMessage(
                    new GlobalMessage()
                {
                    For         = GlobalMessage.MessageFor.Admin,
                    Registrater = "LoadModuleInfo",
                    Text        = $"Could not load module info for '{module.ModuleTitle}'",
                    Type        = GlobalMessage.MessageType.Error
                },
                    new TimeSpan(0, 0, 30)
                    );
            }
        }
Esempio n. 15
0
        public List <IModule> AddModulesAsApplicationPart(IMvcBuilder mvcBuilder, IServiceCollection services, IServiceProvider serviceProvider)
        {
            var nccSettingsService = serviceProvider.GetService <INccSettingsService>();

            foreach (var module in modules)
            {
                try
                {
                    var moduleInitializerType = module.Assembly.GetTypes().Where(x => typeof(IModule).IsAssignableFrom(x)).FirstOrDefault();

                    if (moduleInitializerType != null && moduleInitializerType != typeof(IModule))
                    {
                        var moduleInstance = (IModule)Activator.CreateInstance(moduleInitializerType);
                        LoadModuleInfo(moduleInstance, module);

                        NccModule.NccModuleStatus moduleStatus = VerifyModuleInstallation(moduleInstance, serviceProvider);
                        moduleInstance.ModuleStatus = (int)moduleStatus;

                        if (moduleStatus == NccModule.NccModuleStatus.Active)
                        {
                            // Register controller from modules
                            mvcBuilder.AddApplicationPart(module.Assembly);
                            // Register dependency in modules
                            LoadModuleDependencies(module.Path, module.Folder);
                            moduleInstance.Init(services, nccSettingsService);
                        }
                        else if (moduleStatus == NccModule.NccModuleStatus.Duplicate)
                        {
                            //TODO: Raise duplicate error message
                            GlobalMessageRegistry.RegisterMessage(
                                new GlobalMessage()
                            {
                                For         = GlobalMessage.MessageFor.Admin,
                                Registrater = "AddModulesAsApplicationPart",
                                Text        = $"Duplicate module {module.ModuleTitle}",
                                Type        = GlobalMessage.MessageType.Error
                            },
                                new TimeSpan(0, 0, 30)
                                );
                            continue;
                        }

                        instantiatedModuleList.Add(moduleInstance);
                        GlobalContext.Modules.Add(moduleInstance);
                    }
                }
                catch (ReflectionTypeLoadException rtle)
                {
                }
                catch (Exception ex)
                {
                    GlobalMessageRegistry.RegisterMessage(
                        new GlobalMessage()
                    {
                        For         = GlobalMessage.MessageFor.Admin,
                        Registrater = "AddModulesAsApplicationPart",
                        Text        = ex.Message,
                        Type        = GlobalMessage.MessageType.Error
                    },
                        new TimeSpan(0, 0, 60)
                        );
                }
            }

            GlobalContext.SetModuleDependencies(_moduleDependencies);

            services.Configure <RazorViewEngineOptions>(options =>
            {
                options.ViewLocationExpanders.Add(new ModuleViewLocationExpendar());
            });

            mvcBuilder.AddRazorOptions(o =>
            {
                foreach (var module in instantiatedModuleList.Where(x => x.ModuleStatus == (int)NccModule.NccModuleStatus.Active).ToList())
                {
                    o.AdditionalCompilationReferences.Add(MetadataReference.CreateFromFile(module.Assembly.Location));
                }
            });

            return(instantiatedModuleList);
        }
Esempio n. 16
0
        public static string GetGlobalMessages(GlobalMessage.MessageFor messageFor)
        {
            var content  = "";
            var messages = GlobalMessageRegistry.GetMessages(messageFor);

            foreach (var item in messages)
            {
                var cssClass = "";
                if (item.Type == GlobalMessage.MessageType.Error)
                {
                    cssClass = "alert alert-danger";
                }
                else if (item.Type == GlobalMessage.MessageType.Info)
                {
                    cssClass = "alert alert-info";
                }
                else if (item.Type == GlobalMessage.MessageType.Success)
                {
                    cssClass = "alert alert-success";
                }
                else if (item.Type == GlobalMessage.MessageType.Warning)
                {
                    cssClass = "alert alert-warning";
                }

                var registerer = $"<strong>{item.Registrater}:</strong>";

                var close = "";
                if (item.ForUsers.Count > 0)
                {
                    var user = GlobalContext.GetCurrentUserName();
                    if (string.IsNullOrEmpty(user) == false && item.ForUsers.Contains(user))
                    {
                        close    = $"<a href='#' data-ncc-global-message-id='{item.MessageId}' class='close-ncc-global-message pull-right'>X</a>";
                        content += $"<div id='{item.MessageId}' class='{cssClass}' style='margin-bottom:5px;padding:10px 20px;' >{registerer}{item.Text} {close}</div>";
                    }
                }
                else
                {
                    content += $"<div id='{item.MessageId}' class='{cssClass}' style='margin-bottom:5px;padding:10px 20px;' >{registerer}{item.Text} {close}</div>";
                }
            }

            if (string.IsNullOrEmpty(content) == false)
            {
                content += "<script>";
                content += @"
                    $(document).ready(function(){
                        $('.close-ncc-global-message').on('click',function(){
                            var id = $(this).attr('data-ncc-global-message-id');  
                            $.ajax({
                                url:'/CmsHome/RemoveGlobalMessage',
                                method:'POST',
                                data:{id:id},
                                success: function(rsp){
                                    if(rsp.isSuccess){
                                        $('#'+id).remove();
                                    }
                                    else{
                                        NccAlert.ShowError('Could not remove');
                                    }
                                },
                                error:function(){
                                    NccAlert.ShowError('Could not remove');
                                }
                            }); 
                        });
                    });
                ";
                content += "</script>";
            }

            return(content);
        }
Esempio n. 17
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            try
            {
                _services = services;

                _services.AddScoped <IEmailSender, AuthMessageSender>();
                _services.AddScoped <ISmsSender, AuthMessageSender>();
                _services.AddSingleton <IHttpContextAccessor, HttpContextAccessor>();
                _services.AddSingleton <IActionContextAccessor, ActionContextAccessor>();

                _serviceProvider = _services.Build(ConfigurationRoot, _hostingEnvironment);

                _services.AddLogging(loggingBuilder =>
                                     loggingBuilder.AddSerilog(dispose: true));

                _services.AddOptions();
                _services.AddSingleton(typeof(IStringLocalizer), typeof(NccStringLocalizer <SharedResource>));
                _services.AddLocalization();

                _mvcBuilder = _services.AddMvc(config =>
                {
                    var policy = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build();
                    config.Filters.Add(new AuthorizeFilter(policy));
                    config.CacheProfiles.Add(NccCacheProfile.Default,
                                             new CacheProfile()
                    {
                        VaryByHeader    = "User-Agent",
                        Duration        = 300,
                        VaryByQueryKeys = new string[] { "id", "name", "pageNumber", "page", "pageSize", "model", "lang", "status", "sessionId", "requestId", "start", "slug", }
                    });
                });

                _mvcBuilder.AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix);
                _mvcBuilder.AddDataAnnotationsLocalization(options =>
                {
                    options.DataAnnotationLocalizerProvider = (type, factory) => new NccStringLocalizer <SharedResource>(factory, new HttpContextAccessor());
                });

                _services.AddMaintenance(() => _setupConfig.IsMaintenanceMode, Encoding.UTF8.GetBytes("<div style='width:100%;text-align:center; padding-top:10px;'><h1>" + _setupConfig.MaintenanceMessage + "</h1></div>"), "text/html", _setupConfig.MaintenanceDownTime * 60);

                _services.AddSession(options =>
                {
                    options.Cookie.Name     = ".DamaCoreCMS.Cookie.Session";
                    options.IdleTimeout     = TimeSpan.FromMinutes(20);
                    options.Cookie.HttpOnly = true;
                });

                _services.AddResponseCacheingAndCompression(_serviceProvider);

                _services.AddSingleton(Configuration);

                _services.AddNccCoreModuleServices();
                _serviceProvider = _services.Build(ConfigurationRoot, _hostingEnvironment);

                _services.SetGlobalCache(_serviceProvider);

                var themeFolder             = Path.Combine(_hostingEnvironment.ContentRootPath, NccInfo.ThemeFolder);
                var moduleFolder            = _hostingEnvironment.ContentRootFileProvider.GetDirectoryContents(NccInfo.ModuleFolder);
                var coreModuleFolder        = _hostingEnvironment.ContentRootFileProvider.GetDirectoryContents(NccInfo.CoreModuleFolder);
                var themesDirectoryContents = _hostingEnvironment.ContentRootFileProvider.GetDirectoryContents(NccInfo.ThemeFolder);

                _themeManager.ScanThemeDirectory(themeFolder);
                _themeManager.RegisterThemes(_mvcBuilder, _services, _serviceProvider, themesDirectoryContents);

                var loggerFactory = _serviceProvider.GetService <ILoggerFactory>();
                var logger        = loggerFactory.CreateLogger <Startup>();

                _moduleManager.LoadModules(coreModuleFolder, logger);
                _moduleManager.LoadModules(moduleFolder, logger);

                _services.AddModuleDependencies(_mvcBuilder);

                if (SetupHelper.IsDbCreateComplete)
                {
                    _startup.SelectDatabase(_services);
                    _serviceProvider = _services.Build(ConfigurationRoot, _hostingEnvironment);
                    _moduleManager.AddModulesAsApplicationPart(_mvcBuilder, _services, _serviceProvider, logger);

                    _moduleManager.AddModuleServices(_services, logger);
                    _moduleManager.AddModuleFilters(_services, logger);
                    _moduleManager.AddShortcodes(_services, logger);
                    _moduleManager.AddModuleWidgets(_services, logger);
                    _moduleManager.AddModuleAuthorizationHandlers(_services, logger);

                    _serviceProvider = _services.Build(ConfigurationRoot, _hostingEnvironment);

                    _services.AddCustomizedIdentity(_serviceProvider.GetService <INccSettingsService>());
                    _moduleManager.LoadModuleMenus(logger);
                }

                var defaultCulture = new RequestCulture("en");

                if (SetupHelper.IsAdminCreateComplete)
                {
                    GlobalContext.SetupConfig = SetupHelper.LoadSetup();
                    defaultCulture            = new RequestCulture(GlobalContext.SetupConfig.Language);
                }

                _services.Configure <RouteOptions>(options =>
                {
                    options.ConstraintMap.Add("lang", typeof(LanguageRouteConstraint));
                });

                _services.Configure <RequestLocalizationOptions>(
                    opts =>
                {
                    var supportedCultures      = SupportedCultures.Cultures;
                    opts.DefaultRequestCulture = defaultCulture;
                    opts.SupportedCultures     = supportedCultures;
                    opts.SupportedUICultures   = supportedCultures;

                    var provider = new RouteDataRequestCultureProvider();
                    provider.RouteDataStringKey   = "lang";
                    provider.UIRouteDataStringKey = "lang";
                    provider.Options             = opts;
                    opts.RequestCultureProviders = new[] { provider };
                }
                    );

                _services.Configure <ClassLibraryLocalizationOptions>(
                    options => options.ResourcePaths = new Dictionary <string, string>
                {
                    { "DamaCoreCMS.Framework", "i18n/Resources" },
                    { "DamaCoreCMS.Web", "Resources" }
                }
                    );

                _serviceProvider = _services.Build(ConfigurationRoot, _hostingEnvironment);
                _serviceProvider = _services.BuildModules(ConfigurationRoot, _hostingEnvironment);

                if (SetupHelper.IsDbCreateComplete)
                {
                    _themeManager.RegisterThemeWidgets(_mvcBuilder, _services, _serviceProvider, themesDirectoryContents);
                    _moduleManager.RegisterModuleWidgets(_mvcBuilder, _services, _serviceProvider, logger);
                    _moduleManager.RegisterModuleFilters(_mvcBuilder, _serviceProvider, logger);
                    _moduleManager.RegisterModuleShortCodes(_mvcBuilder, _serviceProvider);
                }

                GlobalContext.ServiceProvider   = _serviceProvider;
                GlobalContext.Services          = _services;
                DamaCoreCMSHost.Mediator        = _serviceProvider.GetService <IMediator>();
                DamaCoreCMSHost.Services        = _services;
                DamaCoreCMSHost.ServiceProvider = _serviceProvider;
                GlobalMessageRegistry.LoadMessagesFromStorage();
            }
            catch (Exception ex)
            {
                _exceptions[ExceptionsOnConfigureServices].Add(ex);
            }
        }
Esempio n. 18
0
        public void AddModuleServices(IServiceCollection services)
        {
            foreach (var module in instantiatedModuleList)
            {
                try
                {
                    if (module.ModuleStatus == (int)NccModule.NccModuleStatus.Active)
                    {
                        var repositoryTypes = module.Assembly.GetTypes().Where(x => x.BaseType.IsGenericType).Where(y => y.BaseType.GetGenericTypeDefinition() == typeof(BaseRepository <,>)).ToList();
                        foreach (var item in repositoryTypes)
                        {
                            var singleton = item.GetInterfaces().Where(x => typeof(ISingleton).IsAssignableFrom(x)).FirstOrDefault();
                            if (singleton != null)
                            {
                                services.AddSingleton(item);
                                continue;
                            }

                            var scoped = item.GetInterfaces().Where(x => typeof(IScoped).IsAssignableFrom(x)).FirstOrDefault();
                            if (scoped != null)
                            {
                                services.AddScoped(item);
                                continue;
                            }

                            var transient = item.GetInterfaces().Where(x => typeof(ITransient).IsAssignableFrom(x)).FirstOrDefault();
                            if (transient != null)
                            {
                                services.AddTransient(item);
                                continue;
                            }

                            services.AddScoped(item);
                        }

                        var serviceTypes = module.Assembly.GetTypes().Where(x => x.GetInterfaces().Any(y => y.IsGenericType && y.GetGenericTypeDefinition() == typeof(IBaseService <>))).ToList();
                        foreach (var item in serviceTypes)
                        {
                            var singleton = item.GetInterfaces().Where(x => typeof(ISingleton).IsAssignableFrom(x)).FirstOrDefault();
                            if (singleton != null)
                            {
                                services.AddSingleton(item);
                                continue;
                            }

                            var scoped = item.GetInterfaces().Where(x => typeof(IScoped).IsAssignableFrom(x)).FirstOrDefault();
                            if (scoped != null)
                            {
                                services.AddScoped(item);
                                continue;
                            }

                            var transient = item.GetInterfaces().Where(x => typeof(ITransient).IsAssignableFrom(x)).FirstOrDefault();
                            if (transient != null)
                            {
                                services.AddTransient(item);
                                continue;
                            }

                            services.AddScoped(item);
                        }
                    }
                }
                catch (Exception ex)
                {
                    GlobalMessageRegistry.RegisterMessage(
                        new GlobalMessage()
                    {
                        For         = GlobalMessage.MessageFor.Admin,
                        Registrater = "AddModuleServices",
                        Text        = ex.Message,
                        Type        = GlobalMessage.MessageType.Error
                    },
                        new TimeSpan(0, 0, 30)
                        );
                }
            }
        }
Esempio n. 19
0
        public void OnActionExecuting(ActionExecutingContext context)
        {
            var isAuthorized     = true;
            var ctrl             = (NccController)context.Controller;
            var action           = (ControllerActionDescriptor)context.ActionDescriptor;
            var model            = ctrl.ViewData.Model;
            var actionAttributes = ctrl.ControllerContext.ActionDescriptor.MethodInfo.GetCustomAttributes(true);


            // Check Authorization attributes.
            foreach (var item in actionAttributes)
            {
                if (item is NccAuthorize)
                {
                    var attrib               = (NccAuthorize)item;
                    var nccAuthRequirement   = GetNccAuthRequirement(attrib, ctrl);
                    var authorizationService = (INccAuthorizationHandler)context.HttpContext.RequestServices.GetService(typeof(NccAuthRequireHandler));
                    var handlerName          = attrib.GetHandlerClassName();

                    if (handlerName != nameof(NccAuthRequireHandler))
                    {
                        var handlerType = GlobalContext.GetTypeContainsInModules(handlerName);
                        if (handlerType == null)
                        {
                            GlobalMessageRegistry.RegisterMessage(new GlobalMessage()
                            {
                                For      = GlobalMessage.MessageFor.Both,
                                ForUsers = new List <string>()
                                {
                                    context.HttpContext.User.Identity.Name
                                },
                                Registrater = "NccAuthFilter",
                                Text        = $"No implimentation of handler class name {handlerName} found. Please check handler class name at NccAuthorize attribute.",
                                Type        = GlobalMessage.MessageType.Error
                            }, new TimeSpan(0, 0, 30));
                        }
                        else
                        {
                            authorizationService = (INccAuthorizationHandler)context.HttpContext.RequestServices.GetService(handlerType);
                        }
                    }

                    var result = authorizationService.HandleRequirement(context, nccAuthRequirement, model).Result;
                    isAuthorized = result.Succeeded;
                    if (isAuthorized == false)
                    {
                        context.Result = new ChallengeResult(new AuthenticationProperties());
                        context.HttpContext.Items["ErrorMessage"] = "You have not enough permission.";
                        context.HttpContext.Response.Redirect("/Home/NotAuthorized");
                        return;
                    }
                }
            }

            if (isAuthorized == false)
            {
                context.Result = new ChallengeResult(new AuthenticationProperties());
                context.HttpContext.Items["ErrorMessage"] = "You have not enough permission.";
                context.HttpContext.Response.Redirect("/Home/NotAuthorized");
            }
        }