From 61535b41a3c0cd764d2d69b9c3e2ad284f223b48 Mon Sep 17 00:00:00 2001 From: Roger Far Date: Sun, 5 Apr 2020 14:40:01 -0600 Subject: [PATCH] Add authentication --- client/src/app/app-routing.module.ts | 3 +- client/src/app/app.module.ts | 8 +- client/src/app/auth.guard.ts | 27 -- client/src/app/auth.interceptor.ts | 30 ++ client/src/app/auth.service.ts | 21 + client/src/app/login/login.component.html | 45 +- client/src/app/login/login.component.ts | 26 +- client/src/app/models/torrent.model.ts | 2 +- client/src/app/navbar/navbar.component.html | 2 +- client/src/app/navbar/navbar.component.ts | 17 +- .../navbar/settings/settings.component.html | 1 - server/RdtClient.Data/Data/UserData.cs | 26 ++ server/RdtClient.Data/DiConfig.cs | 1 + server/RdtClient.Service/DiConfig.cs | 1 + .../Services/Authentication.cs | 55 +++ .../Controllers/AuthController.cs | 75 ++++ .../Controllers/SettingsController.cs | 2 + .../Controllers/TorrentsController.cs | 2 + server/RdtClient.Web/Startup.cs | 38 +- server/RdtClient.Web/app.log | 399 ++++++++++++++++++ 20 files changed, 720 insertions(+), 61 deletions(-) delete mode 100644 client/src/app/auth.guard.ts create mode 100644 client/src/app/auth.interceptor.ts create mode 100644 client/src/app/auth.service.ts create mode 100644 server/RdtClient.Data/Data/UserData.cs create mode 100644 server/RdtClient.Service/Services/Authentication.cs create mode 100644 server/RdtClient.Web/Controllers/AuthController.cs diff --git a/client/src/app/app-routing.module.ts b/client/src/app/app-routing.module.ts index 6dd65c9..8282f94 100644 --- a/client/src/app/app-routing.module.ts +++ b/client/src/app/app-routing.module.ts @@ -2,7 +2,6 @@ import { NgModule } from '@angular/core'; import { Routes, RouterModule } from '@angular/router'; import { MainLayoutComponent } from './main-layout/main-layout.component'; import { LoginComponent } from './login/login.component'; -import { AuthGuard } from './auth.guard'; const routes: Routes = [ { @@ -12,7 +11,7 @@ const routes: Routes = [ { path: '', component: MainLayoutComponent, - canActivate: [AuthGuard], + canActivate: [], }, ]; diff --git a/client/src/app/app.module.ts b/client/src/app/app.module.ts index ceaad1d..02839f2 100644 --- a/client/src/app/app.module.ts +++ b/client/src/app/app.module.ts @@ -1,7 +1,7 @@ import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; import { FormsModule } from '@angular/forms'; -import { HttpClientModule } from '@angular/common/http'; +import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http'; import { NgxFilesizeModule, FileSizePipe } from 'ngx-filesize'; import { AppRoutingModule } from './app-routing.module'; @@ -16,6 +16,7 @@ import { SettingsComponent } from './navbar/settings/settings.component'; import { TorrentStatusPipe } from './torrent-status.pipe'; import { FileStatusPipe } from './file-status.pipe'; import { LoginComponent } from './login/login.component'; +import { AuthInterceptor } from './auth.interceptor'; @NgModule({ declarations: [ @@ -38,7 +39,10 @@ import { LoginComponent } from './login/login.component'; HttpClientModule, NgxFilesizeModule, ], - providers: [FileSizePipe], + providers: [ + FileSizePipe, + { provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true }, + ], bootstrap: [AppComponent], }) export class AppModule {} diff --git a/client/src/app/auth.guard.ts b/client/src/app/auth.guard.ts deleted file mode 100644 index 981d41c..0000000 --- a/client/src/app/auth.guard.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { Injectable } from '@angular/core'; -import { - CanActivate, - ActivatedRouteSnapshot, - RouterStateSnapshot, - Router, -} from '@angular/router'; -import { Observable } from 'rxjs'; -import { map } from 'rxjs/operators'; -import { UsersService } from './users.service'; - -@Injectable({ - providedIn: 'root', -}) -export class AuthGuard implements CanActivate { - constructor(private router: Router, private usersService: UsersService) {} - - canActivate( - route: ActivatedRouteSnapshot, - state: RouterStateSnapshot - ): Observable | Promise | boolean { - return true; - - //this.router.navigate(['/login'], { queryParams: { returnUrl: state.url } }); - //return false; - } -} diff --git a/client/src/app/auth.interceptor.ts b/client/src/app/auth.interceptor.ts new file mode 100644 index 0000000..d26e98d --- /dev/null +++ b/client/src/app/auth.interceptor.ts @@ -0,0 +1,30 @@ +import { Injectable } from '@angular/core'; +import { + HttpEvent, + HttpInterceptor, + HttpHandler, + HttpRequest, + HttpErrorResponse, +} from '@angular/common/http'; +import { throwError, Observable } from 'rxjs'; +import { catchError } from 'rxjs/operators'; +import { Router } from '@angular/router'; + +@Injectable() +export class AuthInterceptor implements HttpInterceptor { + constructor(private router: Router) {} + + intercept( + req: HttpRequest, + next: HttpHandler + ): Observable> { + return next.handle(req).pipe( + catchError((error: HttpErrorResponse) => { + if (error && error.status === 401) { + this.router.navigate(['/login']); + } + return throwError(error); + }) + ); + } +} diff --git a/client/src/app/auth.service.ts b/client/src/app/auth.service.ts new file mode 100644 index 0000000..50a3a20 --- /dev/null +++ b/client/src/app/auth.service.ts @@ -0,0 +1,21 @@ +import { Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { Observable } from 'rxjs/internal/Observable'; + +@Injectable({ + providedIn: 'root', +}) +export class AuthService { + constructor(private http: HttpClient) {} + + public login(userName: string, password: string): Observable { + return this.http.post(`/Api/Authentication/Login`, { + userName, + password, + }); + } + + public logout() { + return this.http.post(`/Api/Authentication/Logout`, {}); + } +} diff --git a/client/src/app/login/login.component.html b/client/src/app/login/login.component.html index b903e79..938cece 100644 --- a/client/src/app/login/login.component.html +++ b/client/src/app/login/login.component.html @@ -4,31 +4,64 @@
-
+
- +
- +
- +
- +
- +
+ {{ error }} +
+
diff --git a/client/src/app/login/login.component.ts b/client/src/app/login/login.component.ts index c74528f..48599d1 100644 --- a/client/src/app/login/login.component.ts +++ b/client/src/app/login/login.component.ts @@ -1,15 +1,33 @@ import { Component, OnInit } from '@angular/core'; +import { AuthService } from '../auth.service'; +import { Router } from '@angular/router'; @Component({ selector: 'app-login', templateUrl: './login.component.html', - styleUrls: ['./login.component.scss'] + styleUrls: ['./login.component.scss'], }) export class LoginComponent implements OnInit { + public userName: string; + public password: string; + public error: string; + public loggingIn: boolean; - constructor() { } + constructor(private authService: AuthService, private router: Router) {} - ngOnInit(): void { + ngOnInit(): void {} + + public login(): void { + this.error = null; + this.loggingIn = true; + this.authService.login(this.userName, this.password).subscribe( + () => { + this.router.navigate(['/']); + }, + (err) => { + this.loggingIn = false; + this.error = err.error; + } + ); } - } diff --git a/client/src/app/models/torrent.model.ts b/client/src/app/models/torrent.model.ts index 1700ee9..bd4ac19 100644 --- a/client/src/app/models/torrent.model.ts +++ b/client/src/app/models/torrent.model.ts @@ -25,7 +25,7 @@ export class Torrent { export class TorrentFile { id: string; path: string; - bytes: string; + bytes: number; selected: boolean; download: Download; diff --git a/client/src/app/navbar/navbar.component.html b/client/src/app/navbar/navbar.component.html index 27d3abe..f365aea 100644 --- a/client/src/app/navbar/navbar.component.html +++ b/client/src/app/navbar/navbar.component.html @@ -60,7 +60,7 @@ Profile - + Logout diff --git a/client/src/app/navbar/navbar.component.ts b/client/src/app/navbar/navbar.component.ts index 1f3b3f1..62189c9 100644 --- a/client/src/app/navbar/navbar.component.ts +++ b/client/src/app/navbar/navbar.component.ts @@ -2,6 +2,8 @@ import { Component, OnInit } from '@angular/core'; import { TorrentService } from '../torrent.service'; import { SettingsService } from '../settings.service'; import { Profile } from '../models/profile.model'; +import { AuthService } from '../auth.service'; +import { Router } from '@angular/router'; @Component({ selector: 'app-navbar', @@ -16,11 +18,24 @@ export class NavbarComponent implements OnInit { public profile: Profile; - constructor(private settingsService: SettingsService) {} + constructor( + private settingsService: SettingsService, + private authService: AuthService, + private router: Router + ) {} ngOnInit(): void { this.settingsService.getProfile().subscribe((result) => { this.profile = result; }); } + + public logout(): void { + this.authService.logout().subscribe( + () => { + this.router.navigate(['/login']); + }, + (err) => {} + ); + } } diff --git a/client/src/app/navbar/settings/settings.component.html b/client/src/app/navbar/settings/settings.component.html index 43c09d7..f764e88 100644 --- a/client/src/app/navbar/settings/settings.component.html +++ b/client/src/app/navbar/settings/settings.component.html @@ -67,7 +67,6 @@ Save Settings - diff --git a/server/RdtClient.Data/Data/UserData.cs b/server/RdtClient.Data/Data/UserData.cs new file mode 100644 index 0000000..6cd44ae --- /dev/null +++ b/server/RdtClient.Data/Data/UserData.cs @@ -0,0 +1,26 @@ +using System.Threading.Tasks; +using Microsoft.AspNetCore.Identity; +using Microsoft.EntityFrameworkCore; + +namespace RdtClient.Data.Data +{ + public interface IUserData + { + Task GetUser(); + } + + public class UserData : IUserData + { + private readonly DataContext _dataContext; + + public UserData(DataContext dataContext) + { + _dataContext = dataContext; + } + + public async Task GetUser() + { + return await _dataContext.Users.FirstOrDefaultAsync(); + } + } +} diff --git a/server/RdtClient.Data/DiConfig.cs b/server/RdtClient.Data/DiConfig.cs index 72ceb17..369abb8 100644 --- a/server/RdtClient.Data/DiConfig.cs +++ b/server/RdtClient.Data/DiConfig.cs @@ -10,6 +10,7 @@ namespace RdtClient.Data services.AddScoped(); services.AddScoped(); services.AddScoped(); + services.AddScoped(); } } } diff --git a/server/RdtClient.Service/DiConfig.cs b/server/RdtClient.Service/DiConfig.cs index 11e088b..7797ea4 100644 --- a/server/RdtClient.Service/DiConfig.cs +++ b/server/RdtClient.Service/DiConfig.cs @@ -7,6 +7,7 @@ namespace RdtClient.Service { public static void Config(IServiceCollection services) { + services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); diff --git a/server/RdtClient.Service/Services/Authentication.cs b/server/RdtClient.Service/Services/Authentication.cs new file mode 100644 index 0000000..acc059f --- /dev/null +++ b/server/RdtClient.Service/Services/Authentication.cs @@ -0,0 +1,55 @@ +using System; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Identity; +using RdtClient.Data.Data; + +namespace RdtClient.Service.Services +{ + public interface IAuthentication + { + Task Register(String userName, String password); + Task Login(String userName, String password); + Task GetUser(); + Task Logout(); + } + + public class Authentication : IAuthentication + { + private readonly SignInManager _signInManager; + private readonly UserManager _userManager; + private readonly IUserData _userData; + + public Authentication(SignInManager signInManager, UserManager userManager, IUserData userData) + { + _signInManager = signInManager; + _userManager = userManager; + _userData = userData; + } + + public async Task Register(String userName, String password) + { + var user = new IdentityUser(userName); + + var result = await _userManager.CreateAsync(user, password); + + return result; + } + + public async Task Login(String userName, String password) + { + var result = await _signInManager.PasswordSignInAsync(userName, password, true, false); + + return result; + } + + public async Task GetUser() + { + return await _userData.GetUser(); + } + + public async Task Logout() + { + await _signInManager.SignOutAsync(); + } + } +} diff --git a/server/RdtClient.Web/Controllers/AuthController.cs b/server/RdtClient.Web/Controllers/AuthController.cs new file mode 100644 index 0000000..e691ac4 --- /dev/null +++ b/server/RdtClient.Web/Controllers/AuthController.cs @@ -0,0 +1,75 @@ +using System; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using RdtClient.Service.Services; + +namespace RdtClient.Web.Controllers +{ + [Route("Api/Authentication")] + public class AuthController : Controller + { + private readonly IAuthentication _authentication; + + public AuthController(IAuthentication authentication) + { + _authentication = authentication; + } + + [AllowAnonymous] + [Route("Login")] + [HttpPost] + public async Task Login([FromBody] AuthControllerLoginRequest request) + { + try + { + var user = await _authentication.GetUser(); + + if (user == null) + { + var registerResult = await _authentication.Register(request.UserName, request.Password); + + if (!registerResult.Succeeded) + { + return BadRequest(registerResult.Errors.First().Description); + } + } + + var result = await _authentication.Login(request.UserName, request.Password); + + if (!result.Succeeded) + { + return BadRequest("Invalid credentials"); + } + + return Ok(); + } + catch(Exception ex) + { + return BadRequest(ex.Message); + } + } + + [Route("Logout")] + [HttpPost] + public async Task Logout() + { + try + { + await _authentication.Logout(); + return Ok(); + } + catch(Exception ex) + { + return BadRequest(ex.Message); + } + } + } + + public class AuthControllerLoginRequest + { + public String UserName { get; set; } + public String Password { get; set; } + } +} diff --git a/server/RdtClient.Web/Controllers/SettingsController.cs b/server/RdtClient.Web/Controllers/SettingsController.cs index 7a350e5..2f15ce9 100644 --- a/server/RdtClient.Web/Controllers/SettingsController.cs +++ b/server/RdtClient.Web/Controllers/SettingsController.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using RdtClient.Data.Models.Data; using RdtClient.Service.Models; @@ -8,6 +9,7 @@ using RdtClient.Service.Services; namespace RdtClient.Web.Controllers { + [Authorize] [Route("Api/Settings")] public class SettingsController : Controller { diff --git a/server/RdtClient.Web/Controllers/TorrentsController.cs b/server/RdtClient.Web/Controllers/TorrentsController.cs index 17e828a..f2f373a 100644 --- a/server/RdtClient.Web/Controllers/TorrentsController.cs +++ b/server/RdtClient.Web/Controllers/TorrentsController.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.IO; using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using RdtClient.Data.Models.Data; @@ -9,6 +10,7 @@ using RdtClient.Service.Services; namespace RdtClient.Web.Controllers { + [Authorize] [Route("Api/Torrents")] public class TorrentsController : Controller { diff --git a/server/RdtClient.Web/Startup.cs b/server/RdtClient.Web/Startup.cs index 6911319..0b5e6d8 100644 --- a/server/RdtClient.Web/Startup.cs +++ b/server/RdtClient.Web/Startup.cs @@ -1,13 +1,16 @@ +using System.Threading.Tasks; using Hangfire; using Hangfire.MemoryStorage; using Microsoft.AspNetCore.Authentication.Cookies; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Identity; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; +using RdtClient.Data; using RdtClient.Data.Data; using RdtClient.Data.Models.Internal; using RdtClient.Service.Services; @@ -16,13 +19,13 @@ namespace RdtClient.Web { public class Startup { - private IConfiguration Configuration { get; } - public Startup(IConfiguration configuration) { Configuration = configuration; } + private IConfiguration Configuration { get; } + public void ConfigureServices(IServiceCollection services) { var appSettings = new AppSettings(); @@ -34,10 +37,7 @@ namespace RdtClient.Web services.AddControllers(); - services.AddSpaStaticFiles(configuration => - { - configuration.RootPath = "wwwroot"; - }); + services.AddSpaStaticFiles(configuration => { configuration.RootPath = "wwwroot"; }); services.AddHttpContextAccessor(); @@ -63,7 +63,7 @@ namespace RdtClient.Web services.AddIdentity(options => { - options.User.RequireUniqueEmail = true; + options.User.RequireUniqueEmail = false; options.Password.RequiredLength = 10; options.Password.RequireUppercase = false; options.Password.RequireLowercase = false; @@ -73,6 +73,15 @@ namespace RdtClient.Web .AddEntityFrameworkStores() .AddDefaultTokenProviders(); + services.ConfigureApplicationCookie(options => + { + options.Events.OnRedirectToLogin = context => + { + context.Response.StatusCode = StatusCodes.Status401Unauthorized; + return Task.CompletedTask; + }; + }); + services.AddHangfire(configuration => configuration .SetDataCompatibilityLevel(CompatibilityLevel.Version_170) .UseSimpleAssemblyNameTypeSerializer() @@ -81,7 +90,7 @@ namespace RdtClient.Web services.AddHangfireServer(); - Data.DiConfig.Config(services); + DiConfig.Config(services); Service.DiConfig.Config(services); } @@ -90,6 +99,7 @@ namespace RdtClient.Web if (env.IsDevelopment()) { app.UseCors("Dev"); + app.UseDeveloperExceptionPage(); } else { @@ -102,19 +112,15 @@ namespace RdtClient.Web app.UseRouting(); + app.UseAuthentication(); + app.UseAuthorization(); app.UseHangfireServer(); - app.UseEndpoints(endpoints => - { - endpoints.MapControllers(); - }); + app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); - app.UseSpa(spa => - { - spa.Options.SourcePath = "wwwroot"; - }); + app.UseSpa(spa => { spa.Options.SourcePath = "wwwroot"; }); dataContext.Migrate(); diff --git a/server/RdtClient.Web/app.log b/server/RdtClient.Web/app.log index 59e484e..9312cd7 100644 --- a/server/RdtClient.Web/app.log +++ b/server/RdtClient.Web/app.log @@ -510,3 +510,402 @@ 2020-04-04T14:50:10.8721989-06:00 INFO [Microsoft.Hosting.Lifetime] [0] Application started. Press Ctrl+C to shut down. 2020-04-04T14:50:10.8807198-06:00 INFO [Microsoft.Hosting.Lifetime] [0] Hosting environment: Development 2020-04-04T14:50:10.8830457-06:00 INFO [Microsoft.Hosting.Lifetime] [0] Content root path: C:\Projects\rdt-client\server\RdtClient.Web +2020-04-05T13:45:28.3326607-06:00 INFO [Hangfire.BackgroundJobServer] [0] Starting Hangfire Server using job storage: 'Hangfire.MemoryStorage.MemoryStorage' +2020-04-05T13:45:28.3381196-06:00 INFO [Hangfire.BackgroundJobServer] [0] Using the following options for Hangfire Server: + Worker count: 20 + Listening queues: 'default' + Shutdown timeout: 00:00:15 + Schedule polling interval: 00:00:15 +2020-04-05T13:45:28.6485220-06:00 INFO [Hangfire.BackgroundJobServer] [0] Starting Hangfire Server using job storage: 'Hangfire.MemoryStorage.MemoryStorage' +2020-04-05T13:45:28.6495838-06:00 INFO [Hangfire.BackgroundJobServer] [0] Using the following options for Hangfire Server: + Worker count: 20 + Listening queues: 'default' + Shutdown timeout: 00:00:15 + Schedule polling interval: 00:00:15 +2020-04-05T13:45:28.6605020-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:12736:e4e9d49d successfully announced in 287.7051 ms +2020-04-05T13:45:28.6615229-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:12736:0d1a3c29 successfully announced in 6.0803 ms +2020-04-05T13:45:28.6687331-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:12736:0d1a3c29 is starting the registered dispatchers: ServerWatchdog, ServerJobCancellationWatcher, ExpirationManager, CountersAggregator, Worker, DelayedJobScheduler, RecurringJobScheduler... +2020-04-05T13:45:28.6697101-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:12736:e4e9d49d is starting the registered dispatchers: ServerWatchdog, ServerJobCancellationWatcher, ExpirationManager, CountersAggregator, Worker, DelayedJobScheduler, RecurringJobScheduler... +2020-04-05T13:45:28.8078956-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:12736:0d1a3c29 all the dispatchers started +2020-04-05T13:45:28.8169220-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:12736:e4e9d49d all the dispatchers started +2020-04-05T13:45:29.8935551-06:00 INFO [Microsoft.Hosting.Lifetime] [0] Application started. Press Ctrl+C to shut down. +2020-04-05T13:45:29.8955304-06:00 INFO [Microsoft.Hosting.Lifetime] [0] Hosting environment: Development +2020-04-05T13:45:29.8974193-06:00 INFO [Microsoft.Hosting.Lifetime] [0] Content root path: C:\Projects\rdt-client\server\RdtClient.Web +2020-04-05T13:46:51.4321020-06:00 INFO [Hangfire.BackgroundJobServer] [0] Starting Hangfire Server using job storage: 'Hangfire.MemoryStorage.MemoryStorage' +2020-04-05T13:46:51.4372964-06:00 INFO [Hangfire.BackgroundJobServer] [0] Using the following options for Hangfire Server: + Worker count: 20 + Listening queues: 'default' + Shutdown timeout: 00:00:15 + Schedule polling interval: 00:00:15 +2020-04-05T13:46:51.6383571-06:00 INFO [Hangfire.BackgroundJobServer] [0] Starting Hangfire Server using job storage: 'Hangfire.MemoryStorage.MemoryStorage' +2020-04-05T13:46:51.6395229-06:00 INFO [Hangfire.BackgroundJobServer] [0] Using the following options for Hangfire Server: + Worker count: 20 + Listening queues: 'default' + Shutdown timeout: 00:00:15 + Schedule polling interval: 00:00:15 +2020-04-05T13:46:51.6796943-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:20128:1bb081e5 successfully announced in 31.1286 ms +2020-04-05T13:46:51.6808646-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:20128:7b5d084a successfully announced in 212.183 ms +2020-04-05T13:46:51.6961942-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:20128:1bb081e5 is starting the registered dispatchers: ServerWatchdog, ServerJobCancellationWatcher, ExpirationManager, CountersAggregator, Worker, DelayedJobScheduler, RecurringJobScheduler... +2020-04-05T13:46:51.7004735-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:20128:7b5d084a is starting the registered dispatchers: ServerWatchdog, ServerJobCancellationWatcher, ExpirationManager, CountersAggregator, Worker, DelayedJobScheduler, RecurringJobScheduler... +2020-04-05T13:46:51.8758727-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:20128:1bb081e5 all the dispatchers started +2020-04-05T13:46:51.8778524-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:20128:7b5d084a all the dispatchers started +2020-04-05T13:46:52.8655711-06:00 INFO [Microsoft.Hosting.Lifetime] [0] Application started. Press Ctrl+C to shut down. +2020-04-05T13:46:52.8740737-06:00 INFO [Microsoft.Hosting.Lifetime] [0] Hosting environment: Development +2020-04-05T13:46:52.8764471-06:00 INFO [Microsoft.Hosting.Lifetime] [0] Content root path: C:\Projects\rdt-client\server\RdtClient.Web +2020-04-05T13:49:02.8075971-06:00 INFO [Hangfire.BackgroundJobServer] [0] Starting Hangfire Server using job storage: 'Hangfire.MemoryStorage.MemoryStorage' +2020-04-05T13:49:02.8117256-06:00 INFO [Hangfire.BackgroundJobServer] [0] Using the following options for Hangfire Server: + Worker count: 20 + Listening queues: 'default' + Shutdown timeout: 00:00:15 + Schedule polling interval: 00:00:15 +2020-04-05T13:49:02.9244165-06:00 INFO [Hangfire.BackgroundJobServer] [0] Starting Hangfire Server using job storage: 'Hangfire.MemoryStorage.MemoryStorage' +2020-04-05T13:49:02.9244510-06:00 INFO [Hangfire.BackgroundJobServer] [0] Using the following options for Hangfire Server: + Worker count: 20 + Listening queues: 'default' + Shutdown timeout: 00:00:15 + Schedule polling interval: 00:00:15 +2020-04-05T13:49:02.9486004-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:22912:8f2632ad successfully announced in 124.3205 ms +2020-04-05T13:49:02.9486004-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:22912:a758e9fc successfully announced in 22.5422 ms +2020-04-05T13:49:02.9516480-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:22912:a758e9fc is starting the registered dispatchers: ServerWatchdog, ServerJobCancellationWatcher, ExpirationManager, CountersAggregator, Worker, DelayedJobScheduler, RecurringJobScheduler... +2020-04-05T13:49:02.9516481-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:22912:8f2632ad is starting the registered dispatchers: ServerWatchdog, ServerJobCancellationWatcher, ExpirationManager, CountersAggregator, Worker, DelayedJobScheduler, RecurringJobScheduler... +2020-04-05T13:49:02.9577847-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:22912:a758e9fc all the dispatchers started +2020-04-05T13:49:02.9578387-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:22912:8f2632ad all the dispatchers started +2020-04-05T13:49:04.2414369-06:00 INFO [Microsoft.Hosting.Lifetime] [0] Application started. Press Ctrl+C to shut down. +2020-04-05T13:49:04.2489867-06:00 INFO [Microsoft.Hosting.Lifetime] [0] Hosting environment: Development +2020-04-05T13:49:04.2509606-06:00 INFO [Microsoft.Hosting.Lifetime] [0] Content root path: C:\Projects\rdt-client\server\RdtClient.Web +2020-04-05T14:10:42.5154921-06:00 FAIL [Microsoft.AspNetCore.Server.IIS.Core.IISHttpServer] [ApplicationError] Connection ID "18230571293206380816", Request ID "80000111-0000-fd00-b63f-84710c7967bb": An unhandled exception was thrown by the application.System.InvalidOperationException: The SPA default page middleware could not return the default page '/index.html' because it was not found, and no other middleware handled the request. + + at Microsoft.AspNetCore.SpaServices.SpaDefaultPageMiddleware.<>c__DisplayClass0_0.b__1(HttpContext context, Func`1 next) + at Microsoft.AspNetCore.Builder.UseExtensions.<>c__DisplayClass0_1.b__1(HttpContext context) + at Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context) + at Microsoft.AspNetCore.Builder.UseExtensions.<>c__DisplayClass0_2.b__2() + at Microsoft.AspNetCore.SpaServices.SpaDefaultPageMiddleware.<>c__DisplayClass0_0.b__0(HttpContext context, Func`1 next) + at Microsoft.AspNetCore.Builder.UseExtensions.<>c__DisplayClass0_1.b__1(HttpContext context) + at Microsoft.AspNetCore.Routing.EndpointMiddleware.Invoke(HttpContext httpContext) + at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context) + at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) + at Microsoft.AspNetCore.Server.IIS.Core.IISHttpContextOfT`1.ProcessRequestAsync() + +2020-04-05T14:11:01.8847368-06:00 FAIL [Microsoft.AspNetCore.Server.IIS.Core.IISHttpServer] [ApplicationError] Connection ID "18230571293206380818", Request ID "80000113-0000-fd00-b63f-84710c7967bb": An unhandled exception was thrown by the application.System.InvalidOperationException: The SPA default page middleware could not return the default page '/index.html' because it was not found, and no other middleware handled the request. + + at Microsoft.AspNetCore.SpaServices.SpaDefaultPageMiddleware.<>c__DisplayClass0_0.b__1(HttpContext context, Func`1 next) + at Microsoft.AspNetCore.Builder.UseExtensions.<>c__DisplayClass0_1.b__1(HttpContext context) + at Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context) + at Microsoft.AspNetCore.Builder.UseExtensions.<>c__DisplayClass0_2.b__2() + at Microsoft.AspNetCore.SpaServices.SpaDefaultPageMiddleware.<>c__DisplayClass0_0.b__0(HttpContext context, Func`1 next) + at Microsoft.AspNetCore.Builder.UseExtensions.<>c__DisplayClass0_1.b__1(HttpContext context) + at Microsoft.AspNetCore.Routing.EndpointMiddleware.Invoke(HttpContext httpContext) + at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context) + at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) + at Microsoft.AspNetCore.Server.IIS.Core.IISHttpContextOfT`1.ProcessRequestAsync() + +2020-04-05T14:11:18.9235042-06:00 FAIL [Microsoft.AspNetCore.Server.IIS.Core.IISHttpServer] [ApplicationError] Connection ID "18158513733528191424", Request ID "800001c1-0008-fc00-b63f-84710c7967bb": An unhandled exception was thrown by the application.System.InvalidOperationException: The SPA default page middleware could not return the default page '/index.html' because it was not found, and no other middleware handled the request. + + at Microsoft.AspNetCore.SpaServices.SpaDefaultPageMiddleware.<>c__DisplayClass0_0.b__1(HttpContext context, Func`1 next) + at Microsoft.AspNetCore.Builder.UseExtensions.<>c__DisplayClass0_1.b__1(HttpContext context) + at Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context) + at Microsoft.AspNetCore.Builder.UseExtensions.<>c__DisplayClass0_2.b__2() + at Microsoft.AspNetCore.SpaServices.SpaDefaultPageMiddleware.<>c__DisplayClass0_0.b__0(HttpContext context, Func`1 next) + at Microsoft.AspNetCore.Builder.UseExtensions.<>c__DisplayClass0_1.b__1(HttpContext context) + at Microsoft.AspNetCore.Routing.EndpointMiddleware.Invoke(HttpContext httpContext) + at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context) + at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) + at Microsoft.AspNetCore.Server.IIS.Core.IISHttpContextOfT`1.ProcessRequestAsync() + +2020-04-05T14:11:56.7499606-06:00 INFO [Hangfire.BackgroundJobServer] [0] Starting Hangfire Server using job storage: 'Hangfire.MemoryStorage.MemoryStorage' +2020-04-05T14:11:56.7544722-06:00 INFO [Hangfire.BackgroundJobServer] [0] Using the following options for Hangfire Server: + Worker count: 20 + Listening queues: 'default' + Shutdown timeout: 00:00:15 + Schedule polling interval: 00:00:15 +2020-04-05T14:11:56.9041708-06:00 INFO [Hangfire.BackgroundJobServer] [0] Starting Hangfire Server using job storage: 'Hangfire.MemoryStorage.MemoryStorage' +2020-04-05T14:11:56.9054377-06:00 INFO [Hangfire.BackgroundJobServer] [0] Using the following options for Hangfire Server: + Worker count: 20 + Listening queues: 'default' + Shutdown timeout: 00:00:15 + Schedule polling interval: 00:00:15 +2020-04-05T14:11:56.9491285-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:12032:56df2ad2 successfully announced in 176.3042 ms +2020-04-05T14:11:56.9503891-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:12032:2b2aa6a2 successfully announced in 38.3411 ms +2020-04-05T14:11:56.9620426-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:12032:2b2aa6a2 is starting the registered dispatchers: ServerWatchdog, ServerJobCancellationWatcher, ExpirationManager, CountersAggregator, Worker, DelayedJobScheduler, RecurringJobScheduler... +2020-04-05T14:11:56.9630933-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:12032:56df2ad2 is starting the registered dispatchers: ServerWatchdog, ServerJobCancellationWatcher, ExpirationManager, CountersAggregator, Worker, DelayedJobScheduler, RecurringJobScheduler... +2020-04-05T14:11:57.0774907-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:12032:56df2ad2 all the dispatchers started +2020-04-05T14:11:57.0850830-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:12032:2b2aa6a2 all the dispatchers started +2020-04-05T14:11:57.8633375-06:00 INFO [Microsoft.Hosting.Lifetime] [0] Application started. Press Ctrl+C to shut down. +2020-04-05T14:11:57.8702473-06:00 INFO [Microsoft.Hosting.Lifetime] [0] Hosting environment: Development +2020-04-05T14:11:57.8719618-06:00 INFO [Microsoft.Hosting.Lifetime] [0] Content root path: C:\Projects\rdt-client\server\RdtClient.Web +2020-04-05T14:11:57.9937313-06:00 FAIL [Microsoft.AspNetCore.Server.IIS.Core.IISHttpServer] [ApplicationError] Connection ID "18374686494167139407", Request ID "80000450-0003-ff00-b63f-84710c7967bb": An unhandled exception was thrown by the application.System.InvalidOperationException: The SPA default page middleware could not return the default page '/index.html' because it was not found, and no other middleware handled the request. + + at Microsoft.AspNetCore.SpaServices.SpaDefaultPageMiddleware.<>c__DisplayClass0_0.b__1(HttpContext context, Func`1 next) + at Microsoft.AspNetCore.Builder.UseExtensions.<>c__DisplayClass0_1.b__1(HttpContext context) + at Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context) + at Microsoft.AspNetCore.Builder.UseExtensions.<>c__DisplayClass0_2.b__2() + at Microsoft.AspNetCore.SpaServices.SpaDefaultPageMiddleware.<>c__DisplayClass0_0.b__0(HttpContext context, Func`1 next) + at Microsoft.AspNetCore.Builder.UseExtensions.<>c__DisplayClass0_1.b__1(HttpContext context) + at Microsoft.AspNetCore.Routing.EndpointMiddleware.Invoke(HttpContext httpContext) + at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context) + at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) + at Microsoft.AspNetCore.Server.IIS.Core.IISHttpContextOfT`1.ProcessRequestAsync() + +2020-04-05T14:13:48.4444651-06:00 FAIL [Microsoft.AspNetCore.Server.IIS.Core.IISHttpServer] [ApplicationError] Connection ID "18230571323271151879", Request ID "80000108-0007-fd00-b63f-84710c7967bb": An unhandled exception was thrown by the application.System.InvalidOperationException: The SPA default page middleware could not return the default page '/index.html' because it was not found, and no other middleware handled the request. + + at Microsoft.AspNetCore.SpaServices.SpaDefaultPageMiddleware.<>c__DisplayClass0_0.b__1(HttpContext context, Func`1 next) + at Microsoft.AspNetCore.Builder.UseExtensions.<>c__DisplayClass0_1.b__1(HttpContext context) + at Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context) + at Microsoft.AspNetCore.Builder.UseExtensions.<>c__DisplayClass0_2.b__2() + at Microsoft.AspNetCore.SpaServices.SpaDefaultPageMiddleware.<>c__DisplayClass0_0.b__0(HttpContext context, Func`1 next) + at Microsoft.AspNetCore.Builder.UseExtensions.<>c__DisplayClass0_1.b__1(HttpContext context) + at Microsoft.AspNetCore.Routing.EndpointMiddleware.Invoke(HttpContext httpContext) + at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context) + at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) + at Microsoft.AspNetCore.Server.IIS.Core.IISHttpContextOfT`1.ProcessRequestAsync() + +2020-04-05T14:14:33.0245393-06:00 INFO [Hangfire.BackgroundJobServer] [0] Starting Hangfire Server using job storage: 'Hangfire.MemoryStorage.MemoryStorage' +2020-04-05T14:14:33.0291643-06:00 INFO [Hangfire.BackgroundJobServer] [0] Using the following options for Hangfire Server: + Worker count: 20 + Listening queues: 'default' + Shutdown timeout: 00:00:15 + Schedule polling interval: 00:00:15 +2020-04-05T14:14:33.1823149-06:00 INFO [Hangfire.BackgroundJobServer] [0] Starting Hangfire Server using job storage: 'Hangfire.MemoryStorage.MemoryStorage' +2020-04-05T14:14:33.1835542-06:00 INFO [Hangfire.BackgroundJobServer] [0] Using the following options for Hangfire Server: + Worker count: 20 + Listening queues: 'default' + Shutdown timeout: 00:00:15 + Schedule polling interval: 00:00:15 +2020-04-05T14:14:33.2237994-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:10192:29c7381c successfully announced in 176.0118 ms +2020-04-05T14:14:33.2248671-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:10192:3043a89a successfully announced in 33.654 ms +2020-04-05T14:14:33.2366363-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:10192:3043a89a is starting the registered dispatchers: ServerWatchdog, ServerJobCancellationWatcher, ExpirationManager, CountersAggregator, Worker, DelayedJobScheduler, RecurringJobScheduler... +2020-04-05T14:14:33.2377551-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:10192:29c7381c is starting the registered dispatchers: ServerWatchdog, ServerJobCancellationWatcher, ExpirationManager, CountersAggregator, Worker, DelayedJobScheduler, RecurringJobScheduler... +2020-04-05T14:14:33.3611710-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:10192:3043a89a all the dispatchers started +2020-04-05T14:14:33.3692201-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:10192:29c7381c all the dispatchers started +2020-04-05T14:14:34.1738976-06:00 INFO [Microsoft.Hosting.Lifetime] [0] Application started. Press Ctrl+C to shut down. +2020-04-05T14:14:34.1758602-06:00 INFO [Microsoft.Hosting.Lifetime] [0] Hosting environment: Development +2020-04-05T14:14:34.1830956-06:00 INFO [Microsoft.Hosting.Lifetime] [0] Content root path: C:\Projects\rdt-client\server\RdtClient.Web +2020-04-05T14:14:34.2962618-06:00 FAIL [Microsoft.AspNetCore.Server.IIS.Core.IISHttpServer] [ApplicationError] Connection ID "18302628891539276758", Request ID "800003d7-0001-fe00-b63f-84710c7967bb": An unhandled exception was thrown by the application.System.InvalidOperationException: The SPA default page middleware could not return the default page '/index.html' because it was not found, and no other middleware handled the request. + + at Microsoft.AspNetCore.SpaServices.SpaDefaultPageMiddleware.<>c__DisplayClass0_0.b__1(HttpContext context, Func`1 next) + at Microsoft.AspNetCore.Builder.UseExtensions.<>c__DisplayClass0_1.b__1(HttpContext context) + at Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context) + at Microsoft.AspNetCore.Builder.UseExtensions.<>c__DisplayClass0_2.b__2() + at Microsoft.AspNetCore.SpaServices.SpaDefaultPageMiddleware.<>c__DisplayClass0_0.b__0(HttpContext context, Func`1 next) + at Microsoft.AspNetCore.Builder.UseExtensions.<>c__DisplayClass0_1.b__1(HttpContext context) + at Microsoft.AspNetCore.Routing.EndpointMiddleware.Invoke(HttpContext httpContext) + at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context) + at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) + at Microsoft.AspNetCore.Server.IIS.Core.IISHttpContextOfT`1.ProcessRequestAsync() + +2020-04-05T14:14:50.3467710-06:00 FAIL [Microsoft.AspNetCore.Server.IIS.Core.IISHttpServer] [ApplicationError] Connection ID "18086456165260067175", Request ID "80000168-000e-fb00-b63f-84710c7967bb": An unhandled exception was thrown by the application.System.InvalidOperationException: The SPA default page middleware could not return the default page '/index.html' because it was not found, and no other middleware handled the request. + + at Microsoft.AspNetCore.SpaServices.SpaDefaultPageMiddleware.<>c__DisplayClass0_0.b__1(HttpContext context, Func`1 next) + at Microsoft.AspNetCore.Builder.UseExtensions.<>c__DisplayClass0_1.b__1(HttpContext context) + at Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context) + at Microsoft.AspNetCore.Builder.UseExtensions.<>c__DisplayClass0_2.b__2() + at Microsoft.AspNetCore.SpaServices.SpaDefaultPageMiddleware.<>c__DisplayClass0_0.b__0(HttpContext context, Func`1 next) + at Microsoft.AspNetCore.Builder.UseExtensions.<>c__DisplayClass0_1.b__1(HttpContext context) + at Microsoft.AspNetCore.Routing.EndpointMiddleware.Invoke(HttpContext httpContext) + at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context) + at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) + at Microsoft.AspNetCore.Server.IIS.Core.IISHttpContextOfT`1.ProcessRequestAsync() + +2020-04-05T14:15:00.1335622-06:00 INFO [Hangfire.BackgroundJobServer] [0] Starting Hangfire Server using job storage: 'Hangfire.MemoryStorage.MemoryStorage' +2020-04-05T14:15:00.1383319-06:00 INFO [Hangfire.BackgroundJobServer] [0] Using the following options for Hangfire Server: + Worker count: 20 + Listening queues: 'default' + Shutdown timeout: 00:00:15 + Schedule polling interval: 00:00:15 +2020-04-05T14:15:00.2952046-06:00 INFO [Hangfire.BackgroundJobServer] [0] Starting Hangfire Server using job storage: 'Hangfire.MemoryStorage.MemoryStorage' +2020-04-05T14:15:00.2962542-06:00 INFO [Hangfire.BackgroundJobServer] [0] Using the following options for Hangfire Server: + Worker count: 20 + Listening queues: 'default' + Shutdown timeout: 00:00:15 + Schedule polling interval: 00:00:15 +2020-04-05T14:15:00.3398457-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:25096:bcce27fe successfully announced in 36.3169 ms +2020-04-05T14:15:00.3408193-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:25096:da77809c successfully announced in 178.846 ms +2020-04-05T14:15:00.3515002-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:25096:da77809c is starting the registered dispatchers: ServerWatchdog, ServerJobCancellationWatcher, ExpirationManager, CountersAggregator, Worker, DelayedJobScheduler, RecurringJobScheduler... +2020-04-05T14:15:00.3525549-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:25096:bcce27fe is starting the registered dispatchers: ServerWatchdog, ServerJobCancellationWatcher, ExpirationManager, CountersAggregator, Worker, DelayedJobScheduler, RecurringJobScheduler... +2020-04-05T14:15:00.4702974-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:25096:da77809c all the dispatchers started +2020-04-05T14:15:00.4717584-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:25096:bcce27fe all the dispatchers started +2020-04-05T14:15:01.2526071-06:00 INFO [Microsoft.Hosting.Lifetime] [0] Application started. Press Ctrl+C to shut down. +2020-04-05T14:15:01.2596217-06:00 INFO [Microsoft.Hosting.Lifetime] [0] Hosting environment: Development +2020-04-05T14:15:01.2614298-06:00 INFO [Microsoft.Hosting.Lifetime] [0] Content root path: C:\Projects\rdt-client\server\RdtClient.Web +2020-04-05T14:15:01.3740737-06:00 FAIL [Microsoft.AspNetCore.Server.IIS.Core.IISHttpServer] [ApplicationError] Connection ID "18158513733528191426", Request ID "800001c3-0008-fc00-b63f-84710c7967bb": An unhandled exception was thrown by the application.System.InvalidOperationException: The SPA default page middleware could not return the default page '/index.html' because it was not found, and no other middleware handled the request. + + at Microsoft.AspNetCore.SpaServices.SpaDefaultPageMiddleware.<>c__DisplayClass0_0.b__1(HttpContext context, Func`1 next) + at Microsoft.AspNetCore.Builder.UseExtensions.<>c__DisplayClass0_1.b__1(HttpContext context) + at Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context) + at Microsoft.AspNetCore.Builder.UseExtensions.<>c__DisplayClass0_2.b__2() + at Microsoft.AspNetCore.SpaServices.SpaDefaultPageMiddleware.<>c__DisplayClass0_0.b__0(HttpContext context, Func`1 next) + at Microsoft.AspNetCore.Builder.UseExtensions.<>c__DisplayClass0_1.b__1(HttpContext context) + at Microsoft.AspNetCore.Routing.EndpointMiddleware.Invoke(HttpContext httpContext) + at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context) + at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) + at Microsoft.AspNetCore.Server.IIS.Core.IISHttpContextOfT`1.ProcessRequestAsync() + +2020-04-05T14:15:25.5504347-06:00 INFO [Hangfire.BackgroundJobServer] [0] Starting Hangfire Server using job storage: 'Hangfire.MemoryStorage.MemoryStorage' +2020-04-05T14:15:25.5548395-06:00 INFO [Hangfire.BackgroundJobServer] [0] Using the following options for Hangfire Server: + Worker count: 20 + Listening queues: 'default' + Shutdown timeout: 00:00:15 + Schedule polling interval: 00:00:15 +2020-04-05T14:15:25.7294398-06:00 INFO [Hangfire.BackgroundJobServer] [0] Starting Hangfire Server using job storage: 'Hangfire.MemoryStorage.MemoryStorage' +2020-04-05T14:15:25.7307341-06:00 INFO [Hangfire.BackgroundJobServer] [0] Using the following options for Hangfire Server: + Worker count: 20 + Listening queues: 'default' + Shutdown timeout: 00:00:15 + Schedule polling interval: 00:00:15 +2020-04-05T14:15:25.7379358-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:2108:0293bd89 successfully announced in 163.0078 ms +2020-04-05T14:15:25.7390840-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:2108:bf282f24 successfully announced in 2.6504 ms +2020-04-05T14:15:25.7474449-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:2108:0293bd89 is starting the registered dispatchers: ServerWatchdog, ServerJobCancellationWatcher, ExpirationManager, CountersAggregator, Worker, DelayedJobScheduler, RecurringJobScheduler... +2020-04-05T14:15:25.7486758-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:2108:bf282f24 is starting the registered dispatchers: ServerWatchdog, ServerJobCancellationWatcher, ExpirationManager, CountersAggregator, Worker, DelayedJobScheduler, RecurringJobScheduler... +2020-04-05T14:15:25.8723418-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:2108:bf282f24 all the dispatchers started +2020-04-05T14:15:25.8897109-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:2108:0293bd89 all the dispatchers started +2020-04-05T14:15:26.7778087-06:00 INFO [Microsoft.Hosting.Lifetime] [0] Application started. Press Ctrl+C to shut down. +2020-04-05T14:15:26.7850998-06:00 INFO [Microsoft.Hosting.Lifetime] [0] Hosting environment: Development +2020-04-05T14:15:26.7868856-06:00 INFO [Microsoft.Hosting.Lifetime] [0] Content root path: C:\Projects\rdt-client\server\RdtClient.Web +2020-04-05T14:15:26.8919371-06:00 FAIL [Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware] [UnhandledException] An unhandled exception has occurred while executing the request.System.InvalidOperationException: The SPA default page middleware could not return the default page '/index.html' because it was not found, and no other middleware handled the request. + + at Microsoft.AspNetCore.SpaServices.SpaDefaultPageMiddleware.<>c__DisplayClass0_0.b__1(HttpContext context, Func`1 next) + at Microsoft.AspNetCore.Builder.UseExtensions.<>c__DisplayClass0_1.b__1(HttpContext context) + at Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context) + at Microsoft.AspNetCore.Builder.UseExtensions.<>c__DisplayClass0_2.b__2() + at Microsoft.AspNetCore.SpaServices.SpaDefaultPageMiddleware.<>c__DisplayClass0_0.b__0(HttpContext context, Func`1 next) + at Microsoft.AspNetCore.Builder.UseExtensions.<>c__DisplayClass0_1.b__1(HttpContext context) + at Microsoft.AspNetCore.Routing.EndpointMiddleware.Invoke(HttpContext httpContext) + at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context) + at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) + at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context) + +2020-04-05T14:15:55.1356301-06:00 INFO [Hangfire.BackgroundJobServer] [0] Starting Hangfire Server using job storage: 'Hangfire.MemoryStorage.MemoryStorage' +2020-04-05T14:15:55.1404886-06:00 INFO [Hangfire.BackgroundJobServer] [0] Using the following options for Hangfire Server: + Worker count: 20 + Listening queues: 'default' + Shutdown timeout: 00:00:15 + Schedule polling interval: 00:00:15 +2020-04-05T14:15:55.3048285-06:00 INFO [Hangfire.BackgroundJobServer] [0] Starting Hangfire Server using job storage: 'Hangfire.MemoryStorage.MemoryStorage' +2020-04-05T14:15:55.3058840-06:00 INFO [Hangfire.BackgroundJobServer] [0] Using the following options for Hangfire Server: + Worker count: 20 + Listening queues: 'default' + Shutdown timeout: 00:00:15 + Schedule polling interval: 00:00:15 +2020-04-05T14:15:55.3486321-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:9540:0475dcc2 successfully announced in 185.5134 ms +2020-04-05T14:15:55.3496885-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:9540:b64dfe1f successfully announced in 38.3769 ms +2020-04-05T14:15:55.3607127-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:9540:b64dfe1f is starting the registered dispatchers: ServerWatchdog, ServerJobCancellationWatcher, ExpirationManager, CountersAggregator, Worker, DelayedJobScheduler, RecurringJobScheduler... +2020-04-05T14:15:55.3619100-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:9540:0475dcc2 is starting the registered dispatchers: ServerWatchdog, ServerJobCancellationWatcher, ExpirationManager, CountersAggregator, Worker, DelayedJobScheduler, RecurringJobScheduler... +2020-04-05T14:15:55.4962395-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:9540:0475dcc2 all the dispatchers started +2020-04-05T14:15:55.5042848-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:9540:b64dfe1f all the dispatchers started +2020-04-05T14:15:56.2950028-06:00 INFO [Microsoft.Hosting.Lifetime] [0] Application started. Press Ctrl+C to shut down. +2020-04-05T14:15:56.3019478-06:00 INFO [Microsoft.Hosting.Lifetime] [0] Hosting environment: Development +2020-04-05T14:15:56.3036761-06:00 INFO [Microsoft.Hosting.Lifetime] [0] Content root path: C:\Projects\rdt-client\server\RdtClient.Web +2020-04-05T14:16:03.7001763-06:00 WARN [Microsoft.AspNetCore.Identity.UserManager] [14] User b31d575e-bc02-49d0-816e-6b84bf84e9ae password validation failed: PasswordTooShort;PasswordRequiresUniqueChars. +2020-04-05T14:17:18.3136182-06:00 WARN [Microsoft.AspNetCore.Identity.UserManager] [14] User 7fe2e7ee-ed95-4296-ab93-7da08a83aca4 password validation failed: PasswordTooShort;PasswordRequiresUniqueChars. +2020-04-05T14:17:31.1335278-06:00 WARN [Microsoft.AspNetCore.Identity.UserManager] [14] User 3fd3721a-291f-4ca3-9e38-4d92f12ec719 password validation failed: PasswordTooShort;PasswordRequiresUniqueChars. +2020-04-05T14:27:25.9596516-06:00 INFO [Hangfire.BackgroundJobServer] [0] Starting Hangfire Server using job storage: 'Hangfire.MemoryStorage.MemoryStorage' +2020-04-05T14:27:25.9640455-06:00 INFO [Hangfire.BackgroundJobServer] [0] Using the following options for Hangfire Server: + Worker count: 20 + Listening queues: 'default' + Shutdown timeout: 00:00:15 + Schedule polling interval: 00:00:15 +2020-04-05T14:27:26.1181571-06:00 INFO [Hangfire.BackgroundJobServer] [0] Starting Hangfire Server using job storage: 'Hangfire.MemoryStorage.MemoryStorage' +2020-04-05T14:27:26.1192243-06:00 INFO [Hangfire.BackgroundJobServer] [0] Using the following options for Hangfire Server: + Worker count: 20 + Listening queues: 'default' + Shutdown timeout: 00:00:15 + Schedule polling interval: 00:00:15 +2020-04-05T14:27:26.1658311-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:16652:4e8eb588 successfully announced in 183.1437 ms +2020-04-05T14:27:26.1668729-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:16652:b010bf2b successfully announced in 41.928 ms +2020-04-05T14:27:26.1776605-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:16652:b010bf2b is starting the registered dispatchers: ServerWatchdog, ServerJobCancellationWatcher, ExpirationManager, CountersAggregator, Worker, DelayedJobScheduler, RecurringJobScheduler... +2020-04-05T14:27:26.1787097-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:16652:4e8eb588 is starting the registered dispatchers: ServerWatchdog, ServerJobCancellationWatcher, ExpirationManager, CountersAggregator, Worker, DelayedJobScheduler, RecurringJobScheduler... +2020-04-05T14:27:26.2947111-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:16652:4e8eb588 all the dispatchers started +2020-04-05T14:27:26.2999844-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:16652:b010bf2b all the dispatchers started +2020-04-05T14:27:27.0890075-06:00 INFO [Microsoft.Hosting.Lifetime] [0] Application started. Press Ctrl+C to shut down. +2020-04-05T14:27:27.0966552-06:00 INFO [Microsoft.Hosting.Lifetime] [0] Hosting environment: Development +2020-04-05T14:27:27.0985544-06:00 INFO [Microsoft.Hosting.Lifetime] [0] Content root path: C:\Projects\rdt-client\server\RdtClient.Web +2020-04-05T14:27:27.5493007-06:00 WARN [Microsoft.AspNetCore.Identity.UserManager] [13] User 72a2755a-26ac-4bf6-8d9c-ed9c7a87aa41 validation failed: InvalidEmail. +2020-04-05T14:28:52.5373815-06:00 INFO [Hangfire.BackgroundJobServer] [0] Starting Hangfire Server using job storage: 'Hangfire.MemoryStorage.MemoryStorage' +2020-04-05T14:28:52.5436157-06:00 INFO [Hangfire.BackgroundJobServer] [0] Using the following options for Hangfire Server: + Worker count: 20 + Listening queues: 'default' + Shutdown timeout: 00:00:15 + Schedule polling interval: 00:00:15 +2020-04-05T14:28:52.7374914-06:00 INFO [Hangfire.BackgroundJobServer] [0] Starting Hangfire Server using job storage: 'Hangfire.MemoryStorage.MemoryStorage' +2020-04-05T14:28:52.7388085-06:00 INFO [Hangfire.BackgroundJobServer] [0] Using the following options for Hangfire Server: + Worker count: 20 + Listening queues: 'default' + Shutdown timeout: 00:00:15 + Schedule polling interval: 00:00:15 +2020-04-05T14:28:52.7995890-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:18588:f35627db successfully announced in 232.1254 ms +2020-04-05T14:28:52.8006659-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:18588:3bb85702 successfully announced in 51.8775 ms +2020-04-05T14:28:52.8173288-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:18588:f35627db is starting the registered dispatchers: ServerWatchdog, ServerJobCancellationWatcher, ExpirationManager, CountersAggregator, Worker, DelayedJobScheduler, RecurringJobScheduler... +2020-04-05T14:28:52.8184988-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:18588:3bb85702 is starting the registered dispatchers: ServerWatchdog, ServerJobCancellationWatcher, ExpirationManager, CountersAggregator, Worker, DelayedJobScheduler, RecurringJobScheduler... +2020-04-05T14:28:52.9354290-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:18588:3bb85702 all the dispatchers started +2020-04-05T14:28:52.9431142-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:18588:f35627db all the dispatchers started +2020-04-05T14:28:53.7409456-06:00 INFO [Microsoft.Hosting.Lifetime] [0] Application started. Press Ctrl+C to shut down. +2020-04-05T14:28:53.7492840-06:00 INFO [Microsoft.Hosting.Lifetime] [0] Hosting environment: Development +2020-04-05T14:28:53.7513626-06:00 INFO [Microsoft.Hosting.Lifetime] [0] Content root path: C:\Projects\rdt-client\server\RdtClient.Web +2020-04-05T14:29:10.7957756-06:00 WARN [Hangfire.AutomaticRetryAttribute] [0] Failed to process the job 'f3f6c4dc-a989-441e-9172-baddaa290035': an exception occurred. Retry attempt 1 of 10 will be performed in 00:00:44.System.Net.Http.HttpRequestException: The SSL connection could not be established, see inner exception. + ---> System.IO.IOException: Authentication failed because the remote party has closed the transport stream. + at System.Net.Security.SslStream.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest) + at System.Net.Security.SslStream.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest) + at System.Net.Security.SslStream.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest) + at System.Net.Security.SslStream.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest) + at System.Net.Security.SslStream.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest) + at System.Net.Security.SslStream.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest) + at System.Net.Security.SslStream.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest) + at System.Net.Security.SslStream.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest) + at System.Net.Security.SslStream.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest) + at System.Net.Security.SslStream.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest) + at System.Net.Security.SslStream.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest) + at System.Net.Security.SslStream.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest) + at System.Net.Security.SslStream.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest) + at System.Net.Security.SslStream.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest) + at System.Net.Security.SslStream.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest) + at System.Net.Security.SslStream.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest) + at System.Net.Security.SslStream.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest) + at System.Net.Security.SslStream.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest) + at System.Net.Security.SslStream.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest) + at System.Net.Security.SslStream.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest) + at System.Net.Security.SslStream.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest) + at System.Net.Security.SslStream.PartialFrameCallback(AsyncProtocolRequest asyncRequest) +--- End of stack trace from previous location where exception was thrown --- + at System.Net.Security.SslStream.ThrowIfExceptional() + at System.Net.Security.SslStream.InternalEndProcessAuthentication(LazyAsyncResult lazyResult) + at System.Net.Security.SslStream.EndProcessAuthentication(IAsyncResult result) + at System.Net.Security.SslStream.EndAuthenticateAsClient(IAsyncResult asyncResult) + at System.Net.Security.SslStream.<>c.b__65_1(IAsyncResult iar) + at System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar, Func`2 endFunction, Action`1 endAction, Task`1 promise, Boolean requiresSynchronization) +--- End of stack trace from previous location where exception was thrown --- + at System.Net.Http.ConnectHelper.EstablishSslConnectionAsyncCore(Stream stream, SslClientAuthenticationOptions sslOptions, CancellationToken cancellationToken) + --- End of inner exception stack trace --- + at System.Net.Http.ConnectHelper.EstablishSslConnectionAsyncCore(Stream stream, SslClientAuthenticationOptions sslOptions, CancellationToken cancellationToken) + at System.Net.Http.HttpConnectionPool.ConnectAsync(HttpRequestMessage request, Boolean allowHttp2, CancellationToken cancellationToken) + at System.Net.Http.HttpConnectionPool.CreateHttp11ConnectionAsync(HttpRequestMessage request, CancellationToken cancellationToken) + at System.Net.Http.HttpConnectionPool.GetHttpConnectionAsync(HttpRequestMessage request, CancellationToken cancellationToken) + at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken) + at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) + at System.Net.Http.HttpClient.FinishSendAsyncBuffered(Task`1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts) + at RDNET.RdNetClient.Get[T](String url, Boolean repeatRequest) in C:\Projects\RD.NET\RDNET\RDNET\RdNetClient.cs:line 529 + at RDNET.RdNetClient.TorrentsAsync(Nullable`1 offset, Nullable`1 limit, String filter) in C:\Projects\RD.NET\RDNET\RDNET\RdNetClient.cs:line 438 + at RdtClient.Service.Services.Torrents.Update() in C:\Projects\rdt-client\server\RdtClient.Service\Services\Torrents.cs:line 117 + at RdtClient.Service.Services.Scheduler.Process() in C:\Projects\rdt-client\server\RdtClient.Service\Services\Scheduler.cs:line 36 + at System.Runtime.CompilerServices.TaskAwaiter.GetResult() + +2020-04-05T14:37:08.0803796-06:00 INFO [Hangfire.BackgroundJobServer] [0] Starting Hangfire Server using job storage: 'Hangfire.MemoryStorage.MemoryStorage' +2020-04-05T14:37:08.0854115-06:00 INFO [Hangfire.BackgroundJobServer] [0] Using the following options for Hangfire Server: + Worker count: 20 + Listening queues: 'default' + Shutdown timeout: 00:00:15 + Schedule polling interval: 00:00:15 +2020-04-05T14:37:08.2629890-06:00 INFO [Hangfire.BackgroundJobServer] [0] Starting Hangfire Server using job storage: 'Hangfire.MemoryStorage.MemoryStorage' +2020-04-05T14:37:08.2640604-06:00 INFO [Hangfire.BackgroundJobServer] [0] Using the following options for Hangfire Server: + Worker count: 20 + Listening queues: 'default' + Shutdown timeout: 00:00:15 + Schedule polling interval: 00:00:15 +2020-04-05T14:37:08.3090213-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:15040:fe3eb9ba successfully announced in 193.9269 ms +2020-04-05T14:37:08.3102131-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:15040:77dba8c6 successfully announced in 35.0663 ms +2020-04-05T14:37:08.3217200-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:15040:77dba8c6 is starting the registered dispatchers: ServerWatchdog, ServerJobCancellationWatcher, ExpirationManager, CountersAggregator, Worker, DelayedJobScheduler, RecurringJobScheduler... +2020-04-05T14:37:08.3227734-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:15040:fe3eb9ba is starting the registered dispatchers: ServerWatchdog, ServerJobCancellationWatcher, ExpirationManager, CountersAggregator, Worker, DelayedJobScheduler, RecurringJobScheduler... +2020-04-05T14:37:08.4576865-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:15040:77dba8c6 all the dispatchers started +2020-04-05T14:37:08.4685132-06:00 INFO [Hangfire.Server.BackgroundServerProcess] [0] Server roger-pc:15040:fe3eb9ba all the dispatchers started +2020-04-05T14:37:09.3505349-06:00 INFO [Microsoft.Hosting.Lifetime] [0] Application started. Press Ctrl+C to shut down. +2020-04-05T14:37:09.3570494-06:00 INFO [Microsoft.Hosting.Lifetime] [0] Hosting environment: Development +2020-04-05T14:37:09.3591078-06:00 INFO [Microsoft.Hosting.Lifetime] [0] Content root path: C:\Projects\rdt-client\server\RdtClient.Web