diff --git a/WatchIt.WebAPI/WatchIt.WebAPI.Services/WatchIt.WebAPI.Services.Utility/WatchIt.WebAPI.Services.Utility.User/IUserService.cs b/WatchIt.WebAPI/WatchIt.WebAPI.Services/WatchIt.WebAPI.Services.Utility/WatchIt.WebAPI.Services.Utility.User/IUserService.cs new file mode 100644 index 0000000..d86d330 --- /dev/null +++ b/WatchIt.WebAPI/WatchIt.WebAPI.Services/WatchIt.WebAPI.Services.Utility/WatchIt.WebAPI.Services.Utility.User/IUserService.cs @@ -0,0 +1,11 @@ +using System.Security.Claims; + +namespace WatchIt.WebAPI.Services.Utility.User; + +public interface IUserService +{ + ClaimsPrincipal GetRawUser(); + string? GetRawToken(); + UserValidator GetValidator(); + Guid GetJti(); +} \ No newline at end of file diff --git a/WatchIt.WebAPI/WatchIt.WebAPI.Services/WatchIt.WebAPI.Services.Utility/WatchIt.WebAPI.Services.Utility.User/UserValidator.cs b/WatchIt.WebAPI/WatchIt.WebAPI.Services/WatchIt.WebAPI.Services.Utility/WatchIt.WebAPI.Services.Utility.User/UserValidator.cs new file mode 100644 index 0000000..b3ae31d --- /dev/null +++ b/WatchIt.WebAPI/WatchIt.WebAPI.Services/WatchIt.WebAPI.Services.Utility/WatchIt.WebAPI.Services.Utility.User/UserValidator.cs @@ -0,0 +1,57 @@ +using System.Security.Claims; +using WatchIt.Database; + +namespace WatchIt.WebAPI.Services.Utility.User; + +public class UserValidator +{ + #region FIELDS + + protected readonly DatabaseContext _database; + protected readonly ClaimsPrincipal _claimsPrincipal; + protected readonly List _validationErrors; + + #endregion + + + + #region PROPERTIES + + public bool IsValid { get; protected set; } + public IEnumerable ValidationErrors => _validationErrors; + + #endregion + + + + #region CONSTRUCTORS + + internal UserValidator(DatabaseContext database, ClaimsPrincipal claimsPrincipal) + { + _database = database; + _claimsPrincipal = claimsPrincipal; + _validationErrors = new List(); + + IsValid = true; + } + + #endregion + + + + #region PUBLIC METHODS + + public UserValidator MustBeAdmin() + { + Claim adminClaim = _claimsPrincipal.FindFirst(x => x.Type == "admin")!; + if (adminClaim.Value == bool.FalseString) + { + IsValid = false; + _validationErrors.Add("User is not admin"); + } + + return this; + } + + #endregion +} \ No newline at end of file