Ejemplo n.º 1
0
        public override void DoJob()
        {
            if (Application.CurrentConfiguration.Cluster.Active == false)
            {
                return;
            }
            var clusterStatus = Application.ClusterChecklist;

            if (clusterStatus == null)
            {
                return;
            }
            if (clusterStatus.Length < 1)
            {
                return;
            }
            var nodesKnownHosts = new List <KnownHost>();

            for (var i = 0; i < clusterStatus.Length; i++)
            {
                var nodeIPs     = clusterStatus[i].DiscoveredIpsReach;
                var nodeName    = clusterStatus[i].Hostname;
                var commonNames = new string[] {
                    CommonString.Append(nodeName, "int", i.ToString())
                };
                for (var p = 0; p < nodeIPs.Length; p++)
                {
                    var knownHost = new KnownHost()
                    {
                        IpAddr      = nodeIPs[p].IpAddress,
                        CommonNames = commonNames
                    };
                    nodesKnownHosts.Add(knownHost);
                }
            }
            var currentKnownHosts = Application.CurrentConfiguration.Network.KnownHosts.ToList();

            foreach (var nodeHost in nodesKnownHosts)
            {
                //i casi possono essere tre:
                //  1) l'ip non è presente nella CurrentConfiguration   -> aggiungo il nuovo KnownHost
                //  2) l'ip è presente ma i CommonNames sono differenti -> aggiorno solamente i CommonNames del KnownHost corrispondente
                //  3) l'ip è presente e i CommonNames coincidono       -> non faccio nulla
                if (!currentKnownHosts.Any(_ => CommonString.AreEquals(_.IpAddr, nodeHost.IpAddr) == true))
                {
                    currentKnownHosts.Add(nodeHost);
                }
                else
                {
                    var existingCn = currentKnownHosts.FirstOrDefault(_ => CommonString.AreEquals(_.IpAddr, nodeHost.IpAddr) == true).CommonNames;
                    if (CommonString.AreEquals(CommonString.Build(existingCn), CommonString.Build(nodeHost.CommonNames)) == false)
                    {
                        currentKnownHosts.FirstOrDefault(_ => CommonString.AreEquals(_.IpAddr, nodeHost.IpAddr) == true).CommonNames = nodeHost.CommonNames;
                    }
                }
            }
            Application.CurrentConfiguration.Network.KnownHosts = currentKnownHosts.ToArray();
            ConfigRepo.Save();
            Dns.Set();
        }
Ejemplo n.º 2
0
        public static bool Apply()
        {
            var current = Application.CurrentConfiguration.Host;
            var running = Application.RunningConfiguration.Host;

            if (CommonString.AreEquals(current.HostName, running.HostName) == false)
            {
                ConsoleLogger.Log($"[host] name: {current.HostName}");
                SetHostname(current.HostName);
            }
            if (CommonString.AreEquals(current.HostDeployment, running.HostDeployment) == false)
            {
                ConsoleLogger.Log($"[host] deployment: {current.HostDeployment}");
                SetDeployment(current.HostDeployment);
            }
            if (CommonString.AreEquals(current.HostChassis, running.HostChassis) == false)
            {
                ConsoleLogger.Log($"[host] chassis: {current.HostChassis}");
                SetChassis(current.HostChassis);
            }
            if (CommonString.AreEquals(current.HostLocation, running.HostLocation) == false)
            {
                ConsoleLogger.Log($"[host] location: {current.HostLocation}");
                SetLocation(current.HostLocation);
            }
            return(true);
        }
Ejemplo n.º 3
0
 public static void ParsePayload(string topic, byte[] payload)
 {
     if (topic.StartsWith("/control"))
     {
         var controlData = topic.Split(new[] { "/" }, StringSplitOptions.RemoveEmptyEntries);
         if (controlData.Length != 4)
         {
             Console.WriteLine("Invalid topic");
             return;
         }
         if (CommonString.AreEquals(Application.MACHINE_ID.MachineUid.ToString(), controlData[1]) == true &&
             CommonString.AreEquals(Application.MACHINE_ID.PartNumber.ToString(), controlData[2]) == true &&
             CommonString.AreEquals(Application.MACHINE_ID.SerialNumber.ToString(), controlData[3]))
         {
             Console.WriteLine(string.Join(" ", payload));
             if (!COMMANDS.ContainsKey(payload))
             {
                 Console.WriteLine("Invalid command");
                 return;
             }
             Console.WriteLine("Executing command");
             Console.WriteLine(COMMANDS[payload]);
             ExecuteCommand(COMMANDS[payload]);
         }
     }
 }
