添加OAuth2认证相关配置文件和服务实现,包括环境变量配置、PKCE流程支持、token管理等功能。主要变更: - 新增OAuth2配置文件 - 实现OAuth2服务层 - 更新请求拦截器支持token自动刷新 - 修改认证API和store以支持OAuth2流程
78 lines
2.4 KiB
C#
78 lines
2.4 KiB
C#
using Fengling.AuthService.Data;
|
|
using Fengling.AuthService.Models;
|
|
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using OpenIddict.Abstractions;
|
|
|
|
namespace Fengling.AuthService.Controllers;
|
|
|
|
[ApiController]
|
|
[Route("api/[controller]")]
|
|
[Authorize]
|
|
public class StatsController : ControllerBase
|
|
{
|
|
private readonly ApplicationDbContext _context;
|
|
private readonly IOpenIddictApplicationManager _applicationManager;
|
|
private readonly ILogger<StatsController> _logger;
|
|
|
|
public StatsController(
|
|
ApplicationDbContext context,
|
|
IOpenIddictApplicationManager applicationManager,
|
|
ILogger<StatsController> logger)
|
|
{
|
|
_context = context;
|
|
_applicationManager = applicationManager;
|
|
_logger = logger;
|
|
}
|
|
|
|
[HttpGet("dashboard")]
|
|
public async Task<ActionResult<object>> GetDashboardStats()
|
|
{
|
|
var today = DateTime.UtcNow.Date;
|
|
var tomorrow = today.AddDays(1);
|
|
|
|
var userCount = await _context.Users.CountAsync(u => !u.IsDeleted);
|
|
var tenantCount = await _context.Tenants.CountAsync(t => !t.IsDeleted);
|
|
var oauthClientCount = await CountOAuthClientsAsync();
|
|
var todayAccessCount = await _context.AccessLogs
|
|
.CountAsync(l => l.CreatedAt >= today && l.CreatedAt < tomorrow);
|
|
|
|
return Ok(new
|
|
{
|
|
userCount,
|
|
tenantCount,
|
|
oauthClientCount,
|
|
todayAccessCount,
|
|
});
|
|
}
|
|
|
|
private async Task<int> CountOAuthClientsAsync()
|
|
{
|
|
var count = 0;
|
|
var applications = _applicationManager.ListAsync();
|
|
await foreach (var _ in applications)
|
|
{
|
|
count++;
|
|
}
|
|
return count;
|
|
}
|
|
|
|
[HttpGet("system")]
|
|
public ActionResult<object> GetSystemStats()
|
|
{
|
|
var uptime = TimeSpan.FromMilliseconds(Environment.TickCount64);
|
|
var process = System.Diagnostics.Process.GetCurrentProcess();
|
|
|
|
return Ok(new
|
|
{
|
|
uptime = $"{uptime.Days}天 {uptime.Hours}小时 {uptime.Minutes}分钟",
|
|
memoryUsed = process.WorkingSet64 / 1024 / 1024,
|
|
cpuTime = process.TotalProcessorTime,
|
|
machineName = Environment.MachineName,
|
|
osVersion = Environment.OSVersion.ToString(),
|
|
processorCount = Environment.ProcessorCount,
|
|
});
|
|
}
|
|
}
|