示例#1
0
        public SearchEngineTests()
        {
            MessageLogger           = new EventMessageLogger <SearchEngineTests>();
            MessageLogger.Messages += MessageLogger_Messages;

            var settings = new RoadieSettings();
            IConfigurationBuilder configurationBuilder = new ConfigurationBuilder();

            configurationBuilder.AddJsonFile("appsettings.test.json");
            IConfiguration configuration = configurationBuilder.Build();

            configuration.GetSection("RoadieSettings").Bind(settings);
            Configuration = settings;
            CacheManager  = new DictionaryCacheManager(Logger, new CachePolicy(TimeSpan.FromHours(4)));
            HttpEncoder   = new Encoding.DummyHttpEncoder();
        }
示例#2
0
        public ID3TagsHelperTests()
        {
            this.MessageLogger           = new EventMessageLogger();
            this.MessageLogger.Messages += MessageLogger_Messages;

            var settings = new RoadieSettings();
            IConfigurationBuilder configurationBuilder = new ConfigurationBuilder();

            configurationBuilder.AddJsonFile("appsettings.test.json");
            IConfiguration configuration = configurationBuilder.Build();

            configuration.GetSection("RoadieSettings").Bind(settings);
            settings.ConnectionString = configuration.GetConnectionString("RoadieDatabaseConnection");
            this.Configuration        = settings;
            this.CacheManager         = new DictionaryCacheManager(this.Logger, new CachePolicy(TimeSpan.FromHours(4)));
            this.TagsHelper           = new ID3TagsHelper(this.Configuration, this.CacheManager, this.Logger);
        }
示例#3
0
        public Inspector()
        {
            Console.WriteLine("Roadie Media Inspector");

            MessageLogger           = new EventMessageLogger();
            MessageLogger.Messages += MessageLogger_Messages;

            var settings = new RoadieSettings();
            IConfigurationBuilder configurationBuilder = new ConfigurationBuilder();

            configurationBuilder.AddJsonFile("appsettings.json", false);
            IConfiguration configuration = configurationBuilder.Build();

            configuration.GetSection("RoadieSettings").Bind(settings);
            settings.ConnectionString = configuration.GetConnectionString("RoadieDatabaseConnection");
            Configuration             = settings;
            CacheManager = new DictionaryCacheManager(Logger, new CachePolicy(TimeSpan.FromHours(4)));
            TagsHelper   = new ID3TagsHelper(Configuration, CacheManager, Logger);
        }
示例#4
0
 public MemorySessionDao()
 {
     CacheManager = new DictionaryCacheManager();
 }
