Added LDAP login, removed registration option
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using OneForMe.Services;
|
||||
|
||||
namespace OneForMe.Controllers;
|
||||
|
||||
@@ -7,42 +8,78 @@ namespace OneForMe.Controllers;
|
||||
[Route("api/[controller]")]
|
||||
public class AuthController : ControllerBase
|
||||
{
|
||||
private readonly UserManager<IdentityUser> _userManager;
|
||||
private readonly ILdapService _ldapService;
|
||||
private readonly SignInManager<IdentityUser> _signInManager;
|
||||
private readonly UserManager<IdentityUser> _userManager;
|
||||
private readonly ILogger<AuthController> _logger;
|
||||
|
||||
public AuthController(UserManager<IdentityUser> userManager, SignInManager<IdentityUser> signInManager)
|
||||
public AuthController(
|
||||
ILdapService ldapService,
|
||||
SignInManager<IdentityUser> signInManager,
|
||||
UserManager<IdentityUser> userManager,
|
||||
ILogger<AuthController> logger)
|
||||
{
|
||||
_userManager = userManager;
|
||||
_ldapService = ldapService;
|
||||
_signInManager = signInManager;
|
||||
_userManager = userManager;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Register a new user
|
||||
/// </summary>
|
||||
[HttpPost("register")]
|
||||
public async Task<IActionResult> Register([FromBody] RegisterRequest request)
|
||||
{
|
||||
var user = new IdentityUser { UserName = request.Email, Email = request.Email };
|
||||
var result = await _userManager.CreateAsync(user, request.Password);
|
||||
|
||||
if (result.Succeeded)
|
||||
return Ok(new { message = "User registered successfully" });
|
||||
|
||||
return BadRequest(new { errors = result.Errors.Select(e => e.Description) });
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Login user
|
||||
/// Login user with LDAP credentials
|
||||
/// </summary>
|
||||
[HttpPost("login")]
|
||||
public async Task<IActionResult> Login([FromBody] LoginRequest request)
|
||||
{
|
||||
var result = await _signInManager.PasswordSignInAsync(request.Email, request.Password, false, false);
|
||||
try
|
||||
{
|
||||
// Authenticate with LDAP
|
||||
var isAuthenticated = await _ldapService.AuthenticateAsync(request.Username, request.Password);
|
||||
|
||||
if (!isAuthenticated)
|
||||
{
|
||||
_logger.LogWarning($"LDAP authentication failed for user {request.Username}");
|
||||
return Unauthorized(new { message = "Invalid username or password" });
|
||||
}
|
||||
|
||||
if (result.Succeeded)
|
||||
// Get user details from LDAP
|
||||
var ldapUser = await _ldapService.GetUserAsync(request.Username);
|
||||
if (ldapUser == null)
|
||||
{
|
||||
_logger.LogWarning($"Could not retrieve LDAP user details for {request.Username}");
|
||||
return Unauthorized(new { message = "Could not retrieve user details" });
|
||||
}
|
||||
|
||||
// Check if user exists in database, if not create them
|
||||
var user = await _userManager.FindByNameAsync(request.Username);
|
||||
if (user == null)
|
||||
{
|
||||
user = new IdentityUser
|
||||
{
|
||||
UserName = request.Username,
|
||||
Email = ldapUser.Email,
|
||||
EmailConfirmed = true
|
||||
};
|
||||
var result = await _userManager.CreateAsync(user);
|
||||
if (!result.Succeeded)
|
||||
{
|
||||
_logger.LogError($"Failed to create user {request.Username} in database");
|
||||
return BadRequest(new { message = "Failed to create user account" });
|
||||
}
|
||||
_logger.LogInformation($"Created new user {request.Username} in database");
|
||||
}
|
||||
|
||||
// Sign in the user
|
||||
await _signInManager.SignInAsync(user, false);
|
||||
_logger.LogInformation($"User {request.Username} signed in successfully");
|
||||
|
||||
return Ok(new { message = "Login successful" });
|
||||
|
||||
return Unauthorized(new { message = "Invalid email or password" });
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError($"Login error: {ex.Message}");
|
||||
return StatusCode(500, new { message = "An error occurred during login" });
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -52,18 +89,13 @@ public class AuthController : ControllerBase
|
||||
public async Task<IActionResult> Logout()
|
||||
{
|
||||
await _signInManager.SignOutAsync();
|
||||
_logger.LogInformation("User logged out");
|
||||
return Ok(new { message = "Logout successful" });
|
||||
}
|
||||
}
|
||||
|
||||
public class RegisterRequest
|
||||
{
|
||||
public string Email { get; set; } = string.Empty;
|
||||
public string Password { get; set; } = string.Empty;
|
||||
}
|
||||
|
||||
public class LoginRequest
|
||||
{
|
||||
public string Email { get; set; } = string.Empty;
|
||||
public string Username { get; set; } = string.Empty;
|
||||
public string Password { get; set; } = string.Empty;
|
||||
}
|
||||
Reference in New Issue
Block a user