Exemple #1
0
        public RESTStatus GetEarlyUpdateVersion(SQLLib sql, object dummy, NetworkConnectionInfo ni)
        {
            if (CurrentEarlyVersion == null)
            {
                return(RESTStatus.NotFound);
            }

            EarlyVersion      = new NetInt64();
            EarlyVersion.Data = CurrentEarlyVersion.Value;

            return(RESTStatus.Success);
        }
Exemple #2
0
        public RESTStatus PutTaskAside(SQLLib sql, NetInt64 id, NetworkConnectionInfo ni)
        {
            if (ni.HasAcl(ACLFlags.ComputerLogin) == false)
            {
                ni.Error   = "Access denied";
                ni.ErrorID = ErrorFlags.AccessDenied;
                return(RESTStatus.Denied);
            }

            if (STaskExsits(sql, id.Data, ni.Username) == false)
            {
                ni.Error   = "Invalid ID";
                ni.ErrorID = ErrorFlags.InvalidData;
                return(RESTStatus.NotFound);
            }

            object res = sql.ExecSQLScalar(@"DECLARE @tabl table(ID bigint); 
                insert into SimpleTasks (MachineID,Type,Name,Data) OUTPUT Inserted.ID INTO @tabl 
                Select MachineID,Type,Name,Data from SimpleTasks WHERE ID=@id
                DELETE FROM SimpleTasks where ID=@id
                SELECT * FROM @tabl",
                                           new SQLParam("@id", id.Data));

            if (res == null || res is DBNull)
            {
                ni.Error   = "SQL error";
                ni.ErrorID = ErrorFlags.SQLError;
                return(RESTStatus.NotFound);
            }

            NewTaskID = new NetInt64();
            try
            {
                NewTaskID.Data = Convert.ToInt64(res);
            }
            catch
            {
                ni.Error   = "other SQL error";
                ni.ErrorID = ErrorFlags.SQLError;
                return(RESTStatus.NotFound);
            }

            return(RESTStatus.Success);
        }
        public RESTStatus ConnectWSServerMappingPort(SQLLib sql, NetInt64 ID, NetworkConnectionInfo ni)
        {
            if (ni.HasAcl(ACLFlags.ComputerLogin) == false)
            {
                ni.Error   = "Access denied";
                ni.ErrorID = ErrorFlags.AccessDenied;
                return(RESTStatus.Denied);
            }

            List <PolicyObject> pols        = Policies.GetPolicyForComputerInternal(sql, ni.Username);
            PolicyObject        FoundPolicy = null;

            foreach (PolicyObject p in pols)
            {
                if (p.ID == ID.Data && p.Type == PolicyIDs.PortMapping)
                {
                    FoundPolicy = p;
                    break;
                }
            }

            if (FoundPolicy == null)
            {
                ni.Error   = "Not found";
                ni.ErrorID = ErrorFlags.NotAccepted;
                return(RESTStatus.Denied);
            }

            PortMappingPolicy pmp = JsonConvert.DeserializeObject <PortMappingPolicy>(Policies.GetPolicy(sql, FoundPolicy.ID).Data);

            IPAddress   ip;
            IPHostEntry ipaddr;

            if (IPAddress.TryParse(pmp.ServerServer, out ip) == false)
            {
                ipaddr = Dns.GetHostEntry(pmp.ServerServer);
            }
            else
            {
                ipaddr             = new IPHostEntry();
                ipaddr.AddressList = new IPAddress[] { ip };
            }

            if (ipaddr == null)
            {
                ni.Error   = "Cannot resolve";
                ni.ErrorID = ErrorFlags.NoData;
                return(RESTStatus.Fail);
            }
            if (ipaddr.AddressList.Length == 0)
            {
                ni.Error   = "Resolve - no data";
                ni.ErrorID = ErrorFlags.NoData;
                return(RESTStatus.Fail);
            }

            Socket socket;

            try
            {
                socket = new Socket(ipaddr.AddressList[0].AddressFamily, SocketType.Stream, ProtocolType.Tcp);
                socket.Connect(ipaddr.AddressList[0], pmp.ServerPort);
            }
            catch (Exception ee)
            {
                Debug.WriteLine("Cannot connect " + ee.ToString());
                ni.Error   = "Resolve - no data";
                ni.ErrorID = ErrorFlags.NoData;
                return(RESTStatus.Fail);
            }

            string SessionID = "";

            RemoteNetworkConnectionWSCrosser.CreateCustomAgentConnection <WS_ServerPortMappingConnection>(ni.Username, ref SessionID, i => i.InitThis(ref SessionID, socket));

            Res = new PushConnectNetworkResult();
            Res.ConnectedGUID = SessionID;
            Res.Result        = 0;
            return(RESTStatus.Success);
        }
