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 ... /// /// Generate a New ApiKey and Add It to DB ... /// /// /// /// /// /// /// /// /// public async Task CreateApiKey( int applicationId, TimeSpan? expiration = null, IEnumerable scopes = null, IEnumerable 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 { } } /// /// Revoke Specified Api Key ... /// /// /// /// /// public async Task RevokeApiKey( Guid apiKeyId, XUserClaimsInfoDto userInfo = null, CancellationToken cancellationToken = default ) { } /// /// Renew Specified Api Key ... /// /// /// /// /// /// public async Task RotateApiKey( Guid apiKeyId, TimeSpan? newExpiration = null, XUserClaimsInfoDto userInfo = null, CancellationToken cancellationToken = default ) { } /// /// Retrieve All Api Keys for Specified Application ... /// /// /// /// /// public async Task> GetApplicationApiKeys( Guid applicationId, XUserClaimsInfoDto userInfo = null, CancellationToken cancellationToken = default ) { } /// /// Validate Specified Api Key in based on ClientIP ... /// /// /// /// /// /// public async Task ValidateApiKey( string apiKey, string clientIP, XUserClaimsInfoDto userInfo = null, CancellationToken cancellationToken = default ) { } #endregion } }