Ejemplo n.º 1
0
 public KeyValuePair <Guid, VirtualHostSetting>[] GetVirtualHosts()
 {
     lock (virtualHostLock)
     {
         return(VirtualHosts.ToArray());
     }
 }
        public List <Guid> ApplyVirtualHosts(Guid settingId, KeyValuePair <Guid, VirtualHostSetting>[] virtualHostSettings)
        {
            var affectedVirtualHosts = new List <Guid>();

            var newHosts = new Dictionary <Guid, VirtualHostSetting>();

            lock (virtualHostLock)
            {
                VirtualHostSettingId = settingId;
                foreach (var virtualHostSetting in virtualHostSettings)
                {
                    var virtualHostId = virtualHostSetting.Key;
                    var virtualHost   = virtualHostSetting.Value;

                    newHosts.Add(virtualHostId, virtualHost);

                    if (VirtualHosts.TryGetValue(virtualHostId, out var oldVirtualHost))
                    {
                        if (oldVirtualHost != virtualHost)
                        {
                            affectedVirtualHosts.Add(virtualHostId);//changed
                        }
                        VirtualHosts.Remove(virtualHostId);
                    }
                    else
                    {
                        affectedVirtualHosts.Add(virtualHostId);//added
                    }
                }
                affectedVirtualHosts.AddRange(VirtualHosts.Keys);//removed
                VirtualHosts = newHosts;
            }
            return(affectedVirtualHosts);
        }