Exemple #4
0
        public RESTStatus CreatePolicy(SQLLib sql, NewPolicyReq request, NetworkConnectionInfo ni)
        {
            if (ni.HasAcl(ACLFlags.ChangeServerSettings) == false)
            {
                ni.Error   = "Access denied";
                ni.ErrorID = ErrorFlags.AccessDenied;
                return(RESTStatus.Denied);
            }

            if (request.Name == null || request.Name.Trim() == "")
            {
                ni.Error   = "Invalid name";
                ni.ErrorID = ErrorFlags.InvalidData;
                return(RESTStatus.Fail);
            }

            request.Name = request.Name.Trim();

            if (request.Grouping != null && request.MachineID != null)
            {
                ni.Error   = "Either Grouping OR MachineID should be set";
                ni.ErrorID = ErrorFlags.InvalidData;
                return(RESTStatus.Fail);
            }

            if (request.Grouping != null)
            {
                lock (ni.sqllock)
                {
                    if (Groups.GroupExsits(sql, request.Grouping.Value) == false)
                    {
                        ni.Error   = "Group does not exists";
                        ni.ErrorID = ErrorFlags.InvalidData;
                        return(RESTStatus.Fail);
                    }
                }
            }

            if (request.MachineID != null)
            {
                lock (ni.sqllock)
                {
                    if (Computers.MachineExists(sql, request.MachineID) == false)
                    {
                        ni.Error   = "MachineID does not exists";
                        ni.ErrorID = ErrorFlags.InvalidData;
                        return(RESTStatus.Fail);
                    }
                }
            }

            try
            {
                JsonConvert.DeserializeObject(request.Data);
            }
            catch
            {
                ni.Error   = "JSON error";
                ni.ErrorID = ErrorFlags.InvalidData;
                return(RESTStatus.Fail);
            }

            NewPolicyID = new NetInt64();
            Int64?res;

            lock (ni.sqllock)
            {
                res = sql.InsertMultiDataID("Policies",
                                            new SQLData("Type", request.Type),
                                            new SQLData("Name", request.Name),
                                            new SQLData("Grouping", request.Grouping),
                                            new SQLData("MachineID", request.MachineID),
                                            new SQLData("DataBlob", request.Data),
                                            new SQLData("DT", DateTime.Now),
                                            new SQLData("Version", 1),
                                            new SQLData("Enabled", 0));
            }
            if (res == null)
            {
                ni.Error   = "SQL Error";
                ni.ErrorID = ErrorFlags.SQLError;
                return(RESTStatus.ServerError);
            }
            NewPolicyID.Data = res.Value;

            return(RESTStatus.Created);
        }