Ejemplo n.º 4
0
        /// <summary>
        /// Meccanismo di autenticazione centralizzato
        /// Prende i parametri id e password e li confronta coi dati di Application.CurrentConfiguration.Users.ApplicativeUsers
        /// Flusso:
        ///     - ci sono utenti?
        ///     - c'è l'utente richiesto?
        ///     - l'utente trovato è abilitato a fare l'autenticazione?
        ///     - il parametro password corrisponde?
        /// </summary>
        /// <param name="id">Parametro dell'utente, es: username</param>
        /// <param name="claims">Parametri dell'utente, es: hashing della password</param>
        /// <returns>Restituisce un HttpStatusCode, solo se l'autenticazione è andata a buon fine restituisce OK</returns>
        public static HttpStatusCode Authenticate(string id, string[] claims)
        {
            var current = Application.CurrentConfiguration.Users.ApplicativeUsers;

            if (!current.Any())
            {
                return(HttpStatusCode.Unauthorized);
            }
            var method = current.FirstOrDefault(_ => CommonString.AreEquals(_.Id, id) == true);

            if (method == null)
            {
                return(HttpStatusCode.Unauthorized);
            }
            if (!method.Active)
            {
                return(HttpStatusCode.Unauthorized);
            }

            switch (method.Type)
            {
            case AuthenticationType.none:
                return(HttpStatusCode.Unauthorized);

            case AuthenticationType.simple:
                return(SimpleAuthentication(claims, method.Claims));

            default:
                return(HttpStatusCode.Unauthorized);
            }
        }
Ejemplo n.º 5
0
        public static bool Set()
        {
            var currentConfig          = Application.CurrentConfiguration.Network.InternalNetwork;
            var parsedNetworkParameter = LukeSkywalker.IPNetwork.IPNetwork.Parse(currentConfig.IpAddress, currentConfig.NetworkRange);
            var network = parsedNetworkParameter.Network.ToString();
            var mask    = parsedNetworkParameter.Netmask.ToString();
            var lines   = new string[] {
                "interface ignore wildcard",
                $"interface listen {currentConfig.IpAddress}",
                $"restrict {network} mask {mask} nomodify",
                "",
                "server 0.it.pool.ntp.org",
                "server 1.it.pool.ntp.org",
                "server 2.it.pool.ntp.org",
                "server 3.it.pool.ntp.org",
                "server 193.204.114.232",
                "server 193.204.114.233",
                "server ntp1.ien.it",
                "server ntp2.ien.it",
                "",
                "statistics loopstats",
                "driftfile /var/lib/ntp/ntp.drift",
                "logfile /var/log/ntp/ntpd.log",
                "statsdir /var/log/ntp/",
                "filegen peerstats file peers type day link enable",
                "filegen loopstats file loops type day link enable"
            };

            File.WriteAllLines(ntpConfFileTmp, lines);
            if (File.Exists(ntpConfFile))
            {
                var existingFileHash = CommonFile.GetHash(ntpConfFile);
                var newFileHash      = CommonFile.GetHash(ntpConfFileTmp);
                if (CommonString.AreEquals(existingFileHash, newFileHash) == true)
                {
                    return(true);
                }
                else
                {
                    File.Copy(ntpConfFileTmp, ntpConfFile, true);
                }
            }
            else
            {
                File.WriteAllLines(ntpConfFile, lines);
            }
            if (File.Exists(ntpConfFileTmp))
            {
                File.Delete(ntpConfFileTmp);
            }
            Systemctl.Start(ntpdService);
            return(true);
        }
