From 49aa10355280a614da01cebb68c96dfdd602ac6f Mon Sep 17 00:00:00 2001 From: Syndamia Date: Wed, 16 Dec 2020 11:26:32 +0200 Subject: Fixed user input data validation upon registration --- src/DevHive.Data/Models/User.cs | 39 ++-------------------- .../Models/Identity/User/RegisterWebModel.cs | 22 ++++++++++++ .../Validation/OnlyAlphanumericsModelValidation.cs | 20 +++++++++++ .../Validation/OnlyLettersModelValidation.cs | 20 +++++++++++ 4 files changed, 65 insertions(+), 36 deletions(-) create mode 100644 src/DevHive.Web/Models/Identity/Validation/OnlyAlphanumericsModelValidation.cs create mode 100644 src/DevHive.Web/Models/Identity/Validation/OnlyLettersModelValidation.cs (limited to 'src') diff --git a/src/DevHive.Data/Models/User.cs b/src/DevHive.Data/Models/User.cs index a92e94d..75015e8 100644 --- a/src/DevHive.Data/Models/User.cs +++ b/src/DevHive.Data/Models/User.cs @@ -8,60 +8,27 @@ namespace DevHive.Data.Models [Table("Users")] public class User : IdentityUser, IModel { - private string _firstName; - private string _lastName; - [Required] [Range(3, 50)] [Display(Name = "Username")] public override string UserName { get => base.UserName; - set - { - ValidateString("Username", 3, 50, value, true); - base.UserName = value; - } + set => base.UserName = value; } [Required] [Range(3, 30)] - public string FirstName - { - get => this._firstName; - set - { - ValidateString("FirstName", 3, 30, value, false); - this._firstName = value; - } - } + public string FirstName { get; set; } [Required] [Range(3, 30)] - public string LastName - { - get => this._lastName; - set - { - ValidateString("LastName", 3, 30, value, false); - this._lastName = value; - } - } + public string LastName { get; set; } public string ProfilePicture { get; set; } public string Role { get; set; } //public List Friends { get; set; } - - private static void ValidateString(string propertyName, int minLength, int maxLength, string value, bool canBeDigit) - { - if (value.Length < minLength || value.Length > maxLength) - throw new ArgumentException($"{propertyName} length cannot be less than {minLength} and more than {maxLength}."); - - foreach (char ch in value) - if (!Char.IsLetter(ch) && !(Char.IsDigit(ch) && canBeDigit)) - throw new ArgumentException($"{propertyName} contains invalid characters."); - } } } diff --git a/src/DevHive.Web/Models/Identity/User/RegisterWebModel.cs b/src/DevHive.Web/Models/Identity/User/RegisterWebModel.cs index aafdf61..c82263e 100644 --- a/src/DevHive.Web/Models/Identity/User/RegisterWebModel.cs +++ b/src/DevHive.Web/Models/Identity/User/RegisterWebModel.cs @@ -1,11 +1,33 @@ +using System.ComponentModel.DataAnnotations; +using DevHive.Web.Models.Identity.Validation; + namespace DevHive.Web.Models.Identity.User { public class RegisterWebModel { + [Required] + [MinLength(3)] + [MaxLength(50)] + [OnlyAlphanumerics(ErrorMessage = "Username can only contain letters and digits!")] public string UserName { get; set; } + + [Required] + [EmailAddress] public string Email { get; set; } + + [Required] + [MinLength(3)] + [MaxLength(30)] + [OnlyLetters(ErrorMessage = "First name can only contain letters!")] public string FirstName { get; set; } + + [Required] + [MinLength(3)] + [MaxLength(30)] + [OnlyLetters(ErrorMessage = "Last name can only contain letters!")] public string LastName { get; set; } + + [Required] public string Password { get; set; } } } diff --git a/src/DevHive.Web/Models/Identity/Validation/OnlyAlphanumericsModelValidation.cs b/src/DevHive.Web/Models/Identity/Validation/OnlyAlphanumericsModelValidation.cs new file mode 100644 index 0000000..5c8c66c --- /dev/null +++ b/src/DevHive.Web/Models/Identity/Validation/OnlyAlphanumericsModelValidation.cs @@ -0,0 +1,20 @@ +using System; +using System.ComponentModel.DataAnnotations; + +namespace DevHive.Web.Models.Identity.Validation +{ + public class OnlyAlphanumerics : ValidationAttribute + { + public override bool IsValid(object value) + { + var stringValue = (string)value; + + foreach (char ch in stringValue) + { + if (!Char.IsLetterOrDigit(ch)) + return false; + } + return true; + } + } +} diff --git a/src/DevHive.Web/Models/Identity/Validation/OnlyLettersModelValidation.cs b/src/DevHive.Web/Models/Identity/Validation/OnlyLettersModelValidation.cs new file mode 100644 index 0000000..29a995a --- /dev/null +++ b/src/DevHive.Web/Models/Identity/Validation/OnlyLettersModelValidation.cs @@ -0,0 +1,20 @@ +using System; +using System.ComponentModel.DataAnnotations; + +namespace DevHive.Web.Models.Identity.Validation +{ + public class OnlyLetters : ValidationAttribute + { + public override bool IsValid(object value) + { + var stringValue = (string)value; + + foreach (char ch in stringValue) + { + if (!Char.IsLetter(ch)) + return false; + } + return true; + } + } +} -- cgit v1.2.3