Skip to content
This repository was archived by the owner on Aug 15, 2023. It is now read-only.

Commit 86ea628

Browse files
authored
Merge pull request #304 from Developer-Autodesk/task/INVGEN-44987
Move BucketKeyProvider and ProfileProvider out of UserResolver
2 parents 8c85390 + 754fae8 commit 86ea628

15 files changed

+159
-63
lines changed

WebApplication.Tests/InitializerTestBase.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,14 +96,17 @@ public InitializerTestBase(DefaultProjectsConfiguration defaultProjectsConfigura
9696

9797
var fdaClient = new FdaClient(publisher, appBundleZipPathsOptions);
9898
IOptions<DefaultProjectsConfiguration> defaultProjectsOptions = Options.Create(defaultProjectsConfiguration);
99-
var userResolver = new UserResolver(resourceProvider, forgeOSS, forgeConfigOptions, localCache, NullLogger<UserResolver>.Instance, null);
99+
var profileProvider = new ProfileProvider(forgeOSS);
100+
var bucketPrefixProvider = new BucketPrefixProvider(forgeConfigOptions, null);
101+
var bucketKeyProvider = new LoggedInUserBucketKeyProvider(forgeConfigOptions, profileProvider, bucketPrefixProvider);
102+
var userResolver = new UserResolver(resourceProvider, forgeOSS, bucketKeyProvider, localCache, NullLogger<UserResolver>.Instance, profileProvider);
100103
var arranger = new Arranger(httpClientFactory, userResolver);
101104

102105
// TODO: linkGenerator should be mocked
103106
var dtoGenerator = new DtoGenerator(linkGenerator: null, localCache);
104107
var projectWork = new ProjectWork(new NullLogger<ProjectWork>(), arranger, fdaClient, dtoGenerator, userResolver);
105108
initializer = new Initializer(new NullLogger<Initializer>(), fdaClient,
106-
defaultProjectsOptions, projectWork, userResolver, localCache);
109+
defaultProjectsOptions, projectWork, userResolver, localCache, bucketPrefixProvider);
107110

108111
testFileDirectory = Directory.CreateDirectory(Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()));
109112
httpClient = new HttpClient();

WebApplication/Controllers/JobsHub.cs

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
using WebApplication.Definitions;
2626
using WebApplication.Job;
2727
using WebApplication.Processing;
28+
using WebApplication.Services;
2829
using WebApplication.State;
2930
using WebApplication.Utilities;
3031

@@ -111,16 +112,19 @@ public async Task SendErrorAsync(object arg0, object arg1, object arg2)
111112
private readonly ILogger<JobsHub> _logger;
112113
private readonly ProjectWork _projectWork;
113114
private readonly LinkGenerator _linkGenerator;
115+
private readonly ProfileProvider _profileProvider;
114116
private readonly UserResolver _userResolver;
115117
private readonly Sender _sender;
116118
private readonly Uploads _uploads;
117119
private readonly DtoGenerator _dtoGenerator;
118120