Exemple #5
0
        public RESTStatus CreateGroup(SQLLib sql, CreateGroup GroupName, NetworkConnectionInfo ni)
        {
            if (ni.HasAcl(ACLFlags.ChangeServerSettings) == false)
            {
                ni.Error   = "Access denied";
                ni.ErrorID = ErrorFlags.AccessDenied;
                return(RESTStatus.Denied);
            }

            if (GroupName.Name == null)
            {
                ni.Error   = "Invalid data";
                ni.ErrorID = ErrorFlags.InvalidData;
                return(RESTStatus.Fail);
            }

            if (GroupName.Name.Trim() == "")
            {
                ni.Error   = "Invalid data";
                ni.ErrorID = ErrorFlags.InvalidData;
                return(RESTStatus.Fail);
            }

            if (GroupName.ToParent != null)
            {
                lock (ni.sqllock)
                {
                    if (Convert.ToInt32(sql.ExecSQLScalar("SELECT COUNT(*) FROM Grouping WHERE ID=@id",
                                                          new SQLParam("@id", GroupName.ToParent))) == 0)
                    {
                        ni.Error   = "Group does not exist";
                        ni.ErrorID = ErrorFlags.InvalidData;
                        return(RESTStatus.Fail);
                    }
                }
            }

            lock (ni.sqllock)
            {
                if (Convert.ToInt32(sql.ExecSQLScalar("SELECT COUNT(*) FROM Grouping WHERE ParentID=@pid AND Name=@n",
                                                      new SQLParam("@pid", GroupName.ToParent),
                                                      new SQLParam("@n", GroupName.Name.Trim()))) > 0)
                {
                    ni.Error   = "Duplicate name";
                    ni.ErrorID = ErrorFlags.DuplicateElement;
                    return(RESTStatus.Fail);
                }
            }

            NewGroupID = new NetInt64();

            Int64?nid = null;

            lock (ni.sqllock)
            {
                nid = sql.InsertMultiDataID("Grouping",
                                            new SQLData("Name", GroupName.Name.Trim()),
                                            new SQLData("ParentID", GroupName.ToParent));
            }

            if (nid == null)
            {
                ni.Error   = "SQL Error";
                ni.ErrorID = ErrorFlags.SQLError;
                return(RESTStatus.ServerError);
            }
            NewGroupID.Data = nid.Value;

            return(RESTStatus.Success);
        }
Exemple #6
0
        public RESTStatus SetSTasks(SQLLib sql, SimpleTask NewTask, NetworkConnectionInfo ni)
        {
            if (ni.HasAcl(ACLFlags.ChangeServerSettings) == false)
            {
                ni.Error   = "Access denied";
                ni.ErrorID = ErrorFlags.AccessDenied;
                return(RESTStatus.Denied);
            }

            if (NewTask == null)
            {
                ni.Error   = "Invalid data";
                ni.ErrorID = ErrorFlags.InvalidData;
                return(RESTStatus.NotFound);
            }

            if (string.IsNullOrWhiteSpace(NewTask.Name) == true || string.IsNullOrWhiteSpace(NewTask.Data) == true || NewTask.Type < 1)
            {
                ni.Error   = "Invalid data";
                ni.ErrorID = ErrorFlags.InvalidData;
                return(RESTStatus.NotFound);
            }

            if (NewTask.ExecAfter != null)
            {
                if (NewTask.ExecAfter.Value.Year < 2010)
                {
                    ni.Error   = "ExecAfter is invalid";
                    ni.ErrorID = ErrorFlags.InvalidData;
                    return(RESTStatus.NotFound);
                }
            }

            lock (ni.sqllock)
            {
                if (Computers.MachineExists(sql, NewTask.MachineID) == false)
                {
                    ni.Error   = "Invalid data";
                    ni.ErrorID = ErrorFlags.InvalidData;
                    return(RESTStatus.NotFound);
                }

                Int64?ID = sql.InsertMultiDataID("SimpleTasks",
                                                 new SQLData("MachineID", NewTask.MachineID),
                                                 new SQLData("Type", NewTask.Type),
                                                 new SQLData("Name", NewTask.Name),
                                                 new SQLData("ExecAfter", NewTask.ExecAfter),
                                                 new SQLData("Data", NewTask.Data));

                if (ID == null)
                {
                    ni.Error   = "Server error";
                    ni.ErrorID = ErrorFlags.SQLError;
                    return(RESTStatus.ServerError);
                }

                NewTaskID      = new NetInt64();
                NewTaskID.Data = ID.Value;
            }

            return(RESTStatus.Success);
        }
