/// <summary>
        /// Adds a new abuse report to the database
        /// </summary>
        /// <param name="report"></param>
        /// <param name="Password"></param>
        public void AddAbuseReport(AbuseReport report)
		{
            List<object> InsertValues = new List<object>();
			InsertValues.Add(report.Category);
			InsertValues.Add(report.ReporterName);
			InsertValues.Add(report.ObjectName);
			InsertValues.Add(report.ObjectUUID);
			InsertValues.Add(report.AbuserName);
			InsertValues.Add(report.AbuseLocation);
			InsertValues.Add(report.AbuseDetails);
			InsertValues.Add(report.ObjectPosition);
            InsertValues.Add(report.RegionName);
			InsertValues.Add(report.ScreenshotID);
			InsertValues.Add(report.AbuseSummary);

			//We do not trust the number sent by the region. Always find it ourselves
			List<string> values = GD.Query("", "", "abusereports", "Number", " ORDER BY Number DESC");
			if (values.Count == 0)
				report.Number = 0;
			else
				report.Number = int.Parse(values[0]);

            report.Number++;

			InsertValues.Add(report.Number);

			InsertValues.Add(report.AssignedTo);
            InsertValues.Add(report.Active ? 1 : 0);
            InsertValues.Add(report.Checked ? 1 : 0);
			InsertValues.Add(report.Notes);

			GD.Insert("abusereports", InsertValues.ToArray());
		}
        /// <summary>
        /// Gets the abuse report associated with the number and uses the pass to authenticate.
        /// </summary>
        /// <param name="Number"></param>
        /// <param name="Password"></param>
        /// <returns></returns>
        public AbuseReport GetAbuseReport(int Number, string Password)
		{
            if (!CheckPassword(Password))
                return null;
			AbuseReport report = new AbuseReport();
            List<string> Reports = GD.Query("Number", Number, "abusereports", "*");
            if (Reports.Count == 0)
                return null;
            report.Category = Reports[0];
			report.ReporterName = Reports[1];
			report.ObjectName = Reports[2];
			report.ObjectUUID = new UUID(Reports[3]);
			report.AbuserName = Reports[4];
			report.AbuseLocation = Reports[5];
			report.AbuseDetails = Reports[6];
			report.ObjectPosition = Reports[7];
            report.RegionName = Reports[8];
			report.ScreenshotID = new UUID(Reports[9]);
			report.AbuseSummary = Reports[10];
			report.Number = int.Parse(Reports[11]);
			report.AssignedTo = Reports[12];
			report.Active = int.Parse(Reports[13]) == 1;
			report.Checked = int.Parse(Reports[14]) == 1;
			report.Notes = Reports[15];
			return report;
		}
        /// <summary>
        /// Updates an abuse report and authenticates with the password.
        /// </summary>
        /// <param name="report"></param>
        /// <param name="Password"></param>
        public void UpdateAbuseReport(AbuseReport report, string Password)
        {
            if (!CheckPassword(Password))
                return;
            //This is update, so we trust the number as it should know the number it's updating now.
            List<object> InsertValues = new List<object>();
            InsertValues.Add(report.Category);
            InsertValues.Add(report.ReporterName);
            InsertValues.Add(report.ObjectName);
            InsertValues.Add(report.ObjectUUID);
            InsertValues.Add(report.AbuserName);
            InsertValues.Add(report.AbuseLocation);
            InsertValues.Add(report.AbuseDetails);
            InsertValues.Add(report.ObjectPosition);
            InsertValues.Add(report.RegionName);
            InsertValues.Add(report.ScreenshotID);
            InsertValues.Add(report.AbuseSummary);
            InsertValues.Add(report.Number);

            InsertValues.Add(report.AssignedTo);
            InsertValues.Add(report.Active ? 1 : 0);
            InsertValues.Add(report.Checked ? 1 : 0);
            InsertValues.Add(report.Notes);

            List<string> InsertKeys = new List<string>();
            InsertKeys.Add("Category");
            InsertKeys.Add("ReporterName");
            InsertKeys.Add("ObjectName");
            InsertKeys.Add("ObjectUUID");
            InsertKeys.Add("AbuserName");
            InsertKeys.Add("AbuseLocation");
            InsertKeys.Add("AbuseDetails");
            InsertKeys.Add("ObjectPosition");
            InsertKeys.Add("EstateID");
            InsertKeys.Add("ScreenshotID");
            InsertKeys.Add("AbuseSummary");
            InsertKeys.Add("Number");
            InsertKeys.Add("AssignedTo");
            InsertKeys.Add("Active");
            InsertKeys.Add("Checked");
            InsertKeys.Add("Notes");

            GD.Replace("abusereports", InsertKeys.ToArray(),InsertValues.ToArray());
        }