119-
public JobsHub(ILogger<JobsHub> logger, ProjectWork projectWork, LinkGenerator linkGenerator, UserResolver userResolver, Uploads uploads, DtoGenerator dtoGenerator)
121+
public JobsHub(ILogger<JobsHub> logger, ProjectWork projectWork, LinkGenerator linkGenerator, UserResolver userResolver,
122+
ProfileProvider profileProvider, Uploads uploads, DtoGenerator dtoGenerator)
120123
{
121124
_logger = logger;
122125
_projectWork = projectWork;
123126
_linkGenerator = linkGenerator;
127+
_profileProvider = profileProvider;
124128
_userResolver = userResolver;
125129
_uploads = uploads;
126130
_dtoGenerator = dtoGenerator;
@@ -132,7 +136,7 @@ public async Task CreateUpdateJob(string projectId, InventorParameters parameter
132136
{
133137
_logger.LogInformation($"invoked CreateJob, connectionId : {Context.ConnectionId}");
134138

135-
_userResolver.Token = token;
139+
_profileProvider.Token = token;
136140

137141
// create job and run it
138142
var job = new UpdateModelJobItem(_logger, projectId, parameters, _projectWork);
@@ -143,7 +147,7 @@ public async Task CreateRFAJob(string projectId, string hash, string token)
143147
{
144148
_logger.LogInformation($"invoked CreateRFAJob, connectionId : {Context.ConnectionId}");
145149

146-
_userResolver.Token = token;
150+
_profileProvider.Token = token;
147151

148152
// create job and run it
149153
var job = new RFAJobItem(_logger, projectId, hash, _projectWork, _linkGenerator);
@@ -154,7 +158,7 @@ public async Task CreateDrawingDownloadJob(string projectId, string hash, string
154158
{
155159
_logger.LogInformation($"invoked CreateDrawingDownloadJob, connectionId : {Context.ConnectionId}");
156160

157-
_userResolver.Token = token;
161+
_profileProvider.Token = token;
158162

159163
// create job and run it
160164
var job = new DrawingJobItem(_logger, projectId, hash, _projectWork, _linkGenerator);
@@ -165,22 +169,22 @@ public async Task CreateAdoptJob(string packageId, string token)
165169
{
166170
_logger.LogInformation($"invoked CreateAdoptJob, connectionId : {Context.ConnectionId}");
167171

168-
_userResolver.Token = token;
172+
_profileProvider.Token = token;
169173

170174
// get upload information
171175
(ProjectInfo projectInfo, string fileName) = _uploads.GetUploadData(packageId);
172176
_uploads.ClearUploadData(packageId);
173177

174178
// create job and run it
175-
var job = new AdoptJobItem(_logger, projectInfo, fileName, _projectWork, _userResolver, _dtoGenerator);
179+
var job = new AdoptJobItem(_logger, projectInfo, fileName, _projectWork, _dtoGenerator, _userResolver);
176180
await RunJobAsync(job);
177181
}
178182

179183
public async Task CreateDrawingPdfJob(string projectId, string hash, string token)
180184
{
181185
_logger.LogInformation($"invoked CreateDrawingPdfJob, connectionId : {Context.ConnectionId}");
182186

183-
_userResolver.Token = token;
187+
_profileProvider.Token = token;
184188

185189
// create job and run it
186190
var job = new ExportDrawingPdfJobItem(_logger, projectId, hash, _projectWork, _linkGenerator);

WebApplication/Controllers/LoginController.cs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
using Microsoft.Extensions.Logging;
2525
using Microsoft.Extensions.Options;
2626
using WebApplication.Definitions;
27+
using WebApplication.Services;
2728
using WebApplication.State;
2829
using WebApplication.Utilities;
2930

@@ -36,18 +37,18 @@ public class LoginController : ControllerBase
3637
private static readonly ProfileDTO AnonymousProfile = new ProfileDTO { Name = "Anonymous", AvatarUrl = "logo-xs-white-BG.svg" };
3738

3839
private readonly ILogger<LoginController> _logger;
39-
private readonly UserResolver _userResolver;
40+
private readonly ProfileProvider _profileProvider;
4041
private readonly InviteOnlyModeConfiguration _inviteOnlyModeConfig;
4142

4243
/// <summary>
4344
/// Forge configuration.
4445
/// </summary>
4546
public ForgeConfiguration Configuration { get; }
4647

47-
public LoginController(ILogger<LoginController> logger, IOptions<ForgeConfiguration> optionsAccessor, UserResolver userResolver, IOptions<InviteOnlyModeConfiguration> inviteOnlyModeOptionsAccessor)
48+
public LoginController(ILogger<LoginController> logger, IOptions<ForgeConfiguration> optionsAccessor, ProfileProvider profileProvider, IOptions<InviteOnlyModeConfiguration> inviteOnlyModeOptionsAccessor)
4849
{
4950
_logger = logger;
50-
_userResolver = userResolver;
51+
_profileProvider = profileProvider;
5152
Configuration = optionsAccessor.Value.Validate();
5253
_inviteOnlyModeConfig = inviteOnlyModeOptionsAccessor.Value;
5354
}
@@ -82,9 +83,9 @@ public RedirectResult Get()
8283
public async Task<ActionResult<ProfileDTO>> Profile()
8384
{
8485
_logger.LogInformation("Get profile");
85-
if (_userResolver.IsAuthenticated)
86+
if (_profileProvider.IsAuthenticated)
8687
{
87-
dynamic profile = await _userResolver.GetProfileAsync();
88+
dynamic profile = await _profileProvider.GetProfileAsync();
8889
if (_inviteOnlyModeConfig.Enabled)
8990
{
9091
var inviteOnlyChecker = new InviteOnlyChecker(_inviteOnlyModeConfig);

WebApplication/Controllers/ProjectsController.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
using Microsoft.AspNetCore.Mvc;
2525
using Microsoft.Extensions.Logging;
2626
using WebApplication.Definitions;
27+
using WebApplication.Services;
2728
using WebApplication.State;
2829
using WebApplication.Utilities;
2930
using Project = WebApplication.State.Project;
@@ -37,13 +38,15 @@ public class ProjectsController : ControllerBase
3738
private readonly ILogger<ProjectsController> _logger;
3839
private readonly DtoGenerator _dtoGenerator;
3940
private readonly UserResolver _userResolver;
41+
private readonly ProfileProvider _profileProvider;
4042
private readonly Uploads _uploads;
4143

42-
public ProjectsController(ILogger<ProjectsController> logger, DtoGenerator dtoGenerator, UserResolver userResolver, Uploads uploads)
44+
public ProjectsController(ILogger<ProjectsController> logger, DtoGenerator dtoGenerator, UserResolver userResolver, ProfileProvider profileProvider, Uploads uploads)
4345
{
4446
_logger = logger;
4547
_dtoGenerator = dtoGenerator;
4648
_userResolver = userResolver;
49+
_profileProvider = profileProvider;
4750
_uploads = uploads;
4851
}
4952

@@ -78,7 +81,7 @@ public async Task<IEnumerable<ProjectDTO>> ListAsync()
7881
[HttpPost]
7982
public async Task<ActionResult<ProjectDTO>> CreateProject([FromForm]NewProjectModel projectModel)
8083
{
81-
if (!_userResolver.IsAuthenticated)
84+
if (!_profileProvider.IsAuthenticated)
8285
{
8386
_logger.LogError("Attempt to create project for anonymous user");
8487
return BadRequest();
@@ -116,7 +119,7 @@ public async Task<ActionResult<ProjectDTO>> CreateProject([FromForm]NewProjectMo
116119
[HttpDelete]
117120
public async Task<StatusCodeResult> DeleteProjects([FromBody] List<string> projectNameList)
118121
{
119-
if (!_userResolver.IsAuthenticated)
122+
if (!_profileProvider.IsAuthenticated)
120123
{
121124
_logger.LogError("Attempt to delete projects for anonymous user");
122125
return BadRequest();

WebApplication/Initializer.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
/////////////////////////////////////////////////////////////////////
1818

1919
using System;
20-
using System.Collections;
2120
using System.IO;
2221
using System.Linq;
2322
using System.Threading.Tasks;
@@ -44,14 +43,15 @@ public class Initializer
4443
private readonly FdaClient _fdaClient;
4544
private readonly ProjectWork _projectWork;
4645
private readonly UserResolver _userResolver;
46+
private readonly BucketPrefixProvider _bucketPrefixProvider;
4747
private readonly LocalCache _localCache;
4848
private readonly OssBucket _bucket;
4949

5050
/// <summary>
5151
/// Constructor.
5252
/// </summary>
5353
public Initializer(ILogger<Initializer> logger, FdaClient fdaClient, IOptions<DefaultProjectsConfiguration> optionsAccessor,
54-
ProjectWork projectWork, UserResolver userResolver, LocalCache localCache)
54+
ProjectWork projectWork, UserResolver userResolver, LocalCache localCache, BucketPrefixProvider bucketPrefixProvider)
5555
{
5656
_logger = logger;
5757
_fdaClient = fdaClient;
@@ -62,6 +62,8 @@ public Initializer(ILogger<Initializer> logger, FdaClient fdaClient, IOptions<De
6262

6363
// bucket for anonymous user
6464
_bucket = _userResolver.AnonymousBucket;
65+
66+
_bucketPrefixProvider = bucketPrefixProvider;
6567
}
6668
public async Task InitializeBundlesAsync()
6769
{
@@ -140,7 +142,7 @@ public async Task ClearAsync(bool deleteUserBuckets)
140142
_logger.LogInformation($"Deleting user buckets for registered users");
141143
// delete all user buckets
142144
var buckets = await _bucket.GetBucketsAsync();
143-
string userBucketPrefix = _userResolver.GetBucketPrefix();
145+
string userBucketPrefix = _bucketPrefixProvider.GetBucketPrefix();
144146
foreach (string bucket in buckets)
145147
{
146148
if (bucket.Contains(userBucketPrefix))

WebApplication/Job/AdoptJobItem.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,13 @@ internal class AdoptJobItem : JobItemBase
3333
private readonly UserResolver _userResolver;
3434
private readonly DtoGenerator _dtoGenerator;
3535

36-
public AdoptJobItem(ILogger logger, ProjectInfo projectInfo, string fileName, ProjectWork projectWork, UserResolver userResolver, DtoGenerator dtoGenerator)
36+
public AdoptJobItem(ILogger logger, ProjectInfo projectInfo, string fileName, ProjectWork projectWork, DtoGenerator dtoGenerator, UserResolver userResolver)
3737
: base(logger, null, projectWork)
3838
{
3939
_projectInfo = projectInfo;
4040
_fileName = fileName;
41-
_userResolver = userResolver;
4241
_dtoGenerator = dtoGenerator;
42+
_userResolver = userResolver;
4343
}
4444

4545
public override async Task ProcessJobAsync(IResultSender resultSender)

WebApplication/Middleware/HeaderTokenHandler.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
using System.Threading.Tasks;
2020
using Microsoft.AspNetCore.Http;
2121
using Microsoft.Net.Http.Headers;
22+
using WebApplication.Services;
2223
using WebApplication.State;
2324

2425
namespace WebApplication.Middleware
@@ -37,7 +38,7 @@ public HeaderTokenHandler(RequestDelegate next)
3738
_next = next;
3839
}
3940

40-
public async Task InvokeAsync(HttpContext context, UserResolver resolver)
41+
public async Task InvokeAsync(HttpContext context, ProfileProvider profileProvider)
4142
{
4243
while (context.Request.Headers.TryGetValue(HeaderNames.Authorization, out var values))
4344
{
@@ -48,7 +49,7 @@ public async Task InvokeAsync(HttpContext context, UserResolver resolver)
4849
string token = headerValue.Substring(BearerPrefix.Length);
4950
if (string.IsNullOrEmpty(token)) break;
5051

51-
resolver.Token = token;
52+
profileProvider.Token = token;
5253
break;
5354
}
5455

WebApplication/Middleware/RouteTokenHandler.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
using Microsoft.AspNetCore.Http;
2222
using Microsoft.AspNetCore.Routing;
2323
using Microsoft.Extensions.Logging;
24+
using WebApplication.Services;
2425
using WebApplication.State;
2526

2627
namespace WebApplication.Middleware
@@ -37,13 +38,13 @@ public RouteTokenHandler(RequestDelegate next)
3738
_next = next;
3839
}
3940

40-
public async Task InvokeAsync(HttpContext context, UserResolver resolver, ILogger<RouteTokenHandler> logger)
41+
public async Task InvokeAsync(HttpContext context, ProfileProvider profileProvider, ILogger<RouteTokenHandler> logger)
4142
{
4243
string token = context.GetRouteValue("token") as string; // IMPORTANT: parameter name must be in sync with route definition
4344
if (!string.IsNullOrEmpty(token))
4445
{
4546
logger.LogInformation("Extracted token from route");
46-
resolver.Token = token;
47+
profileProvider.Token = token;
4748
}
4849

4950
// Call the next delegate/middleware in the pipeline
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
using Autodesk.Forge.Core;
2+
using Microsoft.Extensions.Configuration;
3+
using Microsoft.Extensions.Options;
4+
5+
namespace WebApplication.Services
6+
{
7+
public class BucketPrefixProvider
8+
{
9+
private readonly ForgeConfiguration _forgeConfig;
10+
private readonly IConfiguration _configuration;
11+
12+
public BucketPrefixProvider(IOptions<ForgeConfiguration> forgeConfiguration, IConfiguration configuration)
13+
{
14+
_configuration = configuration;
15+
_forgeConfig = forgeConfiguration.Value;
16+
}
17+
18+
public string GetBucketPrefix()
19+
{
20+
string suffix = _configuration?.GetValue<string>("BucketKeySuffix");
21+
return $"authd{suffix}-{_forgeConfig.ClientId}".ToLowerInvariant();
22+
}
23+
}
24+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
using System.Threading.Tasks;
2+
3+
namespace WebApplication.Services
4+
{
5+
public interface IBucketKeyProvider
6+
{
7+
Task<string> GetBucketKeyAsync();
8+
}
9+
}

0 commit comments

Comments
 (0)