Exemple #7
0
        public RESTStatus NewUploadReqAgentToServer(SQLLib sql, FileUploadData uploadreq, NetworkConnectionInfo ni)
        {
            if (ni.HasAcl(ACLFlags.ChangeServerSettings) == false)
            {
                ni.Error   = "Access denied";
                ni.ErrorID = ErrorFlags.AccessDenied;
                return(RESTStatus.Denied);
            }

            if (uploadreq == null)
            {
                ni.Error   = "Invalid data";
                ni.ErrorID = ErrorFlags.InvalidValue;
                return(RESTStatus.Fail);
            }

            lock (ni.sqllock)
            {
                if (Computers.MachineExists(sql, uploadreq.MachineID) == false)
                {
                    ni.Error   = "Invalid data";
                    ni.ErrorID = ErrorFlags.InvalidValue;
                    return(RESTStatus.Fail);
                }
            }

            if (string.IsNullOrEmpty(uploadreq.RemoteFileLocation) == true)
            {
                ni.Error   = "No Filename";
                ni.ErrorID = ErrorFlags.InvalidValue;
                return(RESTStatus.Fail);
            }

            NewID = new NetInt64();

            Int64?id = null;

            lock (ni.sqllock)
            {
                id = sql.InsertMultiDataID("FileTransfers",
                                           new SQLData("MachineID", uploadreq.MachineID),
                                           new SQLData("RemoteFileLocation", uploadreq.RemoteFileLocation),
                                           new SQLData("ServerFile", ""),
                                           new SQLData("Direction", 1),
                                           new SQLData("MD5Sum", ""),
                                           new SQLData("Size", 0),
                                           new SQLData("ProgressSize", 0),
                                           new SQLData("DTUpdated", DateTime.UtcNow),
                                           new SQLData("RequestOnly", 1),
                                           new SQLData("OverrideMeteredConnection", uploadreq.OverrideMeteredConnection),
                                           new SQLData("FileLastModified", DateTime.UtcNow));
            }
            if (id == null)
            {
                ni.Error   = "DB error";
                ni.ErrorID = ErrorFlags.SystemError;
                return(RESTStatus.Fail);
            }

            NewID.Data = id.Value;

            return(RESTStatus.Success);
        }
Exemple #8
0
        public RESTStatus NewUploadAgentToServer(SQLLib sql, FileUploadData uploadreq, NetworkConnectionInfo ni)
        {
            if (ni.HasAcl(ACLFlags.ComputerLogin) == false)
            {
                ni.Error   = "Access denied";
                ni.ErrorID = ErrorFlags.AccessDenied;
                return(RESTStatus.Denied);
            }

            if (uploadreq == null)
            {
                ni.Error   = "Invalid data";
                ni.ErrorID = ErrorFlags.InvalidValue;
                return(RESTStatus.Fail);
            }

            uploadreq.MachineID    = ni.Username;
            uploadreq.ProgressSize = 0;
            if (uploadreq.Size <= 0)
            {
                ni.Error   = "Wrong SZ";
                ni.ErrorID = ErrorFlags.InvalidValue;
                return(RESTStatus.Fail);
            }

            if (string.IsNullOrEmpty(uploadreq.MD5CheckSum) == true)
            {
                ni.Error   = "No MD5";
                ni.ErrorID = ErrorFlags.InvalidValue;
                return(RESTStatus.Fail);
            }

            if (string.IsNullOrEmpty(uploadreq.RemoteFileLocation) == true)
            {
                ni.Error   = "No Filename";
                ni.ErrorID = ErrorFlags.InvalidValue;
                return(RESTStatus.Fail);
            }

            NewID = new NetInt64();

            string GUID           = Guid.NewGuid().ToString();
            string ServerFilename = "FILE_" + GUID + ".dat";

            Int64?id = null;

            lock (ni.sqllock)
            {
                id = sql.InsertMultiDataID("FileTransfers",
                                           new SQLData("MachineID", uploadreq.MachineID),
                                           new SQLData("RemoteFileLocation", uploadreq.RemoteFileLocation),
                                           new SQLData("ServerFile", ServerFilename),
                                           new SQLData("Direction", 1),
                                           new SQLData("MD5Sum", uploadreq.MD5CheckSum),
                                           new SQLData("Size", uploadreq.Size),
                                           new SQLData("ProgressSize", 0),
                                           new SQLData("DTUpdated", DateTime.UtcNow),
                                           new SQLData("RequestOnly", 0),
                                           new SQLData("OverrideMeteredConnection", uploadreq.OverrideMeteredConnection),
                                           new SQLData("FileLastModified", uploadreq.FileLastModified));
            }

            if (id == null)
            {
                ni.Error   = "DB error";
                ni.ErrorID = ErrorFlags.SystemError;
                return(RESTStatus.Fail);
            }

            NewID.Data = id.Value;

            return(RESTStatus.Success);
        }
