fix: guard Matrix42 optional service resolution
This commit is contained in:
@@ -46,12 +46,57 @@ namespace C4IT.F4SD
|
|||||||
public F4SDM42WebApiController(IDependencyResolver resolver)
|
public F4SDM42WebApiController(IDependencyResolver resolver)
|
||||||
{
|
{
|
||||||
defaultInstance = this;
|
defaultInstance = this;
|
||||||
_entityDataService = resolver?.TryGet<IEntityDataService>();
|
|
||||||
_journalService = resolver?.TryGet<IJournalService>();
|
|
||||||
_globalConfigurationProvider = GlobalConfigurationProvider.Instance;
|
_globalConfigurationProvider = GlobalConfigurationProvider.Instance;
|
||||||
_f4stHelperService = new F4SDHelperService();
|
_f4stHelperService = new F4SDHelperService();
|
||||||
_userProfile = resolver?.TryGet<IPandoraUserProfile>();
|
|
||||||
EnsureInitialized();
|
EnsureInitialized();
|
||||||
|
_entityDataService = ResolveOptional<IEntityDataService>(resolver);
|
||||||
|
_journalService = ResolveOptional<IJournalService>(resolver);
|
||||||
|
_userProfile = ResolveOptional<IPandoraUserProfile>(resolver);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static T ResolveOptional<T>(IDependencyResolver resolver) where T : class
|
||||||
|
{
|
||||||
|
if (resolver == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (!resolver.IsRegistered<T>())
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return resolver.TryGet<T>();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
LogOptionalDependencyFailure(typeof(T), ex);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void LogOptionalDependencyFailure(Type dependencyType, Exception exception)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
LogEntry($"Matrix42 dependency '{dependencyType.FullName}' could not be resolved.", LogLevels.Warning);
|
||||||
|
LogException(exception);
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private HttpResponseMessage CreateMissingDependencyResponse(Type dependencyType)
|
||||||
|
{
|
||||||
|
return HttpResponseExtensions.CreateResponse(
|
||||||
|
Request,
|
||||||
|
HttpStatusCode.ServiceUnavailable,
|
||||||
|
$"Matrix42 dependency '{dependencyType.FullName}' is not registered for this extension context.");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static readonly object initLock = new object();
|
private static readonly object initLock = new object();
|
||||||
@@ -278,6 +323,9 @@ namespace C4IT.F4SD
|
|||||||
public async Task<HttpResponseMessage> getPickup(string name, [FromUri] EntityEnumerationVisibilityMode mode = EntityEnumerationVisibilityMode.None, [FromUri] Int32 group = -1)
|
public async Task<HttpResponseMessage> getPickup(string name, [FromUri] EntityEnumerationVisibilityMode mode = EntityEnumerationVisibilityMode.None, [FromUri] Int32 group = -1)
|
||||||
{
|
{
|
||||||
await Task.Delay(0);
|
await Task.Delay(0);
|
||||||
|
if (_entityDataService == null)
|
||||||
|
return CreateMissingDependencyResponse(typeof(IEntityDataService));
|
||||||
|
|
||||||
EntityEnumeration enumerationTemp = _entityDataService.GetEnumeration(name, mode);
|
EntityEnumeration enumerationTemp = _entityDataService.GetEnumeration(name, mode);
|
||||||
var vals = enumerationTemp.Values;
|
var vals = enumerationTemp.Values;
|
||||||
|
|
||||||
@@ -304,6 +352,9 @@ namespace C4IT.F4SD
|
|||||||
[Route("getMyRoleMemberships"), HttpGet]
|
[Route("getMyRoleMemberships"), HttpGet]
|
||||||
public async Task<HttpResponseMessage> getMyRoleMemberships()
|
public async Task<HttpResponseMessage> getMyRoleMemberships()
|
||||||
{
|
{
|
||||||
|
if (_userProfile == null)
|
||||||
|
return CreateMissingDependencyResponse(typeof(IPandoraUserProfile));
|
||||||
|
|
||||||
var User = _userProfile.GetInteractiveUserInfo();
|
var User = _userProfile.GetInteractiveUserInfo();
|
||||||
var filter = AsqlHelper.BuildInCondition("ID", new Guid[] { User.Id });
|
var filter = AsqlHelper.BuildInCondition("ID", new Guid[] { User.Id });
|
||||||
return HttpResponseExtensions.CreateResponse(Request, HttpStatusCode.OK, await _f4stHelperService.UserPermissionsInfo(filter));
|
return HttpResponseExtensions.CreateResponse(Request, HttpStatusCode.OK, await _f4stHelperService.UserPermissionsInfo(filter));
|
||||||
|
|||||||
Reference in New Issue
Block a user