网站首页 网站源码
website
站点相关全部源代码,隐藏了一些关于服务器的信息
using Dpz.Core.EnumLibrary;
using Dpz.Core.Service.RepositoryService;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;

namespace Dpz.Core.Auth.Controllers;

/// <summary>
/// 密码迁移管理控制器
/// 用于管理旧版本密码到新版本加盐密码的迁移
/// </summary>
[Authorize(nameof(Permissions.System))]
public class PasswordMigrationController(
    IPasswordMigrationService passwordMigrationService,
    ILogger<PasswordMigrationController> logger
) : Controller
{
    /// <summary>
    /// 显示密码迁移管理页面
    /// </summary>
    [HttpGet]
    [Route("password-migration")]
    public async Task<IActionResult> Index()
    {
        try
        {
            var pendingCount = await passwordMigrationService.GetMigrationPendingCountAsync();
            ViewBag.PendingCount = pendingCount;
            return View();
        }
        catch (Exception ex)
        {
            logger.LogError(ex, "获取密码迁移信息时发生错误");
            ViewBag.PendingCount = 0;
            TempData["Error"] = "获取迁移信息失败,请稍后重试";
            return View();
        }
    }

    /// <summary>
    /// 执行批量密码迁移(仅默认密码用户)
    /// </summary>
    [HttpPost]
    [Route("batch-migrate-passwords")]
    public async Task<IActionResult> BatchMigratePasswords()
    {
        try
        {
            logger.LogInformation("开始执行批量密码迁移操作");

            var migratedCount =
                await passwordMigrationService.BatchMigrateDefaultPasswordUsersAsync();

            var message = $"批量密码迁移完成!成功迁移 {migratedCount} 个默认密码用户";
            TempData["Message"] = message;

            logger.LogInformation(
                "批量密码迁移完成,成功迁移 {MigratedCount} 个用户",
                migratedCount
            );

            return RedirectToAction("Index");
        }
        catch (Exception ex)
        {
            logger.LogError(ex, "执行批量密码迁移时发生错误");
            TempData["Error"] = "迁移过程中发生错误,请查看日志获取详细信息";
            return RedirectToAction("Index");
        }
    }

    /// <summary>
    /// 检查单个用户是否需要密码迁移
    /// </summary>
    [HttpPost]
    [Route("check-user-migration")]
    public async Task<IActionResult> CheckUserMigration(string userId)
    {
        if (string.IsNullOrWhiteSpace(userId))
        {
            return Json(new { success = false, message = "用户ID不能为空" });
        }

        try
        {
            var needsMigration = await passwordMigrationService.NeedsMigrationAsync(userId);

            return Json(
                new
                {
                    success = true,
                    needsMigration,
                    message = needsMigration ? "该用户需要密码迁移" : "该用户已使用新版本密码",
                }
            );
        }
        catch (Exception ex)
        {
            logger.LogError(ex, "检查用户 {UserId} 密码迁移状态时发生错误", userId);
            return Json(new { success = false, message = "检查过程中发生错误" });
        }
    }

    /// <summary>
    /// 获取迁移统计信息
    /// </summary>
    [HttpGet]
    [Route("migration-stats")]
    public async Task<IActionResult> GetMigrationStats()
    {
        try
        {
            var pendingCount = await passwordMigrationService.GetMigrationPendingCountAsync();

            return Json(
                new
                {
                    success = true,
                    pendingCount,
                    message = $"当前有 {pendingCount} 个用户需要密码迁移",
                }
            );
        }
        catch (Exception ex)
        {
            logger.LogError(ex, "获取密码迁移统计信息时发生错误");
            return Json(new { success = false, message = "获取统计信息失败" });
        }
    }
}
⚠⚠    以下内容为AI分析的结果,请根据实际情况进行判断。

上述代码是一个 ASP.NET Core 控制器,名为 PasswordMigrationController,用于管理旧版本密码到新版本加盐密码的迁移。它包含多个方法,提供了密码迁移的相关功能。以下是对代码中各个部分的详细解释:

1. 控制器声明

public class PasswordMigrationController : Controller
  • 该控制器继承自 Controller 类,表示它是一个 MVC 控制器,负责处理 HTTP 请求并返回相应的视图或数据。

2. 构造函数

public PasswordMigrationController(
    IPasswordMigrationService passwordMigrationService,
    ILogger<PasswordMigrationController> logger
)
  • 控制器的构造函数接受两个参数:IPasswordMigrationServiceILogger<PasswordMigrationController>。前者用于处理密码迁移的业务逻辑,后者用于记录日志。

3. Index 方法

[HttpGet]
[Route("password-migration")]
public async Task<IActionResult> Index()
  • 该方法处理 GET 请求,显示密码迁移管理页面。
  • 它调用 GetMigrationPendingCountAsync 方法获取待迁移用户的数量,并将其存储在 ViewBag.PendingCount 中。
  • 如果发生异常,记录错误并设置错误消息。

4. BatchMigratePasswords 方法

[HttpPost]
[Route("batch-migrate-passwords")]
public async Task<IActionResult> BatchMigratePasswords()
  • 该方法处理 POST 请求,执行批量密码迁移操作,仅针对使用默认密码的用户。
  • 它调用 BatchMigrateDefaultPasswordUsersAsync 方法进行迁移,并记录成功迁移的用户数量。
  • 如果迁移成功,设置成功消息;如果发生异常,记录错误并设置错误消息。

5. CheckUserMigration 方法

[HttpPost]
[Route("check-user-migration")]
public async Task<IActionResult> CheckUserMigration(string userId)
  • 该方法处理 POST 请求,检查单个用户是否需要进行密码迁移。
  • 如果 userId 为空,返回错误消息。
  • 调用 NeedsMigrationAsync 方法检查用户是否需要迁移,并返回相应的 JSON 响应。

6. GetMigrationStats 方法

[HttpGet]
[Route("migration-stats")]
public async Task<IActionResult> GetMigrationStats()
  • 该方法处理 GET 请求,获取迁移统计信息。
  • 它调用 GetMigrationPendingCountAsync 方法获取待迁移用户的数量,并返回 JSON 响应。
  • 如果发生异常,记录错误并返回失败消息。

总结

整体而言,PasswordMigrationController 提供了一个用于管理密码迁移的接口,包括显示迁移页面、批量迁移密码、检查单个用户的迁移状态以及获取迁移统计信息。它通过依赖注入的方式使用服务和日志记录,确保了代码的可维护性和可测试性。

loading