Exemple #9
0
        static void ReadVersions()
        {
            string AppPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

            if (AppPath.EndsWith("\\") == false)
            {
                AppPath += "\\";
            }
            AppPath += "Packages\\";

            string NormalUpdate = AppPath + "SDCA.foxpkg";
            string EarlyUpdate  = AppPath + "SDCA-Early.foxpkg";

            string Error;

            if (File.Exists(NormalUpdate) == false)
            {
                FoxEventLog.WriteEventLog("No client updates will be provided. The file " + NormalUpdate + " is missing.",
                                          System.Diagnostics.EventLogEntryType.Error);
                CurrentVersion = CurrentEarlyVersion = null;
                return;
            }

            PackageInstaller pkg = new PackageInstaller();
            PKGStatus        status;
            PKGRecieptData   receipt;

            Int64?NormalVersion = null;
            Int64?EarlyVersion  = null;

            try
            {
                if (pkg.InstallPackage(NormalUpdate, null, PackageInstaller.InstallMode.TestPackageOnly, false, out Error, out status, out receipt) == false)
                {
                    FoxEventLog.WriteEventLog("No client updates will be provided. The file " + NormalUpdate + " is invalid / invalid signatures.",
                                              System.Diagnostics.EventLogEntryType.Error);
                    CurrentVersion = CurrentEarlyVersion = null;
                    return;
                }

                if (pkg.PackageInfo(NormalUpdate, null, out Error) == false)
                {
                    FoxEventLog.WriteEventLog("No client updates will be provided. The file " + NormalUpdate + " is invalid / invalid info.",
                                              System.Diagnostics.EventLogEntryType.Error);
                    CurrentVersion = CurrentEarlyVersion = null;
                    return;
                }

                if (pkg.PackageInfoData.PackageID != "Vulpes-SDCA1-Update")
                {
                    FoxEventLog.WriteEventLog("No client updates will be provided. The file " + NormalUpdate + " is has an invalid identifier.",
                                              System.Diagnostics.EventLogEntryType.Error);
                    CurrentVersion = CurrentEarlyVersion = null;
                    return;
                }
            }
            catch
            {
                NormalVersion       = null;
                EarlyVersion        = null;
                CurrentVersion      = NormalVersion;
                CurrentEarlyVersion = EarlyVersion;
                FoxEventLog.WriteEventLog("Update packages contains errors. No updates will be provided.", System.Diagnostics.EventLogEntryType.Error);
                return;
            }

            NormalVersion = pkg.PackageInfoData.VersionID;

            if (File.Exists(EarlyUpdate) == true)
            {
                if (pkg.InstallPackage(EarlyUpdate, null, PackageInstaller.InstallMode.TestPackageOnly, false, out Error, out status, out receipt) == true)
                {
                    if (pkg.PackageInfo(EarlyUpdate, null, out Error) == true)
                    {
                        if (pkg.PackageInfoData.PackageID == "Vulpes-SDCA1-Update")
                        {
                            EarlyVersion = pkg.PackageInfoData.VersionID;

                            if (EarlyVersion < NormalVersion)
                            {
                                FoxEventLog.WriteEventLog("The version ID of the file " + EarlyUpdate + " is older than the normal version - not deploying.",
                                                          System.Diagnostics.EventLogEntryType.Warning);
                                EarlyVersion = null;
                            }
                            else
                            {
                                FoxEventLog.WriteEventLog("The file " + EarlyUpdate + " will be deployed along with the normal updates.",
                                                          System.Diagnostics.EventLogEntryType.Information);
                            }
                        }
                    }
                }
            }

            CurrentVersion      = NormalVersion;
            CurrentEarlyVersion = EarlyVersion;

            FoxEventLog.WriteEventLog("The Agent update system is working normally.\r\nVersion: " + CurrentVersion.ToString() + "\r\nEarly Version: " + CurrentEarlyVersion.ToString(), System.Diagnostics.EventLogEntryType.Information);
        }