Example #4
0
        /// <summary>
        /// This deals with saving the report into the database.
        /// </summary>
        /// <param name="client"></param>
        /// <param name="regionName"></param>
        /// <param name="abuserID"></param>
        /// <param name="catagory"></param>
        /// <param name="checkflags"></param>
        /// <param name="details"></param>
        /// <param name="objectID"></param>
        /// <param name="position"></param>
        /// <param name="reportType"></param>
        /// <param name="screenshotID"></param>
        /// <param name="summery"></param>
        /// <param name="reporter"></param>
        private void UserReport(IClientAPI client, string regionName,UUID abuserID, byte catagory, byte checkflags, string details, UUID objectID, Vector3 position, byte reportType ,UUID screenshotID, string summery, UUID reporter)
        {
            AbuseReport report = new AbuseReport();
            report.ObjectUUID = objectID;
            report.ObjectPosition = position.ToString();
            report.Active = true;
            report.Checked = false;
            report.Notes = "";
            report.AssignedTo = "No One";
            report.ScreenshotID = screenshotID;
            if (objectID != UUID.Zero)
            {
                SceneObjectPart Object = ((Scene)client.Scene).GetSceneObjectPart(objectID);
                report.ObjectName = Object.Name;
            }
        	else
                report.ObjectName = "";

        	string [] detailssplit = details.Split('\n');

            string AbuseDetails = detailssplit[4];
            if (detailssplit.Length != 4)
            {
                AbuseDetails = "";
                for(int i = 4; i < detailssplit.Length; i++)
                {
                    AbuseDetails+= detailssplit[i] + "\n";
                }
            }

            report.AbuseDetails = AbuseDetails;

            report.ReporterName = client.Name;
            
            /*summery = summery.Replace("\"", "`");
        	summery =summery.Replace("|","");
        	summery =summery.Replace(")","");
        	summery =summery.Replace("(","");
        	summery =summery.Replace("{","`");
        	summery =summery.Replace("}","`");
        	summery =summery.Replace("[","`");
        	summery =summery.Replace("]","`");
        	string [] summerysplit = summery.Split(' ');
            report.RegionName = summerysplit[1];
            report.AbuseLocation = summerysplit[2];
        	
            //Right
        	string [] summerysplit2 = summery.Split(new Char [] {'`'});
        	report.Category = summerysplit2[1];
            report.AbuseSummary = summerysplit2[5];
            report.AbuserName = summerysplit2[3];
        	//Since the server doesn't trust this anyway...
            report.Number = (-1);*/

            string[] findRegion = summery.Split('|');
            report.RegionName = findRegion[1];

            string[] findLocation = summery.Split('(');
            string[] findLocationend = findLocation[1].Split(')');
            report.AbuseLocation = findLocationend[0];

            string[] findCategory = summery.Split('[');
            string[] findCategoryend = findCategory[1].Split(']');
            report.Category = findCategoryend[0];

            string[] findAbuserName = summery.Split('{');
            string[] findAbuserNameend = findAbuserName[1].Split('}');
            report.AbuserName = findAbuserNameend[0];

            string[] findSummary = summery.Split('\"');

            string abuseSummary = findSummary[1];
            if (findSummary.Length != 2)
            {
                abuseSummary = "";
                for (int i = 2; i < detailssplit.Length; i++)
                {
                    abuseSummary += findSummary[i] + "\n";
                }
            }

            report.AbuseSummary = abuseSummary;


            report.Number = (-1);

            EstateSettings ES = client.Scene.RegionInfo.EstateSettings;
            if (ES.AbuseEmailToEstateOwner && ES.AbuseEmail != "")
            {
                IEmailModule Email = m_SceneList[0].RequestModuleInterface<IEmailModule>();
                if(Email != null)
                    Email.SendEmail(UUID.Zero, ES.AbuseEmail, "Abuse Report", "This abuse report was submitted by " +
                        report.ReporterName + " against " + report.AbuserName + " at " + report.AbuseLocation + " in your region " + report.RegionName +
                        ". Summary: " + report.AbuseSummary + ". Details: " + report.AbuseDetails + ".");
            }
            IAbuseReportsConnector conn = Aurora.DataManager.DataManager.RequestPlugin<IAbuseReportsConnector>();
            if(conn != null)
                conn.AddAbuseReport(report);
        }