/// <summary> /// Updates an existing scope. /// </summary> /// <param name="scope">The scope to update.</param> /// <param name="descriptor">The descriptor used to update the scope.</param> /// <param name="cancellationToken">The <see cref="CancellationToken"/> that can be used to abort the operation.</param> /// <returns> /// A <see cref="Task"/> that can be used to monitor the asynchronous operation. /// </returns> public virtual async Task UpdateAsync([NotNull] TScope scope, [NotNull] OpenIddictScopeDescriptor descriptor, CancellationToken cancellationToken = default) { if (scope == null) { throw new ArgumentNullException(nameof(scope)); } if (descriptor == null) { throw new ArgumentNullException(nameof(descriptor)); } await PopulateAsync(scope, descriptor, cancellationToken); await UpdateAsync(scope, cancellationToken); }
/// <summary> /// Populates the scope using the specified descriptor. /// </summary> /// <param name="scope">The scope.</param> /// <param name="descriptor">The descriptor.</param> /// <param name="cancellationToken">The <see cref="CancellationToken"/> that can be used to abort the operation.</param> /// <returns> /// A <see cref="Task"/> that can be used to monitor the asynchronous operation. /// </returns> protected virtual async Task PopulateAsync([NotNull] TScope scope, [NotNull] OpenIddictScopeDescriptor descriptor, CancellationToken cancellationToken) { if (scope == null) { throw new ArgumentNullException(nameof(scope)); } if (descriptor == null) { throw new ArgumentNullException(nameof(descriptor)); } await Store.SetDescriptionAsync(scope, descriptor.Description, cancellationToken); await Store.SetNameAsync(scope, descriptor.Description, cancellationToken); }
/// <summary> /// Updates an existing scope. /// </summary> /// <param name="scope">The scope to update.</param> /// <param name="operation">The delegate used to update the scope based on the given descriptor.</param> /// <param name="cancellationToken">The <see cref="CancellationToken"/> that can be used to abort the operation.</param> /// <returns> /// A <see cref="Task"/> that can be used to monitor the asynchronous operation. /// </returns> public virtual async Task UpdateAsync([NotNull] TScope scope, [NotNull] Func <OpenIddictScopeDescriptor, Task> operation, CancellationToken cancellationToken) { if (operation == null) { throw new ArgumentNullException(nameof(operation)); } var descriptor = new OpenIddictScopeDescriptor { Description = await Store.GetDescriptionAsync(scope, cancellationToken), Name = await Store.GetNameAsync(scope, cancellationToken) }; await operation(descriptor); await PopulateAsync(scope, descriptor, cancellationToken); await UpdateAsync(scope, cancellationToken); }
/// <summary> /// Creates a new scope based on the specified descriptor. /// </summary> /// <param name="descriptor">The scope descriptor.</param> /// <param name="cancellationToken">The <see cref="CancellationToken"/> that can be used to abort the operation.</param> /// <returns> /// A <see cref="Task"/> that can be used to monitor the asynchronous operation, whose result returns the scope. /// </returns> public virtual async Task <TScope> CreateAsync([NotNull] OpenIddictScopeDescriptor descriptor, CancellationToken cancellationToken) { if (descriptor == null) { throw new ArgumentNullException(nameof(descriptor)); } var scope = await Store.InstantiateAsync(cancellationToken); if (scope == null) { throw new InvalidOperationException("An error occurred while trying to create a new scope."); } await PopulateAsync(scope, descriptor, cancellationToken); return(await CreateAsync(scope, cancellationToken)); }
/// <summary> /// Creates a new scope. /// </summary> /// <param name="descriptor">The scope descriptor.</param> /// <param name="cancellationToken">The <see cref="CancellationToken"/> that can be used to abort the operation.</param> /// <returns> /// A <see cref="Task"/> that can be used to monitor the asynchronous operation, whose result returns the scope. /// </returns> public virtual async Task <TScope> CreateAsync([NotNull] OpenIddictScopeDescriptor descriptor, CancellationToken cancellationToken) { if (descriptor == null) { throw new ArgumentNullException(nameof(descriptor)); } try { return(await Store.CreateAsync(descriptor, cancellationToken)); } catch (Exception exception) { Logger.LogError(exception, "An exception occurred while trying to create a new scope."); throw; } }
/// <summary> /// Creates a new scope based on the specified descriptor. /// </summary> /// <param name="descriptor">The scope descriptor.</param> /// <param name="cancellationToken">The <see cref="CancellationToken"/> that can be used to abort the operation.</param> /// <returns> /// A <see cref="ValueTask"/> that can be used to monitor the asynchronous operation, whose result returns the scope. /// </returns> public virtual async ValueTask <TScope> CreateAsync( OpenIddictScopeDescriptor descriptor, CancellationToken cancellationToken = default) { if (descriptor is null) { throw new ArgumentNullException(nameof(descriptor)); } var scope = await Store.InstantiateAsync(cancellationToken); if (scope is null) { throw new InvalidOperationException(SR.GetResourceString(SR.ID0223)); } await PopulateAsync(scope, descriptor, cancellationToken); await CreateAsync(scope, cancellationToken); return(scope); }
/// <summary> /// Populates the scope using the specified descriptor. /// </summary> /// <param name="scope">The scope.</param> /// <param name="descriptor">The descriptor.</param> /// <param name="cancellationToken">The <see cref="CancellationToken"/> that can be used to abort the operation.</param> /// <returns> /// A <see cref="Task"/> that can be used to monitor the asynchronous operation. /// </returns> public virtual async Task PopulateAsync([NotNull] TScope scope, [NotNull] OpenIddictScopeDescriptor descriptor, CancellationToken cancellationToken = default) { if (scope == null) { throw new ArgumentNullException(nameof(scope)); } if (descriptor == null) { throw new ArgumentNullException(nameof(descriptor)); } await Store.SetDescriptionAsync(scope, descriptor.Description, cancellationToken); await Store.SetDisplayNameAsync(scope, descriptor.DisplayName, cancellationToken); await Store.SetNameAsync(scope, descriptor.Name, cancellationToken); await Store.SetResourcesAsync(scope, descriptor.Resources.ToImmutableArray(), cancellationToken); }
/// <summary> /// Populates the specified descriptor using the properties exposed by the scope. /// </summary> /// <param name="descriptor">The descriptor.</param> /// <param name="scope">The scope.</param> /// <param name="cancellationToken">The <see cref="CancellationToken"/> that can be used to abort the operation.</param> /// <returns> /// A <see cref="Task"/> that can be used to monitor the asynchronous operation. /// </returns> public virtual async Task PopulateAsync( [NotNull] OpenIddictScopeDescriptor descriptor, [NotNull] TScope scope, CancellationToken cancellationToken = default) { if (descriptor == null) { throw new ArgumentNullException(nameof(descriptor)); } if (scope == null) { throw new ArgumentNullException(nameof(scope)); } descriptor.Description = await Store.GetDescriptionAsync(scope, cancellationToken); descriptor.DisplayName = await Store.GetDisplayNameAsync(scope, cancellationToken); descriptor.Name = await Store.GetNameAsync(scope, cancellationToken); descriptor.Resources.Clear(); descriptor.Resources.UnionWith(await Store.GetResourcesAsync(scope, cancellationToken)); }
Task IOpenIddictScopeManager.UpdateAsync(object scope, OpenIddictScopeDescriptor descriptor, CancellationToken cancellationToken) => UpdateAsync((TScope)scope, descriptor, cancellationToken);
Task IOpenIddictScopeManager.PopulateAsync(OpenIddictScopeDescriptor descriptor, object scope, CancellationToken cancellationToken) => PopulateAsync(descriptor, (TScope)scope, cancellationToken);
async Task <object> IOpenIddictScopeManager.CreateAsync(OpenIddictScopeDescriptor descriptor, CancellationToken cancellationToken) => await CreateAsync(descriptor, cancellationToken);
/// <summary> /// Creates a new scope. /// </summary> /// <param name="descriptor">The scope descriptor.</param> /// <param name="cancellationToken">The <see cref="CancellationToken"/> that can be used to abort the operation.</param> /// <returns> /// A <see cref="Task"/> that can be used to monitor the asynchronous operation, whose result returns the scope. /// </returns> public abstract Task <TScope> CreateAsync([NotNull] OpenIddictScopeDescriptor descriptor, CancellationToken cancellationToken);