add ability to get user based on username or email address

This commit is contained in:
sbwalker 2023-08-13 08:35:03 -04:00
parent c344eedb12
commit c2acd010ce
7 changed files with 46 additions and 9 deletions

View File

@ -15,7 +15,6 @@ namespace Oqtane.Services
/// <param name="siteId">ID of a <see cref="Site"/></param> /// <param name="siteId">ID of a <see cref="Site"/></param>
/// <returns></returns> /// <returns></returns>
Task<User> GetUserAsync(int userId, int siteId); Task<User> GetUserAsync(int userId, int siteId);
/// <summary> /// <summary>
/// Get a <see cref="User"/> of a specific site /// Get a <see cref="User"/> of a specific site
@ -25,6 +24,15 @@ namespace Oqtane.Services
/// <returns></returns> /// <returns></returns>
Task<User> GetUserAsync(string username, int siteId); Task<User> GetUserAsync(string username, int siteId);
/// <summary>
/// Get a <see cref="User"/> of a specific site
/// </summary>
/// <param name="username">Username / login of a <see cref="User"/></param>
/// <param name="email">email address of a <see cref="User"/></param>
/// <param name="siteId">ID of a <see cref="Site"/></param>
/// <returns></returns>
Task<User> GetUserAsync(string username, string email, int siteId);
/// <summary> /// <summary>
/// Save a user to the Database. /// Save a user to the Database.
/// The <see cref="User"/> object contains all the information incl. what <see cref="Site"/> it belongs to. /// The <see cref="User"/> object contains all the information incl. what <see cref="Site"/> it belongs to.

View File

@ -4,6 +4,7 @@ using System.Net.Http;
using System.Threading.Tasks; using System.Threading.Tasks;
using Oqtane.Documentation; using Oqtane.Documentation;
using System.Net; using System.Net;
using System.ComponentModel.DataAnnotations;
namespace Oqtane.Services namespace Oqtane.Services
{ {
@ -21,7 +22,12 @@ namespace Oqtane.Services
public async Task<User> GetUserAsync(string username, int siteId) public async Task<User> GetUserAsync(string username, int siteId)
{ {
return await GetJsonAsync<User>($"{Apiurl}/name/{username}?siteid={siteId}"); return await GetUserAsync(username, "", siteId);
}
public async Task<User> GetUserAsync(string username, string email, int siteId)
{
return await GetJsonAsync<User>($"{Apiurl}/name/{(!string.IsNullOrEmpty(username) ? username : "-")}/{(!string.IsNullOrEmpty(email) ? email : "-")}/?siteid={siteId}");
} }
public async Task<User> AddUserAsync(User user) public async Task<User> AddUserAsync(User user)

View File

@ -61,13 +61,15 @@ namespace Oqtane.Controllers
} }
} }
// GET api/<controller>/name/x?siteid=x // GET api/<controller>/name/{name}/{email}?siteid=x
[HttpGet("name/{name}")] [HttpGet("name/{name}/{email}")]
public User Get(string name, string siteid) public User Get(string name, string email, string siteid)
{ {
if (int.TryParse(siteid, out int SiteId) && SiteId == _tenantManager.GetAlias().SiteId) if (int.TryParse(siteid, out int SiteId) && SiteId == _tenantManager.GetAlias().SiteId)
{ {
User user = _userManager.GetUser(name, SiteId); name = (name == "-") ? "" : name;
email = (email == "-") ? "" : email;
User user = _userManager.GetUser(name, email, SiteId);
if (user == null) if (user == null)
{ {
HttpContext.Response.StatusCode = (int)HttpStatusCode.NotFound; HttpContext.Response.StatusCode = (int)HttpStatusCode.NotFound;
@ -76,7 +78,7 @@ namespace Oqtane.Controllers
} }
else else
{ {
_logger.Log(LogLevel.Error, this, LogFunction.Security, "Unauthorized User Get Attempt {Username} {SiteId}", name, siteid); _logger.Log(LogLevel.Error, this, LogFunction.Security, "Unauthorized User Get Attempt {Username} {Email} {SiteId}", name, email, siteid);
HttpContext.Response.StatusCode = (int)HttpStatusCode.Forbidden; HttpContext.Response.StatusCode = (int)HttpStatusCode.Forbidden;
return null; return null;
} }

View File

@ -7,6 +7,7 @@ namespace Oqtane.Managers
{ {
User GetUser(int userid, int siteid); User GetUser(int userid, int siteid);
User GetUser(string username, int siteid); User GetUser(string username, int siteid);
User GetUser(string username, string email, int siteid);
Task<User> AddUser(User user); Task<User> AddUser(User user);
Task<User> UpdateUser(User user); Task<User> UpdateUser(User user);
Task DeleteUser(int userid, int siteid); Task DeleteUser(int userid, int siteid);

View File

@ -51,7 +51,12 @@ namespace Oqtane.Managers
public User GetUser(string username, int siteid) public User GetUser(string username, int siteid)
{ {
User user = _users.GetUser(username); return GetUser(username, "", siteid);
}
public User GetUser(string username, string email, int siteid)
{
User user = _users.GetUser(username, email);
if (user != null) if (user != null)
{ {
user.SiteId = siteid; user.SiteId = siteid;

View File

@ -11,6 +11,7 @@ namespace Oqtane.Repository
User GetUser(int userId); User GetUser(int userId);
User GetUser(int userId, bool tracking); User GetUser(int userId, bool tracking);
User GetUser(string username); User GetUser(string username);
User GetUser(string username, string email);
void DeleteUser(int userId); void DeleteUser(int userId);
} }
} }

View File

@ -105,7 +105,21 @@ namespace Oqtane.Repository
public User GetUser(string username) public User GetUser(string username)
{ {
return _db.User.Where(item => item.Username == username).FirstOrDefault(); return GetUser(username, "");
}
public User GetUser(string username, string email)
{
User user = null;
if (!string.IsNullOrEmpty(username))
{
user = _db.User.Where(item => item.Username == username).FirstOrDefault();
}
if (user == null && !string.IsNullOrEmpty(email))
{
user = _db.User.Where(item => item.Email == email).FirstOrDefault();
}
return user;
} }
public void DeleteUser(int userId) public void DeleteUser(int userId)