/**
	 * Bootstrap mechanism that loads the configuration for the server object based 
	 * on the specified configuration reading mechanism. 
	 * 
	 * The reference implementation of the configuration is XML-based, but this interface 
	 * allows for whatever mechanism is desired
	 * 
	 * @param configurationReader desired configuration reader 
	 */
	private ServerConfiguration loadconfiguration(ServerConfigurationReader configurationReader) {
		ServerConfiguration configuration = null;
		
		try {
			configuration = configurationReader.read();
		} catch(ConfigurationException pe) {
			throw new Exception(pe.Message);
		}
		
		return configuration;
	}
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            var configReader = new ServerConfigurationReader(this.Configuration);

            // Add framework services.
            services.AddMvc(options =>
            {
                //var policy = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build();
                //options.Filters.Add(new AuthorizeFilter(policy));

                if (configReader.GetConfiguration().DisableSSLRequirement == false)
                {
                    options.Filters.Add(new RequireHttpsAttribute());
                }

                options.Filters.Add(typeof(VaultAuthorizationAttribute));
            });

            services.AddDistributedMemoryCache();
            services.AddSession(options =>
            {
                options.IdleTimeout = TimeSpan.FromMinutes(configReader.GetConfiguration().SessionTimeoutMinutes);
                options.CookieName  = ".Erebus";
            });


            services.AddSingleton <IHttpContextAccessor, HttpContextAccessor>();
            services.AddSingleton <IServerConfigurationReader>(configReader);
            services.AddTransient <IClockProvider, ClockProvider>();
            services.AddTransient <IFileSystem, ServerFileSystem>();
            services.AddTransient <ISecureStringConverter, SecureStringConverter>();
            services.AddTransient <ISerializer, JsonSerializer>();
            services.AddTransient <ISymetricCryptographer, AesCryptographer>();
            services.AddTransient <IVaultRepositoryFactory, VaultFileRepositoryFactory>();
            services.AddTransient <IVaultManipulatorFactory, VaultManipulatorFactory>();
            services.AddTransient <IVaultFactory, DefaultVaultFactory>();
            services.AddTransient <IPasswordGenerator, PasswordGenerator>();
            services.AddTransient <ISessionContext, SessionContext>();
            services.AddTransient <IAuthorizationLogic, SessionAuthorizationLogic>();
            services.AddTransient <ITimespanFormater, TimespanFormater>();
            services.AddSingleton <ISyncContext, ServerSyncContext>();
            services.AddTransient <IByteArrayHelper, ByteArrayHelper>();
            services.AddTransient <IVaultFileMetadataHandler, VaultFileMetadataHandler>();

            services.AddSingleton <ISecureStringBinarySerializer>(factory =>
            {
                string randomPassword     = factory.GetRequiredService <IPasswordGenerator>().GeneratePassword(50, true, true, true, true);
                var secureStringConverter = factory.GetRequiredService <ISecureStringConverter>();
                return(new SecureStringBinarySerializer(factory.GetRequiredService <ISymetricCryptographer>(),
                                                        secureStringConverter.ToSecureString(randomPassword),
                                                        factory.GetRequiredService <ISecureStringConverter>()));
            });
        }
        /**
         * Bootstrap mechanism that loads the configuration for the server object based
         * on the specified configuration reading mechanism.
         *
         * The reference implementation of the configuration is XML-based, but this interface
         * allows for whatever mechanism is desired
         *
         * @param configurationReader desired configuration reader
         */
        private ServerConfiguration loadconfiguration(ServerConfigurationReader configurationReader)
        {
            ServerConfiguration configuration = null;

            try {
                configuration = configurationReader.read();
            } catch (ConfigurationException pe) {
                throw new Exception(pe.Message);
            }

            return(configuration);
        }
Beispiel #4
0
        /// <summary>
        /// Fa+-* partire l'ambiente, carica
        /// le configurazioni ed il primo modulo
        /// </summary>
        public void startEnviroment()
        {
            try {
                /// leggo il file di configurazione in input per la shell
                string standalone = "standalone.xml";
                string domain     = "domain.xml";

                ConfigurationManager cm      = new DefaultConfigurationManager();
                AppConfiguration     aConfig = cm.load();

                /// Inizilizza un primo module lodaer
                MonoBossKernel kernel = MonoBossKernel.getInstance();

                /// recupera il module loader
                ModuleLoader mloader = kernel.getModuleLoader();

                /// recupera l'instanza del server in base ai parametri
                ServerConfigurationReader sr = new ServerConfigurationReader();

                if (mode == null)
                {
                    // se non specifico la modalia di esecuzionea allora
                    // faccio partire il tutto in modalità standalone.
                    mode = "standalone";
                    // FIX: in linux the  path is case sensitive
                    sr.filePath = aConfig.configurationDir + "Standalone\\Configuration\\" + standalone;
                }
                else if (mode == "standalone")
                {
                    sr.filePath = aConfig.configurationDir + "Standalone\\Configuration\\" + standalone;
                }
                else
                {
                    if (mode == "domain")
                    {
                        sr.filePath = aConfig.configurationDir + "Domain\\Configuration\\" + domain;
                    }
                    else
                    {
                        throw new ShellException("Mode not recognized");
                    }
                }

                sr.configSchemaPath = aConfig.configurationDir + "\\Docs\\Schema\\";


                // carica il file e valida se è tutto correttamente
                // definito in base allo x-schema, in questa
                sr.load(true, mode);

                // Recupero un oggetto che mantiene le configurazioni
                // che sono definite all'interno del file .xml ( standalone o domain)
                // 17/05/2015 - TODO, continuare ad implementare in questo punto
                ServerInstance serverInstance = sr.getServerInstance();

                mloader.bootLoader(serverInstance);

                // mmloader.start();
            } catch (Exception ex) {
                throw new ShellException(ex.ToString());
            }
        }