Files
KinginfoGateway/src/Admin/ThingsGateway.Admin.Application/Services/AppService/AppService.cs

81 lines
2.7 KiB
C#
Raw Normal View History

2025-01-24 22:42:26 +08:00
//------------------------------------------------------------------------------
// 此代码版权声明为全文件覆盖,如有原作者特别声明,会在下方手动补充
// 此代码版权除特别声明外的代码归作者本人Diego所有
// 源代码使用协议遵循本仓库的开源协议及附加协议
// Gitee源代码仓库https://gitee.com/diego2098/ThingsGateway
// Github源代码仓库https://github.com/kimdiego2098/ThingsGateway
// 使用文档https://thingsgateway.cn/
// QQ群605534569
//------------------------------------------------------------------------------
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.WebUtilities;
using System.Security.Claims;
namespace ThingsGateway.Admin.Application;
public class AppService : IAppService
{
2025-05-19 23:16:49 +08:00
private readonly IUserAgentService UserAgentService;
2025-05-29 22:18:33 +08:00
private readonly IClaimsPrincipalService ClaimsPrincipalService;
public AppService(IUserAgentService userAgentService, IClaimsPrincipalService claimsPrincipalService)
2025-05-19 23:16:49 +08:00
{
UserAgentService = userAgentService;
2025-05-29 22:18:33 +08:00
ClaimsPrincipalService = claimsPrincipalService;
2025-05-19 23:16:49 +08:00
}
2025-01-24 22:42:26 +08:00
public string GetReturnUrl(string returnUrl)
{
var url = QueryHelpers.AddQueryString(CookieAuthenticationDefaults.LoginPath, new Dictionary<string, string?>
{
["ReturnUrl"] = returnUrl
});
return url;
}
public async Task LoginOutAsync()
{
try
{
await App.HttpContext!.SignOutAsync().ConfigureAwait(false);
App.HttpContext!.SignoutToSwagger();
}
catch
{
}
}
2025-05-19 23:16:49 +08:00
public UserAgent? UserAgent
2025-01-24 22:42:26 +08:00
{
get
{
var str = App.HttpContext?.Request?.Headers?.UserAgent;
if (!string.IsNullOrEmpty(str))
{
2025-05-19 23:16:49 +08:00
return UserAgentService.Parse(str);
2025-01-24 22:42:26 +08:00
}
2025-05-19 23:16:49 +08:00
return null;
2025-01-24 22:42:26 +08:00
}
}
2025-03-10 11:48:52 +08:00
2025-03-09 19:34:41 +08:00
public async Task LoginAsync(ClaimsIdentity identity, int expire)
2025-01-24 22:42:26 +08:00
{
var diffTime = DateTime.Now + TimeSpan.FromMinutes(expire);
2025-01-24 22:42:26 +08:00
//var diffTime = DateTime.Now.AddMinutes(expire);
2025-03-09 19:34:41 +08:00
await App.HttpContext!.SignInAsync(ClaimConst.Scheme, new ClaimsPrincipal(identity), new AuthenticationProperties()
2025-01-24 22:42:26 +08:00
{
IsPersistent = true,
AllowRefresh = true,
ExpiresUtc = diffTime,
}).ConfigureAwait(false);
}
2025-05-29 22:18:33 +08:00
public ClaimsPrincipal? User => ClaimsPrincipalService.User;
2025-01-24 22:42:26 +08:00
public string? RemoteIpAddress => App.HttpContext?.GetRemoteIpAddressToIPv4();
2025-01-24 22:42:26 +08:00
public int LocalPort => App.HttpContext.Connection.LocalPort;
}