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
|
|
|
|
|
2025-02-06 12:08:40 +08:00
|
|
|
|
public async Task LoginAsync(ClaimsIdentity identity, int expire)
|
2025-01-24 22:42:26 +08:00
|
|
|
|
{
|
2025-02-06 12:08:40 +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
|
|
|
|
|
2025-04-22 11:45:14 +08:00
|
|
|
|
public string? RemoteIpAddress => App.HttpContext?.GetRemoteIpAddressToIPv4();
|
2025-01-24 22:42:26 +08:00
|
|
|
|
|
|
|
|
|
|
public int LocalPort => App.HttpContext.Connection.LocalPort;
|
|
|
|
|
|
}
|