Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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));
        }
Esempio n. 3
0
        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));
        }