public EstateSettings GetEstateSettings(UUID regionID) { object remoteValue = DoRemote(regionID); if (remoteValue != null || m_doRemoteOnly) return (EstateSettings)remoteValue; EstateSettings settings = new EstateSettings() { EstateID = 0 }; int estateID = GetEstateID(regionID); if (estateID == 0) return settings; settings = GetEstate(estateID); return settings; }
public int CreateNewEstate(EstateSettings es, UUID RegionID) { object remoteValue = DoRemote(es.ToOSD(), RegionID); if (remoteValue != null || m_doRemoteOnly) return (int)remoteValue; int estateID = GetEstate(es.EstateOwner, es.EstateName); if (estateID > 0) { if (LinkRegion(RegionID, estateID)) return estateID; return 0; } es.EstateID = GetNewEstateID(); SaveEstateSettings(es, true); LinkRegion(RegionID, (int)es.EstateID); return (int)es.EstateID; }
private static OSDMap EstateSettings2WebOSD(EstateSettings ES) { OSDMap es = ES.ToOSD(); OSDArray bans = (OSDArray)es["EstateBans"]; OSDArray Bans = new OSDArray(bans.Count); foreach (OSDMap ban in bans) { Bans.Add(OSD.FromUUID(ban["BannedUserID"])); } es["EstateBans"] = Bans; return es; }
protected void SaveEstateSettings(EstateSettings es, bool doInsert) { Dictionary<string, object> values = new Dictionary<string, object>(5); values["EstateID"] = es.EstateID; values["EstateName"] = es.EstateName; values["EstateOwner"] = es.EstateOwner; values["ParentEstateID"] = es.ParentEstateID; values["Settings"] = OSDParser.SerializeJsonString(es.ToOSD()); if (!doInsert) { QueryFilter filter = new QueryFilter(); filter.andFilters["EstateID"] = es.EstateID; GD.Update(m_estateTable, values, null, filter, null, null); } else { GD.Insert(m_estateTable, values); } }
private EstateSettings GetEstate(int estateID) { QueryFilter filter = new QueryFilter(); filter.andFilters["EstateID"] = estateID; List<string> retVals = GD.Query(new string[1] { "*" }, m_estateTable, filter, null, null, null); EstateSettings settings = new EstateSettings{ EstateID = 0 }; if (retVals.Count > 0) { settings.FromOSD((OSDMap)OSDParser.DeserializeJson(retVals[4])); } return settings; }
public void SaveEstateSettings(EstateSettings es) { object remoteValue = DoRemote(es.ToOSD()); if (remoteValue != null || m_doRemoteOnly) return; SaveEstateSettings(es, false); }
private EstateSettings CreateEstateInfo(IScene scene) { EstateSettings ES = new EstateSettings(); while (true) { IEstateConnector EstateConnector = Aurora.DataManager.DataManager.RequestPlugin<IEstateConnector>(); string name = MainConsole.Instance.Prompt("Estate owner name", LastEstateOwner); UserAccount account = scene.UserAccountService.GetUserAccount(scene.RegionInfo.ScopeID, name); if (account == null) { string createNewUser = MainConsole.Instance.Prompt("Could not find user " + name + ". Would you like to create this user?", "yes"); if (createNewUser == "yes") { // Create a new account string password = MainConsole.Instance.PasswordPrompt(name + "'s password"); string email = MainConsole.Instance.Prompt(name + "'s email", ""); scene.UserAccountService.CreateUser(name, Util.Md5Hash(password), email); account = scene.UserAccountService.GetUserAccount(scene.RegionInfo.ScopeID, name); if (account == null) { MainConsole.Instance.ErrorFormat("[EstateService]: Unable to store account. If this simulator is connected to a grid, you must create the estate owner account first."); continue; } } else continue; } LastEstateOwner = account.Name; List<EstateSettings> ownerEstates = EstateConnector.GetEstates (account.PrincipalID); string response = (ownerEstates != null && ownerEstates.Count > 0) ? "yes" : "no"; if (ownerEstates != null && ownerEstates.Count > 0) { MainConsole.Instance.WarnFormat("Found user. {0} has {1} estates currently. {2}", account.Name, ownerEstates.Count, "These estates are the following:"); foreach (EstateSettings t in ownerEstates) { MainConsole.Instance.Warn(t.EstateName); } response = MainConsole.Instance.Prompt ("Do you wish to join one of these existing estates? (Options are {yes, no, cancel})", response, new List<string> { "yes", "no", "cancel" }); } else { MainConsole.Instance.WarnFormat("Found user. {0} has no estates currently. Creating a new estate.", account.Name); } if (response == "no") { // Create a new estate // ES could be null ES.EstateName = MainConsole.Instance.Prompt("New estate name (or cancel to go back)", "My Estate"); if (ES.EstateName == "cancel") continue; //Set to auto connect to this region next LastEstateName = ES.EstateName; ES.EstateOwner = account.PrincipalID; ES.EstateID = (uint)EstateConnector.CreateNewEstate(ES, scene.RegionInfo.RegionID); if (ES.EstateID == 0) { MainConsole.Instance.Warn("There was an error in creating this estate: " + ES.EstateName); //EstateName holds the error. See LocalEstateConnector for more info. continue; } break; } if (response == "yes") { if (ownerEstates != null && ownerEstates.Count != 1) { if (LastEstateName == "") LastEstateName = ownerEstates[0].EstateName; #if (!ISWIN) List<string> responses = new List<string>(); foreach (EstateSettings settings in ownerEstates) responses.Add(settings.EstateName); #else List<string> responses = ownerEstates.Select(settings => settings.EstateName).ToList(); #endif responses.Add ("None"); responses.Add ("Cancel"); response = MainConsole.Instance.Prompt("Estate name to join", LastEstateName, responses); if (response == "None" || response == "Cancel") continue; LastEstateName = response; } else if (ownerEstates != null) LastEstateName = ownerEstates[0].EstateName; int estateID = EstateConnector.GetEstate(account.PrincipalID, LastEstateName); if (estateID == 0) { MainConsole.Instance.Warn("The name you have entered matches no known estate. Please try again"); continue; } //We save the Password because we have to reset it after we tell the EstateService about it, as it clears it for security reasons if (EstateConnector.LinkRegion(scene.RegionInfo.RegionID, estateID)) { if ((ES = EstateConnector.GetEstateSettings(scene.RegionInfo.RegionID)) == null || ES.EstateID == 0) //We could do by EstateID now, but we need to completely make sure that it fully is set up { MainConsole.Instance.Warn("The connection to the server was broken, please try again soon."); continue; } MainConsole.Instance.Warn("Successfully joined the estate!"); break; } MainConsole.Instance.Warn("Joining the estate failed. Please try again."); continue; } } return ES; }
public void LoadModuleFromArchive(byte[] data, string filePath, TarArchiveReader.TarEntryType type, IScene scene) { if (filePath.StartsWith("estate/")) { string estateData = Encoding.UTF8.GetString(data); EstateSettings settings = new EstateSettings(WebUtils.ParseXmlResponse(estateData)); scene.RegionInfo.EstateSettings = settings; } else if (filePath.StartsWith("regioninfo/")) { string m_merge = MainConsole.Instance.Prompt("Should we load the region information from the archive (region name, region position, etc)?", "false"); RegionInfo settings = new RegionInfo(); settings.UnpackRegionInfoData((OSDMap)OSDParser.DeserializeLLSDBinary(data)); if (m_merge == "false") { //Still load the region settings though scene.RegionInfo.RegionSettings = settings.RegionSettings; return; } settings.RegionSettings = scene.RegionInfo.RegionSettings; settings.EstateSettings = scene.RegionInfo.EstateSettings; scene.RegionInfo = settings; } }
public override void FinishedMigration(IDataConnector genericData) { if (!genericData.TableExists("estates")) return; DataReaderConnection dr = genericData.QueryData("WHERE `Key` = 'EstateID'", "estates", "`ID`, `Key`, `Value`"); if (dr != null) { try { while (dr.DataReader.Read()) { try { UUID ID = UUID.Parse(dr.DataReader["ID"].ToString()); string value = dr.DataReader["Value"].ToString(); QueryFilter filter = new QueryFilter(); filter.andFilters["`ID`"] = value; filter.andFilters["`Key`"] = "EstateSettings"; List<string> results = genericData.Query(new string[1] { "`Value`" }, "estates", filter, null, null, null); if ((results != null) && (results.Count >= 1)) { EstateSettings es = new EstateSettings(); es.FromOSD((OSDMap)OSDParser.DeserializeLLSDXml(results[0])); genericData.Insert("estateregions", new object[] { ID, value }); filter = new QueryFilter(); filter.andFilters["`EstateID`"] = value; List<string> exist = genericData.Query(new string[1] { "`EstateID`" }, "estatesettings", filter, null, null, null); if (exist == null || exist.Count == 0) { genericData.Insert("estatesettings", new object[] { value, es.EstateName, es.EstateOwner, es.ParentEstateID, es.ToOSD() }); } } } catch { } } } catch { } finally { dr.DataReader.Close(); genericData.CloseDatabase(dr); } } }
protected void SaveEstateSettings(EstateSettings es, bool doInsert) { string[] keys = new string[5] { "EstateID", "EstateName", "EstateOwner", "ParentEstateID", "Settings" }; object[] values = new object[5] { es.EstateID, es.EstateName, es.EstateOwner, es.ParentEstateID, OSDParser.SerializeJsonString(es.ToOSD()) }; if (!doInsert) GD.Update(m_estateTable, values, keys, new string[1] { "EstateID" }, new object[1] { es.EstateID }); else GD.Insert(m_estateTable, keys, values); }
private bool CheckEstateGroups(EstateSettings ES, AgentCircuitData agent) { IGroupsModule gm = m_scenes.Count == 0 ? null : m_scenes[0].RequestModuleInterface<IGroupsModule>(); if (gm != null && ES.EstateGroups.Length > 0) { List<UUID> esGroups = new List<UUID>(ES.EstateGroups); GroupMembershipData[] gmds = gm.GetMembershipData(agent.AgentID); #if (!ISWIN) foreach (GroupMembershipData gmd in gmds) { if (esGroups.Contains(gmd.GroupID)) return true; } return false; #else return gmds.Any(gmd => esGroups.Contains(gmd.GroupID)); #endif } return false; }
public void LoadFromFile() { GZipStream m_loadStream = new GZipStream(ArchiveHelpers.GetStream(m_fileName), CompressionMode.Decompress); TarArchiveReader reader = new TarArchiveReader(m_loadStream); byte[] data; string filePath; TarArchiveReader.TarEntryType entryType; #region Our Region Info IParcelServiceConnector parcelService = Aurora.DataManager.DataManager.RequestPlugin<IParcelServiceConnector>(); SceneManager sceneManager = m_simulationBase.ApplicationRegistry.RequestModuleInterface<SceneManager>(); RegionInfo regionInfo = new RegionInfo(); IScene fakeScene = new Scene(); fakeScene.AddModuleInterfaces(m_simulationBase.ApplicationRegistry.GetInterfaces()); #endregion while ((data = reader.ReadEntry(out filePath, out entryType)) != null) { if (TarArchiveReader.TarEntryType.TYPE_DIRECTORY == entryType) continue; if (filePath.StartsWith("estate/")) { string estateData = Encoding.UTF8.GetString(data); EstateSettings settings = new EstateSettings(WebUtils.ParseXmlResponse(estateData)); regionInfo.EstateSettings = settings; } else if (filePath.StartsWith("regioninfo/")) { regionInfo.UnpackRegionInfoData((OSDMap)OSDParser.DeserializeLLSDBinary(data)); } } if (!m_useExistingRegionInfo) { regionInfo.RegionID = UUID.Random(); regionInfo.RegionName = MainConsole.Instance.Prompt("Region Name: ", regionInfo.RegionName); regionInfo.RegionLocX = int.Parse(MainConsole.Instance.Prompt("Region Position X: ", regionInfo.RegionLocX.ToString())); regionInfo.RegionLocY = int.Parse(MainConsole.Instance.Prompt("Region Position Y: ", regionInfo.RegionLocY.ToString())); regionInfo.InternalEndPoint.Port = int.Parse(MainConsole.Instance.Prompt("HTTP Port: ", regionInfo.InternalEndPoint.Port.ToString())); } //ISimulationDataStore simulationStore = sceneManager.SimulationDataService; //Hijack the old simulation service and replace it with ours sceneManager.SimulationDataService = new OverridenFileBasedSimulationData (m_fileName, m_saveNewArchiveAtClose); ///Now load the region! sceneManager.AllRegions++; sceneManager.StartNewRegion (regionInfo); }