Ejemplo n.º 6
0
        public static void Apply(string key, string value)
        {
            if (!File.Exists(key))
            {
                return;
            }
            var runningValue = File.ReadAllText(key).Trim();

            if (CommonString.AreEquals(value.Trim(), runningValue) == true)
            {
                return;
            }
            ConsoleLogger.Log($"[sysctl] {key} = {value}");
            File.WriteAllText(key, value);
        }
Ejemplo n.º 7
0
        private static void FileChanged(object source, FileSystemEventArgs e)
        {
            var fileName = Path.GetFileName(e.FullPath);

            if (CommonString.AreEquals(fileName, setupFilename) == false)
            {
                return;
            }
            if (!File.Exists(e.FullPath))
            {
                return;
            }
            ConsoleLogger.Log($"[watcher] file '{e.FullPath}' changed");
            var result = File.ReadAllLines(e.FullPath).Where(_ => !_.Contains(comment)).ToArray();

            SetupCommands.Import(result);
            SetupCommands.Set();
        }
Ejemplo n.º 8
0
        public static bool Set()
        {
            var current = Application.CurrentConfiguration.Users.SystemUsers;
            var running = Application.CurrentConfiguration.Users.SystemUsers;

            for (var i = 0; i < current.Length; i++)
            {
                var currentUser = current[i];
                var runningUser = running.FirstOrDefault(_ => _.Alias == currentUser.Alias);
                if (runningUser == null)
                {
                    AddUser(currentUser.Alias);
                }
                if (CommonString.AreEquals(currentUser.Password, runningUser.Password) == false)
                {
                    SetPassword(currentUser.Alias, currentUser.Password);
                }
            }
            return(true);
        }
