Beispiel #1
0
 public void MakeAccessible(bool passive)
 {
     if (OsInfo.IsWindows)
     {
         if (_runtimeInfo.IsAdmin)
         {
             _firewallAdapter.MakeAccessible();
         }
         else if (!passive)
         {
             throw new RemoteAccessException("Failed to register URLs for Readarr. Readarr will not be accessible remotely");
         }
     }
 }
Beispiel #2
0
        public void StartServer()
        {
            IgnoreCertErrorPolicy.Register();

            if (OsInfo.IsWindows)
            {
                if (_runtimeInfo.IsAdmin)
                {
                    _firewallAdapter.MakeAccessible();
                    _sslAdapter.Register();
                }

                _urlAclAdapter.ConfigureUrl();
            }

            var options = new StartOptions(_urlAclAdapter.Url)
            {
                ServerFactory = "Microsoft.Owin.Host.HttpListener"
            };

            if (_configFileProvider.EnableSsl)
            {
                _logger.Trace("SSL enabled, listening on: {0}", _urlAclAdapter.HttpsUrl);
                options.Urls.Add(_urlAclAdapter.HttpsUrl);
            }

            _logger.Info("starting server on {0}", _urlAclAdapter.Url);

            try
            {
                _host = WebApp.Start(OwinServiceProviderFactory.Create(), options, BuildApp);
            }
            catch (TargetInvocationException ex)
            {
                if (ex.InnerException == null)
                {
                    throw;
                }

                if (ex.InnerException is HttpListenerException)
                {
                    throw new PortInUseException("Port {0} is already in use, please ensure NzbDrone is not already running.",
                                                 ex,
                                                 _configFileProvider.Port);
                }

                throw ex.InnerException;
            }
        }
Beispiel #3
0
        public void StartServer()
        {
            IgnoreCertErrorPolicy.Register();

            if (OsInfo.IsWindows)
            {
                if (_runtimeInfo.IsAdmin)
                {
                    _firewallAdapter.MakeAccessible();
                    _sslAdapter.Register();
                }
            }

            _urlAclAdapter.ConfigureUrl();

            var options = new StartOptions()
            {
                ServerFactory = "Microsoft.Owin.Host.HttpListener"
            };

            _urlAclAdapter.Urls.ForEach(options.Urls.Add);

            _logger.Info("Listening on the following URLs:");
            foreach (var url in options.Urls)
            {
                _logger.Info("  {0}", url);
            }

            try
            {
                _host = WebApp.Start(OwinServiceProviderFactory.Create(), options, BuildApp);
            }
            catch (TargetInvocationException ex)
            {
                if (ex.InnerException == null)
                {
                    throw;
                }

                if (ex.InnerException is HttpListenerException)
                {
                    throw new PortInUseException("Port {0} is already in use, please ensure NzbDrone is not already running.",
                                                 ex,
                                                 _configFileProvider.Port);
                }

                throw ex.InnerException;
            }
        }
        public void MakeAccessible(bool passive)
        {
            if (OsInfo.IsWindows)
            {
                if (_runtimeInfo.IsAdmin)
                {
                    _firewallAdapter.MakeAccessible();
                    _sslAdapter.Register();
                }
                else if (!passive)
                {
                    throw new RemoteAccessException("Failed to register URLs for Gamearr. Gamearr will not be accessible remotely");
                }
            }

            _urlAclAdapter.ConfigureUrls();
        }
Beispiel #5
0
        public void StartServer()
        {
            if (OsInfo.IsWindows)
            {
                if (_runtimeInfo.IsAdmin)
                {
                    _firewallAdapter.MakeAccessible();
                    _sslAdapter.Register();
                }
            }

            _urlAclAdapter.ConfigureUrls();

            _logger.Info("Listening on the following URLs:");
            foreach (var url in _urlAclAdapter.Urls)
            {
                _logger.Info("  {0}", url);
            }

            _owinApp = _owinAppFactory.CreateApp(_urlAclAdapter.Urls);
        }
