/// <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()); }
/// <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); }