Ejemplo n.º 1
0
        public static string DeleteAccounts(string sDeleteArray)
        {
            dataAccess dc = new dataAccess();

            acUI.acUI ui   = new acUI.acUI();
            string    sSql = null;
            string    sErr = "";

            if (sDeleteArray.Length < 36)
            {
                return("");
            }

            sDeleteArray = ui.QuoteUp(sDeleteArray);

            DataTable dt = new DataTable();

            // get a list of ids that will be deleted for the log
            sSql = "select account_id, account_name, provider, login_id from cloud_account where account_id in (" + sDeleteArray + ")";
            if (!dc.sqlGetDataTable(ref dt, sSql, ref sErr))
            {
                throw new Exception(sErr);
            }

            try
            {
                dataAccess.acTransaction oTrans = new dataAccess.acTransaction(ref sErr);

                sSql = "delete from cloud_account where account_id in (" + sDeleteArray + ")";
                oTrans.Command.CommandText = sSql;
                if (!oTrans.ExecUpdate(ref sErr))
                {
                    throw new Exception(sErr);
                }

                //refresh the cloud account list in the session
                if (!ui.PutCloudAccountsInSession(ref sErr))
                {
                    throw new Exception(sErr);
                }

                oTrans.Commit();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            // if we made it here, so save the logs
            foreach (DataRow dr in dt.Rows)
            {
                ui.WriteObjectDeleteLog(Globals.acObjectTypes.CloudAccount, dr["account_id"].ToString(), dr["account_name"].ToString(), dr["provider"].ToString() + " Account for LoginID [" + dr["login_id"].ToString() + "] Deleted");
            }

            return(sErr);
        }
Ejemplo n.º 2
0
        public static string DeleteCredentials(string sDeleteArray)
        {
            dataAccess dc = new dataAccess();

            acUI.acUI ui   = new acUI.acUI();
            string    sSql = null;
            string    sErr = "";

            if (sDeleteArray.Length < 36)
            {
                return("");
            }

            sDeleteArray = ui.QuoteUp(sDeleteArray);

            DataTable dt = new DataTable();

            // get a list of credential_ids that will be deleted for the log
            sSql = "select credential_name,credential_id from asset_credential where credential_id in (" + sDeleteArray.ToString() + ") " +
                   "and credential_id not in (select distinct credential_id from asset where credential_id is not null)";
            if (!dc.sqlGetDataTable(ref dt, sSql, ref sErr))
            {
                throw new Exception(sErr);
            }


            try
            {
                dataAccess.acTransaction oTrans = new dataAccess.acTransaction(ref sErr);

                //delete asset_credential
                sSql = "delete from asset_credential where credential_id in (" + sDeleteArray.ToString() + ") " +
                       "and credential_id not in (select distinct credential_id from asset where credential_id is not null)";
                oTrans.Command.CommandText = sSql;
                if (!oTrans.ExecUpdate(ref sErr))
                {
                    throw new Exception(sErr);
                }

                oTrans.Commit();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            // if we made it here, so save the logs
            foreach (DataRow dr in dt.Rows)
            {
                ui.WriteObjectDeleteLog(Globals.acObjectTypes.Credential, dr["credential_id"].ToString(), dr["credential_name"].ToString(), "Credential Deleted");
            }


            return(sErr);
        }
Ejemplo n.º 3
0
        public static string DeleteClouds(string sDeleteArray)
        {
            dataAccess dc = new dataAccess();
            acUI.acUI ui = new acUI.acUI();
            string sSql = null;
            string sErr = "";

            if (sDeleteArray.Length < 36)
                return "";

            sDeleteArray = ui.QuoteUp(sDeleteArray);

            DataTable dt = new DataTable();
            // get a list of ids that will be deleted for the log
            sSql = "select cloud_id, cloud_name, provider from clouds where cloud_id in (" + sDeleteArray + ")";
            if (!dc.sqlGetDataTable(ref dt, sSql, ref sErr))
                throw new Exception(sErr);

            try
            {
                dataAccess.acTransaction oTrans = new dataAccess.acTransaction(ref sErr);

                sSql = "delete from clouds where cloud_id in (" + sDeleteArray + ")";
                oTrans.Command.CommandText = sSql;
                if (!oTrans.ExecUpdate(ref sErr))
                    throw new Exception(sErr);

                //refresh the cloud account list in the session
                if (!ui.PutCloudAccountsInSession(ref sErr))
                    throw new Exception(sErr);

                oTrans.Commit();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            //reget the cloud providers class in the session
            ui.SetCloudProviders(ref sErr);
            if (!string.IsNullOrEmpty(sErr))
                throw new Exception("Error: Unable to load Cloud Providers XML." + sErr);

            // if we made it here, so save the logs
            foreach (DataRow dr in dt.Rows)
            {
                ui.WriteObjectDeleteLog(Globals.acObjectTypes.Cloud, dr["cloud_id"].ToString(), dr["cloud_name"].ToString(), dr["provider"].ToString() + " Cloud Deleted.");
            }

            return sErr;
        }
Ejemplo n.º 4
0
        public static string DeleteCredentials(string sDeleteArray)
        {
            dataAccess dc = new dataAccess();
            acUI.acUI ui = new acUI.acUI();
            string sSql = null;
            string sErr = "";

            if (sDeleteArray.Length < 36)
                return "";

            sDeleteArray = ui.QuoteUp(sDeleteArray);

            DataTable dt = new DataTable();
            // get a list of credential_ids that will be deleted for the log
            sSql = "select credential_name,credential_id from asset_credential where credential_id in (" + sDeleteArray.ToString() + ") " +
                    "and credential_id not in (select distinct credential_id from asset where credential_id is not null)";
            if (!dc.sqlGetDataTable(ref dt, sSql, ref sErr))
            {
                throw new Exception(sErr);
            }

            try
            {

                dataAccess.acTransaction oTrans = new dataAccess.acTransaction(ref sErr);

                //delete asset_credential
                sSql = "delete from asset_credential where credential_id in (" + sDeleteArray.ToString() + ") " +
                        "and credential_id not in (select distinct credential_id from asset where credential_id is not null)";
                oTrans.Command.CommandText = sSql;
                if (!oTrans.ExecUpdate(ref sErr))
                {
                    throw new Exception(sErr);
                }

                oTrans.Commit();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            // if we made it here, so save the logs
            foreach (DataRow dr in dt.Rows)
            {
                ui.WriteObjectDeleteLog(Globals.acObjectTypes.Credential, dr["credential_id"].ToString(), dr["credential_name"].ToString(), "Credential Deleted");
            }

            return sErr;
        }
Ejemplo n.º 5
0
        public static string DeleteAccounts(string sDeleteArray)
        {
            dataAccess dc = new dataAccess();
            acUI.acUI ui = new acUI.acUI();
            string sSql = null;
            string sErr = "";

            if (sDeleteArray.Length < 36)
                return "";

            sDeleteArray = ui.QuoteUp(sDeleteArray);

            DataTable dt = new DataTable();
            // get a list of ids that will be deleted for the log
            sSql = "select account_id, account_name, provider, login_id from cloud_account where account_id in (" + sDeleteArray + ")";
            if (!dc.sqlGetDataTable(ref dt, sSql, ref sErr))
                throw new Exception(sErr);

            try
            {

                dataAccess.acTransaction oTrans = new dataAccess.acTransaction(ref sErr);

                sSql = "delete from cloud_account where account_id in (" + sDeleteArray + ")";
                oTrans.Command.CommandText = sSql;
                if (!oTrans.ExecUpdate(ref sErr))
                    throw new Exception(sErr);

                //refresh the cloud account list in the session
                if (!ui.PutCloudAccountsInSession(ref sErr))
                    throw new Exception(sErr);

                oTrans.Commit();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            // if we made it here, so save the logs
            foreach (DataRow dr in dt.Rows)
            {
                ui.WriteObjectDeleteLog(Globals.acObjectTypes.CloudAccount, dr["account_id"].ToString(), dr["account_name"].ToString(), dr["provider"].ToString() + " Account for LoginID [" + dr["login_id"].ToString() + "] Deleted");
            }

            return sErr;
        }
Ejemplo n.º 6
0
        public static string DeleteDomains(string sDeleteArray)
        {
            acUI.acUI ui   = new acUI.acUI();
            string    sSql = null;
            string    sErr = "";

            if (sDeleteArray.Length < 36)
            {
                return("");
            }

            sDeleteArray = ui.QuoteUp(sDeleteArray);

            try
            {
                dataAccess.acTransaction oTrans = new dataAccess.acTransaction(ref sErr);

                //delete domains
                sSql = "delete from ldap_domain where ldap_domain in (" + sDeleteArray.ToString() + ")";
                oTrans.Command.CommandText = sSql;
                if (!oTrans.ExecUpdate(ref sErr))
                {
                    throw new Exception(sErr);
                }

                oTrans.Commit();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            // if we made it here, so save the logs
            ui.WriteObjectDeleteLog(Globals.acObjectTypes.Domain, sDeleteArray.ToString(), sDeleteArray.ToString(), "Domain(s) Deleted");

            return(sErr);
        }
Ejemplo n.º 7
0
        public static string DeleteDomains(string sDeleteArray)
        {
            acUI.acUI ui = new acUI.acUI();
            string sSql = null;
            string sErr = "";

            if (sDeleteArray.Length < 36)
                return "";

            sDeleteArray = ui.QuoteUp(sDeleteArray);

            try
            {

                dataAccess.acTransaction oTrans = new dataAccess.acTransaction(ref sErr);

                //delete domains
                sSql = "delete from ldap_domain where ldap_domain in (" + sDeleteArray.ToString() + ")";
                oTrans.Command.CommandText = sSql;
                if (!oTrans.ExecUpdate(ref sErr))
                {
                    throw new Exception(sErr);
                }

                oTrans.Commit();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            // if we made it here, so save the logs
            ui.WriteObjectDeleteLog(Globals.acObjectTypes.Domain, sDeleteArray.ToString(), sDeleteArray.ToString(), "Domain(s) Deleted");

            return sErr;
        }
Ejemplo n.º 8
0
        public static string SaveAsset(object[] oAsset)
        {
            // check the # of elements in the array
            if (oAsset.Length != 19)
            {
                return("Incorrect number of Asset Properties:" + oAsset.Length.ToString());
            }

            string sAssetID        = oAsset[0].ToString();
            string sAssetName      = oAsset[1].ToString().Replace("'", "''");
            string sDbName         = oAsset[2].ToString().Replace("'", "''");
            string sPort           = oAsset[3].ToString();
            string sConnectionType = oAsset[4].ToString();
            string sIsConnection   = "0"; // oAsset[5].ToString();

            string sAddress = oAsset[5].ToString().Replace("'", "''");
            // mode is edit or add
            string sMode            = oAsset[6].ToString();
            string sCredentialID    = oAsset[7].ToString();
            string sCredUsername    = oAsset[8].ToString().Replace("'", "''");
            string sCredPassword    = oAsset[9].ToString().Replace("'", "''");
            string sShared          = oAsset[10].ToString();
            string sCredentialName  = oAsset[11].ToString().Replace("'", "''");
            string sCredentialDescr = oAsset[12].ToString().Replace("'", "''");
            string sDomain          = oAsset[13].ToString().Replace("'", "''");
            string sCredentialType  = oAsset[14].ToString();

            string sAssetStatus        = oAsset[15].ToString();
            string sPrivilegedPassword = oAsset[16].ToString();
            string sTagArray           = oAsset[17].ToString();

            string sConnString = oAsset[18].ToString().Replace("'", "''");

            // for logging
            string sOriginalAssetName      = "";
            string sOriginalPort           = "";
            string sOriginalDbName         = "";
            string sOriginalAddress        = "";
            string sOriginalConnectionType = "";
            string sOriginalUserName       = "";
            string sOriginalConnString     = "";
            string sOriginalCredentialID   = "";
            string sOriginalAssetStatus    = "";

            dataAccess dc = new dataAccess();

            acUI.acUI ui   = new acUI.acUI();
            string    sSql = null;
            string    sErr = null;


            //if we are editing get the original values
            //this is getting original values for logging purposes
            if (sMode == "edit")
            {
                DataRow dr = null;
                sSql = "select a.asset_name, a.asset_status, a.port, a.db_name, a.address, a.db_name, a.connection_type, a.conn_string, ac.username, a.credential_id," +
                       " case when a.is_connection_system = '1' then 'Yes' else 'No' end as is_connection_system " +
                       " from asset a " +
                       " left outer join asset_credential ac on ac.credential_id = a.credential_id " +
                       " where a.asset_id = '" + sAssetID + "'";

                if (!dc.sqlGetDataRow(ref dr, sSql, ref sErr))
                {
                    throw new Exception(sErr);
                }
                else
                {
                    if (dr != null)
                    {
                        sOriginalAssetName      = dr["asset_name"].ToString();
                        sOriginalPort           = (object.ReferenceEquals(dr["port"], DBNull.Value) ? "" : dr["port"].ToString());
                        sOriginalDbName         = (object.ReferenceEquals(dr["db_name"], DBNull.Value) ? "" : dr["db_name"].ToString());
                        sOriginalAddress        = (object.ReferenceEquals(dr["address"], DBNull.Value) ? "" : dr["address"].ToString());
                        sOriginalConnectionType = (object.ReferenceEquals(dr["connection_type"], DBNull.Value) ? "" : dr["connection_type"].ToString());
                        sOriginalUserName       = (object.ReferenceEquals(dr["username"], DBNull.Value) ? "" : dr["username"].ToString());
                        sOriginalConnString     = (object.ReferenceEquals(dr["conn_string"], DBNull.Value) ? "" : dr["conn_string"].ToString());
                        sOriginalCredentialID   = (object.ReferenceEquals(dr["credential_id"], DBNull.Value) ? "" : dr["credential_id"].ToString());
                        sOriginalAssetStatus    = dr["asset_status"].ToString();
                    }
                }
            }

            //NOTE NOTE NOTE!
            //the following is a catch 22.
            //if we're adding a new asset, we will need to figure out the credential first so we can save the credential id on the asset
            //but if it's a new local credential, it gets the asset id as it's name.
            //so.........
            //if it's a new asset, go ahead and get the new guid for it here so the credential add will work.
            if (sMode == "add")
            {
                sAssetID = ui.NewGUID();
            }
            //and move on...



            // there are three CredentialType's
            // 1) 'selected' = user selected a different credential, just save the credential_id
            // 2) 'new' = user created a new shared or local credential
            // 3) 'existing' = same credential, just update the username,description ad password
            string sPriviledgedPasswordUpdate = null;

            if (sCredentialType == "new")
            {
                if (sPrivilegedPassword.Length == 0)
                {
                    sPriviledgedPasswordUpdate = "NULL";
                }
                else
                {
                    sPriviledgedPasswordUpdate = "'" + dc.EnCrypt(sPrivilegedPassword) + "'";
                }

                //if it's a local credential, the credential_name is the asset_id.
                //if it's shared, there will be a name.
                if (sShared == "1")
                {
                    sCredentialName = sAssetID;

                    //whack and add - easiest way to avoid conflicts
                    sSql = "delete from asset_credential where credential_name = '" + sCredentialName + "' and shared_or_local = '1'";
                    if (!dc.sqlExecuteUpdate(sSql, ref sErr))
                    {
                        throw new Exception(sErr);
                    }
                }

                //now we're clear to add
                sCredentialID = "'" + ui.NewGUID() + "'";
                sSql          = "insert into asset_credential " +
                                "(credential_id,credential_name,username,password,domain,shared_or_local,shared_cred_desc,privileged_password) " +
                                "values (" + sCredentialID + ",'" + sCredentialName + "','" + sCredUsername + "','" + dc.EnCrypt(sCredPassword) + "','" + sDomain + "','" + sShared + "','" + sCredentialDescr + "'," + sPriviledgedPasswordUpdate + ")";
                if (!dc.sqlExecuteUpdate(sSql, ref sErr))
                {
                    if (sErr == "key_violation")
                    {
                        throw new Exception("A Credential with that name already exists.  Please select another name.");
                    }
                    else
                    {
                        throw new Exception(sErr);
                    }
                }

                // add security log
                ui.WriteObjectAddLog(Globals.acObjectTypes.Credential, sCredentialID, sCredentialName, "");
            }
            else if (sCredentialType == "existing")
            {
                sCredentialID = "'" + sCredentialID + "'";
                // bugzilla 1126 if the password has not changed leave it as is.
                string sPasswordUpdate = null;
                if (sCredPassword == "($%#d@x!&")
                {
                    // password has not been touched
                    sPasswordUpdate = "";
                }
                else
                {
                    // updated password
                    sPasswordUpdate = ",password = '******'";
                }

                // bugzilla 1260
                // same for privileged_password

                if (sPrivilegedPassword == "($%#d@x!&")
                {
                    // password has not been touched
                    sPriviledgedPasswordUpdate = "";
                }
                else
                {
                    // updated password
                    // bugzilla 1352 priviledged password can be blank, so if it is, set it to null
                    if (sPrivilegedPassword.Length == 0)
                    {
                        sPriviledgedPasswordUpdate = ",privileged_password = null";
                    }
                    else
                    {
                        sPriviledgedPasswordUpdate = ",privileged_password = '******'";
                    }
                }

                sSql = "update asset_credential " +
                       "set username = '******'" + sPasswordUpdate + sPriviledgedPasswordUpdate + ",domain = '" + sDomain + "'," +
                       "shared_or_local = '" + sShared + "',shared_cred_desc = '" + sCredentialDescr + "'" +
                       "where credential_id = " + sCredentialID;
                if (!dc.sqlExecuteUpdate(sSql, ref sErr))
                {
                    throw new Exception(sErr);
                }

                // add security log
                ui.WriteObjectChangeLog(Globals.acObjectTypes.Asset, sAssetID, sAssetName.Trim().Replace("'", "''") + "Changed credential", sOriginalUserName, sCredUsername);
            }
            else
            {
                // user selected a shared credential
                // remove the local credential if one exists

                if (sOriginalCredentialID.Length > 0)
                {
                    sSql = "delete from asset_credential where credential_id = '" + sOriginalCredentialID + "' and shared_or_local = '1'";
                    if (!dc.sqlExecuteUpdate(sSql, ref sErr))
                    {
                        throw new Exception(sErr);
                    }

                    // add security log
                    ui.WriteObjectDeleteLog(Globals.acObjectTypes.Asset, sAssetID, sAssetName.Trim().Replace("'", "''"), "Credential deleted" + sOriginalCredentialID + " " + sOriginalUserName);
                }


                sCredentialID = "'" + sCredentialID + "'";
            }


            // checks that cant be done on the client side
            // is the name unique?
            string sInuse = "";

            if (sMode == "edit")
            {
                sSql = "select asset_id from asset where asset_name = '" + sAssetName.Trim() + "' and asset_id <> '" + sAssetID + "' limit 1";
            }
            else
            {
                sSql = "select asset_id from asset where asset_name = '" + sAssetName.Trim() + "' limit 1";
            }

            if (!dc.sqlGetSingleString(ref sInuse, sSql, ref sErr))
            {
                throw new Exception(sErr);
            }
            else
            if (!string.IsNullOrEmpty(sInuse))
            {
                return("Asset Name '" + sAssetName + "' already in use, choose another." + sAssetID);
            }

            try
            {
                dataAccess.acTransaction oTrans = new dataAccess.acTransaction(ref sErr);

                if (sMode == "edit")
                {
                    sSql = "update asset set asset_name = '" + sAssetName + "'," +
                           " asset_status = '" + sAssetStatus + "'," +
                           " address = '" + sAddress + "'" + "," +
                           " conn_string = '" + sConnString + "'" + "," +
                           " db_name = '" + sDbName + "'," +
                           " port = " + (sPort == "" ? "NULL" : "'" + sPort + "'") + "," +
                           " connection_type = '" + sConnectionType + "'," +
                           " is_connection_system = '" + (sIsConnection == "Yes" ? 1 : 0) + "'," +
                           " credential_id = " + sCredentialID +
                           " where asset_id = '" + sAssetID + "'";

                    oTrans.Command.CommandText = sSql;
                    if (!oTrans.ExecUpdate(ref sErr))
                    {
                        throw new Exception(sErr);
                    }
                }
                else
                {
                    sSql = "insert into asset (asset_id,asset_name,asset_status,address,conn_string,db_name,port,connection_type,is_connection_system,credential_id)" +
                           " values (" +
                           "'" + sAssetID + "'," +
                           "'" + sAssetName + "'," +
                           "'" + sAssetStatus + "'," +
                           "'" + sAddress + "'," +
                           "'" + sConnString + "'," +
                           "'" + sDbName + "'," +
                           (sPort == "" ? "NULL" : "'" + sPort + "'") + "," +
                           "'" + sConnectionType + "'," +
                           "'0'," +
                           sCredentialID + ")";

                    oTrans.Command.CommandText = sSql;
                    if (!oTrans.ExecUpdate(ref sErr))
                    {
                        throw new Exception(sErr);
                    }
                }

                #region "tags"
                // remove the existing tags
                sSql = "delete from object_tags where object_id = '" + sAssetID + "'";
                oTrans.Command.CommandText = sSql;
                if (!oTrans.ExecUpdate(ref sErr))
                {
                    throw new Exception(sErr);
                }

                // add user groups, if there are any
                if (sTagArray.Length > 0)
                {
                    ArrayList aTags = new ArrayList(sTagArray.Split(','));
                    foreach (string sTagName in aTags)
                    {
                        sSql = "insert object_tags (object_id, object_type, tag_name)" +
                               " values ('" + sAssetID + "', 2, '" + sTagName + "')";
                        oTrans.Command.CommandText = sSql;
                        if (!oTrans.ExecUpdate(ref sErr))
                        {
                            throw new Exception(sErr);
                        }
                    }
                }
                #endregion

                oTrans.Commit();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }



            //--------------------------------------------------------------------------------------------------
            // NOTE! too many if edit... probably need to just make 2 functions, update asset, and create asset
            //--------------------------------------------------------------------------------------------------

            // add security log
            // since this is not handled as a page postback, theres no "Viewstate" settings
            // so 2 options either we keep an original setting for each value in hid values, or just get them from the db as part of the
            // update above, since we are already passing in 15 or so fields, lets just get the values at the start and reference them here
            if (sMode == "edit")
            {
                string sOrigCredUsername    = GetCredentialNameFromID(sOriginalCredentialID.Replace("'", "")).ToString();
                string sCurrentCredUsername = GetCredentialNameFromID(sCredentialID.Replace("'", "")).ToString();
                ui.WriteObjectChangeLog(Globals.acObjectTypes.Asset, sAssetID, sAssetName.Trim().Replace("'", "''") + " Name", sOriginalAssetName, sAssetName);
                ui.WriteObjectChangeLog(Globals.acObjectTypes.Asset, sAssetID, sAssetName.Trim().Replace("'", "''") + " Address", sOriginalAddress, sAddress);
                ui.WriteObjectChangeLog(Globals.acObjectTypes.Asset, sAssetID, sAssetName.Trim().Replace("'", "''") + " Port", sOriginalPort, sPort);
                ui.WriteObjectChangeLog(Globals.acObjectTypes.Asset, sAssetID, sAssetName.Trim().Replace("'", "''") + " DB Name", sOriginalDbName, sDbName);
                ui.WriteObjectChangeLog(Globals.acObjectTypes.Asset, sAssetID, sAssetName.Trim().Replace("'", "''") + " Connection Type", sOriginalConnectionType, sConnectionType);
                ui.WriteObjectChangeLog(Globals.acObjectTypes.Asset, sAssetID, sAssetName.Trim().Replace("'", "''") + " Credential", sOrigCredUsername, sCurrentCredUsername);
                ui.WriteObjectChangeLog(Globals.acObjectTypes.Asset, sAssetID, sAssetName.Trim().Replace("'", "''") + " Status", sOriginalAssetStatus, sAssetStatus);
                ui.WriteObjectChangeLog(Globals.acObjectTypes.Asset, sAssetID, sAssetName.Trim().Replace("'", "''") + " ConnString", sOriginalConnString, sConnString);
            }
            else
            {
                ui.WriteObjectAddLog(Globals.acObjectTypes.Asset, sAssetID, sAssetName.Trim().Replace("'", "''"), "Asset Created");
            }


            // no errors to here, so return an empty string
            return("");
        }
Ejemplo n.º 9
0
        public static string DeleteAssets(string sDeleteArray)
        {
            dataAccess dc = new dataAccess();

            acUI.acUI ui   = new acUI.acUI();
            string    sSql = null;
            string    sErr = "";

            ArrayList arrList = new ArrayList();

            arrList.AddRange(sDeleteArray.Split(','));

            if (sDeleteArray.Length < 36)
            {
                return("");
            }


            StringBuilder sbAssetIDString    = new StringBuilder();
            StringBuilder sbAssetsCantDelete = new StringBuilder();

            foreach (string sAssetID in arrList)
            {
                if (sAssetID.Length == 36)
                {
                    // what about the instance tables?????
                    // bugzilla 1290 Assets that have history (task_instance table) can not be deleted
                    // exclude them from the list and return a message noting the asset(s) that could not be deleted
                    // check if this asset has any history rows.
                    sSql = "select count(*) from tv_task_instance where asset_id = '" + sAssetID + "'";
                    int iHistory = 0;
                    if (!dc.sqlGetSingleInteger(ref iHistory, sSql, ref sErr))
                    {
                        throw new Exception(sErr);
                    }
                    // if there is no history add this to the delete list,
                    // otherwise add the task id to the non delete list
                    if (iHistory == 0)
                    {
                        sbAssetIDString.Append("'" + sAssetID + "',");
                    }
                    else
                    {
                        sbAssetsCantDelete.Append("'" + sAssetID + "',");
                    };
                }
            }
            // trim the trailing ,
            if (sbAssetsCantDelete.ToString().Length > 2)
            {
                sbAssetsCantDelete.Remove(sbAssetsCantDelete.Length - 1, 1);
            }
            ;

            if (sbAssetIDString.ToString().Length > 2)
            {
                // delete from these tables:
                //   asset, asset_credential (if the credential is local).

                // trim the trailing ,
                sbAssetIDString.Remove(sbAssetIDString.Length - 1, 1);
                try
                {
                    dataAccess.acTransaction oTrans = new dataAccess.acTransaction(ref sErr);

                    // delete asset_credential
                    sSql = "delete from asset_credential" +
                           " where shared_or_local = 1" +
                           " and credential_id in (select credential_id from asset where asset_id in (" + sbAssetIDString.ToString() + "))";
                    oTrans.Command.CommandText = sSql;
                    if (!oTrans.ExecUpdate(ref sErr))
                    {
                        throw new Exception(sErr);
                    }

                    // delete asset
                    sSql = "delete from asset where asset_id in (" + sbAssetIDString.ToString() + ")";
                    oTrans.Command.CommandText = sSql;
                    if (!oTrans.ExecUpdate(ref sErr))
                    {
                        throw new Exception(sErr);
                    }

                    oTrans.Commit();

                    // add security log
                    ui.WriteObjectDeleteLog(Globals.acObjectTypes.Asset, sbAssetIDString.ToString(), "Batch Asset Delete", "Deleted Assets in batch mode");
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
            }
            ;



            // if some did not get deleted return a message.
            if (sbAssetsCantDelete.Length > 2)
            {
                string sTaskNames = "";
                sSql = "select asset_name from asset where asset_id in (" + sbAssetsCantDelete.ToString() + ")";

                if (!dc.csvGetList(ref sTaskNames, sSql, ref sErr, true))
                {
                    throw new Exception(sErr);
                }

                return("Asset deletion completed. Asset(s) (" + sTaskNames + ") could not be deleted because history rows exist.");
            }
            else
            {
                return(sErr);
            }
        }
Ejemplo n.º 10
0
        public static string SaveCloud(string sMode, string sCloudID, string sCloudName, string sProvider, string sAPIUrl)
        {
            // for logging
            string sOriginalName = null;

            dataAccess dc = new dataAccess();

            acUI.acUI ui   = new acUI.acUI();
            string    sSql = null;
            string    sErr = null;


            //if we are editing get the original values
            if (sMode == "edit")
            {
            }

            try
            {
                dataAccess.acTransaction oTrans = new dataAccess.acTransaction(ref sErr);

                // update the user fields.
                if (sMode == "edit")
                {
                    sSql = "select cloud_name from clouds " +
                           "where cloud_id = '" + sCloudID + "'";
                    if (!dc.sqlGetSingleString(ref sOriginalName, sSql, ref sErr))
                    {
                        throw new Exception("Error getting original cloud name:" + sErr);
                    }

                    sSql = "update clouds set" +
                           " cloud_name = '" + sCloudName + "'," +
                           " provider = '" + sProvider + "'," +
                           " api_url = '" + sAPIUrl + "'" +
                           " where cloud_id = '" + sCloudID + "'";

                    oTrans.Command.CommandText = sSql;
                    if (!oTrans.ExecUpdate(ref sErr))
                    {
                        throw new Exception("Error updating cloud: " + sErr);
                    }

                    ui.WriteObjectChangeLog(Globals.acObjectTypes.Cloud, sCloudID, sCloudName, sOriginalName, sCloudName);
                }
                else
                {
                    sCloudID = ui.NewGUID();
                    sSql     = "insert into clouds (cloud_id, cloud_name, provider, api_url)" +
                               " values ('" + sCloudID + "'," +
                               "'" + sCloudName + "'," +
                               "'" + sProvider + "'," +
                               "'" + sAPIUrl + "')";

                    oTrans.Command.CommandText = sSql;
                    if (!oTrans.ExecUpdate(ref sErr))
                    {
                        throw new Exception("Error creating cloud: " + sErr);
                    }

                    ui.WriteObjectAddLog(Globals.acObjectTypes.Cloud, sCloudID, sCloudName, "Cloud Created");
                }

                oTrans.Commit();

                //update the cloud providers class in the session
                CloudProviders cp = ui.GetCloudProviders();
                cp[sProvider].RefreshClouds();
                ui.UpdateCloudProviders(cp);
            }
            catch (Exception ex)
            {
                throw new Exception("Error: General Exception: " + ex.Message);
            }

            // no errors to here, so return an empty string
            return("{'cloud_id':'" + sCloudID + "'}");
        }
Ejemplo n.º 11
0
        public string wmCreateTask(object[] oObj)
        {
            try
            {

                dataAccess dc = new dataAccess();
                acUI.acUI ui = new acUI.acUI();
                string sSql = null;
                string sErr = null;

                // we are passing in 8 elements, if we have 8 go
                //if (oObj.Length != 8) return "Incorrect list of attributes";

                string sTaskName = oObj[0].ToString().Replace("'", "''").Trim();
                string sTaskCode = oObj[1].ToString().Replace("'", "''").Trim();
                string sTaskDesc = oObj[2].ToString().Replace("'", "''").Trim();

                //string sTaskOrder = "";

                //if (oObj.Length > 4)
                //    sTaskOrder = oObj[4].ToString().Trim();

                // checks that cant be done on the client side
                // is the name unique?
                sSql = "select task_id from task " +
                        " where (task_code = '" + sTaskCode + "' or task_name = '" + sTaskName + "')";

                string sValueExists = "";
                if (!dc.sqlGetSingleString(ref sValueExists, sSql, ref sErr))
                {
                    throw new Exception("Unable to check for existing names." + sErr);
                }

                if (sValueExists != "")
                {
                    return "Another Task with that Code or Name exists, please choose another value.";
                }

                // passed client and server validations, create the user
                string sNewID = ui.NewGUID();

                try
                {
                    dataAccess.acTransaction oTrans = new dataAccess.acTransaction(ref sErr);

                    // all good, save the new user and redirect to the user edit page.
                    sSql = "insert task" +
                        " (task_id, original_task_id, version, default_version," +
                        " task_name, task_code, task_desc, created_dt)" +
                           " values " +
                           "('" + sNewID + "', '" + sNewID + "', 1.0000, 1, '" +
                           sTaskName + "', '" + sTaskCode + "', '" + sTaskDesc + "', now())";
                    oTrans.Command.CommandText = sSql;
                    if (!oTrans.ExecUpdate(ref sErr))
                    {
                        throw new Exception(sErr);
                    }

                    // every task gets a MAIN codeblock... period.
                    sSql = "insert task_codeblock (task_id, codeblock_name)" +
                           " values ('" + sNewID + "', 'MAIN')";
                    oTrans.Command.CommandText = sSql;
                    if (!oTrans.ExecUpdate(ref sErr))
                    {
                        throw new Exception(sErr);
                    }

                    oTrans.Commit();
                }
                catch (Exception ex)
                {
                    throw new Exception("Error updating the DB." + ex.Message);
                }

                // add security log
                ui.WriteObjectAddLog(Globals.acObjectTypes.Task, sNewID, sTaskName, "");

                // success, return the new task_id
                return "task_id=" + sNewID;

            }
            catch (Exception ex)
            {
                throw new Exception("One or more invalid or missing AJAX arguments." + ex.Message);
            }
        }
Ejemplo n.º 12
0
        public void wmToggleStep(string sStepID, string sVisible)
        {
            dataAccess dc = new dataAccess();
            acUI.acUI ui = new acUI.acUI();

            sVisible = (sVisible == "1" ? "1" : "0");

            try
            {
                if (ui.IsGUID(sStepID))
                {
                    string sErr = "";
                    dataAccess.acTransaction oTrans = new dataAccess.acTransaction(ref sErr);

                    string sUserID = ui.GetSessionUserID();

                    //is there a row?
                    int iRowCount = 0;
                    dc.sqlGetSingleInteger(ref iRowCount, "select count(*) from task_step_user_settings" +
                                " where user_id = '" + sUserID + "'" +
                                " and step_id = '" + sStepID + "'", ref sErr);

                    if (iRowCount == 0)
                    {
                        oTrans.Command.CommandText = "insert into task_step_user_settings" +
                            " (user_id, step_id, visible, breakpoint, skip)" +
                            " values ('" + sUserID + "','" + sStepID + "', " + sVisible + ", 0, 0)";

                        if (!oTrans.ExecUpdate(ref sErr))
                            throw new Exception("Unable to toggle step (0) [" + sStepID + "]." + sErr);
                    }
                    else
                    {
                        oTrans.Command.CommandText = " update task_step_user_settings set visible = '" + sVisible + "'" +
                            " where step_id = '" + sStepID + "'";
                        if (!oTrans.ExecUpdate(ref sErr))
                            throw new Exception("Unable to toggle step (1) [" + sStepID + "]." + sErr);
                    }

                    oTrans.Commit();

                    return;
                }
                else
                {
                    throw new Exception("Unable to toggle step. Missing or invalid step_id.");
                }

            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Ejemplo n.º 13
0
        public string wmRenameCodeblock(string sTaskID, string sOldCodeblockName, string sNewCodeblockName)
        {
            dataAccess dc = new dataAccess();

            acUI.acUI ui = new acUI.acUI();
            FunctionTemplates.HTMLTemplates ft = new FunctionTemplates.HTMLTemplates();

            try
            {
                if (ui.IsGUID(sTaskID))
                {

                    // first make sure we are not trying to rename it something that already exists.
                    string sErr = "";
                    string sSQL = "select count(*) from task_codeblock where task_id = '" + sTaskID + "'" +
                        " and codeblock_name = '" + sNewCodeblockName + "'";
                    int iCount = 0;

                    if (!dc.sqlGetSingleInteger(ref iCount, sSQL, ref sErr))
                    {
                        throw new Exception("Unable to check codeblock names for task." + sErr);
                    }
                    if (iCount != 0)
                    {
                        return ("Codeblock Name already in use, choose another.");
                    }

                    // do it
                    dataAccess.acTransaction oTrans = new dataAccess.acTransaction(ref sErr);

                    //update the codeblock table
                    sSQL = "update task_codeblock set codeblock_name = '" + sNewCodeblockName +
                        "' where codeblock_name = '" + sOldCodeblockName +
                        "' and task_id = '" + sTaskID + "'";

                    oTrans.Command.CommandText = sSQL;
                    if (!oTrans.ExecUpdate(ref sErr))
                    {
                        throw new Exception(sErr);
                    }

                    //and any steps in that codeblock
                    sSQL = "update task_step set codeblock_name = '" + sNewCodeblockName +
                        "' where codeblock_name = '" + sOldCodeblockName +
                        "' and task_id = '" + sTaskID + "'";

                    oTrans.Command.CommandText = sSQL;
                    if (!oTrans.ExecUpdate(ref sErr))
                    {
                        throw new Exception(sErr);
                    }

                    //the fun part... rename it where it exists in any steps
                    //but this must be in a loop of only the steps where that codeblock reference exists.
                    sSQL = "select step_id from task_step" +
                        " where task_id = '" + sTaskID + "'" +
                        " and ExtractValue(function_xml, '//codeblock[1]') = '" + sOldCodeblockName + "'";
                    oTrans.Command.CommandText = sSQL;
                    DataTable dtSteps = new DataTable();
                    if (!oTrans.ExecGetDataTable(ref dtSteps, ref sErr))
                    {
                        throw new Exception("Unable to get steps referencing the Codeblock." + sErr);
                    }

                    foreach (DataRow dr in dtSteps.Rows)
                    {
                        ft.SetNodeValueinXMLColumn("task_step", "function_xml", "step_id = '" + dr["step_id"].ToString() + "'", "//codeblock[. = '" + sOldCodeblockName + "']", sNewCodeblockName);
                    }

                    //all done
                    oTrans.Commit();

                    return sErr;

                }
                else
                {
                    throw new Exception("Unable to get codeblocks for task. Missing or invalid task_id.");
                }

            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Ejemplo n.º 14
0
        public static string SaveAsset(object[] oAsset)
        {
            // check the # of elements in the array
            if (oAsset.Length != 19) return "Incorrect number of Asset Properties:" + oAsset.Length.ToString();

            string sAssetID = oAsset[0].ToString();
            string sAssetName = oAsset[1].ToString().Replace("'", "''");
            string sDbName = oAsset[2].ToString().Replace("'", "''");
            string sPort = oAsset[3].ToString();
            string sConnectionType = oAsset[4].ToString();
            string sIsConnection = "0"; // oAsset[5].ToString();

            string sAddress = oAsset[5].ToString().Replace("'", "''");
            // mode is edit or add
            string sMode = oAsset[6].ToString();
            string sCredentialID = oAsset[7].ToString();
            string sCredUsername = oAsset[8].ToString().Replace("'", "''");
            string sCredPassword = oAsset[9].ToString().Replace("'", "''");
            string sShared = oAsset[10].ToString();
            string sCredentialName = oAsset[11].ToString().Replace("'", "''");
            string sCredentialDescr = oAsset[12].ToString().Replace("'", "''");
            string sDomain = oAsset[13].ToString().Replace("'", "''");
            string sCredentialType = oAsset[14].ToString();

            string sAssetStatus = oAsset[15].ToString();
            string sPrivilegedPassword = oAsset[16].ToString();
            string sTagArray = oAsset[17].ToString();

            string sConnString = oAsset[18].ToString().Replace("'", "''");

            // for logging
            string sOriginalAssetName = "";
            string sOriginalPort = "";
            string sOriginalDbName = "";
            string sOriginalAddress = "";
            string sOriginalConnectionType = "";
            string sOriginalUserName = "";
            string sOriginalConnString = "";
            string sOriginalCredentialID = "";
            string sOriginalAssetStatus = "";

            dataAccess dc = new dataAccess();
            acUI.acUI ui = new acUI.acUI();
            string sSql = null;
            string sErr = null;

            //if we are editing get the original values
            //this is getting original values for logging purposes
            if (sMode == "edit")
            {
                DataRow dr = null;
                sSql = "select a.asset_name, a.asset_status, a.port, a.db_name, a.address, a.db_name, a.connection_type, a.conn_string, ac.username, a.credential_id," +
                    " case when a.is_connection_system = '1' then 'Yes' else 'No' end as is_connection_system " +
                    " from asset a " +
                    " left outer join asset_credential ac on ac.credential_id = a.credential_id " +
                    " where a.asset_id = '" + sAssetID + "'";

                if (!dc.sqlGetDataRow(ref dr, sSql, ref sErr))
                    throw new Exception(sErr);
                else
                {
                    if (dr != null)
                    {
                        sOriginalAssetName = dr["asset_name"].ToString();
                        sOriginalPort = (object.ReferenceEquals(dr["port"], DBNull.Value) ? "" : dr["port"].ToString());
                        sOriginalDbName = (object.ReferenceEquals(dr["db_name"], DBNull.Value) ? "" : dr["db_name"].ToString());
                        sOriginalAddress = (object.ReferenceEquals(dr["address"], DBNull.Value) ? "" : dr["address"].ToString());
                        sOriginalConnectionType = (object.ReferenceEquals(dr["connection_type"], DBNull.Value) ? "" : dr["connection_type"].ToString());
                        sOriginalUserName = (object.ReferenceEquals(dr["username"], DBNull.Value) ? "" : dr["username"].ToString());
                        sOriginalConnString = (object.ReferenceEquals(dr["conn_string"], DBNull.Value) ? "" : dr["conn_string"].ToString());
                        sOriginalCredentialID = (object.ReferenceEquals(dr["credential_id"], DBNull.Value) ? "" : dr["credential_id"].ToString());
                        sOriginalAssetStatus = dr["asset_status"].ToString();
                    }
                }
            }

            //NOTE NOTE NOTE!
            //the following is a catch 22.
            //if we're adding a new asset, we will need to figure out the credential first so we can save the credential id on the asset
            //but if it's a new local credential, it gets the asset id as it's name.
            //so.........
            //if it's a new asset, go ahead and get the new guid for it here so the credential add will work.
            if (sMode == "add")
                sAssetID = ui.NewGUID();
            //and move on...

            // there are three CredentialType's
            // 1) 'selected' = user selected a different credential, just save the credential_id
            // 2) 'new' = user created a new shared or local credential
            // 3) 'existing' = same credential, just update the username,description ad password
            string sPriviledgedPasswordUpdate = null;
            if (sCredentialType == "new")
            {
                if (sPrivilegedPassword.Length == 0)
                    sPriviledgedPasswordUpdate = "NULL";
                else
                    sPriviledgedPasswordUpdate = "'" + dc.EnCrypt(sPrivilegedPassword) + "'";

                //if it's a local credential, the credential_name is the asset_id.
                //if it's shared, there will be a name.
                if (sShared == "1")
                {
                    sCredentialName = sAssetID;

                    //whack and add - easiest way to avoid conflicts
                    sSql = "delete from asset_credential where credential_name = '" + sCredentialName + "' and shared_or_local = '1'";
                    if (!dc.sqlExecuteUpdate(sSql, ref sErr))
                        throw new Exception(sErr);
                }

                //now we're clear to add
                sCredentialID = "'" + ui.NewGUID() + "'";
                sSql = "insert into asset_credential " +
                    "(credential_id,credential_name,username,password,domain,shared_or_local,shared_cred_desc,privileged_password) " +
                        "values (" + sCredentialID + ",'" + sCredentialName + "','" + sCredUsername + "','" + dc.EnCrypt(sCredPassword) + "','" + sDomain + "','" + sShared + "','" + sCredentialDescr + "'," + sPriviledgedPasswordUpdate + ")";
                if (!dc.sqlExecuteUpdate(sSql, ref sErr))
                {
                    if (sErr == "key_violation")
                        throw new Exception("A Credential with that name already exists.  Please select another name.");
                    else
                        throw new Exception(sErr);
                }

                // add security log
                ui.WriteObjectAddLog(Globals.acObjectTypes.Credential, sCredentialID, sCredentialName, "");

            }
            else if (sCredentialType == "existing")
            {
                sCredentialID = "'" + sCredentialID + "'";
                // bugzilla 1126 if the password has not changed leave it as is.
                string sPasswordUpdate = null;
                if (sCredPassword == "($%#d@x!&")
                    // password has not been touched
                    sPasswordUpdate = "";
                else
                    // updated password
                    sPasswordUpdate = ",password = '******'";

                // bugzilla 1260
                // same for privileged_password

                if (sPrivilegedPassword == "($%#d@x!&")
                    // password has not been touched
                    sPriviledgedPasswordUpdate = "";
                else
                {
                    // updated password
                    // bugzilla 1352 priviledged password can be blank, so if it is, set it to null
                    if (sPrivilegedPassword.Length == 0)
                        sPriviledgedPasswordUpdate = ",privileged_password = null";
                    else
                        sPriviledgedPasswordUpdate = ",privileged_password = '******'";
                }

                sSql = "update asset_credential " +
                        "set username = '******'" + sPasswordUpdate + sPriviledgedPasswordUpdate + ",domain = '" + sDomain + "'," +
                        "shared_or_local = '" + sShared + "',shared_cred_desc = '" + sCredentialDescr + "'" +
                        "where credential_id = " + sCredentialID;
                if (!dc.sqlExecuteUpdate(sSql, ref sErr))
                    throw new Exception(sErr);

                // add security log
                ui.WriteObjectChangeLog(Globals.acObjectTypes.Asset, sAssetID, sAssetName.Trim().Replace("'", "''") + "Changed credential", sOriginalUserName, sCredUsername);

            }
            else
            {
                // user selected a shared credential
                // remove the local credential if one exists

                if (sOriginalCredentialID.Length > 0)
                {
                    sSql = "delete from asset_credential where credential_id = '" + sOriginalCredentialID + "' and shared_or_local = '1'";
                    if (!dc.sqlExecuteUpdate(sSql, ref sErr))
                        throw new Exception(sErr);

                    // add security log
                    ui.WriteObjectDeleteLog(Globals.acObjectTypes.Asset, sAssetID, sAssetName.Trim().Replace("'", "''"), "Credential deleted" + sOriginalCredentialID + " " + sOriginalUserName);
                }

                sCredentialID = "'" + sCredentialID + "'";

            }

            // checks that cant be done on the client side
            // is the name unique?
            string sInuse = "";

            if (sMode == "edit")
                sSql = "select asset_id from asset where asset_name = '" + sAssetName.Trim() + "' and asset_id <> '" + sAssetID + "' limit 1";
            else
                sSql = "select asset_id from asset where asset_name = '" + sAssetName.Trim() + "' limit 1";

            if (!dc.sqlGetSingleString(ref sInuse, sSql, ref sErr))
                throw new Exception(sErr);
            else
                if (!string.IsNullOrEmpty(sInuse))
                    return "Asset Name '" + sAssetName + "' already in use, choose another." + sAssetID;

            try
            {
                dataAccess.acTransaction oTrans = new dataAccess.acTransaction(ref sErr);

                if (sMode == "edit")
                {
                    sSql = "update asset set asset_name = '" + sAssetName + "'," +
                        " asset_status = '" + sAssetStatus + "'," +
                        " address = '" + sAddress + "'" + "," +
                        " conn_string = '" + sConnString + "'" + "," +
                        " db_name = '" + sDbName + "'," +
                        " port = " + (sPort == "" ? "NULL" : "'" + sPort + "'") + "," +
                        " connection_type = '" + sConnectionType + "'," +
                        " is_connection_system = '" + (sIsConnection == "Yes" ? 1 : 0) + "'," +
                        " credential_id = " + sCredentialID +
                        " where asset_id = '" + sAssetID + "'";

                    oTrans.Command.CommandText = sSql;
                    if (!oTrans.ExecUpdate(ref sErr))
                        throw new Exception(sErr);

                }
                else
                {
                    sSql = "insert into asset (asset_id,asset_name,asset_status,address,conn_string,db_name,port,connection_type,is_connection_system,credential_id)" +
                    " values (" +
                    "'" + sAssetID + "'," +
                    "'" + sAssetName + "'," +
                    "'" + sAssetStatus + "'," +
                    "'" + sAddress + "'," +
                    "'" + sConnString + "'," +
                    "'" + sDbName + "'," +
                    (sPort == "" ? "NULL" : "'" + sPort + "'") + "," +
                    "'" + sConnectionType + "'," +
                    "'0'," +
                    sCredentialID + ")";

                    oTrans.Command.CommandText = sSql;
                    if (!oTrans.ExecUpdate(ref sErr))
                        throw new Exception(sErr);
                }

                #region "tags"
                // remove the existing tags
                sSql = "delete from object_tags where object_id = '" + sAssetID + "'";
                oTrans.Command.CommandText = sSql;
                if (!oTrans.ExecUpdate(ref sErr))
                {
                    throw new Exception(sErr);
                }

                // add user groups, if there are any
                if (sTagArray.Length > 0)
                {
                    ArrayList aTags = new ArrayList(sTagArray.Split(','));
                    foreach (string sTagName in aTags)
                    {
                        sSql = "insert object_tags (object_id, object_type, tag_name)" +
                            " values ('" + sAssetID + "', 2, '" + sTagName + "')";
                        oTrans.Command.CommandText = sSql;
                        if (!oTrans.ExecUpdate(ref sErr))
                        {
                            throw new Exception(sErr);
                        }
                    }
                }
                #endregion

                oTrans.Commit();

            }
            catch (Exception ex)
            {

                throw new Exception(ex.Message);
            }

            //--------------------------------------------------------------------------------------------------
            // NOTE! too many if edit... probably need to just make 2 functions, update asset, and create asset
            //--------------------------------------------------------------------------------------------------

            // add security log
            // since this is not handled as a page postback, theres no "Viewstate" settings
            // so 2 options either we keep an original setting for each value in hid values, or just get them from the db as part of the
            // update above, since we are already passing in 15 or so fields, lets just get the values at the start and reference them here
            if (sMode == "edit")
            {
                string sOrigCredUsername = GetCredentialNameFromID(sOriginalCredentialID.Replace("'", "")).ToString();
                string sCurrentCredUsername = GetCredentialNameFromID(sCredentialID.Replace("'", "")).ToString();
                ui.WriteObjectChangeLog(Globals.acObjectTypes.Asset, sAssetID, sAssetName.Trim().Replace("'", "''") + " Name", sOriginalAssetName, sAssetName);
                ui.WriteObjectChangeLog(Globals.acObjectTypes.Asset, sAssetID, sAssetName.Trim().Replace("'", "''") + " Address", sOriginalAddress, sAddress);
                ui.WriteObjectChangeLog(Globals.acObjectTypes.Asset, sAssetID, sAssetName.Trim().Replace("'", "''") + " Port", sOriginalPort, sPort);
                ui.WriteObjectChangeLog(Globals.acObjectTypes.Asset, sAssetID, sAssetName.Trim().Replace("'", "''") + " DB Name", sOriginalDbName, sDbName);
                ui.WriteObjectChangeLog(Globals.acObjectTypes.Asset, sAssetID, sAssetName.Trim().Replace("'", "''") + " Connection Type", sOriginalConnectionType, sConnectionType);
                ui.WriteObjectChangeLog(Globals.acObjectTypes.Asset, sAssetID, sAssetName.Trim().Replace("'", "''") + " Credential", sOrigCredUsername, sCurrentCredUsername);
                ui.WriteObjectChangeLog(Globals.acObjectTypes.Asset, sAssetID, sAssetName.Trim().Replace("'", "''") + " Status", sOriginalAssetStatus, sAssetStatus);
                ui.WriteObjectChangeLog(Globals.acObjectTypes.Asset, sAssetID, sAssetName.Trim().Replace("'", "''") + " ConnString", sOriginalConnString, sConnString);
            }
            else
            {
                ui.WriteObjectAddLog(Globals.acObjectTypes.Asset, sAssetID, sAssetName.Trim().Replace("'", "''"), "Asset Created");
            }

            // no errors to here, so return an empty string
            return "";
        }
Ejemplo n.º 15
0
        public static string SaveAccount(string sMode, string sAccountID, string sAccountName, string sAccountNumber, string sProvider,
                                         string sLoginID, string sLoginPassword, string sLoginPasswordConfirm, string sIsDefault, string sAutoManageSecurity)
        {
            // for logging
            string sOriginalName = "";

            dataAccess dc = new dataAccess();

            acUI.acUI ui   = new acUI.acUI();
            string    sSql = "";
            string    sErr = "";


            //if we are editing get the original values
            if (sMode == "edit")
            {
            }

            try
            {
                dataAccess.acTransaction oTrans = new dataAccess.acTransaction(ref sErr);

                // update the user fields.
                if (sMode == "edit")
                {
                    sSql = "select account_name from cloud_account " +
                           "where account_id = '" + sAccountID + "'";
                    if (!dc.sqlGetSingleString(ref sOriginalName, sSql, ref sErr))
                    {
                        throw new Exception("Error getting original account name:" + sErr);
                    }

                    // only update the passwword if it has changed
                    string sNewPassword = "";
                    if (sLoginPassword != "($%#d@x!&")
                    {
                        sNewPassword = "******" + dc.EnCrypt(sLoginPassword) + "'";
                    }

                    sSql = "update cloud_account set" +
                           " account_name = '" + sAccountName + "'," +
                           " account_number = '" + sAccountNumber + "'," +
                           " provider = '" + sProvider + "'," +
                           " is_default = '" + sIsDefault + "'," +
                           " auto_manage_security = '" + sAutoManageSecurity + "'," +
                           " login_id = '" + sLoginID + "'" +
                           sNewPassword +
                           " where account_id = '" + sAccountID + "'";

                    oTrans.Command.CommandText = sSql;
                    if (!oTrans.ExecUpdate(ref sErr))
                    {
                        throw new Exception("Error updating account: " + sErr);
                    }

                    ui.WriteObjectChangeLog(Globals.acObjectTypes.CloudAccount, sAccountID, sAccountName, sOriginalName, sAccountName);
                }
                else
                {
                    //now, for some reason we were having issues with the initial startup of apache
                    //not able to perform the very first database hit.
                    //this line serves as an inital db hit, but we aren't trapping it or showing the error
                    dc.TestDBConnection(ref sErr);

                    //if there are no rows yet, make this one the default even if the box isn't checked.
                    if (sIsDefault == "0")
                    {
                        int iExists = -1;

                        sSql = "select count(*) as cnt from cloud_account";
                        if (!dc.sqlGetSingleInteger(ref iExists, sSql, ref sErr))
                        {
                            System.Threading.Thread.Sleep(300);
                            if (!dc.sqlGetSingleInteger(ref iExists, sSql, ref sErr))
                            {
                                System.Threading.Thread.Sleep(300);
                                if (!dc.sqlGetSingleInteger(ref iExists, sSql, ref sErr))
                                {
                                    throw new Exception("Unable to count Cloud Accounts: " + sErr);
                                }
                            }
                        }



                        if (iExists == 0)
                        {
                            sIsDefault = "1";
                        }
                    }

                    sAccountID = ui.NewGUID();
                    sSql       = "insert into cloud_account (account_id, account_name, account_number, provider, is_default, login_id, login_password, auto_manage_security)" +
                                 " values ('" + sAccountID + "'," +
                                 "'" + sAccountName + "'," +
                                 "'" + sAccountNumber + "'," +
                                 "'" + sProvider + "'," +
                                 "'" + sIsDefault + "'," +
                                 "'" + sLoginID + "'," +
                                 "'" + dc.EnCrypt(sLoginPassword) + "'," +
                                 "'" + sAutoManageSecurity + "')";

                    oTrans.Command.CommandText = sSql;
                    if (!oTrans.ExecUpdate(ref sErr))
                    {
                        throw new Exception("Error creating account: " + sErr);
                    }

                    ui.WriteObjectAddLog(Globals.acObjectTypes.CloudAccount, sAccountID, sAccountName, "Account Created");
                }

                //if "default" was selected, unset all the others
                if (dc.IsTrue(sIsDefault))
                {
                    oTrans.Command.CommandText = "update cloud_account set is_default = 0 where account_id <> '" + sAccountID + "'";
                    if (!oTrans.ExecUpdate(ref sErr))
                    {
                        throw new Exception("Error updating defaults: " + sErr);
                    }
                }

                oTrans.Commit();

                //refresh the cloud account list in the session
                if (!ui.PutCloudAccountsInSession(ref sErr))
                {
                    throw new Exception("Error refreshing accounts in session: " + sErr);
                }
            }
            catch (Exception ex)
            {
                throw new Exception("Error: General Exception: " + ex.Message);
            }

            // no errors to here, so return an empty string
            return("{'account_id':'" + sAccountID + "', 'account_name':'" + sAccountName + "', 'provider':'" + sProvider + "'}");
        }
Ejemplo n.º 16
0
        public static string SaveCredential(object[] oAsset)
        {
            // we are passing in 16 elements, if we have 16 go
            if (oAsset.Length != 8)
            {
                return("Incorrect list of attributes:" + oAsset.Length.ToString());
            }

            string sCredentialID       = oAsset[0].ToString();
            string sCredentialName     = oAsset[1].ToString().Replace("'", "''");
            string sUserName           = oAsset[2].ToString().Replace("'", "''");
            string sCredentialDesc     = oAsset[3].ToString().Replace("'", "''");
            string sPassword           = oAsset[4].ToString();
            string sDomain             = oAsset[5].ToString();
            string sMode               = oAsset[6].ToString();
            string sPrivilegedPassword = oAsset[7].ToString();

            // for logging
            string sOriginalUserName = null;

            dataAccess dc = new dataAccess();

            acUI.acUI ui   = new acUI.acUI();
            string    sSql = null;
            string    sErr = null;


            //if we are editing get the original values
            if (sMode == "edit")
            {
                sSql = "select username from asset_credential " +
                       "where credential_id = '" + sCredentialID + "'";

                if (!dc.sqlGetSingleString(ref sOriginalUserName, sSql, ref sErr))
                {
                    throw new Exception(sErr);
                }
            }

            try
            {
                dataAccess.acTransaction oTrans = new dataAccess.acTransaction(ref sErr);

                // update the user fields.
                if (sMode == "edit")
                {
                    // only update the passwword if it has changed
                    string sNewPassword = "";
                    if (sPassword != "($%#d@x!&")
                    {
                        sNewPassword = "******" + dc.EnCrypt(sPassword) + "'";
                    }

                    // bugzilla 1260
                    // same for privileged_password
                    string sPriviledgedPasswordUpdate = null;
                    if (sPrivilegedPassword == "($%#d@x!&")
                    {
                        // password has not been touched
                        sPriviledgedPasswordUpdate = "";
                    }
                    else
                    {
                        // updated password
                        sPriviledgedPasswordUpdate = ",privileged_password = '******'";
                    }


                    sSql = "update asset_credential set" +
                           " credential_name = '" + sCredentialName + "'," +
                           " username = '******'," +
                           " domain = '" + sDomain.Replace("'", "''") + "'," +
                           " shared_cred_desc = '" + sCredentialDesc + "'" +
                           sNewPassword +
                           sPriviledgedPasswordUpdate +
                           " where credential_id = '" + sCredentialID + "'";
                }
                else
                {
                    // if the priviledged password is empty just set it to null
                    string sPrivilegedPasswordUpdate = "NULL";
                    if (sPrivilegedPassword.Length != 0)
                    {
                        sPrivilegedPasswordUpdate = "'" + dc.EnCrypt(sPrivilegedPassword) + "'";
                    }
                    ;


                    sSql = "insert into asset_credential (credential_id, credential_name, username, password, domain, shared_cred_desc, shared_or_local, privileged_password)" +
                           " values (" + "'" + ui.NewGUID() + "'," +
                           "'" + sCredentialName.Replace("'", "''") + "'," +
                           "'" + sUserName.Replace("'", "''") + "'," +
                           "'" + dc.EnCrypt(sPassword) + "'," +
                           "'" + sDomain.Replace("'", "''") + "'," +
                           "'" + sCredentialDesc.Replace("'", "''") + "'," +
                           "'0'," + sPrivilegedPasswordUpdate + ")";
                }
                oTrans.Command.CommandText = sSql;
                if (!oTrans.ExecUpdate(ref sErr))
                {
                    if (sErr == "key_violation")
                    {
                        throw new Exception("A Credential with that name already exists.  Please select another name.");
                    }
                    else
                    {
                        throw new Exception(sErr);
                    }
                }

                oTrans.Commit();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }



            // add security log
            // since this is not handled as a page postback, theres no "Viewstate" settings
            // so 2 options either we keep an original setting for each value in hid values, or just get them from the db as part of the
            // update above, since we are already passing in 15 or so fields, lets just get the values at the start and reference them here
            if (sMode == "edit")
            {
                ui.WriteObjectChangeLog(Globals.acObjectTypes.Credential, sCredentialID, sUserName.Replace("'", "''"), sOriginalUserName, sUserName.Replace("'", "''"));
            }
            else
            {
                ui.WriteObjectAddLog(Globals.acObjectTypes.Credential, sCredentialID, sUserName.Replace("'", "''"), "Credential Created");
            }


            // no errors to here, so return an empty string
            return("");
        }
Ejemplo n.º 17
0
        private void DeleteCodeblock(string sCodeblockID)
        {
            try
            {
                string sErr = "";

                dataAccess.acTransaction oTrans = new dataAccess.acTransaction(ref sErr);

                //first, delete any steps that are embedded content on steps in this codeblock
                //(because embedded steps have their parent step_id as the codeblock name.)
                oTrans.Command.CommandText = "delete em from task_step em" +
                                             " join task_step p on em.task_id = p.task_id" +
                                             " and em.codeblock_name = p.step_id" +
                                             " where p.task_id = '" + sTaskID + "'" +
                                             " and p.codeblock_name = '" + sCodeblockID + "'";
                if (!oTrans.ExecUpdate(ref sErr))
                {
                    ui.RaiseError(Page, "Unable to delete embedded Steps from Codeblock.", true, sErr);
                    return;
                }

                oTrans.Command.CommandText = "delete u from task_step_user_settings u" +
                                             " join task_step ts on u.step_id = ts.step_id" +
                                             " where ts.task_id = '" + sTaskID + "'" +
                                             " and ts.codeblock_name = '" + sCodeblockID + "'";
                if (!oTrans.ExecUpdate(ref sErr))
                {
                    ui.RaiseError(Page, "Unable to delete Steps user settings for Steps in Codeblock.", true, sErr);
                    return;
                }

                oTrans.Command.CommandText = "delete from task_step" +
                                             " where task_id = '" + sTaskID + "'" +
                                             " and codeblock_name = '" + sCodeblockID + "'";
                if (!oTrans.ExecUpdate(ref sErr))
                {
                    ui.RaiseError(Page, "Unable to delete Steps from Codeblock.", true, sErr);
                    return;
                }

                oTrans.Command.CommandText = "delete from task_codeblock" +
                                             " where task_id = '" + sTaskID + "'" +
                                             " and codeblock_name = '" + sCodeblockID + "'";
                if (!oTrans.ExecUpdate(ref sErr))
                {
                    ui.RaiseError(Page, "Unable to delete Codeblock.", true, sErr);
                    return;
                }

                oTrans.Commit();

                if (!GetCodeblocks(ref sErr))
                {
                    ui.RaiseError(Page, "Warning.  Successfully deleted the Codeblock" +
                                  " but there was an error refreshing the page.  Please reload the page manually. " + sErr, true, "");
                    return;
                }

                if (!GetSteps("MAIN", ref sErr))
                {
                    ui.RaiseError(Page, "Warning.  Successfully deleted the Codeblock" +
                                  " but there was an error refreshing the page.  Please reload the page manually. " + sErr, true, "");
                    return;
                }

                udpSteps.Update();
            }
            catch (Exception ex)
            {
                ui.RaiseError(Page, "Exception:", true, ex.Message);
            }
        }
Ejemplo n.º 18
0
        public static string SaveDomain(object[] oAsset)
        {
            // we are passing in 4 elements, if we have 16 go
            if (oAsset.Length != 4) return "Incorrect list of attributes:" + oAsset.Length.ToString();

            string sEditDomain = oAsset[0].ToString();
            string sDomain = oAsset[1].ToString().Replace("'", "''");
            string sAddress = oAsset[2].ToString().Replace("'", "''");
            string sMode = oAsset[3].ToString();

            dataAccess dc = new dataAccess();
            acUI.acUI ui = new acUI.acUI();
            string sSql = null;
            string sErr = null;

            // before updating or adding make sure the domain name is available
            if (sEditDomain != sDomain)
            {
                try
                {
                    sSql = "select ldap_domain from ldap_domain where ldap_domain = '" + sDomain + "'";
                    string sDomainExists = "";
                    if (!dc.sqlGetSingleString(ref sDomainExists, sSql, ref sErr))
                    {
                        throw new Exception(sErr);
                    }
                    else
                    {
                        if (!string.IsNullOrEmpty(sDomainExists))
                        {
                            return "Domain name exists, choose another name.";
                        }

                    }
                }
                catch (Exception ex)
                {

                    throw new Exception(ex.Message);
                }
            }

            try
            {
                dataAccess.acTransaction oTrans = new dataAccess.acTransaction(ref sErr);

                // update the user fields.
                if (sMode == "edit")
                {
                    // if the domain name changed update all of the asset_credential's using this domain
                    if (sDomain != sEditDomain){
                        sSql = "update asset_credential set domain = '" + sDomain + "' where domain = '" + sEditDomain + "'";
                        oTrans.Command.CommandText = sSql;
                        if (!oTrans.ExecUpdate(ref sErr))
                        {
                            throw new Exception(sErr);
                        }
                    }

                    sSql = "update ldap_domain set ldap_domain = '" + sDomain + "'," + "address = '" + sAddress + "' where ldap_domain = '" + sEditDomain + "'";
                    oTrans.Command.CommandText = sSql;
                    if (!oTrans.ExecUpdate(ref sErr))
                    {
                        throw new Exception(sErr);
                    }

                }
                else
                {
                    sSql = "insert into ldap_domain (ldap_domain,address)" +
                    " values ('" + sDomain + "'," +
                    "'" + sAddress + "')";

                    oTrans.Command.CommandText = sSql;
                    if (!oTrans.ExecUpdate(ref sErr))
                    {
                        throw new Exception(sErr);
                    }

                }

                oTrans.Commit();
            }
            catch (Exception ex)
            {

                throw new Exception(ex.Message);
            }

            // add security log
            if (sMode == "edit")
            {
                ui.WriteObjectChangeLog(Globals.acObjectTypes.Domain, sEditDomain, sEditDomain, sEditDomain, sDomain);
            }
            else
            {
                ui.WriteObjectAddLog(Globals.acObjectTypes.Domain, sDomain, sDomain, "Domain Created");
            }

            // no errors to here, so return an empty string
            return "";
        }
Ejemplo n.º 19
0
        private bool ReIDSteps(ref dataAccess.acTransaction oTrans, string sUserID, string sTaskID, ref string sErr)
        {
            //We join this to task_step on step_id, and only issue new GUID's
            //to the rows that are in conflict.

            //saves time, and if no steps are in conflict, the imported version is an exact match of the
            //exported one.
            //( and yes, I realize I did not join task_step on the task_id.
            // thats because the step_id is a guid AND the PK on the table.  not necessary to check
            // it against task_id too.)
            oTrans.Command.CommandText = "select its.step_id" +
                                         " from import_task_step its" +
                                         " join task_step ts on its.step_id = ts.step_id" +
                                         " where its.user_id = '" + sUserID + "'" +
                                         " and its.task_id = '" + sTaskID + "'";

            DataTable dtSteps = new DataTable();

            if (!oTrans.ExecGetDataTable(ref dtSteps, ref sErr))
            {
                throw new Exception(sErr);
            }

            if (dtSteps.Rows.Count > 0)
            {
                foreach (DataRow drSteps in dtSteps.Rows)
                {
                    //update each row by:
                    //*) getting a new guid
                    //*) searching for references to the old ID and replacing them
                    //  specifically in function_xml
                    //*) updating the row with the new guid

                    string sOrigStepID = drSteps["step_id"].ToString();
                    string sNewStepID  = ui.NewGUID();


                    //this will update any references in function_xml with
                    // the new guid of this step

                    oTrans.Command.CommandText = "update import_task_step" +
                                                 " set function_xml = replace(function_xml, '" + sOrigStepID + "', '" + sNewStepID + "')" +
                                                 " where ifnull(ExtractValue(function_xml, '(//*[. = ''" + sOrigStepID + "''])'), '') <> ''";
                    if (!oTrans.ExecUpdate(ref sErr))
                    {
                        throw new Exception(sErr);
                    }

                    //then finally, we will update the actual step rows with the new id
                    oTrans.Command.CommandText = "update import_task_step" +
                                                 " set step_id = '" + sNewStepID + "'" +
                                                 " where step_id = '" + sOrigStepID + "'";
                    if (!oTrans.ExecUpdate(ref sErr))
                    {
                        throw new Exception(sErr);
                    }
                }
            }

            return(true);
        }
Ejemplo n.º 20
0
        public bool Import(string sUserID, string sTaskIDs, ref string sErr)
        {
            string sSQL = "";

            dataAccess.acTransaction oTrans = new dataAccess.acTransaction(ref sErr);

            //we're doing this in a loop
            //why?  because each row may have different import requirements
            //(overwrite, new version, etc.)

            //Now we are adding different import types not necessarily tied to task/proc.
            //for now we're still just doing it all here until there's a good reason to split it out


            if (sTaskIDs.Length > 0)
            {
                sSQL = "select task_id, task_code, task_name, import_mode from import_task" +
                       " where user_id = '" + sUserID + "'" +
                       " and task_id in (" + sTaskIDs + ")";

                DataTable dt = new DataTable();
                if (!dc.sqlGetDataTable(ref dt, sSQL, ref sErr))
                {
                    throw new Exception(sErr);
                }

                if (dt.Rows.Count > 0)
                {
                    foreach (DataRow dr in dt.Rows)
                    {
                        string sTaskID     = dr["task_id"].ToString();
                        string sNewTaskID  = dr["task_id"].ToString();
                        string sTaskCode   = dr["task_code"].ToString();
                        string sImportMode = dr["import_mode"].ToString();
                        string sOTID       = "";
                        int    iCount      = 0;

                        switch (sImportMode)
                        {
                        case "New":
                            //just jam in the new row, IF there are no GUID conflicts.

                            //~~~ NEW tasks get manipulated.
                            //* MIGHT have their ID changed if there's a collision
                            //* WILL have the original_task_id reset
                            //* WILL have the version reset to 1.000
                            //* WILL be loaded as 'Development' status
                            //* WILL be the default version

                            //check ID
                            oTrans.Command.CommandText = "select count(*) from task" +
                                                         " where task_id = '" + sTaskID + "'";
                            if (!oTrans.ExecGetSingleInteger(ref iCount, ref sErr))
                            {
                                throw new Exception("Unable to check for GUID conflicts.<br />" + sErr);
                            }

                            //if there's a GUID conflict then just generate a new guid for this task.
                            if (iCount > 0)
                            {
                                sNewTaskID = ui.NewGUID();
                            }

                            //check the steps to see if there are any GUID conflicts
                            //and repair them if necessary
                            if (!ReIDSteps(ref oTrans, sUserID, sTaskID, ref sErr))
                            {
                                throw new Exception("Unable to issue new Step GUIDs.<br />" + sErr);
                            }

                            //insert the manipulated TASK
                            oTrans.Command.CommandText = "insert into task" +
                                                         " (task_id, original_task_id, version," +
                                                         " task_name, task_code, task_desc, task_status," +
                                                         " use_connector_system, default_version," +
                                                         " concurrent_instances, queue_depth, parameter_xml, created_dt)" +
                                                         " select" +
                                                         " '" + sNewTaskID + "', '" + sNewTaskID + "', 1.000," +
                                                         " task_name, task_code, task_desc, 'Development'," +
                                                         " use_connector_system, 1," +
                                                         " concurrent_instances, queue_depth, parameter_xml, created_dt" +
                                                         " from import_task" +
                                                         " where user_id = '" + sUserID + "'" +
                                                         " and task_id = '" + sTaskID + "'";
                            if (!oTrans.ExecUpdate(ref sErr))
                            {
                                throw new Exception(sErr);
                            }

                            ui.WriteObjectAddLog(Globals.acObjectTypes.Task, sNewTaskID, dr["task_code"].ToString() + " - " + dr["task_name"].ToString(), "New - Created via Import");

                            break;



                        case "New Version":
                            //if it's a new version, we need to make sure the "original_task_id"
                            //is correct in the target database.
                            //(no guarantee the original_id in the source db is correct.)

                            //just jam in the new row, IF there are no GUID conflicts.

                            //~~~ NEW VERSION tasks get manipulated.
                            //* MIGHT have their ID changed if there's a collision
                            //* MIGHT have the original_task_id reset (to match the target)
                            //* WILL have the version reset to the user selection
                            //* WILL be loaded as 'Development' status
                            //* WILL NOT be the default version

                            //check ID
                            oTrans.Command.CommandText = "select count(*) from task" +
                                                         " where task_id = '" + sTaskID + "'";
                            if (!oTrans.ExecGetSingleInteger(ref iCount, ref sErr))
                            {
                                throw new Exception("Unable to check for GUID conflicts.<br />" + sErr);
                            }

                            //if there's a GUID conflict then just generate a new guid for this task.
                            //and re-id the steps
                            if (iCount > 0)
                            {
                                sNewTaskID = ui.NewGUID();
                            }

                            //check the steps to see if there are any GUID conflicts
                            //and repair them if necessary
                            if (!ReIDSteps(ref oTrans, sUserID, sTaskID, ref sErr))
                            {
                                throw new Exception("Unable to issue new Step GUIDs.<br />" + sErr);
                            }


                            //NOW, we need to make sure this task is connected to it's family
                            //we do this by ensuring the original_task_id matches.

                            //BUT, we got here by assuming the task_code was the key.
                            //so... find the original_task_id for this task_code
                            oTrans.Command.CommandText = "select original_task_id" +
                                                         " from task where task_code = '" + sTaskCode + "' limit 1";
                            if (!oTrans.ExecGetSingleString(ref sOTID, ref sErr))
                            {
                                throw new Exception("Unable to get original task ID for [" + sTaskCode + "].<br />" + sErr);
                            }


                            //insert the manipulated TASK
                            oTrans.Command.CommandText = "insert into task" +
                                                         " (task_id, original_task_id, version," +
                                                         " task_name, task_code, task_desc, task_status," +
                                                         " use_connector_system, default_version," +
                                                         " concurrent_instances, queue_depth, parameter_xml, created_dt)" +
                                                         " select" +
                                                         " '" + sNewTaskID + "', '" + sOTID + "', version," +
                                                         " task_name, task_code, task_desc, 'Development'," +
                                                         " use_connector_system, 0," +
                                                         " concurrent_instances, queue_depth, parameter_xml, created_dt" +
                                                         " from import_task" +
                                                         " where user_id = '" + sUserID + "'" +
                                                         " and task_id = '" + sTaskID + "'";

                            if (!oTrans.ExecUpdate(ref sErr))
                            {
                                throw new Exception(sErr);
                            }

                            ui.WriteObjectAddLog(Globals.acObjectTypes.Task, sNewTaskID, dr["task_code"].ToString() + " - " + dr["task_name"].ToString(), "New Version - Created via Import");
                            break;

                        /*
                         * Note: I stopped here because I'm not convinced that "Overwrite" is a safe or useful
                         * feature.
                         *
                         * So, we'll come back to it if needed.
                         *
                         * Be aware, this was pseudocode... it never worked, was just placeholder stuff and ideas.
                         */



                        //case "Overwrite":
                        //    //stomp it, but make sure to set the task_id/original_task_id
                        //    //to match in the target db.
                        //    //just because the code matches doesn't mean the ID's do.

                        //    //we can just UPDATE the task row

                        //    //DON'T FORGET to DELETE the existing steps and codeblocks


                        //    //we need to make sure the "original_task_id"
                        //    //is correct in the target database.
                        //    //(no guarantee the original_id in the source db is correct.)


                        //    //~~~ OVERWRITE tasks get manipulated.
                        //    //* MIGHT have their ID changed to match the code/version being imported
                        //    //* MIGHT have the original_task_id reset (to match the target)
                        //    //* WILL have the version reset to the user selection
                        //    //* WILL be loaded as 'Development' status
                        //    //* MIGHT be the default version (not gonna update that value)

                        //    //NOW, we need to make sure this task is connected to it's family
                        //    //we do this by ensuring the original_task_id matches.

                        //    //BUT, we got here by assuming the task_code was the key.
                        //    //so... find the task AND original_task_id for this task_code
                        //    oTrans.Command.CommandText = "select top 1 task_id" +
                        //        " from task where task_code = '" + sTaskCode + "'";
                        //    if (!oTrans.ExecGetSingleString(ref sNewTaskID, ref sErr))
                        //        throw new Exception("Unable to get task ID for [" + sTaskCode + "].<br />" + sErr);
                        //    oTrans.Command.CommandText = "select top 1 original_task_id" +
                        //        " from task where task_code = '" + sTaskCode + "'";
                        //    if (!oTrans.ExecGetSingleString(ref sOTID, ref sErr))
                        //        throw new Exception("Unable to get original task ID for [" + sTaskCode + "].<br />" + sErr);

                        //    //get a datareader on the import_task row
                        //    sSQL = "select task_desc, manual_or_digital, use_connector_system," +
                        //        " concurrent_instances, queue_depth, parameter_xml, created_dt" +
                        //        " from import_task" +
                        //        " where user_id = '" + sUserID + "'" +
                        //        " and task_id = '" + sTaskID + "'";
                        //    OdbcDataReader drTaskRow = null;
                        //    if (!dc.sqlGetDataReader(ref drTaskRow, sSQL, ref sErr)) return false;

                        //    if (drTaskRow.HasRows)
                        //    {
                        //        //insert the manipulated TASK
                        //        //THIS WAS NEVER TESTED
                        //        oTrans.Command.CommandText = "update task" +
                        //            " set task_desc = ''," +
                        //            " manual_or_digital = ''," +
                        //            " use_connector_system = ''," +
                        //            " concurrent_instances = ''," +
                        //            " queue_depth = ''," +
                        //            " parameter_xml = ''," +
                        //            " created_dt = ''" +
                        //            " select" +
                        //            " '" + sNewTaskID + "', '" + sOTID + "', version," +
                        //            " task_name, task_code, task_desc, 'Development', manual_or_digital," +
                        //            " use_connector_system, 0," +
                        //            " concurrent_instances, queue_depth, parameter_xml, created_dt" +
                        //            " from import_task" +
                        //            " where user_id = '" + sUserID + "'" +
                        //            " and task_id = '" + sTaskID + "'";

                        //        if (!oTrans.ExecUpdate(ref sErr))
                        //            throw new Exception(sErr);
                        //    }


                        //    ui.WriteObjectAddLog(Globals.acObjectTypes.Task, sNewTaskID, dr["task_code"].ToString() + " - " + dr["task_name"].ToString(), "Overwritten by Import");

                        //    break;
                        default:
                            break;
                        }



                        //CODEBLOCKS AND STEPS can be done here... they are just inserted
                        // (because they were manipulated already if needed)


                        //CODEBLOCKS
                        oTrans.Command.CommandText = "insert into task_codeblock" +
                                                     " (task_id, codeblock_name)" +
                                                     " select" +
                                                     " '" + sNewTaskID + "', codeblock_name" +
                                                     " from import_task_codeblock" +
                                                     " where user_id = '" + sUserID + "'" +
                                                     " and task_id = '" + sTaskID + "'";
                        if (!oTrans.ExecUpdate(ref sErr))
                        {
                            throw new Exception(sErr);
                        }

                        //STEPS
                        oTrans.Command.CommandText = "insert into task_step" +
                                                     " (step_id, task_id, codeblock_name, step_order, commented," +
                                                     " locked, function_name, function_xml, step_desc, output_parse_type," +
                                                     " output_row_delimiter, output_column_delimiter, variable_xml)" +
                                                     " select" +
                                                     " step_id, '" + sNewTaskID + "', codeblock_name, step_order, commented," +
                                                     " locked, function_name, function_xml, step_desc, output_parse_type," +
                                                     " output_row_delimiter, output_column_delimiter, variable_xml" +
                                                     " from import_task_step" +
                                                     " where user_id = '" + sUserID + "'" +
                                                     " and task_id = '" + sTaskID + "'";
                        if (!oTrans.ExecUpdate(ref sErr))
                        {
                            throw new Exception(sErr);
                        }
                    }
                }
                else
                {
                    sErr = "No Task import items were found.";
                    oTrans.RollBack();
                    return(false);
                }


                //whack those rows from the import table.
                //why?  their disposition has now changed, and we don't wanna accidentally reload them.
                //or add confusion to the user.
                oTrans.Command.CommandText = "delete from import_task where user_id = '" + sUserID + "' and task_id in (" + sTaskIDs + ")";
                if (!oTrans.ExecUpdate(ref sErr))
                {
                    throw new Exception(sErr);
                }

                oTrans.Command.CommandText = "delete from import_task_codeblock where user_id = '" + sUserID + "' and task_id in (" + sTaskIDs + ")";
                if (!oTrans.ExecUpdate(ref sErr))
                {
                    throw new Exception(sErr);
                }

                oTrans.Command.CommandText = "delete from import_task_step where user_id = '" + sUserID + "' and task_id in (" + sTaskIDs + ")";
                if (!oTrans.ExecUpdate(ref sErr))
                {
                    throw new Exception(sErr);
                }
            }

            //all done with everything... close it out
            oTrans.Commit();

            return(true);
        }
Ejemplo n.º 21
0
        public static string SaveCredential(object[] oAsset)
        {
            // we are passing in 16 elements, if we have 16 go
            if (oAsset.Length != 8) return "Incorrect list of attributes:" + oAsset.Length.ToString();

            string sCredentialID = oAsset[0].ToString();
            string sCredentialName = oAsset[1].ToString().Replace("'", "''");
            string sUserName = oAsset[2].ToString().Replace("'", "''");
            string sCredentialDesc = oAsset[3].ToString().Replace("'", "''");
            string sPassword = oAsset[4].ToString();
            string sDomain = oAsset[5].ToString();
            string sMode = oAsset[6].ToString();
            string sPrivilegedPassword = oAsset[7].ToString();

            // for logging
            string sOriginalUserName = null;

            dataAccess dc = new dataAccess();
            acUI.acUI ui = new acUI.acUI();
            string sSql = null;
            string sErr = null;

            //if we are editing get the original values
            if (sMode == "edit")
            {
                sSql = "select username from asset_credential " +
                       "where credential_id = '" + sCredentialID + "'";

                if (!dc.sqlGetSingleString(ref sOriginalUserName, sSql, ref sErr))
                {
                    throw new Exception(sErr);
                }
            }

            try
            {
                dataAccess.acTransaction oTrans = new dataAccess.acTransaction(ref sErr);

                // update the user fields.
                if (sMode == "edit")
                {
                    // only update the passwword if it has changed
                    string sNewPassword = "";
                    if (sPassword != "($%#d@x!&")
                    {
                        sNewPassword = "******" + dc.EnCrypt(sPassword) + "'";
                    }

                    // bugzilla 1260
                    // same for privileged_password
                    string sPriviledgedPasswordUpdate = null;
                    if (sPrivilegedPassword == "($%#d@x!&")
                    {
                        // password has not been touched
                        sPriviledgedPasswordUpdate = "";
                    }
                    else
                    {
                        // updated password
                        sPriviledgedPasswordUpdate = ",privileged_password = '******'";

                    }

                    sSql = "update asset_credential set" +
                        " credential_name = '" + sCredentialName + "'," +
                        " username = '******'," +
                        " domain = '" + sDomain.Replace("'", "''") + "'," +
                        " shared_cred_desc = '" + sCredentialDesc + "'" +
                        sNewPassword +
                        sPriviledgedPasswordUpdate +
                        " where credential_id = '" + sCredentialID + "'";
                }
                else
                {
                    // if the priviledged password is empty just set it to null
                    string sPrivilegedPasswordUpdate = "NULL";
                    if (sPrivilegedPassword.Length != 0)
                    {
                        sPrivilegedPasswordUpdate = "'" + dc.EnCrypt(sPrivilegedPassword) + "'";
                    };

                    sSql = "insert into asset_credential (credential_id, credential_name, username, password, domain, shared_cred_desc, shared_or_local, privileged_password)" +
                    " values (" + "'" + ui.NewGUID() + "'," +
                    "'" + sCredentialName.Replace("'", "''") + "'," +
                    "'" + sUserName.Replace("'", "''") + "'," +
                    "'" + dc.EnCrypt(sPassword) + "'," +
                    "'" + sDomain.Replace("'", "''") + "'," +
                    "'" + sCredentialDesc.Replace("'", "''") + "'," +
                    "'0'," + sPrivilegedPasswordUpdate + ")";
                }
                oTrans.Command.CommandText = sSql;
                if (!oTrans.ExecUpdate(ref sErr))
                {
                    if (sErr == "key_violation")
                        throw new Exception("A Credential with that name already exists.  Please select another name.");
                    else
                        throw new Exception(sErr);
                }

                oTrans.Commit();
            }
            catch (Exception ex)
            {

                throw new Exception(ex.Message);
            }

            // add security log
            // since this is not handled as a page postback, theres no "Viewstate" settings
            // so 2 options either we keep an original setting for each value in hid values, or just get them from the db as part of the
            // update above, since we are already passing in 15 or so fields, lets just get the values at the start and reference them here
            if (sMode == "edit")
            {
                ui.WriteObjectChangeLog(Globals.acObjectTypes.Credential, sCredentialID, sUserName.Replace("'", "''"), sOriginalUserName, sUserName.Replace("'", "''"));
            }
            else
            {
                ui.WriteObjectAddLog(Globals.acObjectTypes.Credential, sCredentialID, sUserName.Replace("'", "''"), "Credential Created");
            }

            // no errors to here, so return an empty string
            return "";
        }
Ejemplo n.º 22
0
        public static string SaveCloud(string sMode, string sCloudID, string sCloudName, string sProvider, string sAPIUrl)
        {
            // for logging
            string sOriginalName = null;

            dataAccess dc = new dataAccess();
            acUI.acUI ui = new acUI.acUI();
            string sSql = null;
            string sErr = null;

            //if we are editing get the original values
            if (sMode == "edit")
            {
            }

            try
            {
                dataAccess.acTransaction oTrans = new dataAccess.acTransaction(ref sErr);

                // update the user fields.
                if (sMode == "edit")
                {
                    sSql = "select cloud_name from clouds " +
                           "where cloud_id = '" + sCloudID + "'";
                    if (!dc.sqlGetSingleString(ref sOriginalName, sSql, ref sErr))
                        throw new Exception("Error getting original cloud name:" + sErr);

                    sSql = "update clouds set" +
                        " cloud_name = '" + sCloudName + "'," +
                        " provider = '" + sProvider + "'," +
                        " api_url = '" + sAPIUrl + "'" +
                        " where cloud_id = '" + sCloudID + "'";

                    oTrans.Command.CommandText = sSql;
                    if (!oTrans.ExecUpdate(ref sErr))
                        throw new Exception("Error updating cloud: " + sErr);

                    ui.WriteObjectChangeLog(Globals.acObjectTypes.Cloud, sCloudID, sCloudName, sOriginalName, sCloudName);}
                else
                {
                    sCloudID = ui.NewGUID();
                    sSql = "insert into clouds (cloud_id, cloud_name, provider, api_url)" +
                    " values ('" + sCloudID + "'," +
                    "'" + sCloudName + "'," +
                    "'" + sProvider + "'," +
                    "'" + sAPIUrl + "')";

                    oTrans.Command.CommandText = sSql;
                    if (!oTrans.ExecUpdate(ref sErr))
                        throw new Exception("Error creating cloud: " + sErr);

                    ui.WriteObjectAddLog(Globals.acObjectTypes.Cloud, sCloudID, sCloudName, "Cloud Created");
                }

                oTrans.Commit();

                //update the cloud providers class in the session
                CloudProviders cp = ui.GetCloudProviders();
                cp[sProvider].RefreshClouds();
                ui.UpdateCloudProviders(cp);
               }
            catch (Exception ex)
            {
                throw new Exception("Error: General Exception: " + ex.Message);
            }

            // no errors to here, so return an empty string
            return "{'cloud_id':'" + sCloudID + "'}";
        }
Ejemplo n.º 23
0
        public static string SaveUserEdits(object[] oUser)
        {
            string sChangeDetail = "User Details updated.";

            // verify the right number of properties
            if (oUser.Length != 10)
            {
                return("Incorrect number of User Properties.");
            }

            string sEditUserID          = oUser[0].ToString();
            string sLoginID             = oUser[1].ToString();
            string sFullName            = oUser[2].ToString();
            string sAuthType            = oUser[3].ToString();
            string sUserPassword        = oUser[4].ToString();
            string sForcePasswordChange = oUser[5].ToString();
            string sUserRole            = oUser[6].ToString();
            string sEmail      = oUser[7].ToString();
            string sStatus     = oUser[8].ToString();
            string sGroupArray = oUser[9].ToString();

            dataAccess dc = new dataAccess();

            acUI.acUI ui   = new acUI.acUI();
            string    sSql = null;
            string    sErr = null;

            // checks that cant be done on the client side
            // is the name unique?
            string sInuse = "";

            if (!dc.sqlGetSingleString(ref sInuse, "select user_id from users where username = '******' and user_id <> '" + sEditUserID + "' limit 1", ref sErr))
            {
                throw new Exception(sErr);
            }
            else
            {
                if (!string.IsNullOrEmpty(sInuse))
                {
                    return("Login ID '" + sLoginID + "' is unavailable, please choose another.");
                }
            }

            // CHANGE Per conference call 5-11-09 we are using a random 9 char mask
            // if the password has not changed this will be the same 9 chars
            string sPasswordUpdate     = null;
            bool   boolPasswordChanged = false;

            if (sUserPassword == "($%#d@x!&")
            {
                // password has not been touched
                sPasswordUpdate     = ",";
                boolPasswordChanged = false;
            }
            else
            {
                // password changed
                sChangeDetail += "  Password changed.";
                if (sAuthType == "local")
                {
                    // bugzilla 1347
                    // check the user password history setting, and make sure the password was not used in the past x passwords
                    if (dc.PasswordInHistory(dc.EnCrypt(sUserPassword.Trim()), sEditUserID, ref sErr))
                    {
                        return("Passwords can not be reused, please choose another password");
                    }
                    ;
                    if (sErr != null)
                    {
                        return(sErr);
                    }
                    ;

                    if (!dc.PasswordIsComplex(sUserPassword.Trim(), ref sErr))
                    {
                        return(sErr);
                    }
                    else
                    {
                        sPasswordUpdate     = ",user_password = '******',";
                        boolPasswordChanged = true;
                    }
                }
                else if (sAuthType == "ldap")
                {
                    sPasswordUpdate = ",user_password = NULL,";
                }
                else
                {
                    return("Unknown Authentication type.");
                }
            }

            try
            {
                dataAccess.acTransaction oTrans = new dataAccess.acTransaction(ref sErr);

                // update the user fields.
                sSql = "update users set" +
                       " full_name = '" + sFullName + "'," +
                       " username = '******'" + sPasswordUpdate +
                       " force_change = '" + sForcePasswordChange + "'," +
                       " authentication_type = '" + sAuthType + "'," +
                       " email = '" + sEmail + "'," +
                       " failed_login_attempts = '0'," +
                       " status = '" + sStatus + "'," +
                       " user_role = '" + sUserRole + "'" +
                       " where user_id = '" + sEditUserID + "'";
                oTrans.Command.CommandText = sSql;
                if (!oTrans.ExecUpdate(ref sErr))
                {
                    throw new Exception(sErr);
                }

                if (boolPasswordChanged)
                {
                    // add Password history if it changed
                    sSql = "insert user_password_history (user_id, change_time,password) values ('" + sEditUserID + "',now(),'" + dc.EnCrypt(sUserPassword.Trim()) + "')";
                    oTrans.Command.CommandText = sSql;
                    if (!oTrans.ExecUpdate(ref sErr))
                    {
                        throw new Exception(sErr);
                    }
                }


                #region "tags"
                // remove the existing tags
                sSql = "delete from object_tags where object_id = '" + sEditUserID + "'";
                oTrans.Command.CommandText = sSql;
                if (!oTrans.ExecUpdate(ref sErr))
                {
                    throw new Exception(sErr);
                }

                // add user groups, if there are any
                if (sGroupArray.Length > 0)
                {
                    ArrayList aGroups = new ArrayList(sGroupArray.Split(','));
                    foreach (string sGroupName in aGroups)
                    {
                        sSql = "insert object_tags (object_id, object_type, tag_name)" +
                               " values ('" + sEditUserID + "', 1, '" + sGroupName + "')";
                        oTrans.Command.CommandText = sSql;
                        if (!oTrans.ExecUpdate(ref sErr))
                        {
                            throw new Exception(sErr);
                        }
                    }
                }
                #endregion



                oTrans.Commit();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            // add security log
            ui.WriteObjectChangeLog(Globals.acObjectTypes.User, sEditUserID, sFullName.Trim().Replace("'", "''"), sChangeDetail);

            // no errors to here, so return an empty string

            return("");
        }
Ejemplo n.º 24
0
        public string wmDeleteTasks(string sDeleteArray)
        {
            dataAccess dc = new dataAccess();
            acUI.acUI ui = new acUI.acUI();

            string sSql = null;
            string sErr = "";
            string sTaskNames = "";

            if (sDeleteArray.Length < 36)
                return "";

            sDeleteArray = ui.QuoteUp(sDeleteArray);

            //NOTE: right now this plows ALL versions.  There is an enhancement to possibly 'retire' a task, or
            //only delete certain versions.

            try
            {

                // what about the instance tables?????
                // bugzilla 1290 Tasks that have history (task_instance table) can not be deleted
                // exclude them from the list and return a message noting the task(s) that could not be deleted

                // first we need a list of tasks that will not be deleted
                sSql = "select task_name from task t " +
                        "where t.original_task_id in (" + sDeleteArray.ToString() + ") " +
                        "and t.task_id in (select ti.task_id from tv_task_instance ti where ti.task_id = t.task_id)";

                if (!dc.csvGetList(ref sTaskNames, sSql, ref sErr, true))
                    throw new Exception(sErr);

                // list of tasks that will be deleted
                //we have an array of 'original_task_id'.
                //we need an array or task_id
                //build one.
                sSql = "select t.task_id from task t " +
                    "where t.original_task_id in (" + sDeleteArray.ToString() + ") " +
                    "and t.task_id not in (select ti.task_id from tv_task_instance ti where ti.task_id = t.task_id)";

                string sTaskIDs = "";
                if (!dc.csvGetList(ref sTaskIDs, sSql, ref sErr, true))
                    throw new Exception(sErr);

                // if any tasks can be deleted
                if (sTaskIDs.Length > 1)
                {
                    dataAccess.acTransaction oTrans = new dataAccess.acTransaction(ref sErr);

                    //oTrans.Command.CommandText = "delete from task_asset_attribute where task_id in (" + sTaskIDs + ")";
                    //if (!oTrans.ExecUpdate(ref sErr))
                    //    throw new Exception(sErr);

                    oTrans.Command.CommandText = "delete from task_step_user_settings" +
                        " where step_id in" +
                        " (select step_id from task_step where task_id in (" + sTaskIDs + "))";
                    if (!oTrans.ExecUpdate(ref sErr))
                        throw new Exception(sErr);

                    oTrans.Command.CommandText = "delete from task_step where task_id in (" + sTaskIDs + ")";
                    if (!oTrans.ExecUpdate(ref sErr))
                        throw new Exception(sErr);

                    oTrans.Command.CommandText = "delete from task_codeblock where task_id in (" + sTaskIDs + ")";
                    if (!oTrans.ExecUpdate(ref sErr))
                        throw new Exception(sErr);

                    oTrans.Command.CommandText = "delete from task where task_id in (" + sTaskIDs + ")";
                    if (!oTrans.ExecUpdate(ref sErr))
                        throw new Exception(sErr);

                    oTrans.Commit();

                    ui.WriteObjectDeleteLog(Globals.acObjectTypes.Task, "Multiple", "Original Task IDs", sDeleteArray.ToString());

                }

            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            // if the sTaskNames contains any names, then send back a message that these were not deleted because of history records.
            if (sTaskNames.Length > 0)
            {
                return "Task(s) (" + sTaskNames + ") have history rows and could not be deleted.";
            }
            else
            {
                return sErr;
            }
        }
Ejemplo n.º 25
0
        public static string DeleteAssets(string sDeleteArray)
        {
            dataAccess dc = new dataAccess();
            acUI.acUI ui = new acUI.acUI();
            string sSql = null;
            string sErr = "";

            ArrayList arrList = new ArrayList();
            arrList.AddRange(sDeleteArray.Split(','));

            if (sDeleteArray.Length < 36)
                return "";

            StringBuilder sbAssetIDString = new StringBuilder();
            StringBuilder sbAssetsCantDelete = new StringBuilder();
            foreach (string sAssetID in arrList)
            {
                if (sAssetID.Length == 36)
                {
                    // what about the instance tables?????
                    // bugzilla 1290 Assets that have history (task_instance table) can not be deleted
                    // exclude them from the list and return a message noting the asset(s) that could not be deleted
                    // check if this asset has any history rows.
                    sSql = "select count(*) from tv_task_instance where asset_id = '" + sAssetID + "'";
                    int iHistory = 0;
                    if (!dc.sqlGetSingleInteger(ref iHistory, sSql, ref sErr))
                        throw new Exception(sErr);
                    // if there is no history add this to the delete list,
                    // otherwise add the task id to the non delete list
                    if (iHistory == 0)
                    {
                        sbAssetIDString.Append("'" + sAssetID + "',");
                    }
                    else
                    {
                        sbAssetsCantDelete.Append("'" + sAssetID + "',");
                    };

                }
            }
            // trim the trailing ,
            if (sbAssetsCantDelete.ToString().Length > 2) { sbAssetsCantDelete.Remove(sbAssetsCantDelete.Length - 1, 1); };

            if (sbAssetIDString.ToString().Length > 2)
            {
                // delete from these tables:
                //   asset, asset_credential (if the credential is local).

                // trim the trailing ,
                sbAssetIDString.Remove(sbAssetIDString.Length - 1, 1);
                try
                {
                    dataAccess.acTransaction oTrans = new dataAccess.acTransaction(ref sErr);

                    // delete asset_credential
                    sSql = "delete from asset_credential" +
                        " where shared_or_local = 1" +
                        " and credential_id in (select credential_id from asset where asset_id in (" + sbAssetIDString.ToString() + "))";
                    oTrans.Command.CommandText = sSql;
                    if (!oTrans.ExecUpdate(ref sErr))
                        throw new Exception(sErr);

                    // delete asset
                    sSql = "delete from asset where asset_id in (" + sbAssetIDString.ToString() + ")";
                    oTrans.Command.CommandText = sSql;
                    if (!oTrans.ExecUpdate(ref sErr))
                        throw new Exception(sErr);

                    oTrans.Commit();

                    // add security log
                    ui.WriteObjectDeleteLog(Globals.acObjectTypes.Asset, sbAssetIDString.ToString(), "Batch Asset Delete", "Deleted Assets in batch mode");
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
            };

            // if some did not get deleted return a message.
            if (sbAssetsCantDelete.Length > 2)
            {
                string sTaskNames = "";
                sSql = "select asset_name from asset where asset_id in (" + sbAssetsCantDelete.ToString() + ")";

                if (!dc.csvGetList(ref sTaskNames, sSql, ref sErr, true))
                    throw new Exception(sErr);

                return "Asset deletion completed. Asset(s) (" + sTaskNames + ") could not be deleted because history rows exist.";

            }
            else
            {
                return sErr;
            }
        }
Ejemplo n.º 26
0
        public bool Import(string sUserID, string sTaskIDs, ref string sErr)
        {
            string sSQL = "";

            dataAccess.acTransaction oTrans = new dataAccess.acTransaction(ref sErr);

            //we're doing this in a loop
            //why?  because each row may have different import requirements
            //(overwrite, new version, etc.)

            //Now we are adding different import types not necessarily tied to task/proc.
            //for now we're still just doing it all here until there's a good reason to split it out

            if (sTaskIDs.Length > 0)
            {
                sSQL = "select task_id, task_code, task_name, import_mode from import_task" +
                    " where user_id = '" + sUserID + "'" +
                    " and task_id in (" + sTaskIDs + ")";

                DataTable dt = new DataTable();
                if (!dc.sqlGetDataTable(ref dt, sSQL, ref sErr))
                    throw new Exception(sErr);

                if (dt.Rows.Count > 0)
                {
                    foreach (DataRow dr in dt.Rows)
                    {
                        string sTaskID = dr["task_id"].ToString();
                        string sNewTaskID = dr["task_id"].ToString();
                        string sTaskCode = dr["task_code"].ToString();
                        string sImportMode = dr["import_mode"].ToString();
                        string sOTID = "";
                        int iCount = 0;

                        switch (sImportMode)
                        {
                            case "New":
                                //just jam in the new row, IF there are no GUID conflicts.

                                //~~~ NEW tasks get manipulated.
                                //* MIGHT have their ID changed if there's a collision
                                //* WILL have the original_task_id reset
                                //* WILL have the version reset to 1.000
                                //* WILL be loaded as 'Development' status
                                //* WILL be the default version

                                //check ID
                                oTrans.Command.CommandText = "select count(*) from task" +
                                    " where task_id = '" + sTaskID + "'";
                                if (!oTrans.ExecGetSingleInteger(ref iCount, ref sErr))
                                    throw new Exception("Unable to check for GUID conflicts.<br />" + sErr);

                                //if there's a GUID conflict then just generate a new guid for this task.
                                if (iCount > 0)
                                {
                                    sNewTaskID = ui.NewGUID();
                                }

                                //check the steps to see if there are any GUID conflicts
                                //and repair them if necessary
                                if (!ReIDSteps(ref oTrans, sUserID, sTaskID, ref sErr))
                                    throw new Exception("Unable to issue new Step GUIDs.<br />" + sErr);

                                //insert the manipulated TASK
                                oTrans.Command.CommandText = "insert into task" +
                                    " (task_id, original_task_id, version," +
                                    " task_name, task_code, task_desc, task_status," +
                                    " use_connector_system, default_version," +
                                    " concurrent_instances, queue_depth, parameter_xml, created_dt)" +
                                    " select" +
                                    " '" + sNewTaskID + "', '" + sNewTaskID + "', 1.000," +
                                    " task_name, task_code, task_desc, 'Development'," +
                                    " use_connector_system, 1," +
                                    " concurrent_instances, queue_depth, parameter_xml, created_dt" +
                                    " from import_task" +
                                    " where user_id = '" + sUserID + "'" +
                                    " and task_id = '" + sTaskID + "'";
                                if (!oTrans.ExecUpdate(ref sErr))
                                    throw new Exception(sErr);

                                ui.WriteObjectAddLog(Globals.acObjectTypes.Task, sNewTaskID, dr["task_code"].ToString() + " - " + dr["task_name"].ToString(), "New - Created via Import");

                                break;

                            case "New Version":
                                //if it's a new version, we need to make sure the "original_task_id"
                                //is correct in the target database.
                                //(no guarantee the original_id in the source db is correct.)

                                //just jam in the new row, IF there are no GUID conflicts.

                                //~~~ NEW VERSION tasks get manipulated.
                                //* MIGHT have their ID changed if there's a collision
                                //* MIGHT have the original_task_id reset (to match the target)
                                //* WILL have the version reset to the user selection
                                //* WILL be loaded as 'Development' status
                                //* WILL NOT be the default version

                                //check ID
                                oTrans.Command.CommandText = "select count(*) from task" +
                                    " where task_id = '" + sTaskID + "'";
                                if (!oTrans.ExecGetSingleInteger(ref iCount, ref sErr))
                                    throw new Exception("Unable to check for GUID conflicts.<br />" + sErr);

                                //if there's a GUID conflict then just generate a new guid for this task.
                                //and re-id the steps
                                if (iCount > 0)
                                    sNewTaskID = ui.NewGUID();

                                //check the steps to see if there are any GUID conflicts
                                //and repair them if necessary
                                if (!ReIDSteps(ref oTrans, sUserID, sTaskID, ref sErr))
                                    throw new Exception("Unable to issue new Step GUIDs.<br />" + sErr);

                                //NOW, we need to make sure this task is connected to it's family
                                //we do this by ensuring the original_task_id matches.

                                //BUT, we got here by assuming the task_code was the key.
                                //so... find the original_task_id for this task_code
                                oTrans.Command.CommandText = "select original_task_id" +
                                    " from task where task_code = '" + sTaskCode + "' limit 1";
                                if (!oTrans.ExecGetSingleString(ref sOTID, ref sErr))
                                    throw new Exception("Unable to get original task ID for [" + sTaskCode + "].<br />" + sErr);

                                //insert the manipulated TASK
                                oTrans.Command.CommandText = "insert into task" +
                                    " (task_id, original_task_id, version," +
                                    " task_name, task_code, task_desc, task_status," +
                                    " use_connector_system, default_version," +
                                    " concurrent_instances, queue_depth, parameter_xml, created_dt)" +
                                    " select" +
                                    " '" + sNewTaskID + "', '" + sOTID + "', version," +
                                    " task_name, task_code, task_desc, 'Development'," +
                                    " use_connector_system, 0," +
                                    " concurrent_instances, queue_depth, parameter_xml, created_dt" +
                                    " from import_task" +
                                    " where user_id = '" + sUserID + "'" +
                                    " and task_id = '" + sTaskID + "'";

                                if (!oTrans.ExecUpdate(ref sErr))
                                    throw new Exception(sErr);

                                ui.WriteObjectAddLog(Globals.acObjectTypes.Task, sNewTaskID, dr["task_code"].ToString() + " - " + dr["task_name"].ToString(), "New Version - Created via Import");
                                break;

                            /*
                             Note: I stopped here because I'm not convinced that "Overwrite" is a safe or useful
                             feature.

                             So, we'll come back to it if needed.

                             Be aware, this was pseudocode... it never worked, was just placeholder stuff and ideas.
                             */

                            //case "Overwrite":
                            //    //stomp it, but make sure to set the task_id/original_task_id
                            //    //to match in the target db.
                            //    //just because the code matches doesn't mean the ID's do.

                            //    //we can just UPDATE the task row

                            //    //DON'T FORGET to DELETE the existing steps and codeblocks

                            //    //we need to make sure the "original_task_id"
                            //    //is correct in the target database.
                            //    //(no guarantee the original_id in the source db is correct.)

                            //    //~~~ OVERWRITE tasks get manipulated.
                            //    //* MIGHT have their ID changed to match the code/version being imported
                            //    //* MIGHT have the original_task_id reset (to match the target)
                            //    //* WILL have the version reset to the user selection
                            //    //* WILL be loaded as 'Development' status
                            //    //* MIGHT be the default version (not gonna update that value)

                            //    //NOW, we need to make sure this task is connected to it's family
                            //    //we do this by ensuring the original_task_id matches.

                            //    //BUT, we got here by assuming the task_code was the key.
                            //    //so... find the task AND original_task_id for this task_code
                            //    oTrans.Command.CommandText = "select top 1 task_id" +
                            //        " from task where task_code = '" + sTaskCode + "'";
                            //    if (!oTrans.ExecGetSingleString(ref sNewTaskID, ref sErr))
                            //        throw new Exception("Unable to get task ID for [" + sTaskCode + "].<br />" + sErr);
                            //    oTrans.Command.CommandText = "select top 1 original_task_id" +
                            //        " from task where task_code = '" + sTaskCode + "'";
                            //    if (!oTrans.ExecGetSingleString(ref sOTID, ref sErr))
                            //        throw new Exception("Unable to get original task ID for [" + sTaskCode + "].<br />" + sErr);

                            //    //get a datareader on the import_task row
                            //    sSQL = "select task_desc, manual_or_digital, use_connector_system," +
                            //        " concurrent_instances, queue_depth, parameter_xml, created_dt" +
                            //        " from import_task" +
                            //        " where user_id = '" + sUserID + "'" +
                            //        " and task_id = '" + sTaskID + "'";
                            //    OdbcDataReader drTaskRow = null;
                            //    if (!dc.sqlGetDataReader(ref drTaskRow, sSQL, ref sErr)) return false;

                            //    if (drTaskRow.HasRows)
                            //    {
                            //        //insert the manipulated TASK
                            //        //THIS WAS NEVER TESTED
                            //        oTrans.Command.CommandText = "update task" +
                            //            " set task_desc = ''," +
                            //            " manual_or_digital = ''," +
                            //            " use_connector_system = ''," +
                            //            " concurrent_instances = ''," +
                            //            " queue_depth = ''," +
                            //            " parameter_xml = ''," +
                            //            " created_dt = ''" +
                            //            " select" +
                            //            " '" + sNewTaskID + "', '" + sOTID + "', version," +
                            //            " task_name, task_code, task_desc, 'Development', manual_or_digital," +
                            //            " use_connector_system, 0," +
                            //            " concurrent_instances, queue_depth, parameter_xml, created_dt" +
                            //            " from import_task" +
                            //            " where user_id = '" + sUserID + "'" +
                            //            " and task_id = '" + sTaskID + "'";

                            //        if (!oTrans.ExecUpdate(ref sErr))
                            //            throw new Exception(sErr);
                            //    }

                            //    ui.WriteObjectAddLog(Globals.acObjectTypes.Task, sNewTaskID, dr["task_code"].ToString() + " - " + dr["task_name"].ToString(), "Overwritten by Import");

                            //    break;
                            default:
                                break;
                        }

                        //CODEBLOCKS AND STEPS can be done here... they are just inserted
                        // (because they were manipulated already if needed)

                        //CODEBLOCKS
                        oTrans.Command.CommandText = "insert into task_codeblock" +
                            " (task_id, codeblock_name)" +
                            " select" +
                            " '" + sNewTaskID + "', codeblock_name" +
                            " from import_task_codeblock" +
                            " where user_id = '" + sUserID + "'" +
                            " and task_id = '" + sTaskID + "'";
                        if (!oTrans.ExecUpdate(ref sErr))
                            throw new Exception(sErr);

                        //STEPS
                        oTrans.Command.CommandText = "insert into task_step" +
                            " (step_id, task_id, codeblock_name, step_order, commented," +
                            " locked, function_name, function_xml, step_desc, output_parse_type," +
                            " output_row_delimiter, output_column_delimiter, variable_xml)" +
                            " select" +
                            " step_id, '" + sNewTaskID + "', codeblock_name, step_order, commented," +
                            " locked, function_name, function_xml, step_desc, output_parse_type," +
                            " output_row_delimiter, output_column_delimiter, variable_xml" +
                            " from import_task_step" +
                            " where user_id = '" + sUserID + "'" +
                            " and task_id = '" + sTaskID + "'";
                        if (!oTrans.ExecUpdate(ref sErr))
                            throw new Exception(sErr);

                    }
                }
                else
                {
                    sErr = "No Task import items were found.";
                    oTrans.RollBack();
                    return false;
                }

                //whack those rows from the import table.
                //why?  their disposition has now changed, and we don't wanna accidentally reload them.
                //or add confusion to the user.
                oTrans.Command.CommandText = "delete from import_task where user_id = '" + sUserID + "' and task_id in (" + sTaskIDs + ")";
                if (!oTrans.ExecUpdate(ref sErr))
                    throw new Exception(sErr);

                oTrans.Command.CommandText = "delete from import_task_codeblock where user_id = '" + sUserID + "' and task_id in (" + sTaskIDs + ")";
                if (!oTrans.ExecUpdate(ref sErr))
                    throw new Exception(sErr);

                oTrans.Command.CommandText = "delete from import_task_step where user_id = '" + sUserID + "' and task_id in (" + sTaskIDs + ")";
                if (!oTrans.ExecUpdate(ref sErr))
                    throw new Exception(sErr);
            }

            //all done with everything... close it out
            oTrans.Commit();

            return true;
        }
Ejemplo n.º 27
0
        public string wmApproveTask(string sTaskID, string sMakeDefault)
        {
            dataAccess dc = new dataAccess();

            acUI.acUI ui = new acUI.acUI();

            try
            {
                string sUserID = ui.GetSessionUserID();

                if (ui.IsGUID(sTaskID) && ui.IsGUID(sUserID))
                {
                    string sErr = "";
                    string sSQL = "";

                    //check to see if this is the first task to be approved.
                    //if it is, we will make it default.
                    sSQL = "select count(*) from task" +
                        " where original_task_id = " +
                        " (select original_task_id from task where task_id = '" + sTaskID + "')" +
                        " and task_status = 'Approved'";

                    int iCount = 0;
                    if (!dc.sqlGetSingleInteger(ref iCount, sSQL, ref sErr))
                    {
                        throw new Exception("Unable to count Tasks in this family.." + sErr);
                    }

                    if (iCount == 0)
                        sMakeDefault = "1";

                    dataAccess.acTransaction oTrans = new dataAccess.acTransaction(ref sErr);

                    //flag all the other tasks as not default if this one is meant to be
                    if (sMakeDefault == "1")
                    {
                        sSQL = "update task set" +
                            " default_version = 0" +
                            " where original_task_id =" +
                            " (select original_task_id from (select original_task_id from task where task_id = '" + sTaskID + "') as x)";
                        oTrans.Command.CommandText = sSQL;
                        if (!oTrans.ExecUpdate(ref sErr))
                        {
                            throw new Exception("Unable to update task [" + sTaskID + "]." + sErr);
                        }
                        sSQL = "update task set" +
                        " task_status = 'Approved'," +
                        " default_version = 1" +
                        " where task_id = '" + sTaskID + "';";
                    }
                    else
                    {
                        sSQL = "update task set" +
                            " task_status = 'Approved'" +
                            " where task_id = '" + sTaskID + "'";
                    }

                    oTrans.Command.CommandText = sSQL;
                    if (!oTrans.ExecUpdate(ref sErr))
                    {
                        throw new Exception("Unable to update task [" + sTaskID + "]." + sErr);
                    }

                    oTrans.Commit();

                    ui.WriteObjectChangeLog(Globals.acObjectTypes.Task, sTaskID, "Status", "Development", "Approved");
                    if (sMakeDefault == "1")
                        ui.WriteObjectChangeLog(Globals.acObjectTypes.Task, sTaskID, "Default", "Set as Default Version.");

                }
                else
                {
                    throw new Exception("Unable to update task. Missing or invalid task id. [" + sTaskID + "]");
                }

            }
            catch (Exception ex)
            {
                throw ex;
            }
            return "";
        }
Ejemplo n.º 28
0
        public static string DeleteUsers(string sDeleteArray)
        {
            acUI.acUI ui = new acUI.acUI();

            string sSql = null;
            string sErr = "";

            string WhoAmI = ui.GetSessionUserID();

            try
            {
                ArrayList arrList = new ArrayList();
                arrList.AddRange(sDeleteArray.Split(','));

                if (sDeleteArray.Length < 36)
                {
                    return("");
                }


                StringBuilder sbDeleteNow   = new StringBuilder();
                StringBuilder sbDeleteLater = new StringBuilder();
                StringBuilder sbAll         = new StringBuilder();
                foreach (string sUserID in arrList)
                {
                    if (sUserID.Length == 36)
                    {
                        //you cannot delete yourself!!!
                        if (sUserID != WhoAmI)
                        {
                            sbAll.Append("'" + sUserID + "',");

                            //this will flag a user for later deletion by the system
                            //it returns the user_id back if it's safe to delete now
                            if (UserHasHistory(sUserID))
                            {
                                sbDeleteLater.Append("'" + sUserID + "',");
                            }
                            else
                            {
                                sbDeleteNow.Append("'" + sUserID + "',");
                            }
                        }
                    }
                }

                dataAccess.acTransaction oTrans = new dataAccess.acTransaction(ref sErr);

                // stuff to delete no matter what...
                if (sbAll.Length != 0)
                {
                    sbAll.Remove(sbAll.Length - 1, 1);

                    ////delete any attributes for these users
                    //sSql = "delete from user_assign_defaults where user_id in (" + sbAll.ToString() + ")";
                    //oTrans.Command.CommandText = sSql;
                    //if (!oTrans.ExecUpdate(ref sErr))
                    //    throw new Exception(sErr);
                }

                // delete some users...
                if (sbDeleteNow.Length != 0)
                {
                    sbDeleteNow.Remove(sbDeleteNow.Length - 1, 1);

                    sSql = "delete from users where user_id in (" + sbDeleteNow.ToString() + ")";
                    oTrans.Command.CommandText = sSql;
                    if (!oTrans.ExecUpdate(ref sErr))
                    {
                        throw new Exception(sErr);
                    }
                }

                // flag the others...
                if (sbDeleteLater.Length != 0)
                {
                    sbDeleteLater.Remove(sbDeleteLater.Length - 1, 1);

                    sSql = "update users set status = 86 where user_id in (" + sbDeleteLater.ToString() + ")";
                    oTrans.Command.CommandText = sSql;
                    if (!oTrans.ExecUpdate(ref sErr))
                    {
                        throw new Exception(sErr);
                    }
                }

                oTrans.Commit();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            return("User(s) deleted.");
        }
Ejemplo n.º 29
0
        private string CopyTask(int iMode, string sSourceTaskID, string sNewTaskName, string sNewTaskCode)
        {
            //iMode 0=new task, 1=new major version, 2=new minor version
            dataAccess dc = new dataAccess();
            acUI.acUI ui = new acUI.acUI();

            string sErr = "";
            string sSQL = "";

            string sNewTaskID = ui.NewGUID();

            int iIsDefault = 0;
            string sTaskName = "";
            double dVersion = 1.000;
            double dMaxVer = 0.000;
            string sOTID = "";

            //do it all in a transaction
            dataAccess.acTransaction oTrans = new dataAccess.acTransaction(ref sErr);

            //figure out the new name and selected version
            oTrans.Command.CommandText = "select task_name, version, original_task_id from task where task_id = '" + sSourceTaskID + "'";
            DataRow dr = null;
            if (!oTrans.ExecGetDataRow(ref dr, ref sErr))
                throw new Exception("Unable to find task for ID [" + sSourceTaskID + "]." + sErr);

            sTaskName = dr["task_name"].ToString();
            dVersion = Convert.ToDouble(dr["version"]);
            sOTID = dr["original_task_id"].ToString();

            //figure out the new version
            switch (iMode)
            {
                case 0:
                    sTaskName = sNewTaskName;
                    iIsDefault = 1;
                    dVersion = 1.000;
                    sOTID = sNewTaskID;

                    break;
                case 1:
                    //gotta get the highest version
                    sSQL = "select max(version) from task where task_id = '" + sOTID + "'";
                    dc.sqlGetSingleDouble(ref dMaxVer, sSQL, ref sErr);
                    if (sErr != "")
                    {
                        oTrans.RollBack();
                        throw new Exception(sErr);
                    }

                    dVersion = dMaxVer + 1;

                    break;
                case 2:
                    sSQL = "select max(version) from task where task_id = '" + sOTID + "'" +
                        " and cast(version as unsigned) = " + Convert.ToInt32(dVersion);
                    dc.sqlGetSingleDouble(ref dMaxVer, sSQL, ref sErr);
                    if (sErr != "")
                    {
                        oTrans.RollBack();
                        throw new Exception(sErr);
                    }

                    dVersion = dMaxVer + 0.001;

                    break;
                default: //a iMode is required
                    throw new Exception("A mode required for this copy operation." + sErr);
            }

            //if we are versioning, AND there are not yet any 'Approved' versions,
            //we set this new version to be the default
            //(that way it's the one that you get taken to when you pick it from a list)
            if (iMode > 0)
            {
                sSQL = "select case when count(*) = 0 then 1 else 0 end" +
                    " from task where original_task_id = '" + sOTID + "'" +
                    " and task_status = 'Approved'";
                dc.sqlGetSingleInteger(ref iIsDefault, sSQL, ref sErr);
                if (sErr != "")
                {
                    oTrans.RollBack();
                    throw new Exception(sErr);
                }
            }

            //start copying
            oTrans.Command.CommandText = "create temporary table _copy_task" +
                " select * from task where task_id = '" + sSourceTaskID + "'";
            if (!oTrans.ExecUpdate(ref sErr))
                throw new Exception(sErr);

            //update the task_id
            oTrans.Command.CommandText = "update _copy_task set" +
                " task_id = '" + sNewTaskID + "'," +
                " original_task_id = '" + sOTID + "'," +
                " version = '" + dVersion + "'," +
                " task_name = '" + sTaskName + "'," +
                " default_version = " + iIsDefault.ToString() + "," +
                " task_status = 'Development'," +
                " created_dt = now()";
            if (!oTrans.ExecUpdate(ref sErr))
                throw new Exception(sErr);

            //update the task_code if necessary
            if (iMode == 0)
            {
                oTrans.Command.CommandText = "update _copy_task set task_code = '" + sNewTaskCode + "'";
                if (!oTrans.ExecUpdate(ref sErr))
                    throw new Exception(sErr);
            }

            //codeblocks
            oTrans.Command.CommandText = "create temporary table _copy_task_codeblock" +
                " select '" + sNewTaskID + "' as task_id, codeblock_name" +
                " from task_codeblock where task_id = '" + sSourceTaskID + "'";
            if (!oTrans.ExecUpdate(ref sErr))
                throw new Exception(sErr);

            //USING TEMPORARY TABLES... need a place to hold step ids while we manipulate them
            oTrans.Command.CommandText = "create temporary table _step_ids" +
                " select distinct step_id, uuid() as newstep_id" +
                " from task_step where task_id = '" + sSourceTaskID + "'";
            if (!oTrans.ExecUpdate(ref sErr))
                throw new Exception(sErr);

            //steps temp table
            oTrans.Command.CommandText = "create temporary table _copy_task_step" +
                " select step_id, '" + sNewTaskID + "' as task_id, codeblock_name, step_order, commented," +
                " locked, function_name, function_xml, step_desc, output_parse_type, output_row_delimiter," +
                " output_column_delimiter, variable_xml" +
                " from task_step where task_id = '" + sSourceTaskID + "'";
            if (!oTrans.ExecUpdate(ref sErr))
                throw new Exception(sErr);

            //update the step id
            oTrans.Command.CommandText = "update _copy_task_step a, _step_ids b" +
                " set a.step_id = b.newstep_id" +
                " where a.step_id = b.step_id";
            if (!oTrans.ExecUpdate(ref sErr))
                throw new Exception(sErr);

            //update steps with codeblocks that reference a step (embedded steps)
            oTrans.Command.CommandText = "update _copy_task_step a, _step_ids b" +
                " set a.codeblock_name = b.newstep_id" +
                " where b.step_id = a.codeblock_name";
            if (!oTrans.ExecUpdate(ref sErr))
                throw new Exception(sErr);

            //spin the steps and update any embedded step id's in the commands
            oTrans.Command.CommandText = "select step_id, newstep_id from _step_ids";
            DataTable dtStepIDs = new DataTable();
            if (!oTrans.ExecGetDataTable(ref dtStepIDs, ref sErr))
                throw new Exception("Unable to get step ids." + sErr);

            foreach (DataRow drStepIDs in dtStepIDs.Rows)
            {
                oTrans.Command.CommandText = "update _copy_task_step" +
                    " set function_xml = replace(lower(function_xml), '" + drStepIDs["step_id"].ToString().ToLower() + "', '" + drStepIDs["newstep_id"].ToString() + "')" +
                    " where function_name in ('if','loop','exists')";
                if (!oTrans.ExecUpdate(ref sErr))
                    throw new Exception(sErr);
            }

            //finally, put the temp steps table in the real steps table
            oTrans.Command.CommandText = "insert into task select * from _copy_task";
            if (!oTrans.ExecUpdate(ref sErr))
                throw new Exception(sErr);

            oTrans.Command.CommandText = "insert into task_codeblock select * from _copy_task_codeblock";
            if (!oTrans.ExecUpdate(ref sErr))
                throw new Exception(sErr);

            oTrans.Command.CommandText = "insert into task_step select * from _copy_task_step";
            if (!oTrans.ExecUpdate(ref sErr))
                throw new Exception(sErr);

            //finally, if we versioned up and we set this one as the new default_version,
            //we need to unset the other row
            if (iMode > 0 && iIsDefault == 1)
            {
                oTrans.Command.CommandText = "update task" +
                    " set default_version = 0" +
                    " where original_task_id = '" + sOTID + "'" +
                    " and task_id <> '" + sNewTaskID + "'";
                if (!oTrans.ExecUpdate(ref sErr))
                    throw new Exception(sErr);
            }

            oTrans.Commit();

            return sNewTaskID;
        }
Ejemplo n.º 30
0
        public static string SaveDomain(object[] oAsset)
        {
            // we are passing in 4 elements, if we have 16 go
            if (oAsset.Length != 4)
            {
                return("Incorrect list of attributes:" + oAsset.Length.ToString());
            }

            string sEditDomain = oAsset[0].ToString();
            string sDomain     = oAsset[1].ToString().Replace("'", "''");
            string sAddress    = oAsset[2].ToString().Replace("'", "''");
            string sMode       = oAsset[3].ToString();

            dataAccess dc = new dataAccess();

            acUI.acUI ui   = new acUI.acUI();
            string    sSql = null;
            string    sErr = null;

            // before updating or adding make sure the domain name is available
            if (sEditDomain != sDomain)
            {
                try
                {
                    sSql = "select ldap_domain from ldap_domain where ldap_domain = '" + sDomain + "'";
                    string sDomainExists = "";
                    if (!dc.sqlGetSingleString(ref sDomainExists, sSql, ref sErr))
                    {
                        throw new Exception(sErr);
                    }
                    else
                    {
                        if (!string.IsNullOrEmpty(sDomainExists))
                        {
                            return("Domain name exists, choose another name.");
                        }
                    }
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
            }


            try
            {
                dataAccess.acTransaction oTrans = new dataAccess.acTransaction(ref sErr);

                // update the user fields.
                if (sMode == "edit")
                {
                    // if the domain name changed update all of the asset_credential's using this domain
                    if (sDomain != sEditDomain)
                    {
                        sSql = "update asset_credential set domain = '" + sDomain + "' where domain = '" + sEditDomain + "'";
                        oTrans.Command.CommandText = sSql;
                        if (!oTrans.ExecUpdate(ref sErr))
                        {
                            throw new Exception(sErr);
                        }
                    }


                    sSql = "update ldap_domain set ldap_domain = '" + sDomain + "'," + "address = '" + sAddress + "' where ldap_domain = '" + sEditDomain + "'";
                    oTrans.Command.CommandText = sSql;
                    if (!oTrans.ExecUpdate(ref sErr))
                    {
                        throw new Exception(sErr);
                    }
                }
                else
                {
                    sSql = "insert into ldap_domain (ldap_domain,address)" +
                           " values ('" + sDomain + "'," +
                           "'" + sAddress + "')";

                    oTrans.Command.CommandText = sSql;
                    if (!oTrans.ExecUpdate(ref sErr))
                    {
                        throw new Exception(sErr);
                    }
                }


                oTrans.Commit();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            // add security log
            if (sMode == "edit")
            {
                ui.WriteObjectChangeLog(Globals.acObjectTypes.Domain, sEditDomain, sEditDomain, sEditDomain, sDomain);
            }
            else
            {
                ui.WriteObjectAddLog(Globals.acObjectTypes.Domain, sDomain, sDomain, "Domain Created");
            }

            // no errors to here, so return an empty string
            return("");
        }
Ejemplo n.º 31
0
        public void wmDeleteStep(string sStepID)
        {
            dataAccess dc = new dataAccess();
            acUI.acUI ui = new acUI.acUI();

            try
            {
                string sErr = "";
                string sSQL = "";

                dataAccess.acTransaction oTrans = new dataAccess.acTransaction(ref sErr);

                //you have to know which one we are removing
                string sDeletedStepOrder = "0";
                string sTaskID = "";
                string sCodeblock = "";
                string sFunction = "";
                string sFunctionXML = "";

                sSQL = "select task_id, codeblock_name, step_order, function_name, function_xml" +
                    " from task_step where step_id = '" + sStepID + "'";

                DataRow dr = null;
                if (!dc.sqlGetDataRow(ref dr, sSQL, ref sErr))
                    throw new Exception("Unable to get details for step." + sErr);

                if (dr != null)
                {
                    sDeletedStepOrder = dr["step_order"].ToString();
                    sTaskID = dr["task_id"].ToString();
                    sCodeblock = dr["codeblock_name"].ToString();
                    sFunction = dr["function_name"].ToString();
                    sFunctionXML = dr["function_xml"].ToString();

                    //for logging, we'll stick the whole command XML into the log
                    //so we have a complete record of the step that was just deleted.
                    ui.WriteObjectDeleteLog(Globals.acObjectTypes.Task, sTaskID, sFunction,
                        "Codeblock:" + sCodeblock +
                        " Step Order:" + sDeletedStepOrder +
                        " Command Type:" + sFunction +
                        " Details:" + sFunctionXML);
                }

                //"embedded" steps have a codeblock name referencing their "parent" step.
                //if we're deleting a parent, whack all the children
                sSQL = "delete from task_step where codeblock_name = '" + sStepID + "'";
                oTrans.Command.CommandText = sSQL;
                if (!oTrans.ExecUpdate(ref sErr))
                    throw new Exception("Unable to delete step." + sErr);

                //step might have user_settings
                sSQL = "delete from task_step_user_settings where step_id = '" + sStepID + "'";
                oTrans.Command.CommandText = sSQL;
                if (!oTrans.ExecUpdate(ref sErr))
                    throw new Exception("Unable to delete step user settings." + sErr);

                //now whack the parent
                sSQL = "delete from task_step where step_id = '" + sStepID + "'";
                oTrans.Command.CommandText = sSQL;
                if (!oTrans.ExecUpdate(ref sErr))
                    throw new Exception("Unable to delete step." + sErr);

                sSQL = "update task_step set step_order = step_order - 1" +
                    " where task_id = '" + sTaskID + "'" +
                    " and codeblock_name = '" + sCodeblock + "'" +
                    " and step_order > " + sDeletedStepOrder;
                oTrans.Command.CommandText = sSQL;
                if (!oTrans.ExecUpdate(ref sErr))
                    throw new Exception("Unable to reorder steps after deletion." + sErr);

                oTrans.Commit();

            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Ejemplo n.º 32
0
        public static string DeleteClouds(string sDeleteArray)
        {
            dataAccess dc = new dataAccess();

            acUI.acUI ui   = new acUI.acUI();
            string    sSql = null;
            string    sErr = "";

            if (sDeleteArray.Length < 36)
            {
                return("");
            }

            sDeleteArray = ui.QuoteUp(sDeleteArray);

            DataTable dt = new DataTable();

            // get a list of ids that will be deleted for the log
            sSql = "select cloud_id, cloud_name, provider from clouds where cloud_id in (" + sDeleteArray + ")";
            if (!dc.sqlGetDataTable(ref dt, sSql, ref sErr))
            {
                throw new Exception(sErr);
            }

            try
            {
                dataAccess.acTransaction oTrans = new dataAccess.acTransaction(ref sErr);

                sSql = "delete from clouds where cloud_id in (" + sDeleteArray + ")";
                oTrans.Command.CommandText = sSql;
                if (!oTrans.ExecUpdate(ref sErr))
                {
                    throw new Exception(sErr);
                }

                //refresh the cloud account list in the session
                if (!ui.PutCloudAccountsInSession(ref sErr))
                {
                    throw new Exception(sErr);
                }

                oTrans.Commit();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            //reget the cloud providers class in the session
            ui.SetCloudProviders(ref sErr);
            if (!string.IsNullOrEmpty(sErr))
            {
                throw new Exception("Error: Unable to load Cloud Providers XML." + sErr);
            }

            // if we made it here, so save the logs
            foreach (DataRow dr in dt.Rows)
            {
                ui.WriteObjectDeleteLog(Globals.acObjectTypes.Cloud, dr["cloud_id"].ToString(), dr["cloud_name"].ToString(), dr["provider"].ToString() + " Cloud Deleted.");
            }

            return(sErr);
        }
Ejemplo n.º 33
0
        public static string SaveAccount(string sMode, string sAccountID, string sAccountName, string sAccountNumber, string sProvider, 
			string sLoginID, string sLoginPassword, string sLoginPasswordConfirm, string sIsDefault, string sAutoManageSecurity)
        {
            // for logging
            string sOriginalName = "";

            dataAccess dc = new dataAccess();
            acUI.acUI ui = new acUI.acUI();
            string sSql = "";
            string sErr = "";

            //if we are editing get the original values
            if (sMode == "edit")
            {
            }

            try
            {
                dataAccess.acTransaction oTrans = new dataAccess.acTransaction(ref sErr);

                // update the user fields.
                if (sMode == "edit")
                {
                    sSql = "select account_name from cloud_account " +
                           "where account_id = '" + sAccountID + "'";
                    if (!dc.sqlGetSingleString(ref sOriginalName, sSql, ref sErr))
                        throw new Exception("Error getting original account name:" + sErr);

                    // only update the passwword if it has changed
                    string sNewPassword = "";
                    if (sLoginPassword != "($%#d@x!&")
                    {
                        sNewPassword = "******" + dc.EnCrypt(sLoginPassword) + "'";
                    }

                    sSql = "update cloud_account set" +
                        " account_name = '" + sAccountName + "'," +
                        " account_number = '" + sAccountNumber + "'," +
                        " provider = '" + sProvider + "'," +
                        " is_default = '" + sIsDefault + "'," +
                        " auto_manage_security = '" + sAutoManageSecurity + "'," +
                        " login_id = '" + sLoginID + "'" +
                        sNewPassword +
                        " where account_id = '" + sAccountID + "'";

                    oTrans.Command.CommandText = sSql;
                    if (!oTrans.ExecUpdate(ref sErr))
                        throw new Exception("Error updating account: " + sErr);

                    ui.WriteObjectChangeLog(Globals.acObjectTypes.CloudAccount, sAccountID, sAccountName, sOriginalName, sAccountName);}
                else
                {
                    //now, for some reason we were having issues with the initial startup of apache
                    //not able to perform the very first database hit.
                    //this line serves as an inital db hit, but we aren't trapping it or showing the error
                    dc.TestDBConnection(ref sErr);

                    //if there are no rows yet, make this one the default even if the box isn't checked.
                    if (sIsDefault == "0")
                    {
                        int iExists = -1;

                        sSql = "select count(*) as cnt from cloud_account";
                        if (!dc.sqlGetSingleInteger(ref iExists, sSql, ref sErr))
                        {
                            System.Threading.Thread.Sleep(300);
                            if (!dc.sqlGetSingleInteger(ref iExists, sSql, ref sErr))
                            {
                                System.Threading.Thread.Sleep(300);
                                if (!dc.sqlGetSingleInteger(ref iExists, sSql, ref sErr))
                                    throw new Exception("Unable to count Cloud Accounts: " + sErr);
                            }
                        }

                        if (iExists == 0)
                            sIsDefault = "1";
                    }

                    sAccountID = ui.NewGUID();
                    sSql = "insert into cloud_account (account_id, account_name, account_number, provider, is_default, login_id, login_password, auto_manage_security)" +
                    " values ('" + sAccountID + "'," +
                    "'" + sAccountName + "'," +
                    "'" + sAccountNumber + "'," +
                    "'" + sProvider + "'," +
                    "'" + sIsDefault + "'," +
                    "'" + sLoginID + "'," +
                    "'" + dc.EnCrypt(sLoginPassword) + "'," +
                    "'" + sAutoManageSecurity + "')";

                    oTrans.Command.CommandText = sSql;
                    if (!oTrans.ExecUpdate(ref sErr))
                        throw new Exception("Error creating account: " + sErr);

                    ui.WriteObjectAddLog(Globals.acObjectTypes.CloudAccount, sAccountID, sAccountName, "Account Created");
                }

                //if "default" was selected, unset all the others
                if (dc.IsTrue(sIsDefault))
                {
                    oTrans.Command.CommandText = "update cloud_account set is_default = 0 where account_id <> '" + sAccountID + "'";
                    if (!oTrans.ExecUpdate(ref sErr))
                        throw new Exception("Error updating defaults: " + sErr);
                }

                oTrans.Commit();

                //refresh the cloud account list in the session
                if (!ui.PutCloudAccountsInSession(ref sErr))
                    throw new Exception("Error refreshing accounts in session: " + sErr);
            }
            catch (Exception ex)
            {
                throw new Exception("Error: General Exception: " + ex.Message);
            }

            // no errors to here, so return an empty string
            return "{'account_id':'" + sAccountID + "', 'account_name':'" + sAccountName + "', 'provider':'" + sProvider + "'}";
        }
Ejemplo n.º 34
0
        public string wmUpdateTag(string sOldTagName, string sNewTagName, string sDescription)
        {
            dataAccess dc = new dataAccess();
            acUI.acUI ui = new acUI.acUI();
            string sSQL = null;
            string sErr = null;

            //do the description no matter what just to be quick
            sSQL = "update lu_tags set tag_desc = '" + sDescription + "' where tag_name = '" + sNewTagName + "'";
            if (!dc.sqlExecuteUpdate(sSQL, ref sErr)) { throw new Exception(sErr); }

            //don't do this unless the name has changed
            if (sNewTagName != sOldTagName)
            {
                try
                {
                    sSQL = "select tag_name from lu_tags where tag_name = '" + sNewTagName + "'";
                    string sTagExists = "";
                    if (!dc.sqlGetSingleString(ref sTagExists, sSQL, ref sErr))
                        throw new Exception(sErr);
                    else
                    {
                        if (!string.IsNullOrEmpty(sTagExists))
                            return "Tag [" + sNewTagName + "] exists - choose another name.";
                    }
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }

                try
                {
                    dataAccess.acTransaction oTrans = new dataAccess.acTransaction(ref sErr);

                    sSQL = "update object_tags set tag_name = '" + sNewTagName + "' where tag_name = '" + sOldTagName + "'";
                    oTrans.Command.CommandText = sSQL;
                    if (!oTrans.ExecUpdate(ref sErr))
                        throw new Exception(sErr);

                    sSQL = "update lu_tags set tag_name = '" + sNewTagName + "'" +
                            " where tag_name = '" + sOldTagName + "'";
                    oTrans.Command.CommandText = sSQL;
                    if (!oTrans.ExecUpdate(ref sErr))
                    {
                        throw new Exception(sErr);
                    }

                    oTrans.Commit();

                    ui.WriteObjectChangeLog(acObjectTypes.None, sNewTagName, "", "Tag Updated [" + sOldTagName + "-->" + sNewTagName + "].");
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
            }

            // no errors to here, so return an empty string
            return "";
        }
Ejemplo n.º 35
0
        private void DeleteCodeblock(string sCodeblockID)
        {
            try
            {
                string sErr = "";

                dataAccess.acTransaction oTrans = new dataAccess.acTransaction(ref sErr);

                //first, delete any steps that are embedded content on steps in this codeblock
                //(because embedded steps have their parent step_id as the codeblock name.)
                oTrans.Command.CommandText = "delete em from task_step em" +
                    " join task_step p on em.task_id = p.task_id" +
                    " and em.codeblock_name = p.step_id" +
                    " where p.task_id = '" + sTaskID + "'" +
                    " and p.codeblock_name = '" + sCodeblockID + "'";
                if (!oTrans.ExecUpdate(ref sErr))
                {
                    ui.RaiseError(Page, "Unable to delete embedded Steps from Codeblock.", true, sErr);
                    return;
                }

                oTrans.Command.CommandText = "delete u from task_step_user_settings u" +
                    " join task_step ts on u.step_id = ts.step_id" +
                    " where ts.task_id = '" + sTaskID + "'" +
                    " and ts.codeblock_name = '" + sCodeblockID + "'";
                if (!oTrans.ExecUpdate(ref sErr))
                {
                    ui.RaiseError(Page, "Unable to delete Steps user settings for Steps in Codeblock.", true, sErr);
                    return;
                }

                oTrans.Command.CommandText = "delete from task_step" +
                    " where task_id = '" + sTaskID + "'" +
                    " and codeblock_name = '" + sCodeblockID + "'";
                if (!oTrans.ExecUpdate(ref sErr))
                {
                    ui.RaiseError(Page, "Unable to delete Steps from Codeblock.", true, sErr);
                    return;
                }

                oTrans.Command.CommandText = "delete from task_codeblock" +
                    " where task_id = '" + sTaskID + "'" +
                    " and codeblock_name = '" + sCodeblockID + "'";
                if (!oTrans.ExecUpdate(ref sErr))
                {
                    ui.RaiseError(Page, "Unable to delete Codeblock.", true, sErr);
                    return;
                }

                oTrans.Commit();

                if (!GetCodeblocks(ref sErr))
                {
                    ui.RaiseError(Page, "Warning.  Successfully deleted the Codeblock" +
                        " but there was an error refreshing the page.  Please reload the page manually. " + sErr, true, "");
                    return;
                }

                if (!GetSteps("MAIN", ref sErr))
                {
                    ui.RaiseError(Page, "Warning.  Successfully deleted the Codeblock" +
                        " but there was an error refreshing the page.  Please reload the page manually. " + sErr, true, "");
                    return;
                }

                udpSteps.Update();

            }
            catch (Exception ex)
            {
                ui.RaiseError(Page, "Exception:", true, ex.Message);
            }
        }
Ejemplo n.º 36
0
        public static string SaveNewUser(object[] oUser)
        {
            dataAccess dc = new dataAccess();

            acUI.acUI       ui   = new acUI.acUI();
            acUI.AppGlobals ag   = new acUI.AppGlobals();
            string          sSql = null;
            string          sErr = null;


            // check the number of properties
            if (oUser.Length != 10)
            {
                return("Incorrect list of user properties");
            }

            string sLoginID             = oUser[0].ToString();
            string sFullName            = oUser[1].ToString();
            string sAuthType            = oUser[2].ToString();
            string sUserPassword        = oUser[3].ToString();
            string sGeneratePW          = oUser[4].ToString();
            string sForcePasswordChange = oUser[5].ToString();
            string sUserRole            = oUser[6].ToString();
            string sEmail      = oUser[7].ToString();
            string sStatus     = oUser[8].ToString();
            string sGroupArray = oUser[9].ToString();


            // checks that cant be done on the client side
            // is the name unique?
            string sInuse = "";

            if (!dc.sqlGetSingleString(ref sInuse, "select user_id from users where username = '******' limit 1", ref sErr))
            {
                return("sErr");
            }
            else
            {
                if (!string.IsNullOrEmpty(sInuse))
                {
                    return("Login ID '" + sLoginID + "' is unavailable, please choose another.");
                }
            }

            // password
            string sPassword = null;

            if (sAuthType == "local")
            {
                if (sGeneratePW == "1") //generate an initial strong password
                {
                    sUserPassword = dc.GenerateNewPassword();
                }

                sPassword = "******" + dc.EnCrypt(sUserPassword) + "'";
            }
            else if (sAuthType == "ldap")
            {
                sPassword = "******";
            }
            else
            {
                return("Unknown Authentication Type.");
            }

            // passed client and server validations, create the user
            string sNewUserID = ui.NewGUID();


            try
            {
                dataAccess.acTransaction oTrans = new dataAccess.acTransaction(ref sErr);


                // all good, save the new user and redirect to the user edit page.
                sSql = "insert users" +
                       " (user_id,username,full_name,authentication_type,user_password,force_change,email,status,user_role)" +
                       " values " +
                       "('" + sNewUserID + "'," +
                       "'" + sLoginID.Trim().Replace("'", "''") + "'," +
                       "'" + sFullName.Trim().Replace("'", "''") + "'," +
                       "'" + sAuthType + "'," + sPassword + "," +
                       "'" + sForcePasswordChange + "'," +
                       "'" + sEmail.Trim() + "'," +
                       "'" + sStatus + "'," +
                       "'" + sUserRole + "'" +
                       ")";
                oTrans.Command.CommandText = sSql;
                if (!oTrans.ExecUpdate(ref sErr))
                {
                    throw new Exception(sErr);
                }


                #region "groups"
                // add user groups, if there are any
                if (sGroupArray.Length > 0)
                {
                    ArrayList aGroups = new ArrayList(sGroupArray.Split(','));
                    foreach (string sGroupName in aGroups)
                    {
                        sSql = "insert object_tags (object_id, object_type, tag_name)" +
                               " values ('" + sNewUserID + "', 1, '" + sGroupName + "')";
                        oTrans.Command.CommandText = sSql;
                        if (!oTrans.ExecUpdate(ref sErr))
                        {
                            throw new Exception(sErr);
                        }
                    }
                }
                #endregion

                oTrans.Commit();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }



            // add security log
            ui.WriteObjectAddLog(Globals.acObjectTypes.User, sNewUserID, sFullName.Trim().Replace("'", "''"), "");

            //email out the password
            string sBody = "";
            if (!dc.sqlGetSingleString(ref sBody, "select new_user_email_message from login_security_settings where id = 1", ref sErr))
            {
                throw new Exception(sErr);
            }

            //default message if undefined in the table
            if (string.IsNullOrEmpty(sBody))
            {
                sBody = sFullName + " - an account has been created for you in " + ag.APP_NAME + "." + Environment.NewLine + Environment.NewLine +
                        "Your User Name: " + sLoginID + "." + Environment.NewLine +
                        "Your temporary password: "******"." + Environment.NewLine;
            }

            //replace our special tokens with the values
            sBody = sBody.Replace("##FULLNAME##", sFullName).Replace("##USERNAME##", sLoginID);

            if (sGeneratePW == "1")
            {
                sBody = sBody.Replace("##PASSWORD##", sUserPassword);
            }
            else
            {
                sBody = sBody.Replace("##PASSWORD##", "Will be provided by an Administrator.");
            }

            if (!ui.SendEmailMessage(sEmail.Trim(), ag.APP_COMPANYNAME + " Account Management", "Welcome to " + ag.APP_COMPANYNAME, sBody, ref sErr))
            {
                throw new Exception(sErr);
            }

            // no errors to here, so return an empty string

            return("");
        }