Beispiel #6
0
        public void StartServer()
        {
            if (OsInfo.IsWindows)
            {
                if (_runtimeInfo.IsAdmin)
                {
                    _firewallAdapter.MakeAccessible();
                }
            }

            var bindAddress = _configFileProvider.BindAddress;
            var enableSsl   = _configFileProvider.EnableSsl;
            var sslCertPath = _configFileProvider.SslCertPath;

            var urls = new List <string>();

            urls.Add(BuildUrl("http", bindAddress, _configFileProvider.Port));

            if (enableSsl && sslCertPath.IsNotNullOrWhiteSpace())
            {
                urls.Add(BuildUrl("https", bindAddress, _configFileProvider.SslPort));
            }

            _host = new WebHostBuilder()
                    .UseUrls(urls.ToArray())
                    .UseKestrel(options =>
            {
                if (enableSsl && sslCertPath.IsNotNullOrWhiteSpace())
                {
                    options.ConfigureHttpsDefaults(configureOptions =>
                    {
                        X509Certificate2 certificate;

                        try
                        {
                            certificate = new X509Certificate2(sslCertPath, _configFileProvider.SslCertPassword, X509KeyStorageFlags.DefaultKeySet);
                        }
                        catch (CryptographicException ex)
                        {
                            if (ex.HResult == 0x2 || ex.HResult == 0x2006D080)
                            {
                                throw new RadarrStartupException(ex, $"The SSL certificate file {sslCertPath} does not exist");
                            }

                            throw new RadarrStartupException(ex);
                        }

                        configureOptions.ServerCertificate = certificate;
                    });
                }
            })
                    .ConfigureKestrel(serverOptions =>
            {
                serverOptions.AllowSynchronousIO = true;
            })
                    .ConfigureLogging(logging =>
            {
                logging.AddProvider(new NLogLoggerProvider());
                logging.SetMinimumLevel(LogLevel.Warning);
            })
                    .ConfigureServices(services =>
            {
                services
                .AddSignalR()
#if !NETCOREAPP
                .AddJsonProtocol(options =>
                {
                    options.PayloadSerializerSettings = Json.GetSerializerSettings();
                });
#else
                .AddNewtonsoftJsonProtocol(options =>
                {
                    options.PayloadSerializerSettings = Json.GetSerializerSettings();
                });
#endif
            })
Beispiel #7
0
        public void StartServer()
        {
            if (OsInfo.IsWindows && _runtimeInfo.IsAdmin)
            {
                _firewallAdapter.MakeAccessible();
            }

            var bindAddress = _configFileProvider.BindAddress;
            var enableSsl   = _configFileProvider.EnableSsl;
            var sslCertPath = _configFileProvider.SslCertPath;

            var urls = new List <string>();

            urls.Add(BuildUrl("http", bindAddress, _configFileProvider.Port));

            if (enableSsl && sslCertPath.IsNotNullOrWhiteSpace())
            {
                urls.Add(BuildUrl("https", bindAddress, _configFileProvider.SslPort));
            }

            _host = new WebHostBuilder()
                    .UseUrls(urls.ToArray())
                    .UseKestrel(options =>
            {
                if (enableSsl && sslCertPath.IsNotNullOrWhiteSpace())
                {
                    options.ConfigureHttpsDefaults(configureOptions =>
                    {
                        var certificate = new X509Certificate2();
                        certificate.Import(_configFileProvider.SslCertPath, _configFileProvider.SslCertPassword, X509KeyStorageFlags.DefaultKeySet);

                        configureOptions.ServerCertificate = certificate;
                    });
                }
            })
                    .ConfigureKestrel(serverOptions =>
            {
                serverOptions.AllowSynchronousIO = true;
            })
                    .ConfigureLogging(logging =>
            {
                logging.AddProvider(new NLogLoggerProvider());
                logging.SetMinimumLevel(LogLevel.Warning);
            })
                    .ConfigureServices(services =>
            {
                services
                .AddSignalR()
#if !NETCOREAPP
                .AddJsonProtocol(
                    options =>
                {
                    options.PayloadSerializerSettings = Json.GetSerializerSettings();
                });
#else
                .AddNewtonsoftJsonProtocol(
                    options =>
                {
                    options.PayloadSerializerSettings = Json.GetSerializerSettings();
                });
#endif
            })
Beispiel #8
0
        public void Configure(IApplicationBuilder app,
                              IStartupContext startupContext,
                              Lazy <IMainDatabase> mainDatabaseFactory,
                              Lazy <ILogDatabase> logDatabaseFactory,
                              Lazy <ICacheDatabase> cacheDatabaseFactory,
                              DatabaseTarget dbTarget,
                              ISingleInstancePolicy singleInstancePolicy,
                              InitializeLogger initializeLogger,
                              ReconfigureLogging reconfigureLogging,
                              IAppFolderFactory appFolderFactory,
                              IProvidePidFile pidFileProvider,
                              IConfigFileProvider configFileProvider,
                              IRuntimeInfo runtimeInfo,
                              IFirewallAdapter firewallAdapter,
                              ReadarrErrorPipeline errorHandler)
        {
            initializeLogger.Initialize();
            appFolderFactory.Register();
            pidFileProvider.Write();

            reconfigureLogging.Reconfigure();

            EnsureSingleInstance(false, startupContext, singleInstancePolicy);

            // instantiate the databases to initialize/migrate them
            _ = mainDatabaseFactory.Value;
            _ = logDatabaseFactory.Value;
            _ = cacheDatabaseFactory.Value;

            dbTarget.Register();

            if (OsInfo.IsNotWindows)
            {
                Console.CancelKeyPress += (sender, eventArgs) => NLog.LogManager.Configuration = null;
            }

            if (OsInfo.IsWindows && runtimeInfo.IsAdmin)
            {
                firewallAdapter.MakeAccessible();
            }

            app.UseMiddleware <LoggingMiddleware>();
            app.UsePathBase(new PathString(configFileProvider.UrlBase));
            app.UseExceptionHandler(new ExceptionHandlerOptions
            {
                AllowStatusCode404Response = true,
                ExceptionHandler           = errorHandler.HandleException
            });

            app.UseRouting();
            app.UseCors();
            app.UseAuthentication();
            app.UseAuthorization();
            app.UseResponseCompression();
            app.Properties["host.AppName"] = BuildInfo.AppName;

            app.UseMiddleware <VersionMiddleware>();
            app.UseMiddleware <UrlBaseMiddleware>(configFileProvider.UrlBase);
            app.UseMiddleware <CacheHeaderMiddleware>();
            app.UseMiddleware <IfModifiedMiddleware>();
            app.UseMiddleware <BufferingMiddleware>(new List <string> {
                "/api/v1/command"
            });

            app.UseWebSockets();

            app.UseEndpoints(x =>
            {
                x.MapHub <MessageHub>("/signalr/messages").RequireAuthorization("SignalR");
                x.MapControllers();
            });
        }
        public void StartServer()
        {
            if (OsInfo.IsWindows && _runtimeInfo.IsAdmin)
            {
                _firewallAdapter.MakeAccessible();
            }

            var bindAddress = _configFileProvider.BindAddress;
            var enableSsl   = _configFileProvider.EnableSsl;
            var sslCertPath = _configFileProvider.SslCertPath;

            var urls = new List <string>();

            urls.Add(BuildUrl("http", bindAddress, _configFileProvider.Port));

            if (enableSsl && sslCertPath.IsNotNullOrWhiteSpace())
            {
                urls.Add(BuildUrl("https", bindAddress, _configFileProvider.SslPort));
            }

            _host = new WebHostBuilder()
                    .UseUrls(urls.ToArray())
                    .UseKestrel(options =>
            {
                if (enableSsl && sslCertPath.IsNotNullOrWhiteSpace())
                {
                    options.ConfigureHttpsDefaults(configureOptions =>
                    {
                        var certificate = new X509Certificate2();
                        certificate.Import(_configFileProvider.SslCertPath, _configFileProvider.SslCertPassword, X509KeyStorageFlags.DefaultKeySet);

                        configureOptions.ServerCertificate = certificate;
                    });
                }
            })
                    .ConfigureKestrel(serverOptions =>
            {
                serverOptions.AllowSynchronousIO        = true;
                serverOptions.Limits.MaxRequestBodySize = null;
            })
                    .ConfigureLogging(logging =>
            {
                logging.AddProvider(new NLogLoggerProvider());
                logging.SetMinimumLevel(LogLevel.Warning);
            })
                    .ConfigureServices(services =>
            {
                services
                .AddSignalR()
                .AddJsonProtocol(options =>
                {
                    options.PayloadSerializerOptions = STJson.GetSerializerSettings();
                });
            })
                    .Configure(app =>
            {
                app.UseRouting();
                app.Properties["host.AppName"] = BuildInfo.AppName;
                app.UsePathBase(_configFileProvider.UrlBase);

                foreach (var middleWare in _middlewares.OrderBy(c => c.Order))
                {
                    _logger.Debug("Attaching {0} to host", middleWare.GetType().Name);
                    middleWare.Attach(app);
                }
            })
                    .UseContentRoot(Directory.GetCurrentDirectory())
                    .Build();

            _logger.Info("Listening on the following URLs:");

            foreach (var url in urls)
            {
                _logger.Info("  {0}", url);
            }

            _host.Start();
        }