diff --git a/Yavsc/Controllers/AccountController.cs b/Yavsc/Controllers/AccountController.cs index 3f9f1d31..68ed1cc5 100644 --- a/Yavsc/Controllers/AccountController.cs +++ b/Yavsc/Controllers/AccountController.cs @@ -17,6 +17,7 @@ using Yavsc.ViewModels.Account; using Yavsc.Helpers; using Microsoft.Extensions.Localization; using Microsoft.Data.Entity; +using Newtonsoft.Json; namespace Yavsc.Controllers { @@ -107,6 +108,19 @@ namespace Yavsc.Controllers { if (ModelState.IsValid) { + /* + var user = await _userManager.FindByNameAsync(model.UserName); + if (user != null) + { + if (!await _userManager.IsEmailConfirmedAsync(user)) + { + ModelState.AddModelError(string.Empty, + "You must have a confirmed email to log in."); + return View(model); + } + } + */ + // This doesn't count login failures towards account lockout // To enable password failures to trigger account lockout, set lockoutOnFailure: true var result = await _signInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, lockoutOnFailure: false); @@ -207,6 +221,9 @@ namespace Yavsc.Controllers "Please confirm your account by clicking this link: link"); // await _signInManager.SignInAsync(user, isPersistent: false); _logger.LogInformation(3, "User created a new account with password."); + await _emailSender.SendEmailAsync(_siteSettings, _smtpSettings, Startup.SiteSetup.Owner.EMail, + $"[{_siteSettings.Title}] Inscription avec mot de passe: {user.UserName} ", $"{user.Id}/{user.UserName}/{user.Email}"); + return RedirectToAction(nameof(HomeController.Index), "Home"); } AddErrors(result); @@ -258,7 +275,6 @@ namespace Yavsc.Controllers { _logger.LogInformation(5, $"User logged in with {info.LoginProvider} provider, as {info.ProviderDisplayName} ({info.ProviderKey})." ); - var ninfo = _dbContext.UserLogins.First(l=>l.ProviderKey == info.ProviderKey && l.LoginProvider == info.LoginProvider); ninfo.ProviderDisplayName = info.ProviderDisplayName; _dbContext.Entry(ninfo).State = EntityState.Modified; @@ -276,6 +292,7 @@ namespace Yavsc.Controllers } else { + ViewData["jsonres"] = JsonConvert.SerializeObject(result); // If the user does not have an account, then ask the user to create an account. ViewData["ReturnUrl"] = returnUrl; ViewData["LoginProvider"] = info.LoginProvider; @@ -332,6 +349,11 @@ namespace Yavsc.Controllers if (result.Succeeded) { await _signInManager.SignInAsync(user, isPersistent: false); + + + await _emailSender.SendEmailAsync(_siteSettings, _smtpSettings, Startup.SiteSetup.Owner.EMail, + $"[{_siteSettings.Title}] Inscription via {info.LoginProvider}: {user.UserName} ", $"{user.Id}/{user.UserName}/{user.Email}"); + _logger.LogInformation(6, "User created an account using {Name} provider.", info.LoginProvider); return Redirect(returnUrl); @@ -380,14 +402,22 @@ namespace Yavsc.Controllers { if (ModelState.IsValid) { - var user = await _userManager.FindByEmailAsync(model.Email); - if (user == null || !(await _userManager.IsEmailConfirmedAsync(user))) - { - // Don't reveal that the user does not exist or is not confirmed - if (user == null) - _logger.LogWarning($"ForgotPassword: Email {model.Email} not found"); - else - _logger.LogWarning($"ForgotPassword: Email {model.Email} not confirmed"); + var user = await _userManager.FindByEmailAsync(model.LoginOrEmail); + + // Don't reveal that the user does not exist or is not confirmed + if (user == null) { + user = await _userManager.FindByNameAsync(model.LoginOrEmail); + if (user == null) + { + _logger.LogWarning($"ForgotPassword: Email or User name {model.LoginOrEmail} not found"); + return View("ForgotPasswordConfirmation"); + } + } + // user != null + // We want him to have a confirmed e-mail, and prevent this script + // to be used to send e-mail to any arbitrary person + if (!await _userManager.IsEmailConfirmedAsync(user)) { + _logger.LogWarning($"ForgotPassword: Email {model.LoginOrEmail} not confirmed"); return View("ForgotPasswordConfirmation"); } @@ -395,7 +425,7 @@ namespace Yavsc.Controllers // Send an email with this link var code = await _userManager.GeneratePasswordResetTokenAsync(user); var callbackUrl = Url.Action("ResetPassword", "Account", new { userId = user.Id, code = code }, protocol: HttpContext.Request.Scheme); - await _emailSender.SendEmailAsync(_siteSettings,_smtpSettings,model.Email, _localizer["Reset Password"], + await _emailSender.SendEmailAsync(_siteSettings,_smtpSettings,model.LoginOrEmail, _localizer["Reset Password"], _localizer["Please reset your password by following this link:"] +" <"+ callbackUrl +">" ); return View("ForgotPasswordConfirmation"); } @@ -604,9 +634,7 @@ namespace Yavsc.Controllers { return await _userManager.FindByIdAsync(HttpContext.User.GetUserId()); } - - - + #endregion } } diff --git a/Yavsc/Resources/Yavsc.Resources.YavscLocalisation.fr.resx b/Yavsc/Resources/Yavsc.Resources.YavscLocalisation.fr.resx index b12bbd05..50d21847 100644 --- a/Yavsc/Resources/Yavsc.Resources.YavscLocalisation.fr.resx +++ b/Yavsc/Resources/Yavsc.Resources.YavscLocalisation.fr.resx @@ -124,7 +124,7 @@ Accepter la notification d'une demande de rendez-vous Accepter les prises de contact de la part de particuliers Balance du compte - Activer mon profile professionnel + Activer mon profil professionnel Activité Activités de plus @@ -195,7 +195,7 @@ Ne pas publier mon activité S'il vous plait, spécifiez ceux de vos cercles à qui est destiné ce contenu Une erreur est survenue à la génération de votre document - Nom affiché + Nom affiché Désactiver Désactivé Poster @@ -209,6 +209,7 @@ Heure de fin e-mail Saisissez votre email. + Saisissez votre nom d'utilisateur ou email. entrées Estimer Devis non trouvé @@ -221,7 +222,7 @@ Factures à produire Factures à honnorer - Paiements effectués + Demande de devis Date de l'évennement Page web de l'événement @@ -264,6 +265,8 @@ Enfant Lieu Connection + Nom d'utilisateur ou e-mail + Se connecter Déconnection long @@ -310,6 +313,7 @@ Seuls les utilisateurs authorisés peuvent contacter un préstataire par courrier. Mot de passe Confirmation de paiement + Paiements effectués Version Pdf Date de la prestation Lieu de la pestation @@ -330,7 +334,7 @@ Date souhaitée Lieu de la présation: {0}.\n PrévisualiserPrévisualiser le document - Édition du profile + Édition du profil Référence produit prestation Paramètres professionels @@ -348,7 +352,7 @@ Veuillez pardonner la gêne occasionnée Se souvenir du mot de passe Supprimer - Supprimer mon profile professionnel + Supprimer mon profil professionnel Rôle Ré-initialiser votre mot de passe Confirmation de ré-initialiser du mot de passe @@ -364,7 +368,7 @@ Classe du paramétrage court Son blog - Votre profile professionel + Votre profil professionel Positionnez ci-après vos les paramêtre de votre activité Talents/Compétences/Spécialités gérés sur ce site Compétence @@ -427,8 +431,8 @@ Votre demande a été transmise Vos talents, vos spécialités, le domaine de vos activités Vos publications - Votre profile + Votre profil Votre messge a été envoyé Dites en plus, ci àprès, à propos de cet évennement - Supprimer mon profile professionel + Supprimer mon profil professionel diff --git a/Yavsc/Startup/Startup.OAuth.cs b/Yavsc/Startup/Startup.OAuth.cs index 9aa74258..ff541616 100644 --- a/Yavsc/Startup/Startup.OAuth.cs +++ b/Yavsc/Startup/Startup.OAuth.cs @@ -82,12 +82,13 @@ namespace Yavsc */ } ).AddEntityFrameworkStores() - .AddTokenProvider>(Constants.DefaultFactor); + .AddTokenProvider>(Constants.DefaultFactor) // .AddTokenProvider(Constants.DefaultFactor) // .AddTokenProvider(Constants.SMSFactor) // .AddTokenProvider(Constants.EMailFactor) // .AddTokenProvider(Constants.AppFactor) - // + // .AddDefaultTokenProviders() + ; } private void ConfigureOAuthApp(IApplicationBuilder app, SiteSettings settingsOptions, ILogger logger) diff --git a/Yavsc/ViewModels/Account/ForgotPasswordViewModel.cs b/Yavsc/ViewModels/Account/ForgotPasswordViewModel.cs index c4f3cdd3..20832041 100644 --- a/Yavsc/ViewModels/Account/ForgotPasswordViewModel.cs +++ b/Yavsc/ViewModels/Account/ForgotPasswordViewModel.cs @@ -6,7 +6,7 @@ namespace Yavsc.ViewModels.Account public class ForgotPasswordViewModel { [Required] - [EmailAddress] - public string Email { get; set; } + [StringLength(512)] + public string LoginOrEmail { get; set; } } } diff --git a/Yavsc/ViewModels/Account/LoginViewModel.cs b/Yavsc/ViewModels/Account/LoginViewModel.cs index 1edf9c7a..74b2c299 100755 --- a/Yavsc/ViewModels/Account/LoginViewModel.cs +++ b/Yavsc/ViewModels/Account/LoginViewModel.cs @@ -26,7 +26,7 @@ namespace Yavsc.ViewModels.Account /// When true, asks for a two-factor identification /// /// - [Display(Name = "Remember me?")] + [Display(Name = "Se souvenir de moi?")] public bool RememberMe { get; set; } /// diff --git a/Yavsc/ViewModels/Account/RegisterViewModel.cs b/Yavsc/ViewModels/Account/RegisterViewModel.cs index ecdc603b..c890f224 100644 --- a/Yavsc/ViewModels/Account/RegisterViewModel.cs +++ b/Yavsc/ViewModels/Account/RegisterViewModel.cs @@ -4,7 +4,7 @@ namespace Yavsc.ViewModels.Account { public class RegisterViewModel { - [Required] + [Required][Display(Name = "Nom d'utilisateur")] public string UserName { get; set; } [Required] @@ -13,14 +13,14 @@ namespace Yavsc.ViewModels.Account public string Email { get; set; } [Required] - [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)] - [DataType(DataType.Password)] - [Display(Name = "Password")] + [StringLength(100, ErrorMessage = "Le {0} doit être long d'au moins {2} caractères.", MinimumLength = 6)] + [DataType(DataType.Password, ErrorMessage="Les mots de passe doivent contenir au moins un caractère spécial, qui ne soit ni une lettre ni un chiffre.")] + [Display(Name = "Mot de passe")] public string Password { get; set; } [DataType(DataType.Password)] - [Display(Name = "Confirm password")] - [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")] + [Display(Name = "Confirmer le mot de passe")] + [Compare("Password", ErrorMessage = "Le mot de passe et sa confirmation ne sont pas les mêmes.")] public string ConfirmPassword { get; set; } public string GoogleRegId { get; set; } diff --git a/Yavsc/ViewModels/Account/ResetPasswordViewModel.cs b/Yavsc/ViewModels/Account/ResetPasswordViewModel.cs index 092eed44..942adbff 100644 --- a/Yavsc/ViewModels/Account/ResetPasswordViewModel.cs +++ b/Yavsc/ViewModels/Account/ResetPasswordViewModel.cs @@ -9,13 +9,13 @@ namespace Yavsc.ViewModels.Account public string Email { get; set; } [Required] - [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)] + [StringLength(100, ErrorMessage = "Le {0} doit être long d'au moins {2} caractères.", MinimumLength = 6)] [DataType(DataType.Password)] public string Password { get; set; } [DataType(DataType.Password)] - [Display(Name = "Confirm password")] - [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")] + [Display(Name = "Confirmer le mot de passe")] + [Compare("Password", ErrorMessage = "Le mot de passe et sa confirmation ne sont pas les mêmes.")] public string ConfirmPassword { get; set; } public string Code { get; set; } diff --git a/Yavsc/ViewModels/Account/VerifyCodeViewModel.cs b/Yavsc/ViewModels/Account/VerifyCodeViewModel.cs index 6439dcf4..0158cb1f 100644 --- a/Yavsc/ViewModels/Account/VerifyCodeViewModel.cs +++ b/Yavsc/ViewModels/Account/VerifyCodeViewModel.cs @@ -12,10 +12,10 @@ namespace Yavsc.ViewModels.Account public string ReturnUrl { get; set; } - [Display(Name = "Remember this browser?")] + [Display(Name = "Se souvenir de ce navigateur?")] public bool RememberBrowser { get; set; } - [Display(Name = "Remember me?")] + [Display(Name = "Se souvenir de moi?")] public bool RememberMe { get; set; } } } diff --git a/Yavsc/Views/Account/ExternalLoginConfirmation.cshtml b/Yavsc/Views/Account/ExternalLoginConfirmation.cshtml index 97298458..4754361e 100755 --- a/Yavsc/Views/Account/ExternalLoginConfirmation.cshtml +++ b/Yavsc/Views/Account/ExternalLoginConfirmation.cshtml @@ -6,6 +6,8 @@

@ViewData["Title"].

Associate your @ViewData["LoginProvider"] account.

+@ViewData["jsonres"] +

Association Form


diff --git a/Yavsc/Views/Account/ForgotPassword.cshtml b/Yavsc/Views/Account/ForgotPassword.cshtml index 93e0276b..280fa3b0 100755 --- a/Yavsc/Views/Account/ForgotPassword.cshtml +++ b/Yavsc/Views/Account/ForgotPassword.cshtml @@ -6,14 +6,14 @@

@ViewData["Title"]

-

@SR["Enter your email."]

+

@SR["Enter your user name or e-mail."]


- +
- - + +
diff --git a/Yavsc/Views/Blogspot/Index.cshtml b/Yavsc/Views/Blogspot/Index.cshtml index 7ea306a3..e49efc3d 100644 --- a/Yavsc/Views/Blogspot/Index.cshtml +++ b/Yavsc/Views/Blogspot/Index.cshtml @@ -56,7 +56,7 @@ @SR["Title"] - apperçu + aperçu diff --git a/Yavsc/Views/Home/About.cshtml b/Yavsc/Views/Home/About.cshtml index 431fe42f..9fcd587a 100755 --- a/Yavsc/Views/Home/About.cshtml +++ b/Yavsc/Views/Home/About.cshtml @@ -29,7 +29,7 @@ la prestation, une collecte du retour du client, et un paiement du prestataire d Ni le client ni le prestataire ne sont anonymes pour l'applications, il sont même formellement authentifies par l'acquitement d'une première -facturation en ligne, ou à l'occasion de la saisie de leur profile proféssionnel. +facturation en ligne, ou à l'occasion de la saisie de leur profil proféssionnel. Durant la phase de construction d'un contrat de prestation, le client et l'artiste peuvent profiter d'un canal de communication privé et anonyme, @@ -51,11 +51,11 @@ d'effectuer toute prestation en relation tant le paiement associé laisse à dou Une fois sa prestation associée exécutée, les paiements relatifs sont effectués auprès de l'artiste. Pour un contrat exécuté et non honoré par le client, le processus de poursuite en recouvrement est engagé, sinon, le contrat est archivé, -des attestations de paiement sont disponible pour l'artiste et la facture est marquée payée, puis repostée au client. +des attestations de paiement sont disponibles pour l'artiste et la facture est marquée payée, puis repostée au client. ### Pour l'artiste -L'artiste choisit plusieurs paramètres qui vont faire son profile : +L'artiste choisit plusieurs paramètres qui vont faire son profil : * Le type d'activités qu'il veut promouvoir, le type de prestations qu'il fournit (est-ce un DJ, un chanteur solo, un musicien solo, un ensemble musical classique, un groupe) diff --git a/Yavsc/Views/Manage/Index.cshtml b/Yavsc/Views/Manage/Index.cshtml index c287216d..09fa504d 100755 --- a/Yavsc/Views/Manage/Index.cshtml +++ b/Yavsc/Views/Manage/Index.cshtml @@ -25,7 +25,7 @@ @if (Model.EmailConfirmed) { (@SR["Adresse E-mail confirmée"]) - }else { + } else { (@SR["Adresse non confirmée."])