|
1 |
| -using System.Text; |
| 1 | +using System.Diagnostics.CodeAnalysis; |
| 2 | +using System.Text; |
| 3 | +using RestApia.Shared.Common; |
2 | 4 | using RestApia.Shared.Common.Enums;
|
3 | 5 | using RestApia.Shared.Common.Models;
|
4 |
| -using RestApia.Shared.Extensions.AuthService; |
| 6 | +using RestApia.Shared.Common.Services; |
| 7 | +using RestApia.Shared.Extensions.ValuesProviderService.Enums; |
| 8 | +using RestApia.Shared.Extensions.ValuesProviderService.Interfaces; |
| 9 | +using RestApia.Shared.Extensions.ValuesProviderService.Models; |
5 | 10 | namespace RestApia.Extensions.Auth.Basic;
|
6 | 11 |
|
7 |
| -public class BasicAuthService : IAuthService |
| 12 | +public class BasicAuthService: IAuthValuesProvider |
8 | 13 | {
|
9 |
| - public Type SettingsType => typeof(BasicAuthSettings); |
| 14 | + private static readonly ValuesProviderSettings Settings = new () |
| 15 | + { |
| 16 | + Title = "Basic Authorization", |
| 17 | + CanBeReloaded = true, |
| 18 | + CanBeCached = false, |
| 19 | + ReservedValues = |
| 20 | + [ |
| 21 | + new () { Name = nameof(BasicAuthSettings.Name), Description = "User name" }, |
| 22 | + new () { Name = nameof(BasicAuthSettings.Password), Description = "User Password" }, |
| 23 | + ], |
| 24 | + }; |
10 | 25 |
|
11 |
| - public string DisplayName => "Basic Authorization"; |
12 |
| - public bool IsReloadFeatureAvailable => false; |
13 |
| - public bool IsShowPayloadFeatureAvailable => true; |
| 26 | + public ValuesProviderSettings GetProviderSettings() => Settings; |
14 | 27 |
|
15 |
| - public Task<IReadOnlyCollection<ExtensionValueModel>> GetValuesAsync(object settingsObj, Guid authId) => Task.FromResult(GetValues(settingsObj)); |
| 28 | + [SuppressMessage("Performance", "CA1822:Mark members as static")] |
| 29 | + public Task<ReloadValuesResults> ReloadValuesAsync(IReadOnlyCollection<ValueModel> inputValues, ValuesReloadMode mode) => |
| 30 | + Task.FromResult(ReloadValues(inputValues)); |
16 | 31 |
|
17 |
| - private static IReadOnlyCollection<ExtensionValueModel> GetValues(object rawSettings) |
| 32 | + private static ReloadValuesResults ReloadValues(IReadOnlyCollection<ValueModel> userValues) |
18 | 33 | {
|
19 |
| - if (rawSettings is not BasicAuthSettings settings) return []; |
20 |
| - var token = Convert.ToBase64String(Encoding.UTF8.GetBytes($"{settings.UserName}:{settings.Password}")); |
| 34 | + // all templated values must be replaced |
| 35 | + var hasUnresolvedValues = userValues.All(x => x.Value.Parts.All(y => !y.IsTemplatedVariable)); |
| 36 | + if (!hasUnresolvedValues) return ReloadValuesResults.Failed; |
| 37 | + |
| 38 | + if (!VariablesConverter.TryDeserialize<BasicAuthSettings>(userValues, out var settings)) |
| 39 | + return ReloadValuesResults.Failed; |
| 40 | + |
| 41 | + // validate values |
| 42 | + var settingsErrors = new List<string>(); |
| 43 | + if (settings.Name.IsEmpty()) |
| 44 | + settingsErrors.Add($"{nameof(settings.Name)} value cannot be empty"); |
21 | 45 |
|
22 |
| - return |
| 46 | + if (settingsErrors.Count > 0) |
| 47 | + return ReloadValuesResults.FailedWithMessage(settingsErrors.JoinString("\n")); |
| 48 | + |
| 49 | + var token = Convert.ToBase64String(Encoding.UTF8.GetBytes($"{settings.Name}:{settings.Password}")); |
| 50 | + IReadOnlyCollection<ValueModel> result = |
23 | 51 | [
|
24 | 52 | new () { Name = "Authorization", Type = ValueTypeEnum.Header, Value = $"Basic {token}" },
|
25 | 53 | ];
|
26 |
| - } |
27 | 54 |
|
28 |
| - public Task<bool> ReloadAsync(object settings, Guid authId) => throw new NotSupportedException(); |
| 55 | + return new ReloadValuesResults { Values = result, Status = ValueReloadResultType.Success }; |
| 56 | + } |
29 | 57 | }
|
0 commit comments