Files
xSaherElmIds/Providers/XApplicationProvider/XApplicationProvider+Custom.cs
T
2026-10-05 17:37:28 +03:30

155 lines
4.8 KiB
C#

using System;
using System.Linq;
using System.Threading;
using xCommons.Extensions;
using xIdentityModels.Dtos;
using xExceptions.Constants;
using System.Threading.Tasks;
using xIdentityModels.Models;
using System.Collections.Generic;
namespace xIds.Providers
{
public partial class XApplicationProvider
{
//
#region Custom Actions ...
/// <summary>
/// Generate a New ApiKey and Add It to DB ...
/// </summary>
/// <param name="applicationId"></param>
/// <param name="expiration"></param>
/// <param name="scopes"></param>
/// <param name="allowedIPs"></param>
/// <param name="rateLimit"></param>
/// <param name="userInfo"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public async Task<XApiKeyDto> CreateApiKey(
int applicationId,
TimeSpan? expiration = null,
IEnumerable<string> scopes = null,
IEnumerable<string> allowedIPs = null,
int? rateLimit = null,
XUserClaimsInfoDto userInfo = null,
CancellationToken cancellationToken = default
)
{
//
// Validate ...
if (
userInfo.IsNullOrDefault() ||
!applicationId.IsValidIntId()
)
{
XException.InvalidArgs.Throw();
}
//
// Check Application Exists ...
var application = await GetApplicationAsync(
id: applicationId,
userInfo: userInfo,
includeBuilder: null,
ignoreSoftDeleteds: true,
cancellationToken: cancellationToken
);
if (application.IsNullOrDefault())
{
XException.NotFound.Throw();
}
//
// Validate Owner ...
if (!IsOwned(application, userInfo))
{
XException.NotAllowed.Throw();
}
//
// Normalizing ...
if (!rateLimit.HasValue)
{
rateLimit = apiKeyConfiguration.DefaultRateLimit;
}
if (!expiration.HasValue)
{
expiration = TimeSpan.FromMinutes(apiKeyConfiguration.DefaultExpirationMinutes);
}
else if (expiration.Value > TimeSpan.FromMinutes(apiKeyConfiguration.MaxExpirationMinutes))
{
expiration = TimeSpan.FromMinutes(apiKeyConfiguration.MaxExpirationMinutes);
}
//
var
//
var item = new XApiKeyDto
{
}
}
/// <summary>
/// Revoke Specified Api Key ...
/// </summary>
/// <param name="apiKeyId"></param>
/// <param name="userInfo"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public async Task<bool> RevokeApiKey(
Guid apiKeyId,
XUserClaimsInfoDto userInfo = null,
CancellationToken cancellationToken = default
)
{ }
/// <summary>
/// Renew Specified Api Key ...
/// </summary>
/// <param name="apiKeyId"></param>
/// <param name="newExpiration"></param>
/// <param name="userInfo"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public async Task<XApiKeyDto> RotateApiKey(
Guid apiKeyId,
TimeSpan? newExpiration = null,
XUserClaimsInfoDto userInfo = null,
CancellationToken cancellationToken = default
)
{ }
/// <summary>
/// Retrieve All Api Keys for Specified Application ...
/// </summary>
/// <param name="applicationId"></param>
/// <param name="userInfo"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public async Task<IEnumerable<XApiKeyDto>> GetApplicationApiKeys(
Guid applicationId,
XUserClaimsInfoDto userInfo = null,
CancellationToken cancellationToken = default
)
{ }
/// <summary>
/// Validate Specified Api Key in based on ClientIP ...
/// </summary>
/// <param name="apiKey"></param>
/// <param name="clientIP"></param>
/// <param name="userInfo"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public async Task<bool> ValidateApiKey(
string apiKey,
string clientIP,
XUserClaimsInfoDto userInfo = null,
CancellationToken cancellationToken = default
)
{ }
#endregion
}
}