diff --git a/.vscode/launch.json b/.vscode/launch.json index b3fcb29d..caa834f0 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -127,6 +127,22 @@ "group": "run", "order": 1 } + }, + { + "name": "lua", + "type": "coreclr", + "request": "launch", + "program": "${workspaceFolder}/src/Yavsc/bin/Debug/net9.0/Yavsc.dll", + "env": { + "ASPNETCORE_ENVIRONMENT": "luadev" + }, + "cwd": "${workspaceFolder}/src/Yavsc", + "serverReadyAction": { + "action": "openExternally", + "pattern": "\\bNow listening on:\\s+(https?://\\S+)" + } + + }, { "name": "web core", diff --git a/src/Yavsc.Server/Models/ErrorViewModel.cs b/src/Yavsc.Server/Models/ErrorViewModel.cs index 82a4ea85..1b779ead 100644 --- a/src/Yavsc.Server/Models/ErrorViewModel.cs +++ b/src/Yavsc.Server/Models/ErrorViewModel.cs @@ -2,7 +2,8 @@ namespace Yavsc.Models; public class ErrorViewModel { - public string? RequestId { get; set; } + public string? RequestId { get; set; } + public string? Description { get; set; } public bool ShowRequestId => !string.IsNullOrEmpty(RequestId); diff --git a/src/Yavsc/Controllers/Accounting/AccountController.cs b/src/Yavsc/Controllers/Accounting/AccountController.cs index a471cd64..8b40d2ea 100644 --- a/src/Yavsc/Controllers/Accounting/AccountController.cs +++ b/src/Yavsc/Controllers/Accounting/AccountController.cs @@ -146,13 +146,14 @@ namespace Yavsc.Controllers if (ModelState.IsValid) { - + var user = await _userManager.FindByNameAsync(model.Username); - if (user!=null) { + if (user != null) + { + + + var signin = await _signInManager.CheckPasswordSignInAsync(user, model.Password, true); - - var signin = await _signInManager.CheckPasswordSignInAsync(user, model.Password, true); - // validate username/password against in-memory store if (signin.Succeeded) { @@ -160,7 +161,7 @@ namespace Yavsc.Controllers // only set explicit expiration here if user chooses "remember me". // otherwise we rely upon expiration configured in cookie middleware. - await HttpContext.SignInAsync(user, _roleManager, model.RememberLogin,_dbContext); + await HttpContext.SignInAsync(user, _roleManager, model.RememberLogin, _dbContext); if (context != null) { @@ -192,7 +193,7 @@ namespace Yavsc.Controllers } } - await _events.RaiseAsync(new UserLoginFailureEvent(model.Username, "invalid credentials", clientId:context?.Client.ClientId)); + await _events.RaiseAsync(new UserLoginFailureEvent(model.Username, "invalid credentials", clientId: context?.Client.ClientId)); ModelState.AddModelError(string.Empty, AccountOptions.InvalidCredentialsErrorMessage); } @@ -204,16 +205,17 @@ namespace Yavsc.Controllers /// /// Show logout page /// - [HttpGet][Authorize] + [HttpGet] + [Authorize] public async Task Logout(string logoutId) { if (string.IsNullOrWhiteSpace(logoutId)) + { + if (User.Identity.IsAuthenticated) { - if (User.Identity.IsAuthenticated) - { - logoutId = User.GetUserId(); - } + logoutId = User.GetUserId(); } + } // build a model so the logout page knows what to display var vm = await BuildLogoutViewModelAsync(logoutId); @@ -260,7 +262,7 @@ namespace Yavsc.Controllers return SignOut(new AuthenticationProperties { RedirectUri = url }, vm.ExternalAuthenticationScheme); } - + return View("LoggedOut", vm); @@ -409,29 +411,30 @@ namespace Yavsc.Controllers public IActionResult Index() { IViewComponentHelper h; - + return View(); } [Authorize("AdministratorOnly")] [Route("Account/UserList/{pageNum?}/{len?}")] - public async Task UserList(int pageNum=0, int pageLen = defaultLen) + public async Task UserList(int pageNum = 0, int pageLen = defaultLen) { - var users = _dbContext.Users.OrderBy(u=>u.UserName); + var users = _dbContext.Users.OrderBy(u => u.UserName); var shown = pageNum * pageLen; var toShow = users.Skip(shown).Take(pageLen); ViewBag.page = pageNum; - ViewBag.hasNext = users.Count() > (toShow.Count() + shown); - ViewBag.nextpage = pageNum+1; + ViewBag.hasNext = users.Count() > (toShow.Count() + shown); + ViewBag.nextpage = pageNum + 1; ViewBag.pageLen = pageLen; return View(toShow.ToArray()); } - string GeneratePageToken() { + string GeneratePageToken() + { return System.Guid.NewGuid().ToString(); } - + [AllowAnonymous] [HttpGet(Constants.LoginPath)] public ActionResult SignIn(string returnUrl = null) @@ -456,7 +459,7 @@ namespace Yavsc.Controllers public ActionResult AccessDenied(string requestUrl = null) { ViewBag.UserIsSignedIn = User.Identity.IsAuthenticated; - + if (string.IsNullOrWhiteSpace(requestUrl)) if (string.IsNullOrWhiteSpace(Request.Headers["Referer"])) requestUrl = "/"; @@ -471,26 +474,27 @@ namespace Yavsc.Controllers if (Request.Method == "POST") // "hGbkk9B94NAae#aG" { - if (model.Provider ==null || model.Provider == "LOCAL") + if (model.Provider == null || model.Provider == "LOCAL") { if (ModelState.IsValid) { - var user = _dbContext.Users.Include(u=>u.Membership).FirstOrDefault( - u=>u.Email == model.EMail); - + var user = _dbContext.Users.Include(u => u.Membership).FirstOrDefault( + u => u.Email == model.EMail); + if (user != null) { if (!await _userManager.IsEmailConfirmedAsync(user)) { - ModelState.AddModelError(string.Empty, + ModelState.AddModelError(string.Empty, "You must have a confirmed email to log in."); return this.ViewOk(model); } } - else { - ModelState.AddModelError(string.Empty, - "No such user."); - return this.ViewOk(model); + else + { + ModelState.AddModelError(string.Empty, + "No such user."); + return this.ViewOk(model); } // This doesn't count login failures towards account lockout // To enable password failures to trigger account lockout, set lockoutOnFailure: true @@ -520,7 +524,7 @@ namespace Yavsc.Controllers return this.ViewOk(model); } } - + // If we got this far, something failed, redisplay form ModelState.AddModelError(string.Empty, "Unexpected behavior: something failed ... you could try again, or contact me ..."); @@ -549,7 +553,7 @@ namespace Yavsc.Controllers return BadRequest(); } // Note: this still is not the redirect uri given to the third party provider, at building the challenge. - var redirectUrl = Url.Action("ExternalLoginCallback", "Account", new { model.ReturnUrl }, protocol:"https", host: Config.Authority); + var redirectUrl = Url.Action("ExternalLoginCallback", "Account", new { model.ReturnUrl }, protocol: "https", host: Config.Authority); var properties = _signInManager.ConfigureExternalAuthenticationProperties(model.Provider, redirectUrl); // var properties = new AuthenticationProperties{RedirectUri=ReturnUrl}; return new ChallengeResult(model.Provider, properties); @@ -589,20 +593,21 @@ namespace Yavsc.Controllers // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=532713 // Send an email with this link var code = await _userManager.GenerateEmailConfirmationTokenAsync(user); - var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code }, protocol: "https", host: Config.Authority); + var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code }, protocol: "https", host: Config.Authority); await _emailSender.SendEmailAsync(model.UserName, model.Email, _localizer["ConfirmYourAccountTitle"], string.Format(_localizer["ConfirmYourAccountBody"], _siteSettings.Title, callbackUrl, _siteSettings.Slogan, _siteSettings.Audience)); - // No, wait for more than a login pass submission: - // do not await _signInManager.SignInAsync(user, isPersistent: false); - - this.NotifyInfo( - "E-mail confirmation", - _localizer["EmailSentForConfirm"] - ); + // No, wait for more than a login pass submission: + // do not await _signInManager.SignInAsync(user, isPersistent: false); + + this.NotifyInfo( + "E-mail confirmation", + _localizer["EmailSentForConfirm"] + ); return View("AccountCreated"); } - else { + else + { _logger.LogError("Error registering from a valid model."); foreach (var error in result.Errors) { @@ -637,7 +642,7 @@ namespace Yavsc.Controllers var code = await _userManager.GenerateEmailConfirmationTokenAsync(user); var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code }, protocol: "https", host: Config.Authority); - var res = await _emailSender.SendEmailAsync(user.UserName, user.Email, + var res = await _emailSender.SendEmailAsync(user.UserName, user.Email, this._localizer["ConfirmYourAccountTitle"], string.Format(this._localizer["ConfirmYourAccountBody"], _siteSettings.Title, callbackUrl, _siteSettings.Slogan, @@ -650,12 +655,12 @@ namespace Yavsc.Controllers var code = await _userManager.GenerateTwoFactorTokenAsync(user, provider); var callbackUrl = Url.Action("VerifyCode", "Account", new { userId = user.Id, code, provider }, protocol: "https", host: Config.Authority); - var res = await _emailSender.SendEmailAsync(user.UserName, user.Email, + var res = await _emailSender.SendEmailAsync(user.UserName, user.Email, this._localizer["AccountEmailFactorTitle"], string.Format(this._localizer["AccountEmailFactorBody"], _siteSettings.Title, callbackUrl, _siteSettings.Slogan, _siteSettings.Audience, code)); - return new EmailSentViewModel { EMail = user.Email, Sent = true, MessageId = res };; + return new EmailSentViewModel { EMail = user.Email, Sent = true, MessageId = res }; ; } // // POST: /Account/LogOff @@ -701,7 +706,7 @@ namespace Yavsc.Controllers } if (result.RequiresTwoFactor) { - return RedirectToAction(nameof(SendCode), new { ReturnUrl = returnUrl, RememberMe= true }); + return RedirectToAction(nameof(SendCode), new { ReturnUrl = returnUrl, RememberMe = true }); } if (result.IsLockedOut) { @@ -760,7 +765,7 @@ namespace Yavsc.Controllers var result = await _userManager.CreateAsync(user); if (result.Succeeded) { - + info.ProviderDisplayName = info.Principal.Claims.First(c => c.Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name")?.Value; result = await _userManager.AddLoginAsync(user, info); @@ -798,8 +803,9 @@ namespace Yavsc.Controllers { return View("Error"); } - IdentityResult result=null; - try { + IdentityResult result = null; + try + { result = await _userManager.ConfirmEmailAsync(user, code); _dbContext.SaveChanges(userId); } @@ -825,8 +831,9 @@ namespace Yavsc.Controllers { return View("Error"); } - bool result=false; - try { + bool result = false; + try + { result = await _userManager.VerifyTwoFactorTokenAsync(user, Constants.DefaultFactor, code); _dbContext.SaveChanges(userId); } @@ -845,10 +852,10 @@ namespace Yavsc.Controllers public async Task ForgotPassword() { if (User.Identity.IsAuthenticated) - ViewBag.UserEmail = ( await _dbContext.Users.SingleAsync( - u => u.Id == User.GetUserId() - ) ).Email; - + ViewBag.UserEmail = (await _dbContext.Users.SingleAsync( + u => u.Id == User.GetUserId() + )).Email; + return View(); } @@ -892,7 +899,6 @@ namespace Yavsc.Controllers // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=532713 // Send an email with this link var code = await _userManager.GeneratePasswordResetTokenAsync(user); - var f = this.HttpContext.Features; var callbackUrl = _siteSettings.ExternalUrl + "/Account/ResetPassword/" + HttpUtility.UrlEncode(user.Id) + "/" + HttpUtility.UrlEncode(code); @@ -900,8 +906,8 @@ namespace Yavsc.Controllers _localizer["Please reset your password by "] + " following this link"); return View("ForgotPasswordConfirmation", sent); - - + + } // If we got this far, something failed, redisplay form @@ -923,11 +929,11 @@ namespace Yavsc.Controllers public async Task ResetPassword(string id, string code) { var user = await _userManager.FindByIdAsync(id); - - if (user==null) return new BadRequestResult(); + + if (user == null) return new BadRequestResult(); if (!await _userManager.VerifyUserTokenAsync(user, _userManager.Options.Tokens.PasswordResetTokenProvider, - "ResetPassword", code.Replace("%2f","/"))) + "ResetPassword", code.Replace("%2f", "/"))) { return BadRequest("code"); } @@ -944,8 +950,8 @@ namespace Yavsc.Controllers [HttpPost("/Account/ResetPassword/{id}/{code}")] [AllowAnonymous] [ValidateAntiForgeryToken] - public async Task ResetPassword([FromRoute] string id, - [FromRoute] string code, + public async Task ResetPassword([FromRoute] string id, + [FromRoute] string code, ResetPasswordViewModel model) { if (!ModelState.IsValid) @@ -962,16 +968,17 @@ namespace Yavsc.Controllers if (user.Id != id) return BadRequest("userid"); var result = await _userManager.ResetPasswordAsync(user, - code.Replace("%2f","/"), model.Password); + code.Replace("%2f", "/"), model.Password); if (result.Succeeded) { // when ok, the e-mail become validated. - if (!user.EmailConfirmed) { - user.EmailConfirmed=true; + if (!user.EmailConfirmed) + { + user.EmailConfirmed = true; await _dbContext.SaveChangesAsync(nameof(ResetPassword)); } - _logger.LogInformation($"Password reset for {user.UserName}:{model.Password}"); + _logger.LogInformation($"Password reset for {user.UserName}:{model.Password}"); return RedirectToAction(nameof(AccountController.ResetPasswordConfirmation), "Account"); } _logger.LogInformation($"Password reset failed for {user.UserName}:{model.Password}"); @@ -1026,7 +1033,7 @@ namespace Yavsc.Controllers { return View("Error", new Exception("No mobile app service was activated")); } - else + else if (model.SelectedProvider == Constants.SMSFactor) { return View("Error", new Exception("No SMS service was activated")); @@ -1034,7 +1041,7 @@ namespace Yavsc.Controllers } else // if (model.SelectedProvider == Constants.EMailFactor || model.SelectedProvider == "Default" ) { - var sent = await this.SendEMailFactorAsync(user, model.SelectedProvider); + var sent = await this.SendEMailFactorAsync(user, model.SelectedProvider); } return View("VerifyCode", new VerifyCodeViewModel { Provider = model.SelectedProvider, ReturnUrl = model.ReturnUrl, RememberMe = model.RememberMe }); } @@ -1043,7 +1050,7 @@ namespace Yavsc.Controllers // GET: /Account/VerifyCode [HttpGet] [AllowAnonymous] - public async Task VerifyCode(string code, string provider, bool rememberMe=true, string returnUrl = null) + public async Task VerifyCode(string code, string provider, bool rememberMe = true, string returnUrl = null) { // Require that the user has already logged in via username/password or external login var user = await _signInManager.GetTwoFactorAuthenticationUserAsync(); @@ -1077,9 +1084,9 @@ namespace Yavsc.Controllers { ViewData["StatusMessage"] = "Your code was verified"; _logger.LogInformation($"Signed in. returning to {model.ReturnUrl}"); - if (model.ReturnUrl!=null) - return Redirect(model.ReturnUrl); - else RedirectToAction("Index","Home"); + if (model.ReturnUrl != null) + return Redirect(model.ReturnUrl); + else RedirectToAction("Index", "Home"); } if (result.IsLockedOut) { @@ -1100,7 +1107,7 @@ namespace Yavsc.Controllers } [HttpGet, Authorize("AdministratorOnly")] - public IActionResult AdminDelete(string id, string? returnUrl=null) + public IActionResult AdminDelete(string id, string? returnUrl = null) { return View(new UnregisterViewModel { UserId = id, ReturnUrl = returnUrl }); } @@ -1125,7 +1132,7 @@ namespace Yavsc.Controllers return View(model); } var result = await DeleteUser(model.UserId); - + if (!result.Succeeded) { AddErrors(result); @@ -1139,8 +1146,8 @@ namespace Yavsc.Controllers { ApplicationUser user = await _userManager.FindByIdAsync(userId); - _dbContext.DeviceDeclaration.RemoveRange( _dbContext.DeviceDeclaration.Where(g => g.DeviceOwnerId == userId )); - + _dbContext.DeviceDeclaration.RemoveRange(_dbContext.DeviceDeclaration.Where(g => g.DeviceOwnerId == userId)); + return await _userManager.DeleteAsync(user); } diff --git a/src/Yavsc/Controllers/HomeController.cs b/src/Yavsc/Controllers/HomeController.cs index fb040b73..265ad19d 100644 --- a/src/Yavsc/Controllers/HomeController.cs +++ b/src/Yavsc/Controllers/HomeController.cs @@ -7,6 +7,7 @@ using Microsoft.EntityFrameworkCore; using Microsoft.AspNetCore.Diagnostics; using Microsoft.Extensions.Options; using Yavsc.Server.Helpers; +using Org.BouncyCastle.Asn1.X509.Qualified; namespace Yavsc.Controllers { @@ -100,7 +101,16 @@ namespace Yavsc.Controllers public IActionResult Error() { var feature = this.HttpContext.Features.Get(); - + if (feature == null) return View(); + var errorType = feature?.Error; + if (errorType == null) return View(); + if (errorType is NotSupportedException notSupported) + { + return View(new ErrorViewModel { + Description = notSupported.Message, + RequestId = this.HttpContext.TraceIdentifier + }); + } return View("~/Views/Shared/Error.cshtml", feature?.Error); } public IActionResult Status(int id) diff --git a/src/Yavsc/Extensions/HostingExtensions.cs b/src/Yavsc/Extensions/HostingExtensions.cs index e778d8ca..5a564dba 100644 --- a/src/Yavsc/Extensions/HostingExtensions.cs +++ b/src/Yavsc/Extensions/HostingExtensions.cs @@ -338,6 +338,9 @@ public static class HostingExtensions ILoggerFactory loggerFactory = app.Services.GetRequiredService(); var logger = loggerFactory.CreateLogger(); + AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", true); + + if (app.Environment.IsDevelopment()) { app.UseDeveloperExceptionPage(); diff --git a/src/Yavsc/Resources/Controllers/AccountController.en.resx b/src/Yavsc/Resources/Controllers/AccountController.en.resx index 855b6a59..083c7202 100644 --- a/src/Yavsc/Resources/Controllers/AccountController.en.resx +++ b/src/Yavsc/Resources/Controllers/AccountController.en.resx @@ -64,7 +64,7 @@ You successfully created your {0} account, but your e-mail address is not yet confirmed. -Please, in order to validate it, follow this link <{1}>. +Please, in order to validate it, follow this link <a href="{1}">{1}</a>.. Thanks. -- diff --git a/src/Yavsc/Resources/Controllers/AccountController.resx b/src/Yavsc/Resources/Controllers/AccountController.resx index f5da0e9b..049d2d25 100644 --- a/src/Yavsc/Resources/Controllers/AccountController.resx +++ b/src/Yavsc/Resources/Controllers/AccountController.resx @@ -66,7 +66,7 @@ mais votre adresse e-mail reste à confirmer. Pour ce faire, veuillez, s'il vous plait, suivre le lien suivant -dans votre navigateur favori : <{1}>. +dans votre navigateur favori : <a href="{1}">{1}</a>. -- {0} - {2} <{3}> diff --git a/src/Yavsc/Views/Account/EmailConfirmed.cshtml b/src/Yavsc/Views/Account/EmailConfirmed.cshtml new file mode 100755 index 00000000..95b67828 --- /dev/null +++ b/src/Yavsc/Views/Account/EmailConfirmed.cshtml @@ -0,0 +1,15 @@ +@{ + ViewData["Title"] = "Confirmation de votre adresse e-mail"; +} + +

@ViewData["Title"].

+
+

+ Merci d’avoir confirmé votre e-mail. + @if (User.GetUserId()==null) { + S’il vous plait, + Cliquez ici pour vous connecter. + + } +

+
diff --git a/src/Yavsc/data/key-fe3eab4d-ae47-4baf-8823-6bc3f93b01cd.xml b/src/Yavsc/data/key-fe3eab4d-ae47-4baf-8823-6bc3f93b01cd.xml new file mode 100644 index 00000000..2d67fc0d --- /dev/null +++ b/src/Yavsc/data/key-fe3eab4d-ae47-4baf-8823-6bc3f93b01cd.xml @@ -0,0 +1,16 @@ + + + 2025-09-13T22:11:50.131367Z + 2025-09-13T22:11:50.131367Z + 2025-12-12T22:11:50.131367Z + + + + + + + lORkpPD3oKpPq5IdXlZgksz0GmK4YstoXXSmtvnsHLbvfTozPiBofujRzOrBgA6UvhitZEI/X+zZqIlKtDKluA== + + + + \ No newline at end of file diff --git a/src/Yavsc/wwwroot/images/arts/DJ-Turntable.svg b/src/Yavsc/wwwroot/images/arts/DJ-Turntable.svg deleted file mode 100644 index f0d8b2a1..00000000 --- a/src/Yavsc/wwwroot/images/arts/DJ-Turntable.svg +++ /dev/null @@ -1,3289 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - Openclipart - - - - - - - - - - - diff --git a/src/Yavsc/wwwroot/images/arts/Icon-Pictures.svg b/src/Yavsc/wwwroot/images/arts/Icon-Pictures.svg deleted file mode 100644 index 84d658a6..00000000 --- a/src/Yavsc/wwwroot/images/arts/Icon-Pictures.svg +++ /dev/null @@ -1,201 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - Openclipart - - - Icon Pictures - 2011-02-27T20:40:37 - - https://openclipart.org/detail/123745/icon-pictures-by-rones - - - rones - - - - - brush - icon - pencil - picture - symbol - - - - - - - - - - - diff --git a/src/Yavsc/wwwroot/images/arts/Machovka-Singing.svg b/src/Yavsc/wwwroot/images/arts/Machovka-Singing.svg deleted file mode 100644 index 705de9a8..00000000 --- a/src/Yavsc/wwwroot/images/arts/Machovka-Singing.svg +++ /dev/null @@ -1,853 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - Openclipart - - - Singing - 2006-12-20T22:02:22 - - https://openclipart.org/detail/2194/singing-by-machovka - - - Machovka - - - - - activity - cartoon - electric guitar - guitar - man - microphone - music - people - pop - rock - singer - singing - zombie - - - - - - - - - - - diff --git a/src/Yavsc/wwwroot/images/arts/Saxophone-Player-Silhouette.svg b/src/Yavsc/wwwroot/images/arts/Saxophone-Player-Silhouette.svg deleted file mode 100644 index a6d137d8..00000000 --- a/src/Yavsc/wwwroot/images/arts/Saxophone-Player-Silhouette.svg +++ /dev/null @@ -1,967 +0,0 @@ - - - - - - - - - - diff --git a/src/Yavsc/wwwroot/images/arts/concert.jpg b/src/Yavsc/wwwroot/images/arts/concert.jpg deleted file mode 100644 index ea5848e0..00000000 Binary files a/src/Yavsc/wwwroot/images/arts/concert.jpg and /dev/null differ diff --git a/src/Yavsc/wwwroot/images/arts/concert_b2.jpg b/src/Yavsc/wwwroot/images/arts/concert_b2.jpg deleted file mode 100644 index 13aa0410..00000000 Binary files a/src/Yavsc/wwwroot/images/arts/concert_b2.jpg and /dev/null differ diff --git a/src/Yavsc/wwwroot/images/arts/concert_ba.jpg b/src/Yavsc/wwwroot/images/arts/concert_ba.jpg deleted file mode 100644 index e4856942..00000000 Binary files a/src/Yavsc/wwwroot/images/arts/concert_ba.jpg and /dev/null differ diff --git a/src/Yavsc/wwwroot/images/arts/concert_s.jpg b/src/Yavsc/wwwroot/images/arts/concert_s.jpg deleted file mode 100644 index 00f91af6..00000000 Binary files a/src/Yavsc/wwwroot/images/arts/concert_s.jpg and /dev/null differ diff --git a/src/Yavsc/wwwroot/images/arts/dj.jpg b/src/Yavsc/wwwroot/images/arts/dj.jpg deleted file mode 100644 index 7af48092..00000000 Binary files a/src/Yavsc/wwwroot/images/arts/dj.jpg and /dev/null differ diff --git a/src/Yavsc/wwwroot/images/arts/dj_b2.jpg b/src/Yavsc/wwwroot/images/arts/dj_b2.jpg deleted file mode 100644 index 6e5f1b5b..00000000 Binary files a/src/Yavsc/wwwroot/images/arts/dj_b2.jpg and /dev/null differ diff --git a/src/Yavsc/wwwroot/images/arts/dj_ba.jpg b/src/Yavsc/wwwroot/images/arts/dj_ba.jpg deleted file mode 100644 index d945a953..00000000 Binary files a/src/Yavsc/wwwroot/images/arts/dj_ba.jpg and /dev/null differ diff --git a/src/Yavsc/wwwroot/images/arts/dj_s.jpg b/src/Yavsc/wwwroot/images/arts/dj_s.jpg deleted file mode 100644 index aa47823f..00000000 Binary files a/src/Yavsc/wwwroot/images/arts/dj_s.jpg and /dev/null differ diff --git a/src/Yavsc/wwwroot/images/arts/groupe.jpg b/src/Yavsc/wwwroot/images/arts/groupe.jpg deleted file mode 100644 index 5e0a286c..00000000 Binary files a/src/Yavsc/wwwroot/images/arts/groupe.jpg and /dev/null differ diff --git a/src/Yavsc/wwwroot/images/arts/groupe_b2.jpg b/src/Yavsc/wwwroot/images/arts/groupe_b2.jpg deleted file mode 100644 index c44ce420..00000000 Binary files a/src/Yavsc/wwwroot/images/arts/groupe_b2.jpg and /dev/null differ diff --git a/src/Yavsc/wwwroot/images/arts/groupe_ba.jpg b/src/Yavsc/wwwroot/images/arts/groupe_ba.jpg deleted file mode 100644 index 69a5afbb..00000000 Binary files a/src/Yavsc/wwwroot/images/arts/groupe_ba.jpg and /dev/null differ diff --git a/src/Yavsc/wwwroot/images/arts/groupe_s.jpg b/src/Yavsc/wwwroot/images/arts/groupe_s.jpg deleted file mode 100644 index 7773d29c..00000000 Binary files a/src/Yavsc/wwwroot/images/arts/groupe_s.jpg and /dev/null differ diff --git a/src/Yavsc/wwwroot/images/arts/hiphop.svg b/src/Yavsc/wwwroot/images/arts/hiphop.svg deleted file mode 100644 index ce16db7d..00000000 --- a/src/Yavsc/wwwroot/images/arts/hiphop.svg +++ /dev/null @@ -1,195 +0,0 @@ - - - - - - - - - - - - - - - -image/svg+xmlOpenclipartHip Hop Trio2010-08-02T19:45:58singing trio on michttps://openclipart.org/detail/76243/hip-hop-trio-by-shokuninshokuninbandhip hopmcmicmusicmusiciansrapsignsilhouettesilhouettessingerstrio diff --git a/src/Yavsc/wwwroot/images/arts/mike.jpg b/src/Yavsc/wwwroot/images/arts/mike.jpg deleted file mode 100644 index 9f8f490a..00000000 Binary files a/src/Yavsc/wwwroot/images/arts/mike.jpg and /dev/null differ diff --git a/src/Yavsc/wwwroot/images/arts/mike_b2.jpg b/src/Yavsc/wwwroot/images/arts/mike_b2.jpg deleted file mode 100644 index 0ffbcce2..00000000 Binary files a/src/Yavsc/wwwroot/images/arts/mike_b2.jpg and /dev/null differ diff --git a/src/Yavsc/wwwroot/images/arts/mike_ba.jpg b/src/Yavsc/wwwroot/images/arts/mike_ba.jpg deleted file mode 100644 index afa20ef1..00000000 Binary files a/src/Yavsc/wwwroot/images/arts/mike_ba.jpg and /dev/null differ diff --git a/src/Yavsc/wwwroot/images/arts/mike_s.jpg b/src/Yavsc/wwwroot/images/arts/mike_s.jpg deleted file mode 100644 index 721015a3..00000000 Binary files a/src/Yavsc/wwwroot/images/arts/mike_s.jpg and /dev/null differ diff --git a/src/Yavsc/wwwroot/images/arts/musique-1.jpg b/src/Yavsc/wwwroot/images/arts/musique-1.jpg deleted file mode 100644 index 9eb23246..00000000 Binary files a/src/Yavsc/wwwroot/images/arts/musique-1.jpg and /dev/null differ diff --git a/src/Yavsc/wwwroot/images/arts/musique-2.jpg b/src/Yavsc/wwwroot/images/arts/musique-2.jpg deleted file mode 100644 index 85f47afd..00000000 Binary files a/src/Yavsc/wwwroot/images/arts/musique-2.jpg and /dev/null differ diff --git a/src/Yavsc/wwwroot/images/arts/musique-3.jpg b/src/Yavsc/wwwroot/images/arts/musique-3.jpg deleted file mode 100644 index b2e376d3..00000000 Binary files a/src/Yavsc/wwwroot/images/arts/musique-3.jpg and /dev/null differ diff --git a/src/Yavsc/wwwroot/images/arts/musique.jpg b/src/Yavsc/wwwroot/images/arts/musique.jpg deleted file mode 100644 index 82e300ec..00000000 Binary files a/src/Yavsc/wwwroot/images/arts/musique.jpg and /dev/null differ diff --git a/src/Yavsc/wwwroot/images/arts/musique_b2.jpg b/src/Yavsc/wwwroot/images/arts/musique_b2.jpg deleted file mode 100644 index 4dd6753e..00000000 Binary files a/src/Yavsc/wwwroot/images/arts/musique_b2.jpg and /dev/null differ diff --git a/src/Yavsc/wwwroot/images/arts/musique_s.jpg b/src/Yavsc/wwwroot/images/arts/musique_s.jpg deleted file mode 100644 index 82e300ec..00000000 Binary files a/src/Yavsc/wwwroot/images/arts/musique_s.jpg and /dev/null differ diff --git a/src/Yavsc/wwwroot/images/arts/saxo-player-2.svg b/src/Yavsc/wwwroot/images/arts/saxo-player-2.svg deleted file mode 100644 index 10bcf9eb..00000000 --- a/src/Yavsc/wwwroot/images/arts/saxo-player-2.svg +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - - - diff --git a/src/Yavsc/wwwroot/images/arts/trumpeter2.svg b/src/Yavsc/wwwroot/images/arts/trumpeter2.svg deleted file mode 100644 index 5998cd44..00000000 --- a/src/Yavsc/wwwroot/images/arts/trumpeter2.svg +++ /dev/null @@ -1,117 +0,0 @@ - - - - - Trumpeter2 - - - - - - image/svg+xml - - Trumpeter2 - 2016-07-26 - - - Algot Runeman - - - - - Algot Runeman - - - - - runeman.org - - - trumpeter2.svg - - - - - - - - - - - - - - - - diff --git a/src/Yavsc/wwwroot/images/haircut/johnny-automatic-girls-hair-style-4.svg b/src/Yavsc/wwwroot/images/haircut/johnny-automatic-girls-hair-style-4.svg deleted file mode 100644 index b2c1c881..00000000 --- a/src/Yavsc/wwwroot/images/haircut/johnny-automatic-girls-hair-style-4.svg +++ /dev/null @@ -1,348 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -image/svg+xmlOpenclipartgirls hair style 42007-09-18T00:02:57From Practice and science of standard barbering (c1951) Author: Thorpe, Sidney Coyne from archive.orghttps://openclipart.org/detail/5577/girls-hair-style-4-by-johnny_automaticjohnny_automaticexternalsourcegirlhairhaircutheadline artportrait diff --git a/src/Yavsc/wwwroot/images/haircut/johnny-automatic-medium-haircut-with-natural-curls.svg b/src/Yavsc/wwwroot/images/haircut/johnny-automatic-medium-haircut-with-natural-curls.svg deleted file mode 100644 index e8d926cc..00000000 --- a/src/Yavsc/wwwroot/images/haircut/johnny-automatic-medium-haircut-with-natural-curls.svg +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -image/svg+xmlOpenclipartmedium haircut with natural curls2007-09-16T14:52:06From Practice and science of standard barbering (c1951) Author: Thorpe, Sidney Coyne from archive.orghttps://openclipart.org/detail/5504/medium-haircut-with-natural-curls-by-johnny_automaticjohnny_automaticbarberingexternalsourcehairhaircutheadportrait diff --git a/src/Yavsc/wwwroot/images/haircut/johnny-automatic-women-s-haircutting-6.svg b/src/Yavsc/wwwroot/images/haircut/johnny-automatic-women-s-haircutting-6.svg deleted file mode 100644 index 287ec35a..00000000 --- a/src/Yavsc/wwwroot/images/haircut/johnny-automatic-women-s-haircutting-6.svg +++ /dev/null @@ -1,439 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -image/svg+xmlOpenclipartwomen's haircutting 62007-09-17T03:24:24From Practice and science of standard barbering (c1951) Author: Thorpe, Sidney Coyne from archive.orghttps://openclipart.org/detail/5554/womens-haircutting-6-by-johnny_automaticjohnny_automaticbarberbarberingexternalsourcehairhaircutheadline artwoman