private async Task <RouteBinding> GetRouteDataAsync(TelemetryScopedLogger scopedLogger, Track.IdKey trackIdKey, string partyNameAndBinding = null) { var track = await GetTrackAsync(tenantRepository, trackIdKey); var routeBinding = new RouteBinding { RouteUrl = $"{trackIdKey.TenantName}{$"/{trackIdKey.TrackName}{(!partyNameAndBinding.IsNullOrWhiteSpace() ? $"/{partyNameAndBinding}" : string.Empty)}"}", TenantName = trackIdKey.TenantName, TrackName = trackIdKey.TrackName, PartyNameAndBinding = partyNameAndBinding, PrimaryKey = track.PrimaryKey, SecondaryKey = track.SecondaryKey, ClaimMappings = track.ClaimMappings, Resources = track.Resources, SequenceLifetime = track.SequenceLifetime, PasswordLength = track.PasswordLength, CheckPasswordComplexity = track.CheckPasswordComplexity.Value, CheckPasswordRisk = track.CheckPasswordRisk.Value, AllowIframeOnDomains = track.AllowIframeOnDomains }; if (!partyNameAndBinding.IsNullOrWhiteSpace()) { var partyNameBindingMatch = partyNameBindingRegex.Match(partyNameAndBinding); if (!partyNameBindingMatch.Success) { throw new ArgumentException($"Invalid party name and binding match. PartyNameAndBinding '{partyNameAndBinding}'"); } if (partyNameBindingMatch.Groups["upparty"].Success) { routeBinding.UpParty = await GetUpPartyAsync(tenantRepository, trackIdKey, partyNameBindingMatch.Groups["upparty"]); } else if (partyNameBindingMatch.Groups["downparty"].Success) { routeBinding.DownParty = await GetDownPartyAsync(tenantRepository, trackIdKey, partyNameBindingMatch.Groups["downparty"]); if (routeBinding.DownParty.AllowUpParties?.Count() >= 1) { if (partyNameBindingMatch.Groups["toupparty"].Success) { routeBinding.ToUpParties = await GetAllowedToUpPartyIds(scopedLogger, trackIdKey, partyNameBindingMatch.Groups["toupparty"], routeBinding.DownParty); } else { routeBinding.ToUpParties = routeBinding.DownParty.AllowUpParties.Take(1).ToList(); } } } else { throw new ArgumentException($"Invalid party name and binding group match. PartyNameAndBinding '{partyNameAndBinding}'"); } } return(routeBinding); }
private async Task <RouteBinding> GetRouteDataAsync(TelemetryScopedLogger scopedLogger, IServiceProvider requestServices, Track.IdKey trackIdKey, string partyNameAndBinding, bool acceptUnknownParty) { var track = await GetTrackAsync(tenantRepository, trackIdKey); var routeBinding = new RouteBinding { RouteUrl = $"{trackIdKey.TenantName}/{trackIdKey.TrackName}{(!partyNameAndBinding.IsNullOrWhiteSpace() ? $"/{partyNameAndBinding}" : string.Empty)}", TenantName = trackIdKey.TenantName, TrackName = trackIdKey.TrackName, Resources = track.Resources, }; return(await PostRouteDataAsync(scopedLogger, requestServices, trackIdKey, track, routeBinding, partyNameAndBinding, acceptUnknownParty)); }
private async Task <RouteBinding> GetRouteDataAsync(TelemetryScopedLogger scopedLogger, IServiceProvider requestServices, Track.IdKey trackIdKey, bool hasCustomDomain, string customDomain, string partyNameAndBinding, bool acceptUnknownParty) { if (hasCustomDomain) { var tenantCacheLogic = requestServices.GetService <TenantCacheLogic>(); trackIdKey.TenantName = await tenantCacheLogic.GetTenantNameByCustomDomain(customDomain); } var track = await GetTrackAsync(trackIdKey, hasCustomDomain); scopedLogger.SetScopeProperty(Constants.Logs.TenantName, trackIdKey.TenantName); scopedLogger.SetScopeProperty(Constants.Logs.TrackName, trackIdKey.TrackName); var routeBinding = new RouteBinding { HasCustomDomain = hasCustomDomain, RouteUrl = $"{(!hasCustomDomain ? $"{trackIdKey.TenantName}/" : string.Empty)}{trackIdKey.TrackName}{(!partyNameAndBinding.IsNullOrWhiteSpace() ? $"/{partyNameAndBinding}" : string.Empty)}", TenantName = trackIdKey.TenantName, TrackName = trackIdKey.TrackName, Resources = track.Resources, }; return(await PostRouteDataAsync(scopedLogger, requestServices, trackIdKey, track, routeBinding, partyNameAndBinding, acceptUnknownParty)); }