Ejemplo n.º 3
0
        public void TestNoDefault()
        {
            using var runner = TestRunner.Run(VirtualHosts.Create());

            using var response = runner.GetRequest().GetSafeResponse();

            Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Responds to the save command from the current (sub) view model.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void _currentViewModel_OnSaved(object sender, System.EventArgs e)
        {
            if (CurrentViewModel is VirtualHostVM)
            {
                var vHost = ((VirtualHostVM)CurrentViewModel).SelectedVirtualHost;
                if (vHost == null)
                {
                    return;
                }

                var old = VirtualHosts.FirstOrDefault(p => p.Id == vHost.Id);

                if (old == null)
                {
                    VirtualHosts.Add(vHost);
                }
                else
                {
                    var idx = VirtualHosts.IndexOf(old);
                    VirtualHosts.Remove(old);
                    VirtualHosts.Insert(idx, vHost);
                }

                // This bypasses the INotify event.
                // Currently there doesn't seem much point firing the event, but this may change later.
                _selectedVirtualHost = vHost;
            }
            else if (CurrentViewModel is HostFileEntryVM)
            {
                var host = ((HostFileEntryVM)CurrentViewModel).CurrentHostFileEntry;
                if (host == null)
                {
                    return;
                }

                var old = HostFileEntries.FirstOrDefault(p => p.Id == host.Id);

                if (old == null)
                {
                    HostFileEntries.Add(host);
                }
                else
                {
                    var idx = HostFileEntries.IndexOf(old);
                    HostFileEntries.Remove(old);
                    HostFileEntries.Insert(idx, host);
                }

                // This bypasses the INotify event.
                // Currently there doesn't seem much point firing the event, but this may change later.
                _selectedHostFileEntry = host;
            }
        }
Ejemplo n.º 5
0
        public void TestDomains()
        {
            var hosts = VirtualHosts.Create()
                        .Add("domain1.com", Layout.Create().Fallback(Content.From("domain1.com")))
                        .Add("domain2.com", Layout.Create().Fallback(Content.From("domain2.com")))
                        .Default(Layout.Create().Index(Content.From("default")));

            using var runner = TestRunner.Run(hosts);

            TestHost(runner, "domain1.com");
            TestHost(runner, "domain2.com");

            TestHost(runner, "localhost", "default");
        }
        public static IHandlerBuilder Build(Environment environment, GatewayConfiguration config)
        {
            var hosts = VirtualHosts.Create();

            if (config.Hosts != null)
            {
                foreach (var host in config.Hosts)
                {
                    hosts.Add(host.Key, GetHandler(environment, host.Value));
                }
            }

            return(hosts);
        }
Ejemplo n.º 7
0
        public List <Guid> ApplyVirtualHosts(Guid settingId, BinaryReader inputStreamReader) //Return affected virtual hosts
        {
            var count = (int)inputStreamReader.ReadUInt16LittleEndian();

            if (count == 0)
            {
                throw new InvalidDataException();
            }

            var affectedVirtualHosts = new List <Guid>();

            var newHosts = new Dictionary <Guid, VirtualHostSetting>();

            for (int index = 0; index < count; index++)
            {
                var virtualHostId = inputStreamReader.ReadGuid();
                var priority      = inputStreamReader.ReadInt32LittleEndian();
                var weight        = inputStreamReader.ReadInt32LittleEndian();
                VirtualHostSetting virtualHost = new VirtualHostSetting(priority, weight);
                newHosts.Add(virtualHostId, virtualHost);
            }

            lock (virtualHostLock)
            {
                VirtualHostSettingId = settingId;
                foreach (var item in newHosts)
                {
                    var virtualHostId = item.Key;
                    var virtualHost   = item.Value;

                    if (VirtualHosts.TryGetValue(virtualHostId, out var oldVirtualHost))
                    {
                        if (oldVirtualHost != virtualHost)
                        {
                            affectedVirtualHosts.Add(virtualHostId);//changed
                        }
                        VirtualHosts.Remove(virtualHostId);
                    }
                    else
                    {
                        affectedVirtualHosts.Add(virtualHostId);//added
                    }
                }
                affectedVirtualHosts.AddRange(VirtualHosts.Keys);//removed
                VirtualHosts = newHosts;
            }
            return(affectedVirtualHosts);
        }
Ejemplo n.º 8
0
        public Dictionary <Guid, VirtualHostSetting> ApplyVirtualHosts(Guid settingId, string value, out List <Guid> affectedVirtualHosts) //from redis
        {
            affectedVirtualHosts = new List <Guid>();
            var newHosts = new Dictionary <Guid, VirtualHostSetting>();
            var texts    = value.Split(',');

            foreach (var text in texts)
            {
                var setting       = text.Split('-');
                var virtualHostId = Guid.Parse(setting[0]);
                var priority      = int.Parse(setting[1]);
                var weight        = int.Parse(setting[2]);
                VirtualHostSetting virtualHost = new VirtualHostSetting(priority, weight);
                newHosts.Add(virtualHostId, virtualHost);
            }
            lock (virtualHostLock)
            {
                VirtualHostSettingId = settingId;
                foreach (var item in newHosts)
                {
                    var virtualHostId = item.Key;
                    var virtualHost   = item.Value;

                    if (VirtualHosts.TryGetValue(virtualHostId, out var oldVirtualHost))
                    {
                        if (oldVirtualHost != virtualHost)
                        {
                            affectedVirtualHosts.Add(virtualHostId);//changed
                        }
                        VirtualHosts.Remove(virtualHostId);
                    }
                    else
                    {
                        affectedVirtualHosts.Add(virtualHostId);//added
                    }
                }
                affectedVirtualHosts.AddRange(VirtualHosts.Keys);//deleted
                VirtualHosts = newHosts;
            }
            return(newHosts);
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Sets associated objects when required.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void _objectViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
        {
            if (e == null)
            {
                return;
            }

            object obj = null;

            switch (e.PropertyName)
            {
            case "CurrentHostFileEntry":
                // Set the backing value so we skip the actions that occur when assigning to the public property.
                _selectedVirtualHost = VirtualHosts.FirstOrDefault(
                    p => p.ServerName == SelectedHostFileEntry.Url ||
                    p.ServerAlias == SelectedHostFileEntry.Url);

                // Assign found value to obj, even if null as this will tell the viewmodel to clear the property.
                obj = _selectedVirtualHost;

                // Now we need to raise the property changed event on the changed property to allow UI to react.
                OnPropertyChanged("SelectedVirtualHost");
                break;

            case "SelectedVirtualHost":
                _selectedHostFileEntry = HostFileEntries.FirstOrDefault(
                    p => p.Url == SelectedVirtualHost.ServerName ||
                    p.Url == SelectedVirtualHost.ServerAlias);

                obj = _selectedHostFileEntry;

                OnPropertyChanged("SelectedHostFileEntry");
                break;

            default:
                // If not a property we want to act on we should return to prevent setting unwanted values.
                return;
            }
            CurrentViewModel.SetAssociatedObject(obj);
        }