Ejemplo n.º 9
0
        public static bool Apply()
        {
            var current = Application.CurrentConfiguration.Network.Bonds;
            var running = Application.RunningConfiguration.Network.Bonds;

            for (var i = 0; i < current.Length; i++)
            {
                var br  = current[i];
                var run = running.FirstOrDefault(_ => _.Id == br.Id)?.ToString();
                if (CommonString.AreEquals(run, br.ToString()) == false)
                {
                    Set(br.Id);
                    for (var l = 0; l < br.Lower.Length; l++)
                    {
                        AddNetworkAdapter(br.Id, br.Lower[l]);
                    }
                }
            }
            return(true);
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Quando un file viene modificato lo invio agli altri nodi del cluster
        /// E verrà salvato nella cartella /cfg/antd/cluster/{machineUid}/DIR_etc_libvirt_qemu
        /// </summary>
        /// <param name="source"></param>
        /// <param name="e"></param>
        private void FileChanged(object source, FileSystemEventArgs e)
        {
            var fileName = Path.GetFileName(e.FullPath);

            if (!File.Exists(e.FullPath))
            {
                return;
            }
            ConsoleLogger.Log($"[watcher] file '{e.FullPath}' changed");
            var nodes = Application.CurrentConfiguration.Cluster.Nodes;

            for (var i = 0; i < nodes.Length; i++)
            {
                if (CommonString.AreEquals(nodes[i].MachineUid, Application.CurrentConfiguration.Host.MachineUid.ToString()) == true)
                {
                    continue;
                }
                var destinationPath = CommonString.Append(clusterCfgFolder, "/", Application.CurrentConfiguration.Host.MachineUid.ToString(), "/", destinationFolderName, "/", e.Name);
                ConsoleLogger.Log($"sync '{e.FullPath}' -> '{destinationPath}'");
                StorageClient.CreateFile(nodes[i], e.FullPath, destinationPath);
            }
        }
Ejemplo n.º 11
0
        private static void WriteSclFile()
        {
            var lines = new string[] {
                "@define scl-root \"`syslog-ng-data`/include/scl\"",
                "@define include-path \"`include-path`:`syslog-ng-data`/include\"",
                "",
                "@include 'scl/*/*.conf'"
            };

            File.WriteAllLines(sclTmpConfFile, lines);
            var newHash      = CommonFile.GetHash(sclTmpConfFile);
            var existingHash = File.Exists(sclConfFile) ? CommonFile.GetHash(sclConfFile) : string.Empty;

            if (CommonString.AreEquals(existingHash, newHash) == false)
            {
                File.Copy(sclTmpConfFile, sclConfFile, true);
            }
            if (File.Exists(sclTmpConfFile))
            {
                File.Delete(sclTmpConfFile);
            }
        }
Ejemplo n.º 12
0
 public static bool SetInterfaceHardwareConfiguration(NetInterface netInterface)
 {
     if (netInterface.Active != true)
     {
         Ip.EnableNetworkAdapter(netInterface.Id);
         ConsoleLogger.Log($"[network] enabling '{netInterface.Id}'");
     }
     if (netInterface.HardwareConfiguration.Promisc != true)
     {
         Ip.SetNetworkAdapterPromiscOn(netInterface.Id);
         ConsoleLogger.Log($"[network] set '{netInterface.Id}' promisc to on");
     }
     if (CommonString.AreEquals(netInterface.HardwareConfiguration.Mtu.ToString(), defaultMtu) == false)
     {
         Ip.SetNetworkAdapterMTU(netInterface.Id, defaultMtu);
         ConsoleLogger.Log($"[network] set '{netInterface.Id}' mtu to {defaultMtu}");
     }
     if (CommonString.AreEquals(netInterface.HardwareConfiguration.Txqueuelen.ToString(), defaultTxqueuelen) == false)
     {
         Ip.SetNetworkAdapterTxqueuelen(netInterface.Id, defaultTxqueuelen);
         ConsoleLogger.Log($"[network] set '{netInterface.Id}' txqueuelen to {defaultTxqueuelen}");
     }
     return(true);
 }
Ejemplo n.º 13
0
        public static void Set()
        {
            var currentResolv = Application.CurrentConfiguration.Network.KnownDns;
            var runningResolv = Application.RunningConfiguration.Network.KnownDns;

            if (CommonString.AreEquals(currentResolv.ToString(), runningResolv.ToString()) == false)
            {
                if (File.Exists(etcResolv))
                {
                    File.Copy(etcResolv, etcResolvBackup, true);
                }
                var nameserverLines = new string[currentResolv.Nameserver.Length];
                for (var i = 0; i < currentResolv.Nameserver.Length; i++)
                {
                    nameserverLines[i] = CommonString.Append(nameserver, " ", currentResolv.Nameserver[i]);
                }
                File.WriteAllLines(etcResolv, nameserverLines);
                if (!string.IsNullOrEmpty(currentResolv.Search))
                {
                    var newLines = new string[] { CommonString.Append(search, " ", currentResolv.Search) };
                    File.AppendAllLines(etcResolv, newLines);
                }
                if (!string.IsNullOrEmpty(currentResolv.Domain))
                {
                    var newLines = new string[] { CommonString.Append(domain, " ", currentResolv.Domain) };
                    File.AppendAllLines(etcResolv, newLines);
                }
            }

            var currentHosts = CommonArray.Merge(DefaultHosts, Application.CurrentConfiguration.Network.KnownHosts);
            var runningHosts = Application.RunningConfiguration.Network.KnownHosts;

            if (currentHosts.Select(_ => _.ToString()).SequenceEqual(runningHosts.Select(_ => _.ToString())) == false)
            {
                if (File.Exists(etcHosts))
                {
                    File.Copy(etcHosts, etcHostsBackup, true);
                }
                var lines = new string[currentHosts.Length];
                for (var i = 0; i < currentHosts.Length; i++)
                {
                    lines[i] = CommonString.Append(currentHosts[i].IpAddr, " ", CommonString.Build(currentHosts[i].CommonNames, ' '));
                }
                File.WriteAllLines(etcHosts, lines);
            }

            var currentNetworks = CommonArray.Merge(DefaultNetworks, Application.CurrentConfiguration.Network.KnownNetworks);
            var runningNetworks = Application.RunningConfiguration.Network.KnownNetworks;

            if (currentNetworks.Select(_ => _.ToString()).SequenceEqual(runningNetworks.Select(_ => _.ToString())) == false)
            {
                if (File.Exists(etcNetworks))
                {
                    File.Copy(etcNetworks, etcNetworksBackup, true);
                }
                var lines = new string[currentNetworks.Length];
                for (var i = 0; i < currentNetworks.Length; i++)
                {
                    lines[i] = CommonString.Append(currentNetworks[i].Label, " ", currentNetworks[i].NetAddr);
                }
                File.WriteAllLines(etcNetworks, lines);
            }
        }
Ejemplo n.º 14
0
        public ClusterModule() : base("/cluster")
        {
            Get["/"] = x => {
                return(JsonConvert.SerializeObject(Application.CurrentConfiguration.Cluster));
            };

            Get["/status"] = x => {
                var nodes       = Application.CurrentConfiguration.Cluster.Nodes;
                var nodesStatus = new ClusterNodeStatusModel[nodes.Length];
                for (var i = 0; i < nodes.Length; i++)
                {
                    var status = Application.ClusterChecklist.FirstOrDefault(_ => _.TargetNodeMachineUid == nodes[i].MachineUid);
                    nodesStatus[i] = new ClusterNodeStatusModel()
                    {
                        Node   = nodes[i],
                        Status = status
                    };
                }
                return(JsonConvert.SerializeObject(nodesStatus));
            };

            Post["/save"] = x => {
                string data    = Request.Form.Data;
                var    objects = JsonConvert.DeserializeObject <Cluster>(data);
                Application.CurrentConfiguration.Cluster = objects;
                ConfigRepo.Save();
                ConsoleLogger.Log("[cluster] save local configuration");
                return(HttpStatusCode.OK);
            };

            Post["/import"] = x => {
                string data    = Request.Form.Data;
                var    objects = JsonConvert.DeserializeObject <Cluster>(data);
                Application.CurrentConfiguration.Cluster = objects;
                ConfigRepo.Save();
                ConsoleLogger.Log("[cluster] save cluster configuration");
                return(HttpStatusCode.OK);
            };

            /// <summary>
            /// Inizia ANCHE la procedura di "condivisione della configurazione nel cluster"
            /// In questo contesto passerà SOLO la configurazione relativa al cluster stesso
            /// Questa API viene richiesta da antdui
            /// Per ogni nodo configurato (escludendo se stesso -> vedi uid) invia la conf
            /// </summary>
            Post["/apply"] = x => {
                //Inizio ad applicarla localmente
                cmds.Cluster.ApplyNetwork();
                cmds.Cluster.ApplyServices();
                cmds.Cluster.ApplyFs();
                ConsoleLogger.Log("[cluster] apply local configuration");
                return(HttpStatusCode.OK);
            };

            Post["/deploy"] = x => {
                //Poi aggiorno gli altri nodi
                var nodes           = Application.CurrentConfiguration.Cluster.Nodes;
                var configuration   = JsonConvert.SerializeObject(Application.CurrentConfiguration.Cluster);
                var localMachineUid = Application.CurrentConfiguration.Host.MachineUid.ToString();
                for (var i = 0; i < nodes.Length; i++)
                {
                    var node = nodes[i];
                    if (CommonString.AreEquals(localMachineUid, node.MachineUid))
                    {
                        continue;
                    }
                    ConsoleLogger.Log($"[cluster] deploy configuration on node: {node.Hostname}");
                    var dict = new Dictionary <string, string> {
                        { "Data", configuration }
                    };
                    ConsoleLogger.Log($"[cluster] {node.Hostname}: send configuration to node");
                    var status = ApiConsumer.Post(CommonString.Append(node.EntryPoint, "cluster/import"), dict);
                    if (status == HttpStatusCode.OK)
                    {
                        ConsoleLogger.Log($"[cluster] {node.Hostname}: send apply command to node");
                        ApiConsumer.Post(CommonString.Append(node.EntryPoint, "cluster/apply"));
                    }
                }
                return(HttpStatusCode.OK);
            };

            #region [    Handshake + cluster init    ]
            Post["/handshake/begin"] = x => {
                string conf       = Request.Form.Data;
                var    remoteNode = JsonConvert.DeserializeObject <NodeModel[]>(conf);
                if (remoteNode == null)
                {
                    return(HttpStatusCode.InternalServerError);
                }
                const string pathToPrivateKey = "/root/.ssh/id_rsa";
                const string pathToPublicKey  = "/root/.ssh/id_rsa.pub";
                if (!File.Exists(pathToPublicKey))
                {
                    var k = Bash.Execute($"ssh-keygen -t rsa -N '' -f {pathToPrivateKey}");
                    ConsoleLogger.Log(k);
                }
                var key = File.ReadAllText(pathToPublicKey);
                if (string.IsNullOrEmpty(key))
                {
                    return(HttpStatusCode.InternalServerError);
                }
                var dict = new Dictionary <string, string> {
                    { "ApplePie", key }
                };

                //1. controllo la configurazione
                var cluster = Application.CurrentConfiguration.Cluster;
                if (cluster == null)
                {
                    cluster       = new Cluster();
                    cluster.Label = CommonString.Append("AntdCluster-", cluster.Id.ToString().Substring(0, 8));
                }

                var nodes = cluster.Nodes.ToList();
                for (var i = 0; i < remoteNode.Length; i++)
                {
                    var handshakeResult = ApiConsumer.Post($"{remoteNode[i].ModelUrl}cluster/handshake", dict);
                    if (handshakeResult != HttpStatusCode.OK)
                    {
                        return(HttpStatusCode.InternalServerError);
                    }
                    //ottengo i servizi pubblicati da quel nodo
                    var publishedServices = ApiConsumer.Get <ClusterNodeService[]>($"{remoteNode[i].ModelUrl}device/services");
                    nodes.Add(new ClusterNode()
                    {
                        MachineUid = remoteNode[i].MachineUid,
                        Hostname   = remoteNode[i].Hostname,
                        PublicIp   = remoteNode[i].PublicIp,
                        EntryPoint = remoteNode[i].ModelUrl,
                        Services   = publishedServices
                    });
                }
                //ho fatto gli handshake, quindi il nodo richiesto è pronto per essere integrato nel cluster

                cluster.Active = true;
                if (cluster.Id == Guid.Empty)
                {
                    cluster.Id = Guid.NewGuid();
                }
                cluster.Nodes = nodes.ToArray();

                cluster.SharedNetwork.Active = false;
                var virtualPorts = cluster.SharedNetwork.PortMapping.ToList();
                foreach (var node in nodes)
                {
                    foreach (var svc in node.Services)
                    {
                        var checkPort = virtualPorts.FirstOrDefault(_ => _.ServicePort == svc.Port.ToString());
                        if (checkPort == null)
                        {
                            virtualPorts.Add(new PortMapping()
                            {
                                ServiceName = svc.Name,
                                ServicePort = svc.Port.ToString(),
                                VirtualPort = string.Empty
                            });
                        }
                    }
                }
                cluster.SharedNetwork.PortMapping = virtualPorts.ToArray();

                Application.CurrentConfiguration.Cluster = cluster;
                ConfigRepo.Save();
                return(HttpStatusCode.OK);
            };

            Post["/handshake"] = x => {
                string apple = Request.Form.ApplePie;
                var    info  = apple.Split(new[] { ' ' }, 2, StringSplitOptions.RemoveEmptyEntries);
                var    key   = info[0];
                var    keys  = Application.CurrentConfiguration.Services.Ssh.AuthorizedKey.ToList();
                if (!keys.Any(_ => _.Key == key))
                {
                    var userInfo = info[1].Split(new[] { '@' }, StringSplitOptions.RemoveEmptyEntries);
                    var model    = new AuthorizedKey {
                        User = userInfo[0],
                        Host = userInfo[1],
                        Key  = key
                    };
                    keys.Add(model);
                }
                Application.CurrentConfiguration.Services.Ssh.AuthorizedKey = keys.ToArray();
                ConfigRepo.Save();
                Directory.CreateDirectory("/root/.ssh");
                const string authorizedKeysPath = "/root/.ssh/authorized_keys";
                if (File.Exists(authorizedKeysPath))
                {
                    var f = File.ReadAllText(authorizedKeysPath);
                    if (!f.Contains(apple))
                    {
                        File.AppendAllLines(authorizedKeysPath, new List <string> {
                            apple
                        });
                    }
                }
                else
                {
                    File.WriteAllLines(authorizedKeysPath, new List <string> {
                        apple
                    });
                }
                return(HttpStatusCode.OK);
            };

            //Post["/asset/wol"] = x => {
            //    string mac = Request.Form.MacAddress;
            //    CommandLauncher.Launch("wol", new Dictionary<string, string> { { "$mac", mac } });
            //    return HttpStatusCode.OK;
            //};

            //Get["/asset/nmasp/{ip}"] = x => {
            //    string ip = x.ip;
            //    var result = CommandLauncher.Launch("nmap-ip-fast", new Dictionary<string, string> { { "$ip", ip } }).Where(_ => !_.Contains("MAC Address")).Skip(5).Reverse().Skip(1).Reverse();
            //    var list = new List<NmapScanStatus>();
            //    foreach(var r in result) {
            //        var a = r.SplitToList(" ").ToArray();
            //        var mo = new NmapScanStatus {
            //            Protocol = a[0],
            //            Status = a[1],
            //            Type = a[2]
            //        };
            //        list.Add(mo);
            //    }
            //    list = list.OrderBy(_ => _.Protocol).ToList();
            //    return JsonConvert.SerializeObject(list);
            //};
            #endregion
        }
Ejemplo n.º 15
0
        private string GetValueFromHeader(RequestHeaders headers, string key)
        {
            var headerKVP = headers.FirstOrDefault(_ => CommonString.AreEquals(_.Key, key));

            return(headerKVP.Value.FirstOrDefault());
        }
Ejemplo n.º 16
0
        public static bool SetInterface(NetInterface netInterface, NetInterface running)
        {
            var name = netInterface.Id;

            if (netInterface.Active == false)
            {
                ConsoleLogger.Log($"[network] disabling '{name}'");
                Ip.DisableNetworkAdapter(name);
                return(true);
            }
            else
            {
                ConsoleLogger.Log($"[network] enabling '{name}'");
                Ip.EnableNetworkAdapter(name);
            }
            if (CommonString.AreEquals(netInterface.ToString(), running.ToString()) == false)
            {
                if (CommonString.AreEquals(netInterface.HardwareConfiguration.ToString(), running.HardwareConfiguration.ToString()) == false)
                {
                    Ip.SetNetworkAdapterMTU(name, netInterface.HardwareConfiguration.Mtu.ToString());
                    ConsoleLogger.Log($"[network] set '{name}' mtu to {netInterface.HardwareConfiguration.Mtu}");
                    Ip.SetNetworkAdapterTxqueuelen(name, netInterface.HardwareConfiguration.Txqueuelen.ToString());
                    ConsoleLogger.Log($"[network] set '{name}' txqueuelen to {netInterface.HardwareConfiguration.Txqueuelen}");
                }
                if (CommonString.AreEquals(netInterface.PrimaryAddressConfiguration.ToString(), running.PrimaryAddressConfiguration.ToString()) == false)
                {
                    if (!string.IsNullOrEmpty(netInterface.PrimaryAddressConfiguration.IpAddr))
                    {
                        if (netInterface.PrimaryAddressConfiguration.StaticAddress)
                        {
                            Ip.AddAddress(name, netInterface.PrimaryAddressConfiguration.IpAddr, netInterface.PrimaryAddressConfiguration.NetworkRange.ToString());
                            ConsoleLogger.Log($"[network] set '{name}' address to {netInterface.PrimaryAddressConfiguration.IpAddr}/{netInterface.PrimaryAddressConfiguration.NetworkRange}");
                        }
                        else
                        {
                            Dhclient.Start(name);
                            ConsoleLogger.Log($"[network] dinamically set '{name}' address");
                        }
                    }
                }

                var currentSecondaryAddressConfiguration = netInterface.SecondaryAddressConfigurations;
                if (currentSecondaryAddressConfiguration.Length < 1)
                {
                    return(true);
                }
                var runningSecondaryAddressConfiguration = running.SecondaryAddressConfigurations;
                // quelli unici di currentSecondaryAddressConfiguration sono da applicare
                var add = currentSecondaryAddressConfiguration.Except(runningSecondaryAddressConfiguration).ToArray();
                for (var s = 0; s < add.Length; s++)
                {
                    if (!string.IsNullOrEmpty(add[s].IpAddr))
                    {
                        Ip.AddAddress(name, add[s].IpAddr, add[s].NetworkRange.ToString());
                        ConsoleLogger.Log($"[network] set '{name}' secondary address to {add[s].IpAddr}/{add[s].NetworkRange}");
                    }
                }
                // quelli unici di runningSecondaryAddressConfiguration sono da togliere
                var del = runningSecondaryAddressConfiguration.Except(currentSecondaryAddressConfiguration).ToArray();
                for (var s = 0; s < del.Length; s++)
                {
                    if (!string.IsNullOrEmpty(del[s].IpAddr))
                    {
                        Ip.DeleteAddress(name, del[s].IpAddr, del[s].NetworkRange.ToString());
                    }
                }
            }
            return(true);
        }
Ejemplo n.º 17
0
            public static bool Set()
            {
                var current = Application.CurrentConfiguration.NsSwitch;
                var running = Application.RunningConfiguration.NsSwitch.ToString();

                if (CommonString.AreEquals(current.ToString(), running))
                {
                    return(true);
                }
                var lines = new List <string>();

                if (!string.IsNullOrEmpty(current.Aliases))
                {
                    lines.Add(CommonString.Append("aliases ", current.Aliases));
                }
                if (!string.IsNullOrEmpty(current.Ethers))
                {
                    lines.Add(CommonString.Append("ethers ", current.Ethers));
                }
                if (!string.IsNullOrEmpty(current.Group))
                {
                    lines.Add(CommonString.Append("group ", current.Group));
                }
                if (!string.IsNullOrEmpty(current.Hosts))
                {
                    lines.Add(CommonString.Append("hosts ", current.Hosts));
                }
                if (!string.IsNullOrEmpty(current.Initgroups))
                {
                    lines.Add(CommonString.Append("initgroups ", current.Initgroups));
                }
                if (!string.IsNullOrEmpty(current.Netgroup))
                {
                    lines.Add(CommonString.Append("netgroup ", current.Netgroup));
                }
                if (!string.IsNullOrEmpty(current.Networks))
                {
                    lines.Add(CommonString.Append("networks ", current.Networks));
                }
                if (!string.IsNullOrEmpty(current.Passwd))
                {
                    lines.Add(CommonString.Append("passwd ", current.Passwd));
                }
                if (!string.IsNullOrEmpty(current.Protocols))
                {
                    lines.Add(CommonString.Append("protocols ", current.Protocols));
                }
                if (!string.IsNullOrEmpty(current.Publickey))
                {
                    lines.Add(CommonString.Append("publickey ", current.Publickey));
                }
                if (!string.IsNullOrEmpty(current.Rpc))
                {
                    lines.Add(CommonString.Append("rpc ", current.Rpc));
                }
                if (!string.IsNullOrEmpty(current.Services))
                {
                    lines.Add(CommonString.Append("services ", current.Services));
                }
                if (!string.IsNullOrEmpty(current.Shadow))
                {
                    lines.Add(CommonString.Append("shadow ", current.Services));
                }
                if (!string.IsNullOrEmpty(current.Netmasks))
                {
                    lines.Add(CommonString.Append("netmasks ", current.Netmasks));
                }
                if (!string.IsNullOrEmpty(current.Bootparams))
                {
                    lines.Add(CommonString.Append("bootparams ", current.Bootparams));
                }
                if (!string.IsNullOrEmpty(current.Automount))
                {
                    lines.Add(CommonString.Append("automount ", current.Automount));
                }

                if (File.Exists(nsswitchFile))
                {
                    File.Copy(nsswitchFile, nsswitchFileBackup, true);
                }
                File.WriteAllLines(nsswitchFile, lines);
                return(true);
            }