mirror of
https://gitee.com/ThingsGateway/ThingsGateway.git
synced 2025-10-22 03:24:29 +08:00
79 lines
2.7 KiB
C#
79 lines
2.7 KiB
C#
//------------------------------------------------------------------------------
|
||
// 此代码版权声明为全文件覆盖,如有原作者特别声明,会在下方手动补充
|
||
// 此代码版权(除特别声明外的代码)归作者本人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
|
||
{
|
||
private readonly IUserAgentService UserAgentService;
|
||
private readonly IClaimsPrincipalService ClaimsPrincipalService;
|
||
public AppService(IUserAgentService userAgentService, IClaimsPrincipalService claimsPrincipalService)
|
||
{
|
||
UserAgentService = userAgentService;
|
||
ClaimsPrincipalService = claimsPrincipalService;
|
||
}
|
||
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
|
||
{
|
||
}
|
||
}
|
||
public UserAgent? UserAgent
|
||
{
|
||
get
|
||
{
|
||
var str = App.HttpContext?.Request?.Headers?.UserAgent;
|
||
if (!string.IsNullOrEmpty(str))
|
||
{
|
||
return UserAgentService.Parse(str);
|
||
}
|
||
return null;
|
||
}
|
||
}
|
||
|
||
public async Task LoginAsync(ClaimsIdentity identity, int expire)
|
||
{
|
||
var diffTime = DateTime.Now + TimeSpan.FromMinutes(expire);
|
||
//var diffTime = DateTime.Now.AddMinutes(expire);
|
||
await App.HttpContext!.SignInAsync(ClaimConst.Scheme, new ClaimsPrincipal(identity), new AuthenticationProperties()
|
||
{
|
||
IsPersistent = true,
|
||
AllowRefresh = true,
|
||
ExpiresUtc = diffTime,
|
||
}).ConfigureAwait(false);
|
||
}
|
||
public ClaimsPrincipal? User => ClaimsPrincipalService.User;
|
||
|
||
public string? RemoteIpAddress => App.HttpContext?.GetRemoteIpAddressToIPv4();
|
||
|
||
public int LocalPort => App.HttpContext.Connection.LocalPort;
|
||
}
|