示例#5
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddSingleton <ITokenService, TokenService>();
            services.AddSingleton <IHttpEncoder, HttpEncoder>();
            services.AddSingleton <IEmailSender, EmailSenderService>();

            var cacheManager = new DictionaryCacheManager(this._loggerFactory.CreateLogger <DictionaryCacheManager>(), new CachePolicy(TimeSpan.FromHours(4)));

            services.AddSingleton <ICacheManager>(cacheManager);

            services.AddDbContextPool <ApplicationUserDbContext>(
                options => options.UseMySql(this._configuration.GetConnectionString("RoadieDatabaseConnection"),
                                            mySqlOptions =>
            {
                mySqlOptions.ServerVersion(new Version(5, 5), Pomelo.EntityFrameworkCore.MySql.Infrastructure.ServerType.MariaDb);
                mySqlOptions.EnableRetryOnFailure(
                    maxRetryCount: 10,
                    maxRetryDelay: TimeSpan.FromSeconds(30),
                    errorNumbersToAdd: null);
            }
                                            ));

            services.AddDbContextPool <IRoadieDbContext, RoadieDbContext>(
                options => options.UseMySql(this._configuration.GetConnectionString("RoadieDatabaseConnection"),
                                            mySqlOptions =>
            {
                mySqlOptions.ServerVersion(new Version(5, 5), Pomelo.EntityFrameworkCore.MySql.Infrastructure.ServerType.MariaDb);
                mySqlOptions.EnableRetryOnFailure(
                    maxRetryCount: 10,
                    maxRetryDelay: TimeSpan.FromSeconds(30),
                    errorNumbersToAdd: null);
            }
                                            ));

            services.AddIdentity <ApplicationUser, ApplicationRole>()
            .AddRoles <ApplicationRole>()
            .AddEntityFrameworkStores <ApplicationUserDbContext>()
            .AddDefaultTokenProviders();

            services.AddAuthorization(options =>
            {
                options.AddPolicy("Admin", policy => policy.RequireRole("Admin"));
                options.AddPolicy("Editor", policy => policy.RequireRole("Admin", "Editor"));
            });

            services.Configure <IConfiguration>(this._configuration);
            var corsOrigins = (this._configuration["CORSOrigins"] ?? "http://localhost:8080").Split('|');

            this.Logger.LogDebug("Setting Up CORS Policy [{0}]", string.Join(", ", corsOrigins));

            services.AddCors(options => options.AddPolicy("CORSPolicy", builder =>
            {
                builder
                .WithOrigins(corsOrigins)
                .AllowAnyHeader()
                .AllowAnyMethod()
                .AllowCredentials();
            }));

            services.AddSingleton <IRoadieSettings, RoadieSettings>(ctx =>
            {
                var settings      = new RoadieSettings();
                var configuration = ctx.GetService <IConfiguration>();
                configuration.GetSection("RoadieSettings").Bind(settings);
                var hostingEnvironment    = ctx.GetService <IHostingEnvironment>();
                settings.ContentPath      = hostingEnvironment.WebRootPath;
                settings.ConnectionString = this._configuration.GetConnectionString("RoadieDatabaseConnection");

                // This is so 'User Secrets' can be used in Debugging
                var integrationKeys = this._configuration.GetSection("IntegrationKeys")
                                      .Get <IntegrationKey>();
                if (integrationKeys != null)
                {
                    settings.Integrations.ApiKeys = new System.Collections.Generic.List <ApiKey>
                    {
                        new ApiKey
                        {
                            ApiName   = "LastFMApiKey",
                            Key       = integrationKeys.LastFMApiKey,
                            KeySecret = integrationKeys.LastFMSecret
                        },
                        new ApiKey
                        {
                            ApiName   = "DiscogsConsumerKey",
                            Key       = integrationKeys.DiscogsConsumerKey,
                            KeySecret = integrationKeys.DiscogsConsumerSecret
                        },
                        new ApiKey
                        {
                            ApiName = "BingImageSearch",
                            Key     = integrationKeys.BingImageSearch
                        }
                    };
                }
                return(settings);
            });
            services.AddSingleton <IActionContextAccessor, ActionContextAccessor>();
            services.AddSingleton <IDefaultNotFoundImages, DefaultNotFoundImages>();
            services.AddScoped <IStatisticsService, StatisticsService>();
            services.AddScoped <ICollectionService, CollectionService>();
            services.AddScoped <IPlaylistService, PlaylistService>();
            services.AddScoped <IBookmarkService, BookmarkService>();
            services.AddScoped <IArtistService, ArtistService>();
            services.AddScoped <IImageService, ImageService>();
            services.AddScoped <IReleaseService, ReleaseService>();
            services.AddScoped <ITrackService, TrackService>();
            services.AddScoped <ILabelService, LabelService>();
            services.AddScoped <IPlaylistService, PlaylistService>();
            services.AddScoped <IPlayActivityService, PlayActivityService>();
            services.AddScoped <IGenreService, GenreService>();
            services.AddScoped <ISubsonicService, SubsonicService>();
            services.AddScoped <IUserService, UserService>();
            services.AddScoped <IAdminService, AdminService>();
            services.AddScoped <ILookupService, LookupService>();

            var securityKey = new SymmetricSecurityKey(System.Text.Encoding.Default.GetBytes(this._configuration["Tokens:PrivateKey"]));

            services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme    = JwtBearerDefaults.AuthenticationScheme;
            }).AddJwtBearer(config =>
            {
                config.RequireHttpsMetadata      = false;
                config.SaveToken                 = true;
                config.TokenValidationParameters = new TokenValidationParameters()
                {
                    IssuerSigningKey = securityKey,

                    ValidateAudience         = true,
                    ValidAudience            = this._configuration["Tokens:Audience"],
                    ValidateIssuer           = true,
                    ValidIssuer              = this._configuration["Tokens:Issuer"],
                    ValidateLifetime         = true,
                    ValidateIssuerSigningKey = true
                };
            });

            //services.AddSwaggerGen(c =>
            //{
            //    c.SwaggerDoc("v1", new Info
            //    {
            //        Title = "Roadie API",
            //        Version = "v1"
            //    });
            //});

            services.AddSignalR();

            services.AddMvc(options =>
            {
                options.RespectBrowserAcceptHeader = true; // false by default
                options.ModelBinderProviders.Insert(0, new SubsonicRequestBinderProvider());
            })
            .AddJsonOptions(options =>
            {
                options.SerializerSettings.NullValueHandling     = NullValueHandling.Ignore;
                options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
            })
            .AddXmlSerializerFormatters()
            .SetCompatibilityVersion(CompatibilityVersion.Latest);

            services.Configure <IdentityOptions>(options =>
            {
                options.Password.RequireDigit           = true;
                options.Password.RequireLowercase       = true;
                options.Password.RequireNonAlphanumeric = true;
                options.Password.RequireUppercase       = true;
                options.Password.RequiredLength         = 6;
                options.Password.RequiredUniqueChars    = 1;
            });

            services.AddHttpContextAccessor();
            services.AddScoped <IHttpContext>(factory =>
            {
                var actionContext = factory.GetService <IActionContextAccessor>()
                                    .ActionContext;

                return(new HttpContext(factory.GetService <IRoadieSettings>(), new UrlHelper(actionContext)));
            });
        }