public bool LoadEstateSettings(UUID regionID, out EstateSettings settings)
		{
            settings = null;
            List<string> estateID = GD.Query(new string[] { "ID", "`Key`" }, new object[] { regionID, "EstateID" }, "estates", "`Value`");
            if (estateID.Count != 0)
                settings = LoadEstateSettings(Convert.ToInt32(estateID[0]));
			return true;
		}
        public bool LoadEstateSettings(UUID regionID, out EstateSettings settings)
        {
            Dictionary<string, object> sendData = new Dictionary<string, object>();
            settings = null;

            //This DOES have a reason, the RemoteEstateService will not send back
            //  the EstatePass anywhere (for security reasons),
            //  so we need to save it so that we can restore it later.
            EstateSettings ES = new EstateSettings();
            string Password = ES.EstatePass;

            sendData["REGIONID"] = regionID.ToString();
            sendData["METHOD"] = "loadestatesettings";

            string reqString = WebUtils.BuildQueryString(sendData);

            try
            {
                IConfigurationService configService = m_registry.RequestModuleInterface<IConfigurationService> ();
                List<string> m_ServerURIs = configService.FindValueOf ("RemoteServerURI");
                foreach (string m_ServerURI in m_ServerURIs)
                {
                    string reply = SynchronousRestFormsRequester.MakeRequest("POST",
                        m_ServerURI,
                        reqString);
                    if (reply != string.Empty)
                    {
                        Dictionary<string, object> replyData = WebUtils.ParseXmlResponse(reply);

                        if (replyData != null && (!replyData.ContainsKey("Result") || replyData["Result"].ToString() != "Failure"))
                        {
                            settings = new EstateSettings(replyData);
                            settings.OnSave += SaveEstateSettings;
                            settings.EstatePass = Password; //Restore it here, see above for explaination
                            return true;
                        }
                        else if (replyData.ContainsKey("Result") && replyData["Result"].ToString() == "Failure")
                        {
                            return true;
                        }
                        else
                            m_log.DebugFormat("[AuroraRemoteEstateConnector]: LoadEstateSettings {0} received null response",
                                regionID);
                        return false;
                    }
                }
            }
            catch (Exception e)
            {
                m_log.WarnFormat("[AuroraRemoteEstateConnector]: Exception when contacting server: {0}", e.ToString());
            }

            return false;
        }
		public OpenSim.Framework.EstateSettings LoadEstateSettings(int estateID)
		{
            EstateSettings settings = new EstateSettings();
            List<string> query = null;
            try
            {
                query = GD.Query(new string[] { "ID", "`Key`" }, new object[] { estateID, "EstateSettings" }, "estates", "Value");
            }
            catch
            {
            }
            if (query == null || query.Count == 0)
                return settings; //Couldn't find it, return default then.

            OSDMap estateInfo = (OSDMap)OSDParser.DeserializeLLSDXml(query[0]);

            settings.AbuseEmail = estateInfo["AbuseEmail"].AsString();
            settings.AbuseEmailToEstateOwner = estateInfo["AbuseEmailToEstateOwner"].AsInteger() == 1;
            settings.AllowDirectTeleport = estateInfo["AllowDirectTeleport"].AsInteger() == 1;
            settings.AllowVoice = estateInfo["AllowVoice"].AsInteger() == 1;
            settings.BillableFactor = (float)estateInfo["BillableFactor"].AsReal();
            settings.BlockDwell = estateInfo["BlockDwell"].AsInteger() == 1;
            settings.DenyAnonymous = estateInfo["DenyAnonymous"].AsInteger() == 1;
            settings.DenyIdentified = estateInfo["DenyIdentified"].AsInteger() == 1;
            settings.DenyMinors = estateInfo["DenyMinors"].AsInteger() == 1;
            settings.DenyTransacted = estateInfo["DenyTransacted"].AsInteger() == 1;
            settings.EstateName = estateInfo["EstateName"].AsString();
            settings.EstateOwner = estateInfo["EstateOwner"].AsUUID();
            settings.EstateSkipScripts = estateInfo["EstateSkipScripts"].AsInteger() == 1;
            settings.FixedSun = estateInfo["FixedSun"].AsInteger() == 1;
            settings.ParentEstateID = estateInfo["ParentEstateID"].AsUInteger();
            settings.PricePerMeter = estateInfo["PricePerMeter"].AsInteger();
            settings.PublicAccess = estateInfo["PublicAccess"].AsInteger() == 1;
            settings.RedirectGridX = estateInfo["RedirectGridX"].AsInteger();
            settings.RedirectGridY = estateInfo["RedirectGridY"].AsInteger();
            settings.ResetHomeOnTeleport = estateInfo["ResetHomeOnTeleport"].AsInteger() == 1;
            settings.SunPosition = estateInfo["SunPosition"].AsReal();
            settings.TaxFree = estateInfo["TaxFree"].AsInteger() == 1;
            settings.UseGlobalTime = estateInfo["UseGlobalTime"].AsInteger() == 1;
            settings.EstateID = estateInfo["EstateID"].AsUInteger();
            settings.AllowLandmark = estateInfo["AllowLandmark"].AsInteger() == 1;
            settings.AllowParcelChanges = estateInfo["AllowParcelChanges"].AsInteger() == 1;
            settings.AllowSetHome = estateInfo["AllowSetHome"].AsInteger() == 1;
            settings.EstatePass = estateInfo["EstatePass"].AsString();

			LoadBanList(settings);
            settings.EstateAccess = LoadUUIDList(settings.EstateID, "EstateAccess");
            settings.EstateGroups = LoadUUIDList(settings.EstateID, "EstateGroups");
            settings.EstateManagers = LoadUUIDList(settings.EstateID, "EstateManagers");
			settings.OnSave += SaveEstateSettings;
			return settings;
        }
        public EstateSettings GetEstateSettings(UUID regionID)
        {
            object remoteValue = DoRemote(regionID);
            if (remoteValue != null || m_doRemoteOnly)
                return ReturnEstateSettings(remoteValue);

            EstateSettings settings = new EstateSettings() {EstateID = 0};
            int estateID = GetEstateID(regionID);
            if (estateID == 0)
                return settings;
            settings = GetEstate(estateID);
            return settings;
        }
        public EstateSettings LoadEstateSettings(UUID regionID)
        {
            Dictionary<string, object> sendData = new Dictionary<string, object>();

            EstateSettings ES = new EstateSettings();
            ES.OnSave += SaveEstateSettings;

            //This DOES have a reason, the RemoteEstateService will not send back
            //  the EstatePass anywhere (for security reasons),
            //  so we need to save it so that we can restore it later.
            string Password = ES.EstatePass;

            sendData["REGIONID"] = regionID.ToString();
            sendData["METHOD"] = "loadestatesettings";

            string reqString = WebUtils.BuildQueryString(sendData);

            try
            {
                foreach (string m_ServerURI in m_ServerURIs)
                {
                    string reply = SynchronousRestFormsRequester.MakeRequest("POST",
                        m_ServerURI + "/auroradata",
                        reqString);
                    if (reply != string.Empty)
                    {
                        Dictionary<string, object> replyData = WebUtils.ParseXmlResponse(reply);

                        if (replyData != null)
                        {
                            ES = new EstateSettings(replyData);
                            ES.OnSave += SaveEstateSettings;
                            ES.EstatePass = Password; //Restore it here, see above for explaination
                            return ES;
                        }

                        else
                            m_log.DebugFormat("[AuroraRemoteEstateConnector]: LoadEstateSettings {0} received null response",
                                regionID);
                        return new EstateSettings();
                    }
                }
            }
            catch (Exception e)
            {
                m_log.WarnFormat("[AuroraRemoteEstateConnector]: Exception when contacting server: {0}", e.ToString());
            }

            return null;
        }
        public EstateSettings CreateEstate(EstateSettings es, UUID RegionID)
        {
            int EstateID = 0;
            List<string> QueryResults = GD.Query("`Key`", "EstateID", "estates", "`Value`", " ORDER BY `Value` DESC");
            EstateID = QueryResults.Count == 0 ? 99 : int.Parse(QueryResults[0]);

            if (EstateID == 0)
                EstateID = 99;

            //Check for other estates with the same name
            List<int> Estates = GetEstates(es.EstateName);
            if (Estates != null)
            {
                foreach (int otherEstateID in Estates)
                {
                    EstateSettings otherEstate = this.LoadEstateSettings(otherEstateID);
                    if (otherEstate.EstateName == es.EstateName)
                    { //Cant have two estates with the same name.
                        //We set the estate name so that the region can get the error and so we don't have to spit out more junk to find it.
                        return new EstateSettings()
                        {
                            EstateID = 0,
                            EstateName = "Duplicate Estate Name. Please Change."
                        };
                    }
                }
            }

            EstateID++;
            es.EstateID = (uint) EstateID;

            List<object> Values = new List<object> {es.EstateID, "EstateSettings"};
            OSD map = es.ToOSD(true);
            Values.Add(OSDParser.SerializeLLSDXmlString(map));
            GD.Insert("estates", Values.ToArray());

            GD.Insert("estates", new object[]
                                     {
                                         RegionID,
                                         "EstateID",
                                         EstateID
                                     });

            es.OnSave += SaveEstateSettings;
            return es;
        }
示例#7
0
        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;
        }
        public Dictionary <string, object> Fill(WebInterface webInterface, string filename, OSHttpRequest httpRequest,
                                                OSHttpResponse httpResponse, Dictionary <string, object> requestParameters,
                                                ITranslator translator, out string response)
        {
            response = null;
            var vars        = new Dictionary <string, object> ();
            var gridService = webInterface.Registry.RequestModuleInterface <IGridService> ();
            var user        = Authenticator.GetAuthentication(httpRequest);

            vars.Add("RegionServerURL", webInterface.GridURL);  // This needs to be sorted out for grid regions

            #region EditRegion
            if (requestParameters.ContainsKey("Submit"))
            {
                var regionServerURL = requestParameters ["RegionServerURL"].ToString();

                // required
                if (regionServerURL == "")
                {
                    response = "<h3>" + translator.GetTranslatedString("RegionServerURLError") + "</h3>";
                    return(null);
                }

                var regionID    = requestParameters ["RegionID"].ToString();
                var regionName  = requestParameters ["RegionName"].ToString();
                var regionLocX  = requestParameters ["RegionLocX"].ToString();
                var regionLocY  = requestParameters ["RegionLocY"].ToString();
                var regionSizeX = requestParameters ["RegionSizeX"].ToString();
                var regionSizeY = requestParameters ["RegionSizeY"].ToString();

                var regionType       = requestParameters ["RegionType"].ToString();
                var regionPresetType = requestParameters ["RegionPresetType"].ToString();
                var regionTerrain    = requestParameters ["RegionTerrain"].ToString();

                var regionLoadTerrain = requestParameters.ContainsKey("RegionLoadTerrain")
                    ? requestParameters ["RegionLoadTerrain"].ToString()
                    : "";

                // a bit of idiot proofing
                if (regionName == "")
                {
                    response = "<h3>" + translator.GetTranslatedString("RegionNameError") + "</h3>";
                    return(null);
                }

                if ((regionLocX == "") || (regionLocY == ""))
                {
                    response = "<h3>" + translator.GetTranslatedString("RegionLocationError") + "</h3>";
                    return(null);
                }

                // so far so good...
                // build the new region details

                int RegionPort = int.Parse(requestParameters ["RegionPort"].ToString());

                var newRegion = new RegionInfo();

                if (regionID != "")
                {
                    newRegion.RegionID = UUID.Parse(regionID);
                }

                newRegion.RegionName  = regionName;
                newRegion.RegionType  = regionType;
                newRegion.RegionLocX  = int.Parse(regionLocX);
                newRegion.RegionLocY  = int.Parse(regionLocY);
                newRegion.RegionSizeX = int.Parse(regionSizeX);
                newRegion.RegionSizeY = int.Parse(regionSizeY);

                newRegion.RegionPort = RegionPort;
                newRegion.SeeIntoThisSimFromNeighbor = true;
                newRegion.InfiniteRegion             = true;
                newRegion.ObjectCapacity             = 50000;
                newRegion.Startup = StartupType.Normal;

                var regionPreset = regionPresetType.ToLower();  //SubString(0,1);

                if (regionPreset.StartsWith("c", System.StringComparison.Ordinal))
                {
                    newRegion.RegionPort = int.Parse(requestParameters ["RegionPort"].ToString());
                    newRegion.SeeIntoThisSimFromNeighbor = (requestParameters ["RegionVisibility"].ToString().ToLower() == "yes");
                    newRegion.InfiniteRegion             = (requestParameters ["RegionInfinite"].ToString().ToLower() == "yes");
                    newRegion.ObjectCapacity             = int.Parse(requestParameters ["RegionCapacity"].ToString());

                    string delayStartup = requestParameters ["RegionDelayStartup"].ToString();
                    newRegion.Startup = delayStartup.StartsWith("n", System.StringComparison.Ordinal) ? StartupType.Normal : StartupType.Medium;
                }

                if (regionPreset.StartsWith("u", System.StringComparison.Ordinal))
                {
                    // 'standard' setup
                    newRegion.RegionType    = newRegion.RegionType + "Universe";
                    newRegion.RegionTerrain = "Flatland";
                    newRegion.Startup       = StartupType.Normal;
                    newRegion.SeeIntoThisSimFromNeighbor = true;
                    newRegion.InfiniteRegion             = true;
                    newRegion.ObjectCapacity             = 100000;
                    newRegion.RegionPort = RegionPort;
                }

                if (regionPreset.StartsWith("o", System.StringComparison.Ordinal))
                {
                    // 'Openspace' setup
                    newRegion.RegionType = newRegion.RegionType + "Openspace";

                    if (regionTerrain.StartsWith("a", System.StringComparison.Ordinal))
                    {
                        newRegion.RegionTerrain = "Aquatic";
                    }
                    else
                    {
                        newRegion.RegionTerrain = "Grassland";
                    }

                    newRegion.Startup = StartupType.Medium;
                    newRegion.SeeIntoThisSimFromNeighbor         = true;
                    newRegion.InfiniteRegion                     = true;
                    newRegion.ObjectCapacity                     = 50000;
                    newRegion.RegionSettings.AgentLimit          = 10;
                    newRegion.RegionSettings.AllowLandJoinDivide = false;
                    newRegion.RegionSettings.AllowLandResell     = false;
                }

                if (regionPreset.StartsWith("h", System.StringComparison.Ordinal))
                {
                    // 'Homestead' setup
                    newRegion.RegionType    = newRegion.RegionType + "Homestead";
                    newRegion.RegionTerrain = "Homestead";
                    newRegion.Startup       = StartupType.Medium;
                    newRegion.SeeIntoThisSimFromNeighbor         = true;
                    newRegion.InfiniteRegion                     = true;
                    newRegion.ObjectCapacity                     = 75000;
                    newRegion.RegionSettings.AgentLimit          = 20;
                    newRegion.RegionSettings.AllowLandJoinDivide = false;
                    newRegion.RegionSettings.AllowLandResell     = false;
                }

                if (regionPreset.StartsWith("f", System.StringComparison.Ordinal))
                {
                    // 'Full Region' setup
                    newRegion.RegionType    = newRegion.RegionType + "Full Region";
                    newRegion.RegionTerrain = regionTerrain;
                    newRegion.Startup       = StartupType.Normal;
                    newRegion.SeeIntoThisSimFromNeighbor = true;
                    newRegion.InfiniteRegion             = true;
                    newRegion.ObjectCapacity             = 100000;
                    newRegion.RegionSettings.AgentLimit  = 100;

                    if (newRegion.RegionType.StartsWith("M", System.StringComparison.Ordinal))                            // defaults are 'true'
                    {
                        newRegion.RegionSettings.AllowLandJoinDivide = false;
                        newRegion.RegionSettings.AllowLandResell     = false;
                        newRegion.InfiniteRegion = true;
                    }
                }

                if (regionLoadTerrain.Length > 0)
                {
                    // we are loading terrain from a file... handled later
                    newRegion.RegionTerrain = "Custom";
                }

                // TODO: !!! Assumes everything is local for now !!!
                if (requestParameters.ContainsKey("NewRegion"))
                {
                    ISceneManager scenemanager = webInterface.Registry.RequestModuleInterface <ISceneManager> ();

                    if (scenemanager.CreateRegion(newRegion))
                    {
                        response = "<h3>Successfully created region</h3>" +
                                   "<script language=\"javascript\">" +
                                   "setTimeout(function() {window.location.href = \"/?page=region_manager\";}, 2000);" +
                                   "</script>";
                        return(null);
                    }

                    response = "<h3>Error creating this region.</h3>";
                    return(null);
                }

                // TODO:  This will not work yet  :)
                // update region details
                var infoConnector = Framework.Utilities.DataManager.RequestPlugin <IRegionInfoConnector> ();
                if (infoConnector != null)
                {
                    infoConnector.UpdateRegionInfo(newRegion);

                    response = "<h3>Region details updated.</h3>" +
                               "<script language=\"javascript\">" +
                               "setTimeout(function() {window.location.href = \"/?page=region_manager\";}, 2000);" +
                               "</script>";
                }
                else
                {
                    response = "<h3>Unable to update Region details!</h3>" +
                               "<script language=\"javascript\">" +
                               "setTimeout(function() {window.location.href = \"/?page=region_manager\";}, 2000);" +
                               "</script>";
                }
                return(null);
            }

            #endregion

            #region EditRegion
            // we have or need data
            if (httpRequest.Query.ContainsKey("regionid"))
            {
                var region = gridService.GetRegionByUUID(null, UUID.Parse(httpRequest.Query ["regionid"].ToString()));

                vars.Add("RegionID", region.RegionID.ToString());
                vars.Add("RegionName", region.RegionName);

                UserAccount estateOwnerAccount = null;
                var         estateOwner        = UUID.Zero;
                var         estateId           = -1;

                IEstateConnector estateConnector = Framework.Utilities.DataManager.RequestPlugin <IEstateConnector> ();

                if (estateConnector != null)
                {
                    EstateSettings estate = estateConnector.GetRegionEstateSettings(region.RegionID);

                    if (estate != null)
                    {
                        estateId    = (int)estate.EstateID;
                        estateOwner = estate.EstateOwner;
                    }

                    var accountService = webInterface.Registry.RequestModuleInterface <IUserAccountService> ();

                    if (accountService != null)
                    {
                        estateOwnerAccount = accountService.GetUserAccount(null, estate.EstateOwner);
                    }
                }

                vars.Add("EstateList", WebHelpers.EstateSelections(webInterface.Registry, estateOwner.ToString(), estateId));
                vars.Add("OwnerUUID", region.EstateOwner);
                vars.Add("OwnerName", estateOwnerAccount != null ? estateOwnerAccount.Name : "No account found");

                vars.Add("RegionLocX", region.RegionLocX / Constants.RegionSize);
                vars.Add("RegionLocY", region.RegionLocY / Constants.RegionSize);
                vars.Add("RegionSizeX", region.RegionSizeX);
                vars.Add("RegionSizeY", region.RegionSizeY);
                vars.Add("RegionPort", region.InternalPort.ToString());
                vars.Add("RegionType", WebHelpers.RegionTypeArgs(translator, region.RegionType));
                vars.Add("RegionPresetType", WebHelpers.RegionPresetArgs(translator, region.RegionType));
                vars.Add("RegionTerrain", WebHelpers.RegionTerrainArgs(translator, region.RegionTerrain));

                // TODO:  This will not work yet  :)
                bool switches      = false;
                var  infoConnector = Framework.Utilities.DataManager.RequestPlugin <IRegionInfoConnector> ();

                if (infoConnector != null)
                {
                    var regionInfo = infoConnector.GetRegionInfo(region.RegionID);

                    if (regionInfo != null)
                    {
                        vars.Add("RegionCapacity", regionInfo.ObjectCapacity.ToString());
                        vars.Add("RegionVisibility", WebHelpers.YesNoSelection(translator, regionInfo.SeeIntoThisSimFromNeighbor));
                        vars.Add("RegionInfinite", WebHelpers.YesNoSelection(translator, regionInfo.InfiniteRegion));
                        vars.Add("RegionDelayStartup", WebHelpers.RegionStartupSelection(translator, regionInfo.Startup));
                    }
                }

                if (!switches)
                {
                    vars.Add("RegionCapacity", "Unknown");
                    vars.Add("RegionVisibility", WebHelpers.YesNoSelection(translator, true));
                    vars.Add("RegionInfinite", WebHelpers.YesNoSelection(translator, true));
                    vars.Add("RegionDelayStartup", WebHelpers.RegionStartupSelection(translator, StartupType.Normal));   // normal startup
                }

                IWebHttpTextureService webTextureService = webInterface.Registry.RequestModuleInterface <IWebHttpTextureService> ();

                if (webTextureService != null && region.TerrainMapImage != UUID.Zero)
                {
                    vars.Add("RegionImageURL", webTextureService.GetTextureURL(region.TerrainMapImage));
                }
                else
                {
                    vars.Add("RegionImageURL", "images/icons/no_picture.jpg");
                }

                vars.Add("Submit", translator.GetTranslatedString("SaveUpdates"));
            }

            #endregion

            vars.Add("RegionPresets", WebHelpers.RegionSelections(webInterface.Registry));

            // Labels
            vars.Add("UserName", user.Name);
            vars.Add("RegionManagerText", translator.GetTranslatedString("MenuRegionManager"));
            vars.Add("RegionNameText", translator.GetTranslatedString("RegionNameText"));
            vars.Add("RegionLocationText", translator.GetTranslatedString("RegionLocationText"));
            vars.Add("RegionSizeText", translator.GetTranslatedString("RegionSizeText"));
            vars.Add("RegionTypeText", translator.GetTranslatedString("RegionTypeText"));
            vars.Add("RegionPresetText", translator.GetTranslatedString("RegionPresetText"));
            vars.Add("RegionTerrainText", translator.GetTranslatedString("RegionTerrainText"));
            vars.Add("EstateText", translator.GetTranslatedString("EstateText"));
            vars.Add("RegionPortText", translator.GetTranslatedString("RegionPortText"));
            vars.Add("RegionDelayStartupText", translator.GetTranslatedString("RegionDelayStartupText"));
            vars.Add("RegionVisibilityText", translator.GetTranslatedString("RegionVisibilityText"));
            vars.Add("RegionInfiniteText", translator.GetTranslatedString("RegionInfiniteText"));
            vars.Add("RegionCapacityText", translator.GetTranslatedString("RegionCapacityText"));
            vars.Add("Cancel", translator.GetTranslatedString("Cancel"));
            vars.Add("InfoMessage", "");

            return(vars);
        }
示例#9
0
        private EstateSettings CreateEstateInfo()
        {
            EstateSettings ES = null;
            while (true)
            {
                string response = MainConsole.Instance.CmdPrompt("Do you wish to join an existing estate for " + m_regInfo.RegionName + "? (Options are {yes, no, find})", "no", new List<string>() { "yes", "no", "find" });
                if (response == "no")
                {
                    // Create a new estate
                    ES = new EstateSettings();
                    ES.EstateName = MainConsole.Instance.CmdPrompt("New estate name", m_regInfo.EstateSettings.EstateName);
                    string Password = Util.Md5Hash(Util.Md5Hash(MainConsole.Instance.CmdPrompt("New estate password (to keep others from joining your estate, blank to have no pass)", ES.EstatePass)));
                    ES.EstatePass = Password;
                    ES = EstateService.CreateEstate(ES, RegionInfo.RegionID);
                    if (ES == null)
                    {
                        m_log.Warn("The connection to the server was broken, please try again soon.");
                        continue;
                    }
                    else if (ES.EstateID == 0)
                    {
                        m_log.Warn("There was an error in creating this estate: " + ES.EstateName); //EstateName holds the error. See LocalEstateConnector for more info.
                        continue;
                    }
                    //We set this back if there wasn't an error because the EstateService will NOT send it back
                    ES.EstatePass = Password;
                    break;
                }
                else if (response == "yes")
                {
                    response = MainConsole.Instance.CmdPrompt("Estate name to join", "None");
                    if (response == "None")
                        continue;

                    List<int> estateIDs = EstateService.GetEstates(response);
                    if (estateIDs == null)
                    {
                        m_log.Warn("The connection to the server was broken, please try again soon.");
                        continue;
                    }
                    if (estateIDs.Count < 1)
                    {
                        m_log.Warn("The name you have entered matches no known estate. Please try again");
                        continue;
                    }

                    int estateID = estateIDs[0];

                    string Password = Util.Md5Hash(Util.Md5Hash(MainConsole.Instance.CmdPrompt("Password for the estate", "")));
                    //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 (EstateService.LinkRegion(m_regInfo.RegionID, estateID, Password))
                    {
                        ES = EstateService.LoadEstateSettings(m_regInfo.RegionID); //We could do by EstateID now, but we need to completely make sure that it fully is set up
                        if (ES == null)
                        {
                            m_log.Warn("The connection to the server was broken, please try again soon.");
                            continue;
                        }
                        break;
                    }

                    m_log.Warn("Joining the estate failed. Please try again.");
                    continue;
                }
                else if (response == "find")
                {
                    ES = EstateService.LoadEstateSettings(m_regInfo.RegionID);
                    if (ES == null)
                    {
                        m_log.Warn("The connection to the estate service was broken, please try again soon.");
                        continue;
                    }
                    break;
                }
            }
            return ES;
        }
示例#10
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)
            {
                ISceneChildEntity Object = ((Scene)client.Scene).GetSceneObjectPart(objectID);
                report.ObjectName = Object.Name;
            }
            else
            {
                report.ObjectName = "";
            }

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

            string AbuseDetails = detailssplit[detailssplit.Length - 1];

            report.AbuseDetails = AbuseDetails;

            report.ReporterName = client.Name;

            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 != 0)
            {
                abuseSummary = findSummary[1];
            }

            report.AbuseSummary = abuseSummary;


            report.Number = (-1);

            EstateSettings ES = client.Scene.RegionInfo.EstateSettings;

            //If the abuse email is set up and the email module is available, send the email
            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 + ".");
                }
            }
            //Tell the DB about it
            IAbuseReports conn = m_SceneList[0].RequestModuleInterface <IAbuseReports>();

            if (conn != null)
            {
                conn.AddAbuseReport(report);
            }
        }
示例#11
0
        public Dictionary <string, object> Fill(WebInterface webInterface, string filename, OSHttpRequest httpRequest,
                                                OSHttpResponse httpResponse, Dictionary <string, object> requestParameters,
                                                ITranslator translator, out string response)
        {
            response = null;
            var vars        = new Dictionary <string, object>();
            var gridService = webInterface.Registry.RequestModuleInterface <IGridService> ();


            if (requestParameters.ContainsKey("Submit"))
            {
                string RegionServerURL = requestParameters["RegionServerURL"].ToString();
                // required
                if (RegionServerURL == "")
                {
                    response = "<h3>" + translator.GetTranslatedString("RegionServerURLError") + "</h3>";
                    return(null);
                }

                string RegionName = requestParameters["RegionName"].ToString();
                //string OwnerUUID = requestParameters["OwnerUUID"].ToString();
                string RegionLocX  = requestParameters["RegionLocX"].ToString();
                string RegionLocY  = requestParameters["RegionLocY"].ToString();
                string RegionSizeX = requestParameters["RegionSizeX"].ToString();
                string RegionSizeY = requestParameters["RegionSizeY"].ToString();

                string RegionType       = requestParameters["RegionType"].ToString();
                string RegionPresetType = requestParameters["RegionPresetType"].ToString();
                string RegionTerrain    = requestParameters["RegionTerrain"].ToString();

                string RegionLoadTerrain = requestParameters.ContainsKey("RegionLoadTerrain")
                    ? requestParameters["RegionLoadTerrain"].ToString()
                    : "";
                //bool ToSAccept = requestParameters.ContainsKey("ToSAccept") &&
                //    requestParameters["ToSAccept"].ToString() == "Accepted";

                // string UserType = requestParameters.ContainsKey("UserType")         // only admins can set membership
                //     ? requestParameters ["UserType"].ToString ()
                //     : "Resident";


                // a bit of idiot proofing
                if (RegionName == "")
                {
                    response = "<h3>" + translator.GetTranslatedString("RegionNameError") + "</h3>";
                    return(null);
                }
                if ((RegionLocX == "") || (RegionLocY == ""))
                {
                    response = "<h3>" + translator.GetTranslatedString("RegionLocationError") + "</h3>";
                    return(null);
                }

                // so far so good...
                // build the new region details
                int RegionPort = int.Parse(requestParameters ["RegionPort"].ToString());

                var newRegion = new RegionInfo();

                newRegion.RegionName  = RegionName;
                newRegion.RegionType  = RegionType;
                newRegion.RegionLocX  = int.Parse(RegionLocX);
                newRegion.RegionLocY  = int.Parse(RegionLocY);
                newRegion.RegionSizeX = int.Parse(RegionSizeX);
                newRegion.RegionSizeY = int.Parse(RegionSizeY);

                newRegion.RegionPort = RegionPort;
                newRegion.SeeIntoThisSimFromNeighbor = true;
                newRegion.InfiniteRegion             = false;
                newRegion.ObjectCapacity             = 50000;
                newRegion.Startup = StartupType.Normal;

                var regionPreset = RegionPresetType.ToLower();
                if (regionPreset.StartsWith("c"))
                {
                    newRegion.RegionPort = int.Parse(requestParameters["RegionPort"].ToString());
                    newRegion.SeeIntoThisSimFromNeighbor = (requestParameters["RegionVisibility"].ToString().ToLower() == "yes");
                    newRegion.InfiniteRegion             = (requestParameters["RegionInfinite"].ToString().ToLower() == "yes");
                    newRegion.ObjectCapacity             = int.Parse(requestParameters["RegionCapacity"].ToString());

                    string delayStartup = requestParameters["RegionDelayStartup"].ToString();
                    newRegion.Startup = delayStartup.StartsWith("n") ? StartupType.Normal : StartupType.Medium;
                }

                if (regionPreset.StartsWith("w"))
                {
                    // 'standard' setup
                    newRegion.RegionType = newRegion.RegionType + "Whitecore";
                    //info.RegionPort;            // use auto assigned port
                    newRegion.RegionTerrain = "Flatland";
                    newRegion.Startup       = StartupType.Normal;
                    newRegion.SeeIntoThisSimFromNeighbor = true;
                    newRegion.InfiniteRegion             = false;
                    newRegion.ObjectCapacity             = 50000;
                    newRegion.RegionPort = RegionPort;
                }
                if (regionPreset.StartsWith("o"))
                {
                    // 'Openspace' setup
                    newRegion.RegionType = newRegion.RegionType + "Openspace";
                    //newRegion.RegionPort;            // use auto assigned port
                    if (RegionTerrain.StartsWith("a"))
                    {
                        newRegion.RegionTerrain = "Aquatic";
                    }
                    else
                    {
                        newRegion.RegionTerrain = "Grassland";
                    }
                    newRegion.Startup = StartupType.Medium;
                    newRegion.SeeIntoThisSimFromNeighbor         = true;
                    newRegion.InfiniteRegion                     = false;
                    newRegion.ObjectCapacity                     = 750;
                    newRegion.RegionSettings.AgentLimit          = 10;
                    newRegion.RegionSettings.AllowLandJoinDivide = false;
                    newRegion.RegionSettings.AllowLandResell     = false;
                }
                if (regionPreset.StartsWith("h"))
                {
                    // 'Homestead' setup
                    newRegion.RegionType = newRegion.RegionType + "Homestead";
                    //info.RegionPort;            // use auto assigned port
                    newRegion.RegionTerrain = "Homestead";
                    newRegion.Startup       = StartupType.Medium;
                    newRegion.SeeIntoThisSimFromNeighbor         = true;
                    newRegion.InfiniteRegion                     = false;
                    newRegion.ObjectCapacity                     = 3750;
                    newRegion.RegionSettings.AgentLimit          = 20;
                    newRegion.RegionSettings.AllowLandJoinDivide = false;
                    newRegion.RegionSettings.AllowLandResell     = false;
                }

                if (regionPreset.StartsWith("f"))
                {
                    // 'Full Region' setup
                    newRegion.RegionType = newRegion.RegionType + "Full Region";
                    //newRegion.RegionPort;            // use auto assigned port
                    newRegion.RegionTerrain = RegionTerrain;
                    newRegion.Startup       = StartupType.Normal;
                    newRegion.SeeIntoThisSimFromNeighbor = true;
                    newRegion.InfiniteRegion             = false;
                    newRegion.ObjectCapacity             = 15000;
                    newRegion.RegionSettings.AgentLimit  = 100;
                    if (newRegion.RegionType.StartsWith("M"))                            // defaults are 'true'
                    {
                        newRegion.RegionSettings.AllowLandJoinDivide = false;
                        newRegion.RegionSettings.AllowLandResell     = false;
                    }
                }

                if (RegionLoadTerrain.Length > 0)
                {
                    // we are loading terrain from a file... handled later
                    newRegion.RegionTerrain = "Custom";
                }

                /* Disabled as this is a worl=k in progress and will break with the current scenemanager (Dec 5 - greythane-
                 * // TODO: !!! Assumes everything is local for now !!!
                 * ISceneManager scenemanager = webInterface.Registry.RequestModuleInterface<ISceneManager> ();
                 * if (scenemanager.CreateRegion(newRegion))
                 * {
                 *  IGridRegisterModule gridRegister = webInterface.Registry.RequestModuleInterface<IGridRegisterModule>();
                 *  if( gridRegister.RegisterRegionWithGrid(null, true, false, null))
                 *  {
                 *
                 *      response = "<h3>Successfully created region, redirecting to main page</h3>" +
                 *          "<script language=\"javascript\">" +
                 *          "setTimeout(function() {window.location.href = \"index.html\";}, 3000);" +
                 *          "</script>";
                 *  }
                 *  else
                 * //                        response = "<h3>" + error + "</h3>";
                 *          response = "<h3> Error registering region with grid</h3>";
                 * }
                 * else
                 */
                response = "<h3>Error creating this region.</h3>";
                return(null);
            }

            // we have or need data
            if (httpRequest.Query.ContainsKey("regionid"))
            {
                var region = gridService.GetRegionByUUID(null, UUID.Parse(httpRequest.Query ["regionid"].ToString()));

                IEstateConnector estateConnector = Framework.Utilities.DataManager.RequestPlugin <IEstateConnector> ();
                EstateSettings   estate          = estateConnector.GetEstateSettings(region.RegionID);

                vars.Add("RegionName", region.RegionName);
                vars.Add("OwnerUUID", estate.EstateOwner);

                var estateOwnerAccount = webInterface.Registry.RequestModuleInterface <IUserAccountService> ().
                                         GetUserAccount(null, estate.EstateOwner);
                vars.Add("OwnerName", estateOwnerAccount == null ? "No account found" : estateOwnerAccount.Name);
                vars.Add("RegionLocX", region.RegionLocX / Constants.RegionSize);
                vars.Add("RegionLocY", region.RegionLocY / Constants.RegionSize);
                vars.Add("RegionSizeX", region.RegionSizeX);
                vars.Add("RegionSizeY", region.RegionSizeY);
                vars.Add("RegionType", region.RegionType);
                vars.Add("RegionTerrain", region.RegionTerrain);
                vars.Add("RegionOnline",
                         (region.Flags & (int)RegionFlags.RegionOnline) ==
                         (int)RegionFlags.RegionOnline
                    ? translator.GetTranslatedString("Online")
                    : translator.GetTranslatedString("Offline"));

                IWebHttpTextureService webTextureService = webInterface.Registry.
                                                           RequestModuleInterface <IWebHttpTextureService> ();
                if (webTextureService != null && region.TerrainMapImage != UUID.Zero)
                {
                    vars.Add("RegionImageURL", webTextureService.GetTextureURL(region.TerrainMapImage));
                }
                else
                {
                    vars.Add("RegionImageURL", "images/icons/no_picture.jpg");
                }
            }
            else
            {
                // default values

                // check for user name seed
                string[] m_regionNameSeed = null;

                /*IConfig regionConfig =
                 *  webInterface.Registry.RequestModuleInterface<ISimulationBase>().ConfigSource.Configs["LoginService"];
                 *
                 * if (loginServerConfig != null)
                 * {
                 *  string userNameSeed = loginServerConfig.GetString ("UserNameSeed", "");
                 *  if (userNameSeed != "")
                 *      m_userNameSeed = userNameSeed.Split (',');
                 * }
                 */
                Utilities.MarkovNameGenerator rNames = new Utilities.MarkovNameGenerator();
                string regionName = rNames.FirstName(m_regionNameSeed == null ? Utilities.RegionNames: m_regionNameSeed, 3, 7);
                vars.Add("RegionName", regionName);

                //var scenemanager = webInterface.Registry.RequestModuleInterface<ISceneManager> ();
                var gconnector = Framework.Utilities.DataManager.RequestPlugin <IGenericsConnector>();
                var settings   = gconnector.GetGeneric <WebUISettings>(UUID.Zero, "WebUISettings", "Settings");

                // get some current details
                //List<GridRegion> regions = gridService.GetRegionsByName(null, "", null,null);

//                var currentInfo = scenemanager.FindCurrentRegionInfo ();
                Dictionary <string, int> currentInfo = null;
                if (currentInfo != null)
                {
                    vars.Add("RegionLocX", currentInfo ["minX"] > 0 ? currentInfo ["minX"] : settings.MapCenter.X);
                    vars.Add("RegionLocY", currentInfo ["minY"] > 0 ? currentInfo ["minY"] : settings.MapCenter.Y);
                    vars.Add("RegionPort", currentInfo ["port"] > 0 ? currentInfo ["port"] + 1 : 9000);
                }
                else
                {
                    vars.Add("RegionLocX", settings.MapCenter.X);
                    vars.Add("RegionLocY", settings.MapCenter.Y);
                    vars.Add("RegionPort", 9000);
                }


                vars.Add("RegionSizeX", Constants.RegionSize);
                vars.Add("RegionSizeY", Constants.RegionSize);
                vars.Add("RegionType", webInterface.RegionTypeArgs(translator));
                vars.Add("RegionPresetType", webInterface.RegionPresetArgs(translator));
                vars.Add("RegionTerrain", webInterface.RegionTerrainArgs(translator));
            }

            // Labels
            //vars.Add ("RegionInformationText", translator.GetTranslatedString ("RegionInformationText"));
            vars.Add("RegionNameText", translator.GetTranslatedString("RegionNameText"));
            vars.Add("RegionLocationText", translator.GetTranslatedString("RegionLocationText"));
            vars.Add("RegionSizeText", translator.GetTranslatedString("RegionSizeText"));
            vars.Add("RegionTypeText", translator.GetTranslatedString("RegionTypeText"));
            vars.Add("RegionPresetText", translator.GetTranslatedString("RegionPresetText"));
            vars.Add("RegionTerrainText", translator.GetTranslatedString("RegionTerrainText"));
            vars.Add("OwnerNameText", translator.GetTranslatedString("OwnerNameText"));
            vars.Add("RegionPortText", translator.GetTranslatedString("RegionPortText"));
            vars.Add("RegionDelayStartupText", translator.GetTranslatedString("RegionDelayStartupText"));
            vars.Add("RegionVisibilityText", translator.GetTranslatedString("RegionVisibilityText"));
            vars.Add("RegionInfiniteText", translator.GetTranslatedString("RegionInfiniteText"));
            vars.Add("RegionCapacityText", translator.GetTranslatedString("RegionCapacityText"));
            vars.Add("Yes", translator.GetTranslatedString("Yes"));
            vars.Add("No", translator.GetTranslatedString("No"));
            vars.Add("Accept", translator.GetTranslatedString("Accept"));
            vars.Add("Submit", translator.GetTranslatedString("Submit"));
            vars.Add("SubmitURL", "home.html");
            vars.Add("ErrorMessage", "");



            return(vars);
        }
示例#12
0
        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 NewEstateSettings(uint estateID, string regionName, UUID masterAvatarID)
        {
            // 0 will be treated as "create estate settings with a new ID"

            EstateSettings es = new EstateSettings();

            es.OnSave += StoreEstateSettings;

            List <string> names = new List <string>(FieldList);

            using (MySqlConnection conn = GetConnection())
            {
                es.EstateName = regionName;
                if (estateID == 0)
                {
                    names.Remove("EstateID");   // generate one
                }
                else
                {
                    es.EstateID       = estateID; // use this one
                    es.ParentEstateID = estateID; // default is same
                }

                // The EstateOwner is not filled in yet. It needs to be.
                es.EstateOwner = masterAvatarID;

                string sql = "insert into estate_settings (" + String.Join(",", names.ToArray()) + ") values ( ?" + String.Join(", ?", names.ToArray()) + ")";

                using (MySqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = sql;
                    cmd.Parameters.Clear();

                    foreach (string name in FieldList)
                    {
                        if (m_FieldMap[name].GetValue(es) is bool)
                        {
                            if ((bool)m_FieldMap[name].GetValue(es))
                            {
                                cmd.Parameters.AddWithValue("?" + name, "1");
                            }
                            else
                            {
                                cmd.Parameters.AddWithValue("?" + name, "0");
                            }
                        }
                        else
                        {
                            cmd.Parameters.AddWithValue("?" + name, m_FieldMap[name].GetValue(es).ToString());
                        }
                    }
                    cmd.ExecuteNonQuery();

                    // If we generated a new estate ID, fetch it
                    if (estateID == 0)
                    {
                        // Now fetch the auto-generated estate ID.
                        cmd.CommandText = "select LAST_INSERT_ID() as id";
                        cmd.Parameters.Clear();
                        IDataReader r = cmd.ExecuteReader();
                        r.Read();
                        es.EstateID = Convert.ToUInt32(r["id"]);
                        r.Close();

                        // If we auto-generated the Estate ID, then ParentEstateID is still the default (100). Fix it to default to the same value.
                        es.ParentEstateID = es.EstateID;
                        cmd.CommandText   = "UPDATE estate_settings SET ParentEstateID=?ParentEstateID WHERE EstateID=?EstateID";
                        cmd.Parameters.Clear();
                        cmd.Parameters.AddWithValue("ParentEstateID", es.ParentEstateID.ToString());
                        cmd.Parameters.AddWithValue("EstateID", es.EstateID.ToString());
                        cmd.ExecuteNonQuery();
                    }

                    return(es);
                }
            }
        }
示例#14
0
        private void EstateSettingsSimpleStorage(
            UUID regionId,
            string estateName,
            uint parentEstateID,
            float billableFactor,
            int pricePerMeter,
            int redirectGridX,
            int redirectGridY,
            bool useGlobalTime,
            bool fixedSun,
            double sunPosition,
            bool allowVoice,
            bool allowDirectTeleport,
            bool resetHomeOnTeleport,
            bool denyAnonymous,
            bool denyIdentified,
            bool denyTransacted,
            bool denyMinors,
            bool abuseEmailToEstateOwner,
            bool blockDwell,
            bool estateSkipScripts,
            bool taxFree,
            bool publicAccess,
            string abuseEmail,
            UUID estateOwner
            )
        {
            // Letting estate store generate rows to database for us
            EstateSettings originalSettings = db.LoadEstateSettings(regionId, true);

            SetEstateSettings(originalSettings,
                              estateName,
                              parentEstateID,
                              billableFactor,
                              pricePerMeter,
                              redirectGridX,
                              redirectGridY,
                              useGlobalTime,
                              fixedSun,
                              sunPosition,
                              allowVoice,
                              allowDirectTeleport,
                              resetHomeOnTeleport,
                              denyAnonymous,
                              denyIdentified,
                              denyTransacted,
                              denyMinors,
                              abuseEmailToEstateOwner,
                              blockDwell,
                              estateSkipScripts,
                              taxFree,
                              publicAccess,
                              abuseEmail,
                              estateOwner
                              );

            // Saving settings.
            db.StoreEstateSettings(originalSettings);

            // Loading settings to another instance variable.
            EstateSettings loadedSettings = db.LoadEstateSettings(regionId, true);

            // Checking that loaded values are correct.
            ValidateEstateSettings(loadedSettings,
                                   estateName,
                                   parentEstateID,
                                   billableFactor,
                                   pricePerMeter,
                                   redirectGridX,
                                   redirectGridY,
                                   useGlobalTime,
                                   fixedSun,
                                   sunPosition,
                                   allowVoice,
                                   allowDirectTeleport,
                                   resetHomeOnTeleport,
                                   denyAnonymous,
                                   denyIdentified,
                                   denyTransacted,
                                   denyMinors,
                                   abuseEmailToEstateOwner,
                                   blockDwell,
                                   estateSkipScripts,
                                   taxFree,
                                   publicAccess,
                                   abuseEmail,
                                   estateOwner
                                   );
        }
示例#15
0
        private void LoadBanList(EstateSettings es)
		{
			es.ClearBans();

            List<string> query = null;
            try
            {
                query = GD.Query(new string[] { "ID", "`Key`" }, new object[] { es.EstateID, "EstateBans" }, "estates", "Value");
            }
            catch
            {
            }
            if (query == null || query.Count == 0)
                return; //Couldn't find it, return then.

            OSDMap estateInfo = (OSDMap)OSDParser.DeserializeLLSDXml(query[0]);
            foreach (OSD map in estateInfo.Values)
            {
                OSDMap estateBan = (OSDMap)map;
				EstateBan eb = new EstateBan();

                eb.BannedUserID = estateBan["BannedUserID"].AsUUID();
                eb.BannedHostAddress = estateBan["BannedHostAddress"].AsString();
                eb.BannedHostIPMask = estateBan["BannedHostIPMask"].AsString();
				es.AddBan(eb);
			}
		}
示例#16
0
        public EstateSettings CreateEstate(EstateSettings es, UUID RegionID)
        {
            Dictionary<string, object> sendData = es.ToKeyValuePairs(true);

            sendData["REGIONID"] = RegionID.ToString();
            sendData["METHOD"] = "createestate";

            string reqString = ServerUtils.BuildXmlResponse(sendData);

            try
            {
                string reply = SynchronousRestFormsRequester.MakeRequest("POST",
                        m_ServerURI + "/auroradata",
                        reqString);
                if (reply != string.Empty)
                {
                    Dictionary<string, object> replyData = ServerUtils.ParseXmlResponse(reply);

                    if (replyData != null)
                    {
                        es = new EstateSettings(replyData);
                        es.OnSave += SaveEstateSettings;
                        return es;
                    }

                    else
                        m_log.DebugFormat("[AuroraRemoteEstateConnector]: CreateEstate {0} received null response",
                            RegionID);

                }
            }
            catch (Exception e)
            {
                m_log.DebugFormat("[AuroraRemoteEstateConnector]: Exception when contacting server: {0}", e.Message);
            }
            return null;
        }
示例#17
0
        public EstateSettings LoadEstateSettings(int estateID)
        {
            Dictionary<string, object> sendData = new Dictionary<string, object>();
            EstateSettings ES = new EstateSettings();
            ES.OnSave += SaveEstateSettings;
            
            sendData["ESTATEID"] = estateID;
            sendData["METHOD"] = "loadestatesettings";

            string reqString = ServerUtils.BuildQueryString(sendData);

            try
            {
                string reply = SynchronousRestFormsRequester.MakeRequest("POST",
                        m_ServerURI + "/auroradata",
                        reqString);
                if (reply != string.Empty)
                {
                    Dictionary<string, object> replyData = ServerUtils.ParseXmlResponse(reply);

                    if (replyData != null)
                    {
                        ES = new EstateSettings(replyData);
                        ES.OnSave += SaveEstateSettings;
                        return ES;
                    }

                    else
                        m_log.DebugFormat("[AuroraRemoteEstateConnector]: LoadEstateSettings {0} received null response",
                            estateID);

                }
            }
            catch (Exception e)
            {
                m_log.DebugFormat("[AuroraRemoteEstateConnector]: Exception when contacting server: {0}", e.Message);
            }

            return null;
        }
示例#18
0
        public void SaveEstateSettings(EstateSettings es)
        {
            Dictionary<string, object> sendData = es.ToKeyValuePairs(true);

            sendData["METHOD"] = "saveestatesettings";

            string reqString = ServerUtils.BuildXmlResponse(sendData);

            try
            {
                SynchronousRestFormsRequester.MakeRequest("POST",
                        m_ServerURI + "/auroradata",
                        reqString);
            }
            catch (Exception e)
            {
                m_log.DebugFormat("[AuroraRemoteEstateConnector]: Exception when contacting server: {0}", e.Message);
            }
        }
示例#19
0
 public void StoreEstateSettings(EstateSettings es)
 {
     m_estate = es;
     return;
 }
        public EstateSettings LoadEstateSettings(UUID regionID, string regionName, UUID masterAvatarID, bool writable)
        {
            EstateSettings es = null;
            uint           estateID;

            if (GetEstateMap(regionID, out estateID))
            {
                if (estateID == 0)
                {
                    string message = "Region " + regionID.ToString() + " cannot use estate ID 0.";
                    if (writable)   // fatal startup error
                    {
                        throw new Exception(message);
                    }
                    else
                    {
                        m_log.ErrorFormat("[ESTATE]: {0}", message);
                    }
                    return(null);
                }

                es = LoadEstateSettingsOnly(estateID);
                if (es == null)
                {
                    if (writable)
                    {
                        // estate settings don't exist yet for this estateID
                        es = NewEstateSettings(estateID, regionName, masterAvatarID);
                    }
                    else
                    {
                        // If writable is false, this is an after-startup error (or a different region).
                        m_log.ErrorFormat("[ESTATE]: Region {0} has estate map but no settings for estate {1}", regionID, estateID);
                        return(null);
                    }
                }
                else
                {
                    // We successfully loaded an existing EstateSettings.
                    if (writable)
                    {
                        // And we own this data. Let's do a sanity check and repair invalid settings if possible.
                        if (es.EstateOwner == UUID.Zero)
                        {
                            // Assume the region.xml specifies a better user than no user.
                            es.EstateOwner = masterAvatarID;
                            StoreEstateSettingsOnly(es);
                        }
                    }
                }
            }
            else
            {
                // Does not have an estate assigned yet.
                if (writable)
                {
                    // 0 will be treated as "create estate settings with a new estate ID"
                    es = NewEstateSettings(0, regionName, masterAvatarID);
                    m_log.WarnFormat("[ESTATE]: Region {0} does not have an estate assigned - repaired as estate {1}.", regionID, es.EstateID);
                    if (!NewEstateMap(regionID, es.EstateID))
                    {
                        m_log.ErrorFormat("[ESTATE]: Region {0} could not save estate_map for estate {1}.", regionID, es.EstateID);
                    }
                }
                else
                {
                    // If writable is false, this is an after-startup error (or a different region).
                    m_log.ErrorFormat("[ESTATE]: Region {0} error - region has no estate.", regionID);
                    return(null);
                }
            }

            // Load the four estate lists.
            LoadBanList(es);
            es.EstateManagers = LoadUUIDList(es.EstateID, "estate_managers");
            es.EstateAccess   = LoadUUIDList(es.EstateID, "estate_users");
            es.EstateGroups   = LoadUUIDList(es.EstateID, "estate_groups");
            m_log.InfoFormat("[ESTATE]: Region {0} loaded estate {1} with {2} managers, {3} users, {4} groups, {5} bannned.",
                             regionID, es.EstateID, es.EstateManagers.Length, es.EstateAccess.Length, es.EstateGroups.Length, es.EstateBans.Length);

            return(es);
        }
示例#21
0
 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.CmdPrompt("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 void SaveEstateSettings(EstateSettings es)
        {
            List<string> query = null;
            try
            {
                query = GD.Query(new[] {"ID", "`Key`"}, new object[] {es.EstateID, "EstateSettings"}, "estates",
                                 "`Value`");
            }
            catch
            {
            }
            if (query == null || query.Count == 0)
                return; //Couldn't find it, return default then.

            OSDMap estateInfo = (OSDMap) OSDParser.DeserializeLLSDXml(query[0]);

            if (estateInfo["EstatePass"].AsString() != es.EstatePass)
            {
                MainConsole.Instance.Warn("[ESTATE SERVICE]: Wrong estate password in updating of estate " + es.EstateName +
                           "! Possible attempt to hack this estate!");
                return;
            }

            List<string> Keys = new List<string> {"Value"};
            List<object> Values = new List<object> {OSDParser.SerializeLLSDXmlString(es.ToOSD(true))};

            GD.Update("estates", Values.ToArray(), Keys.ToArray(), new[] {"ID", "`Key`"},
                      new object[] {es.EstateID, "EstateSettings"});

            SaveBanList(es);
            SaveUUIDList(es.EstateID, "EstateManagers", es.EstateManagers);
            SaveUUIDList(es.EstateID, "EstateAccess", es.EstateAccess);
            SaveUUIDList(es.EstateID, "EstateGroups", es.EstateGroups);

            m_registry.RequestModuleInterface<ISimulationBase>().EventManager.FireGenericEventHandler("EstateUpdated",
                                                                                                      es);
        }
示例#23
0
        private bool OnAllowedIncomingAgent(IScene scene, AgentCircuitData agent, bool isRootAgent, out string reason)
        {
            #region Incoming Agent Checks

            UserAccount account = scene.UserAccountService.GetUserAccount(scene.RegionInfo.AllScopeIDs, agent.AgentID);
            if (account == null)
            {
                reason = "No account exists";
                return(false);
            }
            IScenePresence Sp = scene.GetScenePresence(agent.AgentID);

            if (LoginsDisabled)
            {
                reason = "Logins Disabled";
                return(false);
            }

            //Check how long its been since the last TP
            if (m_enabledBlockTeleportSeconds && Sp != null && !Sp.IsChildAgent)
            {
                if (TimeSinceLastTeleport.ContainsKey(Sp.Scene.RegionInfo.RegionID))
                {
                    if (TimeSinceLastTeleport[Sp.Scene.RegionInfo.RegionID] > Util.UnixTimeSinceEpoch())
                    {
                        reason = "Too many teleports. Please try again soon.";
                        return(false); // Too soon since the last TP
                    }
                }
                TimeSinceLastTeleport[Sp.Scene.RegionInfo.RegionID] = Util.UnixTimeSinceEpoch() +
                                                                      ((int)(SecondsBeforeNextTeleport));
            }

            //Gods tp freely
            if ((Sp != null && Sp.GodLevel != 0) || (account != null && account.UserLevel != 0))
            {
                reason = "";
                return(true);
            }

            //Check whether they fit any ban criteria
            if (Sp != null)
            {
                foreach (string banstr in BanCriteria)
                {
                    if (Sp.Name.Contains(banstr))
                    {
                        reason = "You have been banned from this region.";
                        return(false);
                    }
                    else if (((IPEndPoint)Sp.ControllingClient.GetClientEP()).Address.ToString().Contains(banstr))
                    {
                        reason = "You have been banned from this region.";
                        return(false);
                    }
                }
                //Make sure they exist in the grid right now
                IAgentInfoService presence = scene.RequestModuleInterface <IAgentInfoService>();
                if (presence == null)
                {
                    reason =
                        String.Format(
                            "Failed to verify user presence in the grid for {0} in region {1}. Presence service does not exist.",
                            account.Name, scene.RegionInfo.RegionName);
                    return(false);
                }

                UserInfo pinfo = presence.GetUserInfo(agent.AgentID.ToString());

                if (pinfo == null || (!pinfo.IsOnline && ((agent.TeleportFlags & (uint)TeleportFlags.ViaLogin) == 0)))
                {
                    reason =
                        String.Format(
                            "Failed to verify user presence in the grid for {0}, access denied to region {1}.",
                            account.Name, scene.RegionInfo.RegionName);
                    return(false);
                }
            }

            EstateSettings ES = scene.RegionInfo.EstateSettings;

            IEntityCountModule entityCountModule = scene.RequestModuleInterface <IEntityCountModule>();
            if (entityCountModule != null && scene.RegionInfo.RegionSettings.AgentLimit
                < entityCountModule.RootAgents + 1 &&
                scene.RegionInfo.RegionSettings.AgentLimit > 0)
            {
                reason = "Too many agents at this time. Please come back later.";
                return(false);
            }

            List <EstateBan> EstateBans = new List <EstateBan>(ES.EstateBans);
            int i = 0;
            //Check bans
            foreach (EstateBan ban in EstateBans)
            {
                if (ban.BannedUserID == agent.AgentID)
                {
                    if (Sp != null)
                    {
                        string banIP = ((IPEndPoint)Sp.ControllingClient.GetClientEP()).Address.ToString();

                        if (ban.BannedHostIPMask != banIP) //If it changed, ban them again
                        {
                            //Add the ban with the new hostname
                            ES.AddBan(new EstateBan
                            {
                                BannedHostIPMask   = banIP,
                                BannedUserID       = ban.BannedUserID,
                                EstateID           = ban.EstateID,
                                BannedHostAddress  = ban.BannedHostAddress,
                                BannedHostNameMask = ban.BannedHostNameMask
                            });
                            //Update the database
                            Aurora.Framework.Utilities.DataManager.RequestPlugin <IEstateConnector>().
                            SaveEstateSettings(ES);
                        }
                    }

                    reason = "Banned from this region.";
                    return(false);
                }
                if (Sp != null)
                {
                    IPAddress   end  = Sp.ControllingClient.EndPoint;
                    IPHostEntry rDNS = null;
                    try
                    {
                        rDNS = Dns.GetHostEntry(end);
                    }
                    catch (SocketException)
                    {
                        MainConsole.Instance.WarnFormat("[IPBAN] IP address \"{0}\" cannot be resolved via DNS", end);
                        rDNS = null;
                    }
                    if (ban.BannedHostIPMask == agent.IPAddress ||
                        (rDNS != null && rDNS.HostName.Contains(ban.BannedHostIPMask)) ||
                        end.ToString().StartsWith(ban.BannedHostIPMask))
                    {
                        //Ban the new user
                        ES.AddBan(new EstateBan
                        {
                            EstateID           = ES.EstateID,
                            BannedHostIPMask   = agent.IPAddress,
                            BannedUserID       = agent.AgentID,
                            BannedHostAddress  = agent.IPAddress,
                            BannedHostNameMask = agent.IPAddress
                        });
                        Aurora.Framework.Utilities.DataManager.RequestPlugin <IEstateConnector>().
                        SaveEstateSettings(ES);

                        reason = "Banned from this region.";
                        return(false);
                    }
                }
                i++;
            }

            //Estate owners/managers/access list people/access groups tp freely as well
            if (ES.EstateOwner == agent.AgentID ||
                new List <UUID>(ES.EstateManagers).Contains(agent.AgentID) ||
                new List <UUID>(ES.EstateAccess).Contains(agent.AgentID) ||
                CheckEstateGroups(ES, agent))
            {
                reason = "";
                return(true);
            }

            if (ES.DenyAnonymous &&
                ((account.UserFlags & (int)IUserProfileInfo.ProfileFlags.NoPaymentInfoOnFile) ==
                 (int)IUserProfileInfo.ProfileFlags.NoPaymentInfoOnFile))
            {
                reason = "You may not enter this region.";
                return(false);
            }

            if (ES.DenyIdentified &&
                ((account.UserFlags & (int)IUserProfileInfo.ProfileFlags.PaymentInfoOnFile) ==
                 (int)IUserProfileInfo.ProfileFlags.PaymentInfoOnFile))
            {
                reason = "You may not enter this region.";
                return(false);
            }

            if (ES.DenyTransacted &&
                ((account.UserFlags & (int)IUserProfileInfo.ProfileFlags.PaymentInfoInUse) ==
                 (int)IUserProfileInfo.ProfileFlags.PaymentInfoInUse))
            {
                reason = "You may not enter this region.";
                return(false);
            }

            const long m_Day = 25 * 60 * 60; //Find out day length in seconds
            if (scene.RegionInfo.RegionSettings.MinimumAge != 0 &&
                (account.Created - Util.UnixTimeSinceEpoch()) < (scene.RegionInfo.RegionSettings.MinimumAge * m_Day))
            {
                reason = "You may not enter this region.";
                return(false);
            }

            if (!ES.PublicAccess)
            {
                reason = "You may not enter this region, Public access has been turned off.";
                return(false);
            }

            IAgentConnector AgentConnector = Framework.Utilities.DataManager.RequestPlugin <IAgentConnector>();
            IAgentInfo      agentInfo      = null;
            if (AgentConnector != null)
            {
                agentInfo = AgentConnector.GetAgent(agent.AgentID);
                if (agentInfo == null)
                {
                    AgentConnector.CreateNewAgent(agent.AgentID);
                    agentInfo = AgentConnector.GetAgent(agent.AgentID);
                }
            }

            if (m_checkMaturityLevel)
            {
                if (agentInfo != null &&
                    scene.RegionInfo.AccessLevel > Util.ConvertMaturityToAccessLevel((uint)agentInfo.MaturityRating))
                {
                    reason = "The region has too high of a maturity level. Blocking teleport.";
                    return(false);
                }

                if (agentInfo != null && ES.DenyMinors && (agentInfo.Flags & IAgentFlags.Minor) == IAgentFlags.Minor)
                {
                    reason = "The region has too high of a maturity level. Blocking teleport.";
                    return(false);
                }
            }

            #endregion

            reason = "";
            return(true);
        }
        public byte[] CreateEstate(Dictionary<string, object> request)
        {
            EstateSettings ES = new EstateSettings(request);

            UUID RegionID = new UUID(request["REGIONID"].ToString());

            ES = EstateConnector.CreateEstate(ES, RegionID);

            //This is not a local transfer, MUST be false!
            Dictionary<string, object> result = ES.ToKeyValuePairs(false);
            string xmlString = WebUtils.BuildXmlResponse(result);
            //MainConsole.Instance.DebugFormat("[AuroraDataServerPostHandler]: resp string: {0}", xmlString);
            UTF8Encoding encoding = new UTF8Encoding();
            return encoding.GetBytes(xmlString);
        }
示例#25
0
        public EstateSettings CreateEstate(EstateSettings es, UUID RegionID)
        {
            Dictionary<string, object> sendData = es.ToKeyValuePairs(true);

            sendData["REGIONID"] = RegionID.ToString();
            sendData["METHOD"] = "createestate";

            string reqString = WebUtils.BuildXmlResponse(sendData);

            try
            {
                List<string> m_ServerURIs = m_registry.RequestModuleInterface<IConfigurationService>().FindValueOf("RemoteServerURI");
                foreach (string m_ServerURI in m_ServerURIs)
                {
                    string reply = SynchronousRestFormsRequester.MakeRequest("POST",
                           m_ServerURI,
                           reqString);
                    if (reply != string.Empty)
                    {
                        Dictionary<string, object> replyData = WebUtils.ParseXmlResponse(reply);

                        if (replyData != null)
                        {
                            es = new EstateSettings(replyData);
                            es.OnSave += SaveEstateSettings;
                            return es;
                        }

                        else
                            m_log.DebugFormat("[AuroraRemoteEstateConnector]: CreateEstate {0} received null response",
                                RegionID);
                    }
                }
            }
            catch (Exception e)
            {
                m_log.DebugFormat("[AuroraRemoteEstateConnector]: Exception when contacting server: {0}", e.ToString());
            }
            return null;
        }
示例#26
0
        public void SaveEstateSettings(EstateSettings es)
        {
            Dictionary<string, object> sendData = es.ToKeyValuePairs(true);

            sendData["METHOD"] = "saveestatesettings";

            string reqString = WebUtils.BuildXmlResponse(sendData);

            try
            {
                List<string> m_ServerURIs = m_registry.RequestModuleInterface<IConfigurationService>().FindValueOf("RemoteServerURI");
                foreach (string m_ServerURI in m_ServerURIs)
                {
                    AsynchronousRestObjectRequester.MakeRequest("POST",
                           m_ServerURI,
                           reqString);
                }
            }
            catch (Exception e)
            {
                m_log.DebugFormat("[AuroraRemoteEstateConnector]: Exception when contacting server: {0}", e.ToString());
            }
        }
示例#27
0
        public List<EstateSettings> GetEstates(UUID owner)
        {
            Dictionary<string, object> sendData = new Dictionary<string, object>();

            sendData["SEARCH"] = owner;
            sendData["METHOD"] = "getestatesowner";
            List<EstateSettings> Estates = new List<EstateSettings>();
            string reqString = WebUtils.BuildQueryString(sendData);

            try
            {
                List<string> m_ServerURIs = m_registry.RequestModuleInterface<IConfigurationService>().FindValueOf("RemoteServerURI");
                foreach (string m_ServerURI in m_ServerURIs)
                {
                    string reply = SynchronousRestFormsRequester.MakeRequest("POST",
                           m_ServerURI,
                           reqString);
                    if (reply != string.Empty)
                    {
                        Dictionary<string, object> replyData = WebUtils.ParseXmlResponse(reply);

                        if (replyData != null)
                        {
                            if (!replyData.ContainsKey("result"))
                                return Estates;
                            foreach (object obj in replyData.Values)
                            {
                                if (obj is Dictionary<string, object>)
                                {
                                    Dictionary<string, object> dictionary = obj as Dictionary<string, object>;
                                    foreach (object objobj in dictionary.Values)
                                    {
                                        EstateSettings es = new EstateSettings(objobj as Dictionary<string, object>);
                                        Estates.Add(es);
                                    }
                                }
                            }
                            return Estates;
                        }

                        else
                            m_log.DebugFormat("[AuroraRemoteEstateConnector]: GetEstates {0} received null response",
                                owner);
                    }
                }
            }
            catch (Exception e)
            {
                m_log.DebugFormat("[AuroraRemoteEstateConnector]: Exception when contacting server: {0}", e.ToString());
            }

            return null;
        }
示例#28
0
        private EstateSettings CreateEstateInfo(Scene scene)
        {
            EstateSettings ES = new EstateSettings();

            while (true)
            {
                IEstateConnector EstateConnector = DataManager.RequestPlugin <IEstateConnector>();

                string      name    = MainConsole.Instance.CmdPrompt("Estate owner name", LastEstateOwner);
                UserAccount account = scene.UserAccountService.GetUserAccount(scene.RegionInfo.ScopeID, name);

                if (account == null)
                {
                    string createNewUser = MainConsole.Instance.CmdPrompt("Could not find user " + name + ". Would you like to create this user?", "yes");

                    if (createNewUser == "yes")
                    {
                        // Create a new account
                        string password = MainConsole.Instance.PasswdPrompt(name + "'s password");
                        string email    = MainConsole.Instance.CmdPrompt(name + "'s email", "");

                        scene.UserAccountService.CreateUser(name, Util.Md5Hash(password), email);
                        account = scene.UserAccountService.GetUserAccount(scene.RegionInfo.ScopeID, name);

                        if (account == null)
                        {
                            m_log.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;

                string response = "no";
                List <EstateSettings> ownerEstates = EstateConnector.GetEstates(account.PrincipalID);
                if (ownerEstates != null)
                {
                    m_log.WarnFormat("Found user. {0} has {1} estates currently. {2}", account.Name, ownerEstates.Count,
                                     "These estates are the following:");
                    for (int i = 0; i < ownerEstates.Count; i++)
                    {
                        m_log.Warn(ownerEstates[i].EstateName);
                    }
                    response = MainConsole.Instance.CmdPrompt("Do you wish to join one of these existing estates? (Options are {yes, no})", LastEstateChoise, new List <string>()
                    {
                        "yes", "no"
                    });
                }
                else
                {
                    m_log.WarnFormat("Found user. {0} has no estates currently. Creating a new estate.", account.Name);
                }
                LastEstateChoise = response;
                if (response == "no")
                {
                    // Create a new estate
                    ES.EstateName = MainConsole.Instance.CmdPrompt("New estate name", scene.RegionInfo.EstateSettings.EstateName);

                    //Set to auto connect to this region next
                    LastEstateName   = ES.EstateName;
                    LastEstateChoise = "yes";

                    string Password = Util.Md5Hash(Util.Md5Hash(MainConsole.Instance.CmdPrompt("New estate password (to keep others from joining your estate, blank to have no pass)", ES.EstatePass)));
                    ES.EstatePass  = Password;
                    ES.EstateOwner = account.PrincipalID;

                    ES = EstateConnector.CreateEstate(ES, scene.RegionInfo.RegionID);
                    if (ES == null)
                    {
                        m_log.Warn("The connection to the server was broken, please try again soon.");
                        continue;
                    }
                    else if (ES.EstateID == 0)
                    {
                        m_log.Warn("There was an error in creating this estate: " + ES.EstateName); //EstateName holds the error. See LocalEstateConnector for more info.
                        continue;
                    }
                    //We set this back if there wasn't an error because the EstateService will NOT send it back
                    IGenericsConnector g = DataManager.RequestPlugin <IGenericsConnector>();
                    EstatePassword     s = new EstatePassword()
                    {
                        Password = Password
                    };
                    if (g != null) //Save the pass to the database
                    {
                        g.AddGeneric(scene.RegionInfo.RegionID, "EstatePassword", ES.EstateID.ToString(), s.ToOSD());
                    }
                    break;
                }
                else if (response == "yes")
                {
                    if (ownerEstates.Count != 1)
                    {
                        response = MainConsole.Instance.CmdPrompt("Estate name to join", LastEstateName);
                        if (response == "None")
                        {
                            continue;
                        }
                        LastEstateName = response;
                    }
                    else
                    {
                        LastEstateName = ownerEstates[0].EstateName;
                    }

                    List <int> estateIDs = EstateConnector.GetEstates(LastEstateName);
                    if (estateIDs == null)
                    {
                        m_log.Warn("The connection to the server was broken, please try again soon.");
                        continue;
                    }
                    if (estateIDs.Count < 1)
                    {
                        m_log.Warn("The name you have entered matches no known estate. Please try again");
                        continue;
                    }

                    int estateID = estateIDs[0];

                    string Password = Util.Md5Hash(Util.Md5Hash(MainConsole.Instance.CmdPrompt("Password for the estate", "")));
                    //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, Password))
                    {
                        if (EstateConnector.LoadEstateSettings(scene.RegionInfo.RegionID, out ES)) //We could do by EstateID now, but we need to completely make sure that it fully is set up
                        {
                            if (ES == null)
                            {
                                m_log.Warn("The connection to the server was broken, please try again soon.");
                                continue;
                            }
                            //Reset the pass and save it to the database
                            IGenericsConnector g = DataManager.RequestPlugin <IGenericsConnector>();
                            EstatePassword     s = new EstatePassword()
                            {
                                Password = Password
                            };
                            if (g != null) //Save the pass to the database
                            {
                                g.AddGeneric(scene.RegionInfo.RegionID, "EstatePassword", ES.EstateID.ToString(), s.ToOSD());
                            }
                        }
                        else
                        {
                            m_log.Warn("The connection to the server was broken, please try again soon.");
                            continue;
                        }
                        m_log.Warn("Successfully joined the estate!");
                        break;
                    }

                    m_log.Warn("Joining the estate failed. Please try again.");
                    continue;
                }
            }
            return(ES);
        }
示例#29
0
        /// <summary>
        /// This method is during the startup of the Aurora server, It is called just after the
        /// HTTP server has started and before any shared modules or regions have been loaded.
        /// </summary>
        /// <param name="config">Configuration parameter stream.</param>
        public void Initialize(ISimulationBase openSim)
        {
            //  Display a startup message, save the passed 'server instance?', obtain the
            // scene manager and scene graph for this server instance and obtain the interface
            // used to access region information, regardless of whether the storage method is
            // file, web or MySQL based in reality. Finally call an internal method that installs
            // the command console commands and alters some internal properties, indicating that
            // the module is loaded, enabled and ready for use.
            m_log.Info("[CITY BUILDER]: Version 0.0.0.10 ");

            //  Store the supplied simulation base to for future use.
            simulationBase = openSim;
            //  Store the configuration source (I presume all contents of all ini files).
            configSource = simulationBase.ConfigSource;
            //  Store the configuration section specifically used by City Builder.
            cityConfig = configSource.Configs["CityBuilder"];

            //  Obtain the default user account service, do the same for the estate/parcel too.
            m_UserAccountService = simulationBase.ApplicationRegistry.RequestModuleInterface<IUserAccountService>();

            //  If we have a configuration source for City Builder then set the specified internal properties else default them.
            if (cityConfig != null)
            {
                //  Configuration file is present or it is included within one of the other configuration
                // file that control aurora obtain the specified values or use hardcoded defaults.
                m_log.Info("[CITY BUILDER]: Configuration found, stored.");

                //  Construct Land data to be used for the entire city and any occupied regions.
                m_DefaultUserAccount = null;
                // Construct the estate settings for the city.
                m_DefaultEstate = null;

                startPort = cityConfig.GetInt("DefaultStartPort", startPort);

                m_fEnabled = cityConfig.GetBoolean("Enabled", m_fEnabled);

                m_fInitialised = false;
                citySeed = this.randomValue(257);
                cityName = cityConfig.GetString("DefaultCityName", "CityVille");
                cityOwner = cityConfig.GetString("DefaultCityOwner", "Cobra ElDiablo");
                m_DefaultUserName = cityOwner;
                m_DefaultUserEmail = cityConfig.GetString("DefaultUserEmail", "");
                m_DefaultUserPword = cityConfig.GetString("DefaultUserPassword", "");
                CityEstate = cityConfig.GetString("DefaultCityEstate", "Liquid Silicon Developments");
                m_DefaultEstateOwner = cityOwner;
                m_DefaultEstatePassword = cityConfig.GetString("DefaultEstatePassword", "");
                cityDensities = new List<float>();
                m_DefaultStartLocation = new Vector2(9500, 9500);
                startPort = cityConfig.GetInt("DefaultStartPort", 9500);
            }
            else
            {
                m_log.Info("[CITY BUILDER]: No configuration data found.");

                m_DefaultUserAccount = null;
                m_DefaultEstate = null;

                m_fEnabled = false;
                m_fInitialised = false;
                citySeed = this.randomValue(257);
                cityName = string.Empty;
                cityOwner = string.Empty;
                CityEstate = string.Empty;
                //  Configuration for the plugin.
                //  Configuration source from Aurora.
                cityConfig = new ConfigBase("CityBuilder",configSource);
                cityDensities = new List<float>();
                m_DefaultStartLocation = new Vector2(9500, 9500);
                // automatically disable the module if a configuration is not found. You can
                // manually enable the module and then set its internal properties before using
                // it via the server command console prompt.
                m_fEnabled = false;
            }

            cityDensities.Add(0.85f);
            cityDensities.Add(0.75f);
            cityDensities.Add(0.65f);
            cityDensities.Add(0.45f);
            //  Install the module, does not alter the enabled flag! This allows for the plugin
            // to install some commands for the main servers console but prevents any use of
            // the plugin until the internal properties are set correctly.
            InstallModule();
        }
示例#30
0
        public Dictionary <string, object> Fill(WebInterface webInterface, string filename, OSHttpRequest httpRequest,
                                                OSHttpResponse httpResponse, Dictionary <string, object> requestParameters,
                                                ITranslator translator, out string response)
        {
            response = null;
            var vars        = new Dictionary <string, object> ();
            var gridService = webInterface.Registry.RequestModuleInterface <IGridService> ();

            vars.Add("RegionServerURL", webInterface.GridURL);   // This needs to be sorted out for grid regions

            #region EditRegion
            if (requestParameters.ContainsKey("Submit"))
            {
                string RegionServerURL = requestParameters ["RegionServerURL"].ToString();
                // required
                if (RegionServerURL == "")
                {
                    response = "<h3>" + translator.GetTranslatedString("RegionServerURLError") + "</h3>";
                    return(null);
                }

                var regionID   = requestParameters ["RegionID"].ToString();
                var regionName = requestParameters ["RegionName"].ToString();
                //var OwnerUUID = requestParameters["OwnerUUID"].ToString();
                var regionLocX  = requestParameters ["RegionLocX"].ToString();
                var regionLocY  = requestParameters ["RegionLocY"].ToString();
                var regionSizeX = requestParameters ["RegionSizeX"].ToString();
                var regionSizeY = requestParameters ["RegionSizeY"].ToString();

                var regionType       = requestParameters ["RegionType"].ToString();
                var regionPresetType = requestParameters ["RegionPresetType"].ToString();
                var regionTerrain    = requestParameters ["RegionTerrain"].ToString();

                var regionLoadTerrain = requestParameters.ContainsKey("RegionLoadTerrain")
                    ? requestParameters ["RegionLoadTerrain"].ToString()
                    : "";

                // a bit of idiot proofing
                if (regionName == "")
                {
                    response = "<h3>" + translator.GetTranslatedString("RegionNameError") + "</h3>";
                    return(null);
                }
                if ((regionLocX == "") || (regionLocY == ""))
                {
                    response = "<h3>" + translator.GetTranslatedString("RegionLocationError") + "</h3>";
                    return(null);
                }

                // so far so good...
                // build the new region details

                int RegionPort = int.Parse(requestParameters ["RegionPort"].ToString());


                var newRegion = new RegionInfo();
                if (regionID != "")
                {
                    newRegion.RegionID = UUID.Parse(regionID);
                }

                newRegion.RegionName  = regionName;
                newRegion.RegionType  = regionType;
                newRegion.RegionLocX  = int.Parse(regionLocX);
                newRegion.RegionLocY  = int.Parse(regionLocY);
                newRegion.RegionSizeX = int.Parse(regionSizeX);
                newRegion.RegionSizeY = int.Parse(regionSizeY);

                newRegion.RegionPort = RegionPort;
                newRegion.SeeIntoThisSimFromNeighbor = true;
                newRegion.InfiniteRegion             = true;
                newRegion.ObjectCapacity             = 50000;
                newRegion.Startup = StartupType.Normal;

                var regionPreset = regionPresetType.ToLower();  //SubString(0,1);
                if (regionPreset.StartsWith("c", System.StringComparison.Ordinal))
                {
                    newRegion.RegionPort = int.Parse(requestParameters ["RegionPort"].ToString());
                    newRegion.SeeIntoThisSimFromNeighbor = (requestParameters ["RegionVisibility"].ToString().ToLower() == "yes");
                    newRegion.InfiniteRegion             = (requestParameters ["RegionInfinite"].ToString().ToLower() == "yes");
                    newRegion.ObjectCapacity             = int.Parse(requestParameters ["RegionCapacity"].ToString());

                    string delayStartup = requestParameters ["RegionDelayStartup"].ToString();
                    newRegion.Startup = delayStartup.StartsWith("n", System.StringComparison.Ordinal) ? StartupType.Normal : StartupType.Medium;
                }

                if (regionPreset.StartsWith("w", System.StringComparison.Ordinal))
                {
                    // 'standard' setup
                    newRegion.RegionType = newRegion.RegionType + "Whitecore";
                    //info.RegionPort;            // use auto assigned port
                    newRegion.RegionTerrain = "Flatland";
                    newRegion.Startup       = StartupType.Normal;
                    newRegion.SeeIntoThisSimFromNeighbor = true;
                    newRegion.InfiniteRegion             = true;
                    newRegion.ObjectCapacity             = 50000;
                    newRegion.RegionPort = RegionPort;
                }
                if (regionPreset.StartsWith("o", System.StringComparison.Ordinal))
                {
                    // 'Openspace' setup
                    newRegion.RegionType = newRegion.RegionType + "Openspace";
                    //newRegion.RegionPort;            // use auto assigned port
                    if (regionTerrain.StartsWith("a", System.StringComparison.Ordinal))
                    {
                        newRegion.RegionTerrain = "Aquatic";
                    }
                    else
                    {
                        newRegion.RegionTerrain = "Grassland";
                    }
                    newRegion.Startup = StartupType.Medium;
                    newRegion.SeeIntoThisSimFromNeighbor         = true;
                    newRegion.InfiniteRegion                     = true;
                    newRegion.ObjectCapacity                     = 750;
                    newRegion.RegionSettings.AgentLimit          = 10;
                    newRegion.RegionSettings.AllowLandJoinDivide = false;
                    newRegion.RegionSettings.AllowLandResell     = false;
                }
                if (regionPreset.StartsWith("h", System.StringComparison.Ordinal))
                {
                    // 'Homestead' setup
                    newRegion.RegionType = newRegion.RegionType + "Homestead";
                    //info.RegionPort;            // use auto assigned port
                    newRegion.RegionTerrain = "Homestead";
                    newRegion.Startup       = StartupType.Medium;
                    newRegion.SeeIntoThisSimFromNeighbor         = true;
                    newRegion.InfiniteRegion                     = true;
                    newRegion.ObjectCapacity                     = 3750;
                    newRegion.RegionSettings.AgentLimit          = 20;
                    newRegion.RegionSettings.AllowLandJoinDivide = false;
                    newRegion.RegionSettings.AllowLandResell     = false;
                }

                if (regionPreset.StartsWith("f", System.StringComparison.Ordinal))
                {
                    // 'Full Region' setup
                    newRegion.RegionType = newRegion.RegionType + "Full Region";
                    //newRegion.RegionPort;            // use auto assigned port
                    newRegion.RegionTerrain = regionTerrain;
                    newRegion.Startup       = StartupType.Normal;
                    newRegion.SeeIntoThisSimFromNeighbor = true;
                    newRegion.InfiniteRegion             = true;
                    newRegion.ObjectCapacity             = 15000;
                    newRegion.RegionSettings.AgentLimit  = 100;
                    if (newRegion.RegionType.StartsWith("M", System.StringComparison.Ordinal))                            // defaults are 'true'
                    {
                        newRegion.RegionSettings.AllowLandJoinDivide = false;
                        newRegion.RegionSettings.AllowLandResell     = false;
                    }
                }

                if (regionLoadTerrain.Length > 0)
                {
                    // we are loading terrain from a file... handled later
                    newRegion.RegionTerrain = "Custom";
                }

                // TODO: !!! Assumes everything is local for now !!!
                if (requestParameters.ContainsKey("NewRegion"))
                {
                    ISceneManager scenemanager = webInterface.Registry.RequestModuleInterface <ISceneManager> ();
                    if (scenemanager.CreateRegion(newRegion))
                    {
                        response = "<h3>Successfully created region</h3>" +
                                   "<script language=\"javascript\">" +
                                   "setTimeout(function() {window.location.href = \"/?page=region_manager\";}, 2000);" +
                                   "</script>";
                        return(null);
                    }
                    response = "<h3>Error creating this region.</h3>";
                    return(null);
                }

/* not necessary??
 *                   IGridRegisterModule gridRegister = webInterface.Registry.RequestModuleInterface<IGridRegisterModule> ();
 *                      if (gridRegister != null) {
 *                          if (gridRegister.RegisterRegionWithGrid (null, true, false, null)) {
 *
 *                          }
 *
 *
 *                      //                        response = "<h3>" + error + "</h3>";
 *                      response = "<h3> Error registering region with grid</h3>";
 *              }
 */
                // update region details
                var infoConnector = Framework.Utilities.DataManager.RequestPlugin <IRegionInfoConnector> ();
                if (infoConnector != null)
                {
                    infoConnector.UpdateRegionInfo(newRegion);

                    response = "<h3>Region details updated.</h3>" +
                               "<script language=\"javascript\">" +
                               "setTimeout(function() {window.location.href = \"/?page=region_manager\";}, 2000);" +
                               "</script>";
                }
                else
                {
                    response = "<h3>Unable to update Region details!</h3>" +
                               "<script language=\"javascript\">" +
                               "setTimeout(function() {window.location.href = \"/?page=region_manager\";}, 2000);" +
                               "</script>";
                }
                return(null);
            }
            #endregion

            #region EditRegion
            // we have or need data
            if (httpRequest.Query.ContainsKey("regionid"))
            {
                var region = gridService.GetRegionByUUID(null, UUID.Parse(httpRequest.Query ["regionid"].ToString()));

                vars.Add("RegionID", region.RegionID.ToString());
                vars.Add("RegionName", region.RegionName);

                UserAccount estateOwnerAccount = null;
                var         estateOwner        = UUID.Zero;
                var         estateId           = -1;

                IEstateConnector estateConnector = Framework.Utilities.DataManager.RequestPlugin <IEstateConnector> ();
                if (estateConnector != null)
                {
                    EstateSettings estate = estateConnector.GetRegionEstateSettings(region.RegionID);
                    if (estate != null)
                    {
                        estateId    = (int)estate.EstateID;
                        estateOwner = estate.EstateOwner;
                    }
                    var accountService = webInterface.Registry.RequestModuleInterface <IUserAccountService> ();
                    if (accountService != null)
                    {
                        estateOwnerAccount = accountService.GetUserAccount(null, estate.EstateOwner);
                    }
                }

                vars.Add("EstateList", WebHelpers.EstateSelections(webInterface.Registry, null, estateId));
                vars.Add("OwnerUUID", region.EstateOwner);
                vars.Add("OwnerName", estateOwnerAccount != null ? estateOwnerAccount.Name : "No account found");

                vars.Add("RegionLocX", region.RegionLocX / Constants.RegionSize);
                vars.Add("RegionLocY", region.RegionLocY / Constants.RegionSize);
                vars.Add("RegionSizeX", region.RegionSizeX);
                vars.Add("RegionSizeY", region.RegionSizeY);
                vars.Add("RegionPort", region.InternalPort.ToString());
                vars.Add("RegionType", WebHelpers.RegionTypeArgs(translator, region.RegionType));
                vars.Add("RegionPresetType", WebHelpers.RegionPresetArgs(translator, region.RegionType));
                vars.Add("RegionTerrain", WebHelpers.RegionTerrainArgs(translator, region.RegionTerrain));

                // TODO:  This will not work yet  :)
                bool switches      = false;
                var  infoConnector = Framework.Utilities.DataManager.RequestPlugin <IRegionInfoConnector> ();
                if (infoConnector != null)
                {
                    var regionInfo = infoConnector.GetRegionInfo(region.RegionID);
                    if (regionInfo != null)
                    {
                        vars.Add("RegionCapacity", regionInfo.ObjectCapacity.ToString());
                        vars.Add("RegionVisibility", WebHelpers.YesNoSelection(translator, regionInfo.SeeIntoThisSimFromNeighbor));
                        vars.Add("RegionInfinite", WebHelpers.YesNoSelection(translator, regionInfo.InfiniteRegion));
                        vars.Add("RegionDelayStartup", WebHelpers.RegionStartupSelection(translator, regionInfo.Startup));
                    }
                }
                if (!switches)
                {
                    vars.Add("RegionCapacity", "Unknown");
                    vars.Add("RegionVisibility", WebHelpers.YesNoSelection(translator, true));
                    vars.Add("RegionInfinite", WebHelpers.YesNoSelection(translator, true));
                    vars.Add("RegionDelayStartup", WebHelpers.RegionStartupSelection(translator, StartupType.Normal));
                }


                //vars.Add ("RegionOnline",
                //    (region.Flags & (int)RegionFlags.RegionOnline) == (int)RegionFlags.RegionOnline
                //          ? translator.GetTranslatedString ("Online")
                //          : translator.GetTranslatedString ("Offline"));

                IWebHttpTextureService webTextureService = webInterface.Registry.
                                                           RequestModuleInterface <IWebHttpTextureService> ();
                if (webTextureService != null && region.TerrainMapImage != UUID.Zero)
                {
                    vars.Add("RegionImageURL", webTextureService.GetTextureURL(region.TerrainMapImage));
                }
                else
                {
                    vars.Add("RegionImageURL", "images/icons/no_picture.jpg");
                }

                vars.Add("Submit", translator.GetTranslatedString("SaveUpdates"));
            }
            #endregion
            else
            #region NewRegion
            {
                // default values

                // check for user region name  seed
                string [] m_regionNameSeed = null;
                IConfig   regionConfig     =
                    webInterface.Registry.RequestModuleInterface <ISimulationBase> ().ConfigSource.Configs ["FileBasedSimulationData"];

                if (regionConfig != null)
                {
                    string regionNameSeed = regionConfig.GetString("RegionNameSeed", "");
                    if (regionNameSeed != "")
                    {
                        m_regionNameSeed = regionNameSeed.Split(',');
                    }
                }

                var    rNames     = new Utilities.MarkovNameGenerator();
                string regionName = rNames.FirstName(m_regionNameSeed == null ? Utilities.RegionNames : m_regionNameSeed, 3, 7);
                vars.Add("RegionID", "");
                vars.Add("RegionName", regionName);

                var scenemanager = webInterface.Registry.RequestModuleInterface <ISceneManager> ();
                var gconnector   = Framework.Utilities.DataManager.RequestPlugin <IGenericsConnector> ();
                var settings     = gconnector.GetGeneric <WebUISettings> (UUID.Zero, "WebUISettings", "Settings");
                if (settings == null)
                {
                    settings = new WebUISettings();
                }

                // get some current details (This may be better than using scenemanager)
                //List<GridRegion> regions = gridService.GetRegionsByName(null, "", null,null);

                var currentInfo = scenemanager.FindCurrentRegionInfo();
                //Dictionary<string, int> currentInfo = null;
                if (currentInfo != null)
                {
                    vars.Add("RegionLocX", currentInfo ["minX"] > 0 ? currentInfo ["minX"] : settings.MapCenter.X);
                    vars.Add("RegionLocY", currentInfo ["minY"] > 0 ? currentInfo ["minY"] : settings.MapCenter.Y);
                    vars.Add("RegionPort", currentInfo ["port"] > 0 ? currentInfo ["port"] + 1 : 9000);
                }
                else
                {
                    vars.Add("RegionLocX", settings.MapCenter.X);
                    vars.Add("RegionLocY", settings.MapCenter.Y);
                    vars.Add("RegionPort", 9000);
                }


                vars.Add("RegionSizeX", Constants.RegionSize);
                vars.Add("RegionSizeY", Constants.RegionSize);
                vars.Add("RegionType", WebHelpers.RegionTypeArgs(translator, ""));
                vars.Add("RegionPresetType", WebHelpers.RegionPresetArgs(translator, ""));
                vars.Add("RegionTerrain", WebHelpers.RegionTerrainArgs(translator, ""));
                vars.Add("EstateList", WebHelpers.EstateSelections(webInterface.Registry, null, -1));
                vars.Add("RegionCapacity", "Unknown");
                vars.Add("RegionVisibility", WebHelpers.YesNoSelection(translator, true));
                vars.Add("RegionInfinite", WebHelpers.YesNoSelection(translator, true));
                vars.Add("RegionDelayStartup", WebHelpers.RegionStartupSelection(translator, StartupType.Normal));   // normal startup
                vars.Add("Submit", translator.GetTranslatedString("Save"));
            }
            #endregion

            vars.Add("RegionPresets", WebHelpers.RegionSelections(webInterface.Registry));

            // Labels
            vars.Add("RegionManagerText", translator.GetTranslatedString("MenuRegionManager"));
            vars.Add("RegionNameText", translator.GetTranslatedString("RegionNameText"));
            vars.Add("RegionLocationText", translator.GetTranslatedString("RegionLocationText"));
            vars.Add("RegionSizeText", translator.GetTranslatedString("RegionSizeText"));
            vars.Add("RegionTypeText", translator.GetTranslatedString("RegionTypeText"));
            vars.Add("RegionPresetText", translator.GetTranslatedString("RegionPresetText"));
            vars.Add("RegionTerrainText", translator.GetTranslatedString("RegionTerrainText"));
            vars.Add("EstateText", translator.GetTranslatedString("EstateText"));
            vars.Add("OwnerNameText", translator.GetTranslatedString("OwnerNameText"));
            vars.Add("RegionPortText", translator.GetTranslatedString("RegionPortText"));
            vars.Add("RegionDelayStartupText", translator.GetTranslatedString("RegionDelayStartupText"));
            vars.Add("RegionVisibilityText", translator.GetTranslatedString("RegionVisibilityText"));
            vars.Add("RegionInfiniteText", translator.GetTranslatedString("RegionInfiniteText"));
            vars.Add("RegionCapacityText", translator.GetTranslatedString("RegionCapacityText"));
            vars.Add("Cancel", translator.GetTranslatedString("Cancel"));
            vars.Add("InfoMessage", "");



            return(vars);
        }
示例#31
0
        /// <summary>
        /// Shows estate regions.
        /// </summary>
        /// <param name="scene">Scene.</param>
        /// <param name="cmd">Cmd.</param>
        void ShowEstateRegionsCommand(IScene scene, string [] cmd)
        {
            IEstateConnector estateConnector = Framework.Utilities.DataManager.RequestPlugin <IEstateConnector> ();
            IGridService     gridService     = m_registry.RequestModuleInterface <IGridService> ();

            // check for passed estate name
            string estateName;

            if (cmd.Length < 4)
            {
                do
                {
                    estateName = MainConsole.Instance.Prompt("Estate name (? for list)", "");
                    if (estateName == "?")
                    {
                        var estates = estateConnector.GetEstates();
                        MainConsole.Instance.CleanInfo(" Available estates are : ");
                        foreach (string estate in estates)
                        {
                            MainConsole.Instance.CleanInfo("    " + estate);
                        }
                    }
                } while (estateName == "?");

                if (estateName == "")
                {
                    return;
                }
            }
            else
            {
                estateName = cmd [3];
            }

            // verify that the estate does exist
            EstateSettings ES = estateConnector.GetEstateSettings(estateName);

            if (ES == null)
            {
                MainConsole.Instance.ErrorFormat("[EstateService]: The estate '{0}' does not exist!", estateName);
                return;
            }

            var estateregions = estateConnector.GetRegions((int)ES.EstateID);

            int   estRegions = 0;
            float estateArea = 0;
            int   offLine    = 0;

            string regionInfo;

            regionInfo  = string.Format("{0, -20}", "Region");
            regionInfo += string.Format("{0, -12}", "Location");
            regionInfo += string.Format("{0, -14}", "Size");
            regionInfo += string.Format("{0, -12}", "Area");
            regionInfo += string.Format("{0, -26}", "Type");
            regionInfo += string.Format("{0, -10}", "Online");

            MainConsole.Instance.CleanInfo(regionInfo);

            MainConsole.Instance.CleanInfo(
                "----------------------------------------------------------------------------------------------------");

            foreach (UUID regionID in estateregions)
            {
                var region = gridService.GetRegionByUUID(null, regionID);
                if (region == null)     // deleted??
                {
                    continue;
                }

                estRegions++;
                estateArea = estateArea + region.RegionArea;


                if (!region.IsOnline)
                {
                    offLine++;
                }

                // TODO ... change hardcoded field sizes to public constants
                regionInfo  = string.Format("{0, -20}", region.RegionName);
                regionInfo += string.Format("{0, -12}", region.RegionLocX / Constants.RegionSize + "," + region.RegionLocY / Constants.RegionSize);
                regionInfo += string.Format("{0, -14}", region.RegionSizeX + "x" + region.RegionSizeY);
                regionInfo += string.Format("{0, -12}", region.RegionArea < 1000000 ? region.RegionArea + " m2" : (region.RegionArea / 1000000) + " km2");
                regionInfo += string.Format("{0, -26}", region.RegionType);
                regionInfo += string.Format("{0, -10}", region.IsOnline ? "yes" : "no");

                MainConsole.Instance.CleanInfo(regionInfo);
            }
            MainConsole.Instance.CleanInfo("");
            MainConsole.Instance.CleanInfo(
                "----------------------------------------------------------------------------------------------------");
            MainConsole.Instance.CleanInfo("Regions : " + estRegions + " regions with an area of " + (estateArea / 1000000) + " km2");
            MainConsole.Instance.CleanInfo("Offline : " + offLine);
            MainConsole.Instance.CleanInfo(string.Empty);
            MainConsole.Instance.CleanInfo(
                "----------------------------------------------------------------------------------------------------");
            MainConsole.Instance.CleanInfo("\n");
        }
示例#32
0
        public Dictionary <string, object> Fill(WebInterface webInterface, string filename, OSHttpRequest httpRequest,
                                                OSHttpResponse httpResponse, Dictionary <string, object> requestParameters,
                                                ITranslator translator, out string response)
        {
            response = null;
            var vars = new Dictionary <string, object> ();

            if (httpRequest.Query.ContainsKey("regionid"))
            {
                IAgentInfoService   agentInfoService = webInterface.Registry.RequestModuleInterface <IAgentInfoService> ();
                IUserAccountService userService      = webInterface.Registry.RequestModuleInterface <IUserAccountService> ();

                var regionService = webInterface.Registry.RequestModuleInterface <IGridService> ();
                var region        = regionService.GetRegionByUUID(null, UUID.Parse(httpRequest.Query ["regionid"].ToString()));

                IEstateConnector estateConnector = Framework.Utilities.DataManager.RequestPlugin <IEstateConnector> ();
                var ownerUUID = UUID.Zero;
                var ownerName = "Unknown";
                if (estateConnector != null)
                {
                    EstateSettings estate = estateConnector.GetRegionEstateSettings(region.RegionID);
                    if (estate != null)
                    {
                        ownerUUID = estate.EstateOwner;
                        UserAccount estateOwnerAcct = new UserAccount();
                        if (userService != null)
                        {
                            estateOwnerAcct = userService.GetUserAccount(null, estate.EstateOwner);
                        }
                        ownerName = estateOwnerAcct.Valid ? estateOwnerAcct.Name : "No account found";
                    }
                }
                vars.Add("OwnerUUID", ownerUUID);
                vars.Add("OwnerName", ownerName);

                vars.Add("RegionName", region.RegionName);
                vars.Add("RegionLocX", region.RegionLocX / Constants.RegionSize);
                vars.Add("RegionLocY", region.RegionLocY / Constants.RegionSize);
                vars.Add("RegionSizeX", region.RegionSizeX);
                vars.Add("RegionSizeY", region.RegionSizeY);
                vars.Add("RegionType", region.RegionType);
                vars.Add("RegionTerrain", region.RegionTerrain);
                vars.Add("RegionOnline",
                         (region.Flags & (int)RegionFlags.RegionOnline) ==
                         (int)RegionFlags.RegionOnline
                             ? translator.GetTranslatedString("Online")
                             : translator.GetTranslatedString("Offline"));

                if (agentInfoService != null)
                {
                    List <UserInfo> usersInRegion = agentInfoService.GetUserInfos(region.RegionID);
                    if (usersInRegion.Count == 0)
                    {
                        vars.Add("NumberOfUsersInRegion", 0);
                        vars.Add("UsersInRegion", new List <Dictionary <string, object> > ());
                    }
                    else
                    {
                        vars.Add("NumberOfUsersInRegion", usersInRegion.Count);
                        List <Dictionary <string, object> > users = new List <Dictionary <string, object> > ();
                        foreach (var client in usersInRegion)
                        {
                            if (userService != null)
                            {
                                UserAccount userAcct = userService.GetUserAccount(null, client.UserID);
                                if (userAcct.Valid)
                                {
                                    Dictionary <string, object> user = new Dictionary <string, object> ();
                                    user.Add("UserNameText", translator.GetTranslatedString("UserNameText"));
                                    user.Add("UserUUID", client.UserID);
                                    user.Add("UserName", userAcct.Name);
                                    users.Add(user);
                                }
                            }
                        }
                        vars.Add("UsersInRegion", users);
                    }
                }
                else
                {
                    vars.Add("NumberOfUsersInRegion", 0);
                    vars.Add("UsersInRegion", new List <Dictionary <string, object> > ());
                }
                IDirectoryServiceConnector directoryConnector =
                    Framework.Utilities.DataManager.RequestPlugin <IDirectoryServiceConnector> ();

                if (directoryConnector != null)
                {
                    List <LandData> data = directoryConnector.GetParcelsByRegion(0, 10, region.RegionID, UUID.Zero,
                                                                                 ParcelFlags.None, ParcelCategory.Any);
                    List <Dictionary <string, object> > parcels = new List <Dictionary <string, object> > ();
                    if (data != null)
                    {
                        foreach (var p in data)
                        {
                            Dictionary <string, object> parcel = new Dictionary <string, object> ();
                            parcel.Add("ParcelNameText", translator.GetTranslatedString("ParcelNameText"));
                            parcel.Add("ParcelOwnerText", translator.GetTranslatedString("ParcelOwnerText"));
                            parcel.Add("ParcelUUID", p.GlobalID);
                            parcel.Add("ParcelName", p.Name);
                            parcel.Add("ParcelOwnerUUID", p.OwnerID);
                            if (userService != null)
                            {
                                var parcelownerAcct = userService.GetUserAccount(null, p.OwnerID);
                                if (parcelownerAcct.Valid)
                                {
                                    parcel.Add("ParcelOwnerName", parcelownerAcct.Name);
                                }
                                else
                                {
                                    parcel.Add("ParcelOwnerName", translator.GetTranslatedString("NoAccountFound"));
                                }
                            }
                            parcels.Add(parcel);
                        }
                    }
                    vars.Add("ParcelInRegion", parcels);
                    vars.Add("NumberOfParcelsInRegion", parcels.Count);
                }
                IWebHttpTextureService webTextureService = webInterface.Registry.
                                                           RequestModuleInterface <IWebHttpTextureService> ();
                if (webTextureService != null && region.TerrainMapImage != UUID.Zero)
                {
                    vars.Add("RegionImageURL", webTextureService.GetTextureURL(region.TerrainMapImage));
                }
                else
                {
                    vars.Add("RegionImageURL", "images/icons/no_picture.jpg");
                }

                // Menu Region
                vars.Add("MenuRegionTitle", translator.GetTranslatedString("MenuRegionTitle"));
                vars.Add("MenuParcelTitle", translator.GetTranslatedString("MenuParcelTitle"));
                vars.Add("MenuOwnerTitle", translator.GetTranslatedString("MenuOwnerTitle"));

                vars.Add("RegionInformationText", translator.GetTranslatedString("RegionInformationText"));
                vars.Add("OwnerNameText", translator.GetTranslatedString("OwnerNameText"));
                vars.Add("RegionLocationText", translator.GetTranslatedString("RegionLocationText"));
                vars.Add("RegionSizeText", translator.GetTranslatedString("RegionSizeText"));
                vars.Add("RegionNameText", translator.GetTranslatedString("RegionNameText"));
                vars.Add("RegionTypeText", translator.GetTranslatedString("RegionTypeText"));
                vars.Add("RegionTerrainText", translator.GetTranslatedString("RegionTerrainText"));
                vars.Add("RegionInfoText", translator.GetTranslatedString("RegionInfoText"));
                vars.Add("RegionOnlineText", translator.GetTranslatedString("RegionOnlineText"));
                vars.Add("NumberOfUsersInRegionText", translator.GetTranslatedString("NumberOfUsersInRegionText"));
                vars.Add("ParcelsInRegionText", translator.GetTranslatedString("ParcelsInRegionText"));

                // Style Switcher
                vars.Add("styles1", translator.GetTranslatedString("styles1"));
                vars.Add("styles2", translator.GetTranslatedString("styles2"));
                vars.Add("styles3", translator.GetTranslatedString("styles3"));
                vars.Add("styles4", translator.GetTranslatedString("styles4"));
                vars.Add("styles5", translator.GetTranslatedString("styles5"));

                vars.Add("StyleSwitcherStylesText", translator.GetTranslatedString("StyleSwitcherStylesText"));
                vars.Add("StyleSwitcherLanguagesText", translator.GetTranslatedString("StyleSwitcherLanguagesText"));
                vars.Add("StyleSwitcherChoiceText", translator.GetTranslatedString("StyleSwitcherChoiceText"));

                // Language Switcher
                vars.Add("en", translator.GetTranslatedString("en"));
                vars.Add("fr", translator.GetTranslatedString("fr"));
                vars.Add("de", translator.GetTranslatedString("de"));
                vars.Add("it", translator.GetTranslatedString("it"));
                vars.Add("es", translator.GetTranslatedString("es"));
                vars.Add("nl", translator.GetTranslatedString("nl"));

                var settings = webInterface.GetWebUISettings();
                vars.Add("ShowLanguageTranslatorBar", !settings.HideLanguageTranslatorBar);
                vars.Add("ShowStyleBar", !settings.HideStyleBar);
            }

            return(vars);
        }
示例#33
0
        private EstateSettings CreateEstateInfo(IScene scene)
        {
            EstateSettings ES = new EstateSettings();

            while (true)
            {
                IEstateConnector EstateConnector = Framework.Utilities.DataManager.RequestPlugin <IEstateConnector>();

                string      name    = MainConsole.Instance.Prompt("Estate owner name", LastEstateOwner);
                UserAccount account = scene.UserAccountService.GetUserAccount(scene.RegionInfo.AllScopeIDs, 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.AllScopeIDs, 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 at the grid level.");
                            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;
                        }

                        List <string> responses = ownerEstates.Select(settings => settings.EstateName).ToList();

                        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);
        }
示例#34
0
        private void EstateSettingsSimpleStorage(
            UUID regionId,
            string estateName,
            uint parentEstateID,
            float billableFactor,
            int pricePerMeter,
            int redirectGridX,
            int redirectGridY,
            bool useGlobalTime,
            bool fixedSun,
            double sunPosition,
            bool allowVoice,
            bool allowDirectTeleport,
            bool resetHomeOnTeleport,
            bool denyAnonymous,
            bool denyIdentified,
            bool denyTransacted,
            bool denyMinors,
            bool abuseEmailToEstateOwner,
            bool blockDwell,
            bool estateSkipScripts,
            bool taxFree,
            bool publicAccess,
            string abuseEmail,
            UUID estateOwner
            )
        {
            // Letting estate store generate rows to database for us
            EstateSettings originalSettings = db.LoadEstateSettings(regionId);

            SetEstateSettings(
                originalSettings,
                estateName,
                parentEstateID,
                billableFactor,
                pricePerMeter,
                redirectGridX,
                redirectGridY,
                useGlobalTime,
                fixedSun,
                sunPosition,
                allowVoice,
                allowDirectTeleport,
                resetHomeOnTeleport,
                denyAnonymous,
                denyIdentified,
                denyTransacted,
                denyMinors,
                abuseEmailToEstateOwner,
                blockDwell,
                estateSkipScripts,
                taxFree,
                publicAccess,
                abuseEmail,
                estateOwner
                );

            originalSettings.EstateName              = estateName;
            originalSettings.ParentEstateID          = parentEstateID;
            originalSettings.BillableFactor          = billableFactor;
            originalSettings.PricePerMeter           = pricePerMeter;
            originalSettings.RedirectGridX           = redirectGridX;
            originalSettings.RedirectGridY           = redirectGridY;
            originalSettings.UseGlobalTime           = useGlobalTime;
            originalSettings.FixedSun                = fixedSun;
            originalSettings.SunPosition             = sunPosition;
            originalSettings.AllowVoice              = allowVoice;
            originalSettings.AllowDirectTeleport     = allowDirectTeleport;
            originalSettings.ResetHomeOnTeleport     = resetHomeOnTeleport;
            originalSettings.DenyAnonymous           = denyAnonymous;
            originalSettings.DenyIdentified          = denyIdentified;
            originalSettings.DenyTransacted          = denyTransacted;
            originalSettings.DenyMinors              = denyMinors;
            originalSettings.AbuseEmailToEstateOwner = abuseEmailToEstateOwner;
            originalSettings.BlockDwell              = blockDwell;
            originalSettings.EstateSkipScripts       = estateSkipScripts;
            originalSettings.TaxFree      = taxFree;
            originalSettings.PublicAccess = publicAccess;
            originalSettings.AbuseEmail   = abuseEmail;
            originalSettings.EstateOwner  = estateOwner;

            // Saving settings.
            db.StoreEstateSettings(originalSettings);

            // Loading settings to another instance variable.
            EstateSettings loadedSettings = db.LoadEstateSettings(regionId);

            // Checking that loaded values are correct.
            ValidateEstateSettings(
                loadedSettings,
                estateName,
                parentEstateID,
                billableFactor,
                pricePerMeter,
                redirectGridX,
                redirectGridY,
                useGlobalTime,
                fixedSun,
                sunPosition,
                allowVoice,
                allowDirectTeleport,
                resetHomeOnTeleport,
                denyAnonymous,
                denyIdentified,
                denyTransacted,
                denyMinors,
                abuseEmailToEstateOwner,
                blockDwell,
                estateSkipScripts,
                taxFree,
                publicAccess,
                abuseEmail,
                estateOwner
                );
        }
        private EstateSettings CreateEstateInfo(IScene scene)
        {
            EstateSettings ES = new EstateSettings();
            while (true)
            {
                IEstateConnector EstateConnector = Framework.Utilities.DataManager.RequestPlugin<IEstateConnector>();

                string name = MainConsole.Instance.Prompt("Estate owner name", LastEstateOwner);
                UserAccount account = scene.UserAccountService.GetUserAccount(scene.RegionInfo.AllScopeIDs, 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.AllScopeIDs, 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 at the grid level.");
                            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;

                        List<string> responses = ownerEstates.Select(settings => settings.EstateName).ToList();

                        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;
        }
示例#36
0
        public Dictionary <string, object> Fill(WebInterface webInterface, string filename, OSHttpRequest httpRequest,
                                                OSHttpResponse httpResponse, Dictionary <string, object> requestParameters,
                                                ITranslator translator, out string response)
        {
            response = null;
            var vars = new Dictionary <string, object> ();

            if (httpRequest.Query.ContainsKey("regionid"))
            {
                var regionService = webInterface.Registry.RequestModuleInterface <IGridService> ();
                var region        = regionService.GetRegionByUUID(null, UUID.Parse(httpRequest.Query ["regionid"].ToString()));

                IEstateConnector estateConnector = Framework.Utilities.DataManager.RequestPlugin <IEstateConnector> ();
                EstateSettings   estate          = null;
                if (estateConnector != null)
                {
                    estate = estateConnector.GetRegionEstateSettings(region.RegionID);
                }
                if (estate != null)
                {
                    vars.Add("OwnerUUID", estate.EstateOwner);
                    var estateOwnerAccount = webInterface.Registry.RequestModuleInterface <IUserAccountService> ().
                                             GetUserAccount(null, estate.EstateOwner);
                    vars.Add("OwnerName", estateOwnerAccount.Valid ? estateOwnerAccount.Name : "No account found");
                }
                else
                {
                    vars.Add("OwnerUUID", "Unknown");
                    vars.Add("OwnerName", "Unknown");
                }

                vars.Add("RegionName", region.RegionName);
                vars.Add("RegionLocX", region.RegionLocX / Constants.RegionSize);
                vars.Add("RegionLocY", region.RegionLocY / Constants.RegionSize);
                vars.Add("RegionSizeX", region.RegionSizeX);
                vars.Add("RegionSizeY", region.RegionSizeY);
                vars.Add("RegionType", region.RegionType);
                vars.Add("RegionTerrain", region.RegionTerrain);
                vars.Add("RegionMaturity", Utilities.GetRegionMaturity(region.Access));

                bool regionIsOnline = (region.Flags & (int)RegionFlags.RegionOnline) == (int)RegionFlags.RegionOnline;
                vars.Add("RegionOnline",
                         regionIsOnline
                    ? translator.GetTranslatedString("Online")
                    : translator.GetTranslatedString("Offline"));

                IAgentInfoService   agentInfoService = webInterface.Registry.RequestModuleInterface <IAgentInfoService> ();
                IUserAccountService userService      = webInterface.Registry.RequestModuleInterface <IUserAccountService> ();
                if (agentInfoService != null)
                {
                    List <UserInfo> usersInRegion = agentInfoService.GetUserInfos(region.RegionID);
                    vars.Add("NumberOfUsersInRegion", usersInRegion.Count);

                    List <Dictionary <string, object> > users = new List <Dictionary <string, object> > ();
                    if (userService != null)
                    {
                        foreach (var client in usersInRegion)
                        {
                            UserAccount userAcct = userService.GetUserAccount(null, (UUID)client.UserID);
                            if (!userAcct.Valid)    // ?? maybe we should just show as 'Unknown' -greythane- 20190730
                            {
                                continue;
                            }
                            Dictionary <string, object> user = new Dictionary <string, object> ();
                            user.Add("UserNameText", translator.GetTranslatedString("UserNameText"));
                            user.Add("UserUUID", client.UserID);
                            user.Add("UserName", userAcct.Name);
                            users.Add(user);
                        }
                    }
                    vars.Add("UsersInRegion", users);
                }
                else
                {
                    vars.Add("NumberOfUsersInRegion", 0);
                    vars.Add("UsersInRegion", new List <Dictionary <string, object> > ());
                }
                IDirectoryServiceConnector directoryConnector =
                    Framework.Utilities.DataManager.RequestPlugin <IDirectoryServiceConnector> ();
                if (directoryConnector != null)
                {
                    List <LandData> parcelData = directoryConnector.GetParcelsByRegion(0, 10, region.RegionID, UUID.Zero,
                                                                                       ParcelFlags.None, ParcelCategory.Any);

                    /*List<Dictionary<string, object>> parcels = new List<Dictionary<string, object>>();
                     * foreach (var p in parcelData)
                     * {
                     *  Dictionary<string, object> parcel = new Dictionary<string, object>();
                     *  parcel.Add("ParcelNameText", translator.GetTranslatedString("ParcelNameText"));
                     *  parcel.Add("ParcelOwnerText", translator.GetTranslatedString("ParcelOwnerText"));
                     *  parcel.Add("ParcelUUID", p.GlobalID);
                     *  parcel.Add("ParcelName", p.Name);
                     *  parcel.Add("ParcelOwnerUUID", p.OwnerID);
                     *  IUserAccountService accountService =
                     *      webInterface.Registry.RequestModuleInterface<IUserAccountService>();
                     *  if (accountService != null)
                     *  {
                     *      var ownerAcct = accountService.GetUserAccount(null, p.OwnerID);
                     *      if (!ownerAcct.Valid)
                     *          parcel.Add("ParcelOwnerName", translator.GetTranslatedString("NoAccountFound"));
                     *      else
                     *          parcel.Add("ParcelOwnerName", ownerAcct.Name);
                     *  }
                     *  parcels.Add(parcel);
                     * }
                     *
                     * vars.Add("ParcelInRegion", parcels);
                     */
                    if (parcelData != null)
                    {
                        vars.Add("NumberOfParcelsInRegion", parcelData.Count);
                    }
                    else
                    {
                        vars.Add("NumberOfParcelsInRegion", 0);
                    }
                }
                IWebHttpTextureService webTextureService = webInterface.Registry.RequestModuleInterface <IWebHttpTextureService> ();
                var regionMapURL = "../images/icons/no_terrain.jpg";

                if (webTextureService != null && region.TerrainMapImage != UUID.Zero)
                {
                    regionMapURL = webTextureService.GetTextureURL(region.TerrainMapImage);
                }

                vars.Add("RegionImageURL", regionMapURL);

                // worldview
                IConfig worldViewConfig =
                    webInterface.Registry.RequestModuleInterface <ISimulationBase> ().ConfigSource.Configs ["WorldViewModule"];
                bool worldViewEnabled = false;
                if (worldViewConfig != null)
                {
                    worldViewEnabled = worldViewConfig.GetBoolean("Enabled", true);
                }

                if (webTextureService != null && worldViewEnabled && regionIsOnline)
                {
                    vars.Add("RegionWorldViewURL", webTextureService.GetRegionWorldViewURL(region.RegionID));
                }
                else
                {
                    vars.Add("RegionWorldViewURL", regionMapURL);
                }

                // Menu Region
                vars.Add("MenuRegionTitle", translator.GetTranslatedString("MenuRegionTitle"));
                vars.Add("TooltipsMenuRegion", translator.GetTranslatedString("TooltipsMenuRegion"));
                vars.Add("MenuParcelTitle", translator.GetTranslatedString("MenuParcelTitle"));
                vars.Add("TooltipsMenuParcel", translator.GetTranslatedString("TooltipsMenuParcel"));
                vars.Add("MenuOwnerTitle", translator.GetTranslatedString("MenuOwnerTitle"));
                vars.Add("TooltipsMenuOwner", translator.GetTranslatedString("TooltipsMenuOwner"));


                vars.Add("RegionInformationText", translator.GetTranslatedString("RegionInformationText"));
                vars.Add("OwnerNameText", translator.GetTranslatedString("OwnerNameText"));
                vars.Add("RegionLocationText", translator.GetTranslatedString("RegionLocationText"));
                vars.Add("RegionSizeText", translator.GetTranslatedString("RegionSizeText"));
                vars.Add("RegionNameText", translator.GetTranslatedString("RegionNameText"));
                vars.Add("RegionTypeText", translator.GetTranslatedString("RegionTypeText"));
                vars.Add("RegionMaturityText", translator.GetTranslatedString("RegionMaturityText"));
                vars.Add("RegionTerrainText", translator.GetTranslatedString("RegionTerrainText"));
                vars.Add("RegionInfoText", translator.GetTranslatedString("RegionInfoText"));
                vars.Add("RegionOnlineText", translator.GetTranslatedString("RegionOnlineText"));
                vars.Add("NumberOfUsersInRegionText", translator.GetTranslatedString("NumberOfUsersInRegionText"));
                vars.Add("ParcelsInRegionText", translator.GetTranslatedString("ParcelsInRegionText"));
                vars.Add("MainServerURL", webInterface.GridURL);
            }

            return(vars);
        }
示例#37
0
        private void FixMissingRegionOwners()
        {
            QueryFilter filter = new QueryFilter();

            filter.andFilters["OwnerUUID"] = UUID.Zero;

            List <GridRegion> borked = ParseQuery(null, GD.Query(new string[1] {
                "*"
            }, m_realm, filter, null, null, null));

            if (borked.Count < 1)
            {
                MainConsole.Instance.Debug("[LocalGridConnector] No regions found with missing owners.");
            }
            IEstateConnector estatePlugin = Framework.Utilities.DataManager.RequestPlugin <IEstateConnector>();

            if (estatePlugin == null)
            {
                MainConsole.Instance.Error("[LocalGridConnector] " + borked.Count +
                                           " regions found with missing owners, but could not get IEstateConnector plugin.");
                return;
            }
            else
            {
                MainConsole.Instance.Error("[LocalGridConnector] " + borked.Count +
                                           " regions found with missing owners, attempting fix.");
            }

            Dictionary <int, List <GridRegion> > borkedByEstate = new Dictionary <int, List <GridRegion> >();

            foreach (GridRegion region in borked)
            {
                int estateID = estatePlugin.GetEstateID(region.RegionID);
                if (!borkedByEstate.ContainsKey(estateID))
                {
                    borkedByEstate[estateID] = new List <GridRegion>();
                }
                borkedByEstate[estateID].Add(region);
            }

            Dictionary <int, UUID> estateOwnerIDs = new Dictionary <int, UUID>();
            uint estateFail = 0;

            foreach (int estateID in borkedByEstate.Keys)
            {
                EstateSettings es = estatePlugin.GetEstateSettings(estateID);
                if (es == null)
                {
                    MainConsole.Instance.Error("[LocalGridConnector] Cannot fix missing owner for regions in Estate " +
                                               estateID + ", could not get estate settings.");
                }
                else if (es.EstateOwner == UUID.Zero)
                {
                    MainConsole.Instance.Error("[LocalGridConnector] Cannot fix missing owner for regions in Estate " +
                                               estateID + ", Estate Owner is also missing.");
                }
                if (es == null || es.EstateOwner == UUID.Zero)
                {
                    ++estateFail;
                    continue;
                }
                estateOwnerIDs[estateID] = es.EstateOwner;
            }

            if (estateFail > 0)
            {
                if (estateFail == borkedByEstate.Count)
                {
                    MainConsole.Instance.Error("[LocalGridConnector] " + borked.Count +
                                               " regions found with missing owners, could not locate any estate settings from IEstateConnector plugin.");
                    return;
                }
                else
                {
                    MainConsole.Instance.Error("[LocalGridConnector] " + borked.Count +
                                               " regions found with missing owners, could not locate estate settings for " +
                                               estateFail + " estates.");
                }
            }

            uint storeSuccess = 0;
            uint storeFail    = 0;
            int  borkedCount  = borked.Count;

            foreach (KeyValuePair <int, UUID> kvp in estateOwnerIDs)
            {
                List <GridRegion> regions = borkedByEstate[kvp.Key];
                foreach (GridRegion region in regions)
                {
                    region.EstateOwner = kvp.Value;
                    if (!Store(region))
                    {
                        MainConsole.Instance.Error("[LocalGridConnector] Failed to fix missing region for " +
                                                   region.RegionName + " (" + region.RegionID + ")");
                        ++storeFail;
                    }
                    else
                    {
                        ++storeSuccess;
                        borked.Remove(region);
                    }
                }
            }

            if (storeFail > 0)
            {
                MainConsole.Instance.Error("[LocalGridConnector] " + borkedCount +
                                           " regions found with missing owners, fix failed on " + storeFail +
                                           " regions, fix attempted on " + storeSuccess + " regions.");
            }
            else if (storeSuccess != borked.Count)
            {
                MainConsole.Instance.Error("[LocalGridConnector] " + borkedCount +
                                           " regions found with missing owners, fix attempted on " + storeSuccess +
                                           " regions.");
            }
            else
            {
                MainConsole.Instance.Info(
                    "[LocalGridConnector] All regions found with missing owners should have their owners restored.");
            }
            if (borked.Count > 0)
            {
                List <string> blurbs = new List <string>(borked.Count);
                foreach (GridRegion region in borked)
                {
                    blurbs.Add(region.RegionName + " (" + region.RegionID + ")");
                }
                MainConsole.Instance.Info("[LocalGridConnector] Failed to fix missing region owners for regions " +
                                          string.Join(", ", blurbs.ToArray()));
            }
        }
示例#38
0
 public void StoreEstateSettings(EstateSettings es)
 {
     m_database.StoreEstateSettings(es);
 }
示例#39
0
        /// <summary>
        /// Loads the estate settings.
        /// </summary>
        /// <param name="regionID">region ID.</param>
        /// <returns></returns>
        public EstateSettings LoadEstateSettings(UUID regionID, bool create)
        {
            EstateSettings es = new EstateSettings();

            string sql = "select estate_settings.\"" + String.Join("\",estate_settings.\"", FieldList) +
                         "\" from estate_map left join estate_settings on estate_map.\"EstateID\" = estate_settings.\"EstateID\" " +
                         " where estate_settings.\"EstateID\" is not null and \"RegionID\" = :RegionID";

            bool insertEstate = false;

            using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
                using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
                {
                    cmd.Parameters.Add(_Database.CreateParameter("RegionID", regionID));
                    conn.Open();
                    using (NpgsqlDataReader reader = cmd.ExecuteReader())
                    {
                        if (reader.Read())
                        {
                            foreach (string name in FieldList)
                            {
                                FieldInfo f = _FieldMap[name];
                                object    v = reader[name];
                                if (f.FieldType == typeof(bool))
                                {
                                    f.SetValue(es, v);
                                }
                                else if (f.FieldType == typeof(UUID))
                                {
                                    UUID estUUID = UUID.Zero;

                                    UUID.TryParse(v.ToString(), out estUUID);

                                    f.SetValue(es, estUUID);
                                }
                                else if (f.FieldType == typeof(string))
                                {
                                    f.SetValue(es, v.ToString());
                                }
                                else if (f.FieldType == typeof(UInt32))
                                {
                                    f.SetValue(es, Convert.ToUInt32(v));
                                }
                                else if (f.FieldType == typeof(Single))
                                {
                                    f.SetValue(es, Convert.ToSingle(v));
                                }
                                else
                                {
                                    f.SetValue(es, v);
                                }
                            }
                        }
                        else
                        {
                            insertEstate = true;
                        }
                    }
                }

            if (insertEstate && create)
            {
                DoCreate(es);
                LinkRegion(regionID, (int)es.EstateID);
            }

            LoadBanList(es);

            es.EstateManagers = LoadUUIDList(es.EstateID, "estate_managers");
            es.EstateAccess   = LoadUUIDList(es.EstateID, "estate_users");
            es.EstateGroups   = LoadUUIDList(es.EstateID, "estate_groups");

            //Set event
            es.OnSave += StoreEstateSettings;
            return(es);
        }
示例#40
0
        private EstateSettings DoLoad(MySqlCommand cmd, UUID regionID, bool create)
        {
            EstateSettings es = new EstateSettings();

            es.OnSave += StoreEstateSettings;

            using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
            {
                dbcon.Open();

                cmd.Connection = dbcon;

                bool found = false;

                using (IDataReader r = cmd.ExecuteReader())
                {
                    if (r.Read())
                    {
                        found = true;

                        foreach (string name in FieldList)
                        {
                            if (m_FieldMap[name].FieldType == typeof(bool))
                            {
                                m_FieldMap[name].SetValue(es, Convert.ToInt32(r[name]) != 0);
                            }
                            else if (m_FieldMap[name].FieldType == typeof(UUID))
                            {
                                m_FieldMap[name].SetValue(es, DBGuid.FromDB(r[name]));
                            }
                            else
                            {
                                m_FieldMap[name].SetValue(es, r[name]);
                            }
                        }
                    }
                }

                if (!found && create)
                {
                    // Migration case
                    List <string> names = new List <string>(FieldList);

                    names.Remove("EstateID");

                    string sql = "insert into estate_settings (" + String.Join(",", names.ToArray()) + ") values ( ?" + String.Join(", ?", names.ToArray()) + ")";

                    using (MySqlCommand cmd2 = dbcon.CreateCommand())
                    {
                        cmd2.CommandText = sql;
                        cmd2.Parameters.Clear();

                        foreach (string name in FieldList)
                        {
                            if (m_FieldMap[name].GetValue(es) is bool)
                            {
                                if ((bool)m_FieldMap[name].GetValue(es))
                                {
                                    cmd2.Parameters.AddWithValue("?" + name, "1");
                                }
                                else
                                {
                                    cmd2.Parameters.AddWithValue("?" + name, "0");
                                }
                            }
                            else
                            {
                                cmd2.Parameters.AddWithValue("?" + name, m_FieldMap[name].GetValue(es).ToString());
                            }
                        }

                        cmd2.ExecuteNonQuery();

                        cmd2.CommandText = "select LAST_INSERT_ID() as id";
                        cmd2.Parameters.Clear();

                        using (IDataReader r = cmd2.ExecuteReader())
                        {
                            r.Read();
                            es.EstateID = Convert.ToUInt32(r["id"]);
                        }

                        cmd2.CommandText = "insert into estate_map values (?RegionID, ?EstateID)";
                        cmd2.Parameters.AddWithValue("?RegionID", regionID.ToString());
                        cmd2.Parameters.AddWithValue("?EstateID", es.EstateID.ToString());

                        // This will throw on dupe key
                        try { cmd2.ExecuteNonQuery(); }
                        catch (Exception) { }

                        es.Save();
                    }
                }
            }

            LoadBanList(es);

            es.EstateManagers = LoadUUIDList(es.EstateID, "estate_managers");
            es.EstateAccess   = LoadUUIDList(es.EstateID, "estate_users");
            es.EstateGroups   = LoadUUIDList(es.EstateID, "estate_groups");
            return(es);
        }
示例#41
0
        private EstateSettings CreateEstateInfo(Scene scene)
        {
            EstateSettings ES = new EstateSettings();
            while (true)
            {
                IEstateConnector EstateConnector = DataManager.RequestPlugin<IEstateConnector>();

                string name = MainConsole.Instance.CmdPrompt("Estate owner name", LastEstateOwner);
                UserAccount account = scene.UserAccountService.GetUserAccount(scene.RegionInfo.ScopeID, name);

                if (account == null)
                {
                    string createNewUser = MainConsole.Instance.CmdPrompt("Could not find user " + name + ". Would you like to create this user?", "yes");

                    if (createNewUser == "yes")
                    {
                        // Create a new account
                        string password = MainConsole.Instance.PasswdPrompt(name + "'s password");
                        string email = MainConsole.Instance.CmdPrompt(name + "'s email", "");

                        scene.UserAccountService.CreateUser(name, Util.Md5Hash(password), email);
                        account = scene.UserAccountService.GetUserAccount(scene.RegionInfo.ScopeID, name);

                        if (account == null)
                        {
                            m_log.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)
                {
                    m_log.WarnFormat("Found user. {0} has {1} estates currently. {2}", account.Name, ownerEstates.Count,
                        "These estates are the following:");
                    for (int i = 0; i < ownerEstates.Count; i++)
                    {
                        m_log.Warn(ownerEstates[i].EstateName);
                    }
                    response = MainConsole.Instance.CmdPrompt ("Do you wish to join one of these existing estates? (Options are {yes, no, cancel})", response, new List<string> () { "yes", "no", "cancel" });
                }
                else
                {
                    m_log.WarnFormat("Found user. {0} has no estates currently. Creating a new estate.", account.Name);
                }
                LastEstateChoise = response;
                if (response == "no")
                {
                    // Create a new estate
                    ES.EstateName = MainConsole.Instance.CmdPrompt("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;
                    LastEstateChoise = "yes";

                    string Password = Util.Md5Hash(Util.Md5Hash(MainConsole.Instance.CmdPrompt("New estate password (to keep others from joining your estate, blank to have no pass)", ES.EstatePass)));
                    ES.EstatePass = Password;
                    ES.EstateOwner = account.PrincipalID;

                    ES = EstateConnector.CreateEstate(ES, scene.RegionInfo.RegionID);
                    if (ES == null)
                    {
                        m_log.Warn("The connection to the server was broken, please try again soon.");
                        continue;
                    }
                    else if (ES.EstateID == 0)
                    {
                        m_log.Warn("There was an error in creating this estate: " + ES.EstateName); //EstateName holds the error. See LocalEstateConnector for more info.
                        continue;
                    }
                    //We set this back if there wasn't an error because the EstateService will NOT send it back
                    IGenericsConnector g = DataManager.RequestPlugin<IGenericsConnector>();
                    EstatePassword s = new EstatePassword() { Password = Password };
                    if (g != null) //Save the pass to the database
                    {
                        g.AddGeneric(scene.RegionInfo.RegionID, "EstatePassword", ES.EstateID.ToString(), s.ToOSD());
                    }
                    break;
                }
                else if (response == "yes")
                {
                    if (ownerEstates.Count != 1)
                    {
                        if (LastEstateName == "")
                            LastEstateName = ownerEstates[0].EstateName;

                        List<string> responses = new List<string> ();
                        foreach (EstateSettings settings in ownerEstates)
                            responses.Add (settings.EstateName);
                        responses.Add ("None");
                        responses.Add ("Cancel");
                        response = MainConsole.Instance.CmdPrompt("Estate name to join", LastEstateName, responses);
                        if (response == "None" || response == "Cancel")
                            continue;
                        LastEstateName = response;
                    }
                    else
                        LastEstateName = ownerEstates[0].EstateName;

                    List<int> estateIDs = EstateConnector.GetEstates(LastEstateName);
                    if (estateIDs == null)
                    {
                        m_log.Warn("The connection to the server was broken, please try again soon.");
                        continue;
                    }
                    if (estateIDs.Count < 1)
                    {
                        m_log.Warn("The name you have entered matches no known estate. Please try again");
                        continue;
                    }

                    int estateID = estateIDs[0];

                    string Password = Util.Md5Hash(Util.Md5Hash(MainConsole.Instance.CmdPrompt("Password for the estate", "")));
                    //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, Password))
                    {
                        if (EstateConnector.LoadEstateSettings(scene.RegionInfo.RegionID, out ES)) //We could do by EstateID now, but we need to completely make sure that it fully is set up
                        {
                            if (ES == null)
                            {
                                m_log.Warn("The connection to the server was broken, please try again soon.");
                                continue;
                            }
                            //Reset the pass and save it to the database
                            IGenericsConnector g = DataManager.RequestPlugin<IGenericsConnector>();
                            EstatePassword s = new EstatePassword() { Password = Password };
                            if (g != null) //Save the pass to the database
                            {
                                g.AddGeneric(scene.RegionInfo.RegionID, "EstatePassword", ES.EstateID.ToString(), s.ToOSD());
                            }
                        }
                        else
                        {
                            m_log.Warn("The connection to the server was broken, please try again soon.");
                            continue;
                        }
                        m_log.Warn("Successfully joined the estate!");
                        break;
                    }

                    m_log.Warn("Joining the estate failed. Please try again.");
                    continue;
                }
            }
            return ES;
        }
示例#42
0
 private bool CheckEstateGroups(EstateSettings ES, AgentCircuitData agent)
 {
     IGroupsModule gm = m_scene.RequestModuleInterface<IGroupsModule>();
     if (gm != null && ES.EstateGroups.Count > 0)
     {
         GroupMembershipData[] gmds = gm.GetMembershipData(agent.AgentID);
         return gmds.Any(gmd => ES.EstateGroups.Contains(gmd.GroupID));
     }
     return false;
 }
示例#43
0
        private EstateSettings DoLoad(SqliteCommand cmd, UUID regionID, bool create)
        {
            EstateSettings es = new EstateSettings();

            es.OnSave += StoreEstateSettings;
            IDataReader r = null;

            try
            {
                r = cmd.ExecuteReader();
            }
            catch (SqliteException)
            {
                m_log.Error("[SQLITE]: There was an issue loading the estate settings.  This can happen the first time running OpenSimulator with CSharpSqlite the first time.  OpenSimulator will probably crash, restart it and it should be good to go.");
            }

            if (r != null && r.Read())
            {
                foreach (string name in FieldList)
                {
                    if (m_FieldMap[name].GetValue(es) is bool)
                    {
                        int v = Convert.ToInt32(r[name]);
                        if (v != 0)
                        {
                            m_FieldMap[name].SetValue(es, true);
                        }
                        else
                        {
                            m_FieldMap[name].SetValue(es, false);
                        }
                    }
                    else if (m_FieldMap[name].GetValue(es) is UUID)
                    {
                        UUID uuid = UUID.Zero;

                        UUID.TryParse(r[name].ToString(), out uuid);
                        m_FieldMap[name].SetValue(es, uuid);
                    }
                    else
                    {
                        m_FieldMap[name].SetValue(es, Convert.ChangeType(r[name], m_FieldMap[name].FieldType));
                    }
                }
                r.Close();
            }
            else if (create)
            {
                r.Close();

                List <string> names = new List <string>(FieldList);

                names.Remove("EstateID");

                string sql = "insert into estate_settings (" + String.Join(",", names.ToArray()) + ") values ( :" + String.Join(", :", names.ToArray()) + ")";

                cmd.CommandText = sql;
                cmd.Parameters.Clear();

                foreach (string name in FieldList)
                {
                    if (m_FieldMap[name].GetValue(es) is bool)
                    {
                        if ((bool)m_FieldMap[name].GetValue(es))
                        {
                            cmd.Parameters.AddWithValue(":" + name, "1");
                        }
                        else
                        {
                            cmd.Parameters.AddWithValue(":" + name, "0");
                        }
                    }
                    else
                    {
                        cmd.Parameters.AddWithValue(":" + name, m_FieldMap[name].GetValue(es).ToString());
                    }
                }

                cmd.ExecuteNonQuery();

                cmd.CommandText = "select LAST_INSERT_ROWID() as id";
                cmd.Parameters.Clear();

                r = cmd.ExecuteReader();

                r.Read();

                es.EstateID = Convert.ToUInt32(r["id"]);

                r.Close();

                cmd.CommandText = "insert into estate_map values (:RegionID, :EstateID)";
                cmd.Parameters.AddWithValue(":RegionID", regionID.ToString());
                cmd.Parameters.AddWithValue(":EstateID", es.EstateID.ToString());

                // This will throw on dupe key
                try
                {
                    cmd.ExecuteNonQuery();
                }
                catch (Exception)
                {
                }

                es.Save();
            }

            LoadBanList(es);

            es.EstateManagers = LoadUUIDList(es.EstateID, "estate_managers");
            es.EstateAccess   = LoadUUIDList(es.EstateID, "estate_users");
            es.EstateGroups   = LoadUUIDList(es.EstateID, "estate_groups");
            return(es);
        }
 public void StoreEstateSettings(EstateSettings es)
 {
     return;
 }
示例#45
0
        public EstateSettings LoadEstateSettings(UUID regionID)
        {
            EstateSettings es = new EstateSettings();

            es.OnSave += StoreEstateSettings;

            string sql = "select estate_settings." + String.Join(",estate_settings.", FieldList) + " from estate_map left join estate_settings on estate_map.EstateID = estate_settings.EstateID where estate_settings.EstateID is not null and RegionID = :RegionID";

            SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand();

            cmd.CommandText = sql;
            cmd.Parameters.Add(":RegionID", regionID.ToString());

            IDataReader r = cmd.ExecuteReader();

            if (r.Read())
            {
                foreach (string name in FieldList)
                {
                    if (m_FieldMap[name].GetValue(es) is bool)
                    {
                        int v = Convert.ToInt32(r[name]);
                        if (v != 0)
                        {
                            m_FieldMap[name].SetValue(es, true);
                        }
                        else
                        {
                            m_FieldMap[name].SetValue(es, false);
                        }
                    }
                    else if (m_FieldMap[name].GetValue(es) is UUID)
                    {
                        UUID uuid = UUID.Zero;

                        UUID.TryParse(r[name].ToString(), out uuid);
                        m_FieldMap[name].SetValue(es, uuid);
                    }
                    else
                    {
                        m_FieldMap[name].SetValue(es, Convert.ChangeType(r[name], m_FieldMap[name].FieldType));
                    }
                }
                r.Close();
            }
            else
            {
                // Migration case
                //
                r.Close();

                List <string> names = new List <string>(FieldList);

                names.Remove("EstateID");

                sql = "insert into estate_settings (" + String.Join(",", names.ToArray()) + ") values ( :" + String.Join(", :", names.ToArray()) + ")";

                cmd.CommandText = sql;
                cmd.Parameters.Clear();

                foreach (string name in FieldList)
                {
                    if (m_FieldMap[name].GetValue(es) is bool)
                    {
                        if ((bool)m_FieldMap[name].GetValue(es))
                        {
                            cmd.Parameters.Add(":" + name, "1");
                        }
                        else
                        {
                            cmd.Parameters.Add(":" + name, "0");
                        }
                    }
                    else
                    {
                        cmd.Parameters.Add(":" + name, m_FieldMap[name].GetValue(es).ToString());
                    }
                }

                cmd.ExecuteNonQuery();

                cmd.CommandText = "select LAST_INSERT_ROWID() as id";
                cmd.Parameters.Clear();

                r = cmd.ExecuteReader();

                r.Read();

                es.EstateID = Convert.ToUInt32(r["id"]);

                r.Close();

                cmd.CommandText = "insert into estate_map values (:RegionID, :EstateID)";
                cmd.Parameters.Add(":RegionID", regionID.ToString());
                cmd.Parameters.Add(":EstateID", es.EstateID.ToString());

                // This will throw on dupe key
                try
                {
                    cmd.ExecuteNonQuery();
                }
                catch (Exception)
                {
                }

                // Munge and transfer the ban list
                //
                cmd.Parameters.Clear();
                cmd.CommandText = "insert into estateban select " + es.EstateID.ToString() + ", bannedUUID, bannedIp, bannedIpHostMask, '' from regionban where regionban.regionUUID = :UUID";
                cmd.Parameters.Add(":UUID", regionID.ToString());

                try
                {
                    cmd.ExecuteNonQuery();
                }
                catch (Exception)
                {
                }

                es.Save();
            }

            LoadBanList(es);

            es.EstateManagers = LoadUUIDList(es.EstateID, "estate_managers");
            es.EstateAccess   = LoadUUIDList(es.EstateID, "estate_users");
            es.EstateGroups   = LoadUUIDList(es.EstateID, "estate_groups");
            return(es);
        }
        public void LoadEstates()
        {
            string estateConfigPath = Path.Combine(Util.configDir(), "Estates");

            IConfig startupConfig = m_configSource.Configs["Startup"];

            if (startupConfig == null)
            {
                return;
            }

            estateConfigPath = startupConfig.GetString("regionload_estatesdir", estateConfigPath).Trim();
            if (string.IsNullOrWhiteSpace(estateConfigPath))
            {
                return;
            }

            if (!Directory.Exists(estateConfigPath))
            {
                return; // if nothing there, don't bother
            }
            string[] iniFiles;
            try
            {
                iniFiles = Directory.GetFiles(estateConfigPath, "*.ini");
            }
            catch
            {
                m_log.Error("[ESTATE LOADER FILE SYSTEM]: could not open " + estateConfigPath);
                return;
            }

            // No Estate.ini Found
            if (iniFiles == null || iniFiles.Length == 0)
            {
                return;
            }

            m_log.InfoFormat("[ESTATE LOADER FILE SYSTEM]: Loading estate config files from {0}", estateConfigPath);

            List <int> existingEstates;

            List <int> existingEstateIDs = m_application.EstateDataService.GetEstatesAll();

            int i = 0;

            foreach (string file in iniFiles)
            {
                m_log.InfoFormat("[ESTATE LOADER FILE SYSTEM]: Loading config file {0}", file);

                IConfigSource source = null;
                try
                {
                    source = new IniConfigSource(file);
                }
                catch
                {
                    m_log.WarnFormat("[ESTATE LOADER FILE SYSTEM]: failed to parse file {0}", file);
                }

                if (source == null)
                {
                    continue;
                }

                foreach (IConfig config in source.Configs)
                {
                    // Read Estate Config From Source File
                    string estateName = config.Name;
                    if (string.IsNullOrWhiteSpace(estateName))
                    {
                        continue;
                    }

                    if (estateName.Length > 64) // need check this and if utf8 is valid
                    {
                        m_log.WarnFormat("[ESTATE LOADER FILE SYSTEM]: Estate name {0} is too large, ignoring", estateName);
                        continue;
                    }

                    string ownerString = config.GetString("Owner", string.Empty);
                    if (string.IsNullOrWhiteSpace(ownerString))
                    {
                        continue;
                    }

                    if (!UUID.TryParse(ownerString, out UUID estateOwner) || estateOwner == UUID.Zero)
                    {
                        continue;
                    }

                    // Check If Estate Exists (Skip If So)
                    existingEstates = m_application.EstateDataService.GetEstates(estateName);

                    if (existingEstates.Count > 0)
                    {
                        continue;
                    }

                    //### Should check Estate Owner ID but no Scene object available at this point

                    // Does Config Specify EstateID (0 Defaults To AutoIncrement)
                    int EstateID = config.GetInt("EstateID", 0);

                    if (EstateID > 0)
                    {
                        if (EstateID < 100)
                        {
                            // EstateID Cannot be less than 100
                            m_log.WarnFormat("[ESTATE LOADER FILE SYSTEM]: Estate name {0} specified estateID that is less that 100, ignoring", estateName);
                            continue;
                        }
                        else if (existingEstateIDs.Contains(EstateID))
                        {
                            // Specified EstateID Exists
                            m_log.WarnFormat("[ESTATE LOADER FILE SYSTEM]: Estate name {0} specified estateID that is already in use, ignoring", estateName);
                            continue;
                        }
                    }

                    // Create a new estate with the name provided
                    EstateSettings estateSettings = m_application.EstateDataService.CreateNewEstate(EstateID);

                    estateSettings.EstateName  = estateName;
                    estateSettings.EstateOwner = estateOwner;

                    // Persistence does not seem to effect the need to save a new estate
                    m_application.EstateDataService.StoreEstateSettings(estateSettings);

                    m_log.InfoFormat("[ESTATE LOADER FILE SYSTEM]: Loaded config for estate {0}", estateName);

                    i++;
                }
            }
        }
示例#47
0
        private EstateSettings CreateEstateInfo(Scene scene)
        {
            EstateSettings ES = null;
            while (true)
            {
                IEstateConnector EstateConnector = DataManager.RequestPlugin<IEstateConnector>();
                string response = MainConsole.Instance.CmdPrompt("Do you wish to join an existing estate for " + scene.RegionInfo.RegionName + "? (Options are {yes, no, find})", LastEstateChoise, new List<string>() { "yes", "no", "find" });
                LastEstateChoise = response;
                if (response == "no")
                {
                    // Create a new estate
                    ES = new EstateSettings();
                    ES.EstateName = MainConsole.Instance.CmdPrompt("New estate name", scene.RegionInfo.EstateSettings.EstateName);

                    //Set to auto connect to this region next
                    LastEstateName = ES.EstateName;
                    LastEstateChoise = "yes";

                    string Password = Util.Md5Hash(Util.Md5Hash(MainConsole.Instance.CmdPrompt("New estate password (to keep others from joining your estate, blank to have no pass)", ES.EstatePass)));
                    ES.EstatePass = Password;

                    ES = EstateConnector.CreateEstate(ES, scene.RegionInfo.RegionID);
                    if (ES == null)
                    {
                        m_log.Warn("The connection to the server was broken, please try again soon.");
                        continue;
                    }
                    else if (ES.EstateID == 0)
                    {
                        m_log.Warn("There was an error in creating this estate: " + ES.EstateName); //EstateName holds the error. See LocalEstateConnector for more info.
                        continue;
                    }
                    //We set this back if there wasn't an error because the EstateService will NOT send it back
                    IGenericsConnector g = DataManager.RequestPlugin<IGenericsConnector>();
                    EstatePassword s = new EstatePassword() { Password = Password };
                    if (g != null) //Save the pass to the database
                    {
                        g.AddGeneric(scene.RegionInfo.RegionID, "EstatePassword", ES.EstateID.ToString(), s.ToOSD());
                    }
                    break;
                }
                else if (response == "yes")
                {
                    response = MainConsole.Instance.CmdPrompt("Estate name to join", LastEstateName);
                    if (response == "None")
                        continue;
                    LastEstateName = response;

                    List<int> estateIDs = EstateConnector.GetEstates(response);
                    if (estateIDs == null)
                    {
                        m_log.Warn("The connection to the server was broken, please try again soon.");
                        continue;
                    }
                    if (estateIDs.Count < 1)
                    {
                        m_log.Warn("The name you have entered matches no known estate. Please try again");
                        continue;
                    }

                    int estateID = estateIDs[0];

                    string Password = Util.Md5Hash(Util.Md5Hash(MainConsole.Instance.CmdPrompt("Password for the estate", "")));
                    //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, Password))
                    {
                        ES = EstateConnector.LoadEstateSettings(scene.RegionInfo.RegionID); //We could do by EstateID now, but we need to completely make sure that it fully is set up
                        if (ES == null)
                        {
                            m_log.Warn("The connection to the server was broken, please try again soon.");
                            continue;
                        }
                        //Reset the pass and save it to the database
                        IGenericsConnector g = DataManager.RequestPlugin<IGenericsConnector>();
                        EstatePassword s = new EstatePassword() { Password = Password };
                        if (g != null) //Save the pass to the database
                        {
                            g.AddGeneric(scene.RegionInfo.RegionID, "EstatePassword", ES.EstateID.ToString(), s.ToOSD());
                        }
                        break;
                    }

                    m_log.Warn("Joining the estate failed. Please try again.");
                    continue;
                }
                else if (response == "find")
                {
                    ES = EstateConnector.LoadEstateSettings(scene.RegionInfo.RegionID);
                    if (ES == null)
                    {
                        m_log.Warn("The connection to the estate service was broken, please try again soon.");
                        continue;
                    }
                    break;
                }
            }
            return ES;
        }
示例#48
0
        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);
                }
            }
        }
示例#49
0
		private void SaveBanList(EstateSettings es)
		{
            OSDMap estateBans = new OSDMap();
            foreach (EstateBan b in es.EstateBans)
            {
                OSDMap estateBan = new OSDMap();
                estateBan.Add("BannedUserID", OSD.FromUUID(b.BannedUserID));
                estateBan.Add("BannedHostAddress", OSD.FromString(b.BannedHostAddress));
                estateBan.Add("BannedHostIPMask", OSD.FromString(b.BannedHostIPMask));
                estateBans.Add(b.BannedUserID.ToString(), estateBan);
			}

            string value = OSDParser.SerializeLLSDXmlString(estateBans);
            GD.Replace("estates", new string[] { "ID", "`Key`", "`Value`" }, new object[] { es.EstateID, "EstateBans", value });
		}
示例#50
0
        private EstateSettings DoLoad(SqliteCommand cmd, UUID regionID, bool create)
        {
            EstateSettings es = new EstateSettings();

            es.OnSave += StoreEstateSettings;

            IDataReader r = cmd.ExecuteReader();

            if (r.Read())
            {
                foreach (string name in FieldList)
                {
                    if (m_FieldMap[name].GetValue(es) is bool)
                    {
                        int v = Convert.ToInt32(r[name]);
                        if (v != 0)
                        {
                            m_FieldMap[name].SetValue(es, true);
                        }
                        else
                        {
                            m_FieldMap[name].SetValue(es, false);
                        }
                    }
                    else if (m_FieldMap[name].GetValue(es) is UUID)
                    {
                        UUID uuid = UUID.Zero;

                        UUID.TryParse(r[name].ToString(), out uuid);
                        m_FieldMap[name].SetValue(es, uuid);
                    }
                    else
                    {
                        m_FieldMap[name].SetValue(es, Convert.ChangeType(r[name], m_FieldMap[name].FieldType));
                    }
                }
                r.Close();
            }
            else if (create)
            {
                r.Close();

                List <string> names = new List <string>(FieldList);

                names.Remove("EstateID");

                string sql = "insert into estate_settings (" + String.Join(",", names.ToArray()) + ") values ( :" + String.Join(", :", names.ToArray()) + ")";

                cmd.CommandText = sql;
                cmd.Parameters.Clear();

                foreach (string name in FieldList)
                {
                    if (m_FieldMap[name].GetValue(es) is bool)
                    {
                        if ((bool)m_FieldMap[name].GetValue(es))
                        {
                            cmd.Parameters.Add(":" + name, "1");
                        }
                        else
                        {
                            cmd.Parameters.Add(":" + name, "0");
                        }
                    }
                    else
                    {
                        cmd.Parameters.Add(":" + name, m_FieldMap[name].GetValue(es).ToString());
                    }
                }

                cmd.ExecuteNonQuery();

                cmd.CommandText = "select LAST_INSERT_ROWID() as id";
                cmd.Parameters.Clear();

                r = cmd.ExecuteReader();

                r.Read();

                es.EstateID = Convert.ToUInt32(r["id"]);

                r.Close();

                cmd.CommandText = "insert into estate_map values (:RegionID, :EstateID)";
                cmd.Parameters.Add(":RegionID", regionID.ToString());
                cmd.Parameters.Add(":EstateID", es.EstateID.ToString());

                // This will throw on dupe key
                try
                {
                    cmd.ExecuteNonQuery();
                }
                catch (Exception)
                {
                }

                es.Save();
            }

            LoadBanList(es);

            es.EstateManagers = LoadUUIDList(es.EstateID, "estate_managers");
            es.EstateAccess   = LoadUUIDList(es.EstateID, "estate_users");
            es.EstateGroups   = LoadUUIDList(es.EstateID, "estate_groups");
            return(es);
        }
示例#51
0
        public void SaveEstateSettings(EstateSettings es)
        {
            object remoteValue = DoRemote(es.ToOSD());
            if (remoteValue != null || m_doRemoteOnly)
                return;

            SaveEstateSettings(es, false);
        }
示例#52
0
        /// <summary>
        /// Checks for a valid system estate. Adds or corrects if required
        /// </summary>
        /// <param name="estateID">Estate I.</param>
        /// <param name="estateName">Estate name.</param>
        /// <param name="ownerUUID">Owner UUI.</param>
        void CheckSystemEstateInfo(int estateID, string estateName, UUID ownerUUID)
        {
            // these should have already been checked but just make sure...
            if (m_estateConnector == null)
            {
                return;
            }

            if (m_estateConnector.RemoteCalls())
            {
                return;
            }

            ISystemAccountService sysAccounts = m_registry.RequestModuleInterface <ISystemAccountService> ();
            EstateSettings        ES;

            // check for existing estate name in case of estate ID change
            ES = m_estateConnector.GetEstateSettings(estateName);
            if (ES != null)
            {
                // ensure correct ID
                if (ES.EstateID != estateID)
                {
                    UpdateSystemEstates(m_estateConnector, ES, estateID);
                }
            }

            ES = m_estateConnector.GetEstateSettings(estateID);
            if ((ES != null) && (ES.EstateID != 0))
            {
                // ensure correct owner
                if (ES.EstateOwner != ownerUUID)
                {
                    ES.EstateOwner = ownerUUID;
                    m_estateConnector.SaveEstateSettings(ES);
                    MainConsole.Instance.Info("[EstateService]: The system Estate owner has been updated to " +
                                              sysAccounts.GetSystemEstateOwnerName(estateID));
                }


                // in case of configuration changes
                if (ES.EstateName != estateName)
                {
                    ES.EstateName = estateName;
                    m_estateConnector.SaveEstateSettings(ES);
                    MainConsole.Instance.Info("[EstateService]: The system Estate name has been updated to " + estateName);
                }

                return;
            }

            // Create a new estate

            ES             = new EstateSettings();
            ES.EstateName  = estateName;
            ES.EstateOwner = ownerUUID;

            ES.EstateID = (uint)m_estateConnector.CreateNewEstate(ES);
            if (ES.EstateID == 0)
            {
                MainConsole.Instance.Warn("There was an error in creating the system estate: " + ES.EstateName);
                //EstateName holds the error. See LocalEstateConnector for more info.
            }
            else
            {
                MainConsole.Instance.InfoFormat("[EstateService]: The estate '{0}' owned by '{1}' has been created.",
                                                ES.EstateName, sysAccounts.GetSystemEstateOwnerName(estateID));
            }
        }
示例#53
0
        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;
        }
示例#54
0
        protected void CreateEstateCommand(IScene scene, string [] cmd)
        {
            IEstateConnector      estateConnector = Framework.Utilities.DataManager.RequestPlugin <IEstateConnector> ();
            IUserAccountService   accountService  = m_registry.RequestModuleInterface <IUserAccountService> ();
            ISystemAccountService sysAccounts     = m_registry.RequestModuleInterface <ISystemAccountService> ();

            string estateName  = "";
            string estateOwner = sysAccounts.SystemEstateOwnerName;

            // check for passed estate name
            estateName = (cmd.Length < 3)
                ? MainConsole.Instance.Prompt("Estate name", estateName)
                : cmd [2];
            if (estateName == "")
            {
                return;
            }

            // verify that the estate does not already exist
            if (estateConnector.EstateExists(estateName))
            {
                MainConsole.Instance.ErrorFormat("[EstateService]: The estate '{0}' already exists!", estateName);
                return;
            }

            // owner?
            estateOwner = (cmd.Length > 3)
                ? Util.CombineParams(cmd, 4)  // in case of spaces in the name eg Allan Allard
                : MainConsole.Instance.Prompt("Estate owner: ", estateOwner);
            if (estateOwner == "")
            {
                return;
            }


            // check to make sure the user exists
            UserAccount account = accountService.GetUserAccount(null, estateOwner);

            if (account == null)
            {
                MainConsole.Instance.WarnFormat("[User account service]: The user, '{0}' was not found!", estateOwner);

                // temporary fix until remote user creation can be implemented
                if (accountService.IsLocalConnector)
                {
                    string createUser = MainConsole.Instance.Prompt("Do you wish to create this user?  (yes/no)", "yes").ToLower();
                    if (!createUser.StartsWith("y", StringComparison.Ordinal))
                    {
                        return;
                    }

                    // Create a new account
                    string password = MainConsole.Instance.PasswordPrompt(estateOwner + "'s password");
                    string email    = MainConsole.Instance.Prompt(estateOwner + "'s email", "");

                    accountService.CreateUser(estateOwner, Util.Md5Hash(password), email);
                    // CreateUser will tell us success or problem
                    account = accountService.GetUserAccount(null, estateOwner);

                    if (account == null)
                    {
                        MainConsole.Instance.ErrorFormat(
                            "[EstateService]: Unable to store account details.\n   If this simulator is connected to a grid, create the estate owner account first at the grid level.");
                        return;
                    }
                }
                else
                {
                    MainConsole.Instance.WarnFormat("[User account service]: The user must be created on the Grid before assigning an estate!");
                    MainConsole.Instance.WarnFormat("[User account service]: Regions should be assigned to the system user estate until this can be corrected");

                    return;
                }
            }

            // check for bogies...
            if (Utilities.IsSystemUser(account.PrincipalID))
            {
                MainConsole.Instance.Info("[EstateService]: Tsk, tsk.  System users should not be used as estate managers!");
                return;
            }

            // we have an estate name and a user
            // Create a new estate
            var ES = new EstateSettings();

            ES.EstateName  = estateName;
            ES.EstateOwner = account.PrincipalID;

            ES.EstateID = (uint)estateConnector.CreateNewEstate(ES);
            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.
            }
            else
            {
                MainConsole.Instance.InfoFormat("[EstateService]: The estate '{0}' owned by '{1}' has been created.", estateName, estateOwner);
            }
        }
 public byte[] SaveEstateSettings(Dictionary<string, object> request)
 {
     EstateSettings ES = new EstateSettings(request);
     EstateConnector.SaveEstateSettings(ES);
     return SuccessResult();
 }
示例#56
0
        protected void SetEstateOwnerCommand(IScene scene, string [] cmd)
        {
            IEstateConnector    estateConnector = Framework.Utilities.DataManager.RequestPlugin <IEstateConnector> ();
            IUserAccountService accountService  = m_registry.RequestModuleInterface <IUserAccountService> ();

            string      estateName = "";
            string      estateOwner;
            UserAccount ownerAccount;

            // check for passed estate name
            estateName = (cmd.Length < 3)
                ? MainConsole.Instance.Prompt("Estate to be deleted?", estateName)
                : cmd [2];
            if (estateName == "")
            {
                return;
            }

            // verify that the estate does exist
            EstateSettings ES = estateConnector.GetEstateSettings(estateName);

            if (ES == null)
            {
                MainConsole.Instance.WarnFormat("[EstateService]: The estate '{0}' does not exist!", estateName);
                return;
            }

            // owner?
            if (cmd.Length < 4)
            {
                UUID estateOwnerID = ES.EstateOwner;
                ownerAccount = accountService.GetUserAccount(null, estateOwnerID);

                estateOwner = MainConsole.Instance.Prompt("New owner for this estate", ownerAccount.Name);
            }
            else
            {
                estateOwner = Util.CombineParams(cmd, 5);  // in case of spaces in the name e.g. Allan Allard
            }
            if (estateOwner == "")
            {
                return;
            }

            // check to make sure the user exists
            ownerAccount = accountService.GetUserAccount(null, estateOwner);
            if (ownerAccount == null)
            {
                MainConsole.Instance.WarnFormat("[User Account Service]: The user, '{0}' was not found!", estateOwner);
                return;
            }

            // check for bogies...
            if (Utilities.IsSystemUser(ownerAccount.PrincipalID))
            {
                MainConsole.Instance.Info("[EstateService]: Tsk, tsk.  System users should not be used as estate managers!");
                return;
            }

            // We have a valid Estate and user, send it off for processing.
            ES.EstateOwner = ownerAccount.PrincipalID;
            estateConnector.SaveEstateSettings(ES);

            MainConsole.Instance.InfoFormat("[EstateService]: Estate owner for '{0}' changed to '{1}'", estateName, estateOwner);
        }
示例#57
0
 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);
         foreach(GroupMembershipData gmd in gmds)
         {
             if(esGroups.Contains(gmd.GroupID))
                 return true;
         }
     }
     return false;
 }
示例#58
0
        void EstateLinkRegionCommand(IScene scene, string [] cmd)
        {
            IEstateConnector estateConnector = Framework.Utilities.DataManager.RequestPlugin <IEstateConnector> ();
            IGridService     gridService     = m_registry.RequestModuleInterface <IGridService> ();

            string estateName = "";
            string regionName = "";

            // check for passed estate name
            estateName = (cmd.Length < 4)
                ? MainConsole.Instance.Prompt("Estate name", estateName)
                : cmd [3];
            if (estateName == "")
            {
                return;
            }

            // verify that the estate does exist
            EstateSettings ES = estateConnector.GetEstateSettings(estateName);

            if (ES == null)
            {
                MainConsole.Instance.ErrorFormat("[EstateService]: The estate '{0}' does not exist!", estateName);
                return;
            }

            // check for passed  region to link to
            if (scene != null)
            {
                regionName = scene.RegionInfo.RegionName;
            }

            regionName = (cmd.Length < 4)
                ? MainConsole.Instance.Prompt("Region to add to " + estateName, regionName)
                : cmd [4];
            if (regionName == "")
            {
                return;
            }

            // verify that the region does exist
            var region = gridService.GetRegionByName(null, regionName);

            if (region == null)
            {
                MainConsole.Instance.ErrorFormat("[EstateService]: The requested region '{0}' does not exist!", regionName);
                return;
            }

            // have all details.. do it...
            regionName = region.RegionName;
            if (estateConnector.LinkRegion(region.RegionID, (int)ES.EstateID))
            {
                // check for update..
                var es = estateConnector.GetEstateSettings(region.RegionID);
                if ((es == null) || (es.EstateID == 0))
                {
                    MainConsole.Instance.Warn("The region link failed, please try again soon.");
                }
                else
                {
                    MainConsole.Instance.InfoFormat("Region '{0}' is now attached to estate '{1}'", regionName, estateName);
                    UpdateConsoleRegionEstate(regionName, es);
                }
            }
            else
            {
                MainConsole.Instance.Warn("Joining the estate failed. Please try again.");
            }
        }
示例#59
0
        /// <summary>
        /// This method will produce a random city with the central region of the city being
        /// specified as a parameter. More parameters need to be made available for this method
        /// to produce a better quality city, note for now the minimum area for a city is a
        /// 3x3 grid of regions. This code is based on the original C++ version called pixel city.
        /// </summary>
        /// <param name="seed_value">Random integer seed value.</param>
        /// <returns>true / false indicator of success or failure.</returns>
        private bool doGenerate(int seed_value)
        {
            int rx, ry;
            //  Based on the initial seed value populate the regions that this shared module
            // is connected to, this means first get a list of the region, determine which
            // region is in the center of all the regions and set this as the hotzone, or
            // central part of the city (this is where the tallest/largest buildings will
            // be created) and will extend out to cover virtually all of the connected
            // regions if desired. No support for aging of the buildings or the city exists
            // yet it is a possible course for the future of this module.

            //  First quick check to see if the module is enabled or not.
            if (!m_fEnabled)
            {
                m_log.Info("[CITY BUILDER]: Disabled, aborting auto generation.");
                return (false);
            }

            m_log.Info("[CITY BUILDER]: Auto generating the city.");

            //  Now we need to ask some basic values for the city generation, we already have
            // the base seed value as this is part of the 'city generate' command, now what
            // about a name, position, size, densities etc. Some of this can be generated
            // based on the seed value, but then, it would need to be confirmed by the user
            // or allow them to change it. TODO move all requested data into the configuration file.
            if (m_UserAccountService == null)
            {
                m_UserAccountService = simulationBase.ApplicationRegistry.RequestModuleInterface<IUserAccountService>();
            }

            //  Decide where the city is to be placed within the server instance.
            int r = this.randomValue(10);

            string regionCount = MainConsole.Instance.CmdPrompt("Region Count ", r.ToString());
            r = Convert.ToInt32(regionCount);
            m_log.InfoFormat("[CITY BUILDER]: City area {0} x {1} regions ", r, r);

            cityName = MainConsole.Instance.CmdPrompt("City Name ", cityName);
            cityOwner = MainConsole.Instance.CmdPrompt("City Owner ", cityOwner);
            m_DefaultUserName = cityOwner;

            //  Make sure that the user and estate information specified in the configuration file
            // have been loaded and the information has either been found or has been created.
            m_DefaultUserAccount = m_UserAccountService.GetUserAccount(UUID.Zero, cityOwner);
            if (m_DefaultUserAccount == null)
            {
                m_log.InfoFormat("[CITY BUILDER]: Creating default account {0}", m_DefaultUserName);
                m_UserAccountService.CreateUser(m_DefaultUserName, Util.Md5Hash(m_DefaultUserPword), m_DefaultUserEmail);
                m_DefaultUserAccount = m_UserAccountService.GetUserAccount(UUID.Zero, m_DefaultUserName);
                cityOwner = m_DefaultUserName;
            }
            else
                m_log.InfoFormat("[CITY BUILDER]: Account found for {0}", m_DefaultUserName);

            // Obtain the scene manager that the server instance is using.
            sceneManager = simulationBase.ApplicationRegistry.RequestModuleInterface<SceneManager>();

            //  Construct the data instance for a city map to hold the total regions in the simulation.
            cityMap = new CityMap();
            citySeed = seed_value;
            cityMap.cityRegions = new Scene[r, r];
            cityMap.cityPlots = new List<BuildingPlot>();
            cityMap.cityBuildings = new List<CityBuilding>();

            //  Construct land and estate data and update to reflect the found user or the newly created one.
            cityLandData = new LandData();
            RegionInfo regionInfo = new RegionInfo();

            regionInfo.RegionID = UUID.Random();

            //Create an estate
            m_DefaultEstate = new EstateSettings();

            m_log.InfoFormat("[CITY BUILDER]: No estates found for user {0}, constructing default estate.", m_DefaultUserAccount.Name);

            m_DefaultEstate.EstateOwner = m_DefaultUserAccount.PrincipalID;
            m_DefaultEstate.EstateName = m_DefaultEstateName;
            m_DefaultEstate.EstatePass = Util.Md5Hash(Util.Md5Hash(m_DefaultEstatePassword));
            m_DefaultEstate.EstateID = (uint)this.randomValue(1000);

            regionInfo.EstateSettings = m_DefaultEstate; //Just set the estate, this module took care of the loading and the rest will leave it alone

            cityLandData.OwnerID = m_DefaultUserAccount.PrincipalID;
            cityLandData.Name = m_DefaultEstateName;
            cityLandData.GlobalID = UUID.Random();
            cityLandData.GroupID = UUID.Zero;

            int regionPort = startPort;

            //  Construct the region.
            regionInfo.RegionSizeX = cityConfig.GetInt("DefaultRegionSize", 256);
            regionInfo.RegionSizeY = regionInfo.RegionSizeX;
            regionInfo.RegionType = "Mainland";
            regionInfo.ObjectCapacity = 100000;
            regionInfo.Startup = StartupType.Normal;
            regionInfo.ScopeID = UUID.Zero;

            IParcelServiceConnector parcelService = Aurora.DataManager.DataManager.RequestPlugin<IParcelServiceConnector>();
            if (r == 1)
            {
                m_log.Info("[CITY BUILDER]: Single region city.");
                IPAddress address = IPAddress.Parse("0.0.0.0");
                regionInfo.ExternalHostName = Aurora.Framework.Utilities.GetExternalIp();
                regionInfo.FindExternalAutomatically = true;
                regionInfo.InternalEndPoint = new IPEndPoint(address, regionPort++);
                cityLandData.RegionID = regionInfo.RegionID;
                if(parcelService != null)
                    parcelService.StoreLandObject(cityLandData.LandData);
                regionInfo.RegionName = "Region00";
                regionInfo.RegionLocX = (int)m_DefaultStartLocation.X;
                regionInfo.RegionLocY = (int)m_DefaultStartLocation.Y;
                if (!createRegion(0, 0, regionInfo))
                {
                    m_log.Info("[CITY BUILDER]: Failed to construct region.");
                    return (false);
                }
            }
            else if (r > 1)
            {
                m_log.Info("[CITY BUILDER]: Multi-region city.");
                IPAddress address = IPAddress.Parse("0.0.0.0");
                regionInfo.ExternalHostName = Aurora.Framework.Utilities.GetExternalIp();
                regionInfo.FindExternalAutomatically = true;
                //  Construct the regions for the city.
                regionPort = startPort;
                for (rx = 0; rx < r; rx++)
                {
                    for (ry = 0; ry < r; ry++)
                    {
                        regionInfo.InternalEndPoint = new IPEndPoint(address, regionPort++);
                        cityLandData.RegionID = regionInfo.RegionID;
                        if(parcelService != null)
                            parcelService.StoreLandObject(cityLandData.LandData);
                        regionInfo.RegionName = "Region" + rx + ry;
                        regionInfo.RegionLocX = (int)(m_DefaultStartLocation.X + rx);
                        regionInfo.RegionLocY = (int)(m_DefaultStartLocation.Y + ry);
                        m_log.InfoFormat("[CITY BUILDER]: '{0}' @ {1},{2}, http://{3}/", regionInfo.RegionName,
                            regionInfo.RegionLocX, regionInfo.RegionLocY, regionInfo.InternalEndPoint);
                        //We already set the estate before, we don't need to deal with linking it or anything
                        //EstateConnector.LinkRegion(regionInfo.RegionID, (int)m_DefaultEstate.EstateID, m_DefaultEstate.EstatePass);
                        if (!createRegion(rx, ry, regionInfo))
                        {
                            m_log.InfoFormat("[CITY BUILDER]: Failed to construct region at {0},{1}", rx, ry);
                            return (false);
                        }
                    }
                }
            }

            //  Either generate the terrain or loading from an existing file, DEM for example.
            m_log.Info("[CITY BUILDER]: [TERRAIN]");

            //  For each region, just fill the terrain to be 21. This is just above the default
            // water level for Aurora.
            float[,] tHeight = new float[256, 256];
            for (rx = 0; rx < 256; rx++)
            {
                for (ry = 0; ry < 256; ry++)
                {
                    tHeight[rx, ry] = 21.0f;
                }
            }
            //  Construct the new terrain for each region and pass the height map to it.
            for (rx = 0; rx < r; rx++)
            {
                for (ry = 0; ry < r; ry++)
                {
                    Scene region = cityMap.cityRegions[rx, ry];
                    ITerrainChannel tChannel = new TerrainChannel(true, region);
                    ITerrain terrain = null;
                    try
                    {
                        region.TryRequestModuleInterface<ITerrain>(out terrain);
                        terrain.SetHeights2D(tHeight);
                    }
                    catch
                    {
                    }
                }
            }

            //  Rivers and other waterways.

            //  From the total number of regions pick a number of regions that will be 'centers'
            // for the entire city, record these in the centralRegions list.
            m_log.Info("[CITY BUILDER]: [CENTERS]");
            //  ( region count * region count ) / 3
            int aNum = this.randomValue((cityMap.cityRegions.GetUpperBound(0) * cityMap.cityRegions.GetUpperBound(1))/3);
            if (aNum == 0)
            {
                aNum = 1;
            }
            m_log.InfoFormat("[CITY BUILDER]: Total regions {0}, selecting {1} regions for centers.", (r*r), aNum );
            int prevRegionX = 0;
            int prevRegionY = 0;
            while ( aNum > 0 )
            {
                int currRegionX = randomValue( cityMap.cityRegions.GetUpperBound(0) ) / 2;
                int currRegionY = randomValue( cityMap.cityRegions.GetUpperBound(1) ) / 2;

                // If the location selected is the same as the previous location try again.
                if (currRegionX == prevRegionX && currRegionY == prevRegionY)
                {
                    aNum--;
                    continue;
                }

                m_log.InfoFormat("[CITY BUILDER]: Region {0}, located {1},{2}", aNum, prevRegionX, prevRegionY);

                try
                {
                    Scene region = cityMap.centralRegions[(prevRegionX * cityMap.cityRegions.GetUpperBound(0)) + prevRegionY];
                    if (region!=null)
                    {
                        cityMap.centralRegions.Add(region);
                    }
                }
                catch
                {
                }
                aNum--;
                prevRegionX = currRegionX;
                prevRegionY = currRegionY;
            }

            m_log.Info("[CITY BUILDER]: [DENSITY]");
            float avgDensity = 0.0f;

            avgDensity += cityDensities[0];
            avgDensity += cityDensities[1];
            avgDensity += cityDensities[2];
            avgDensity += cityDensities[3];
            avgDensity /= 4;

            //  Before ANYTHING else is created construct the transport systems, priority is given
            // to the road network before the rail network, perhaps a configuration option to allow
            // for the prioritisation value of the transport system is possible.
            m_log.Info("[CITY BUILDER]: [FREEWAYS]");
            m_log.Info("[CITY BUILDER]: [HIGHWAYS]");
            m_log.Info("[CITY BUILDER]: [STREETS]");
            m_log.Info("[CITY BUILDER]: [RAILWAYS]");

            m_log.InfoFormat("[CITY BUILDER]: [RESIDENTIAL DENSITY] {0}%", cityDensities[0] * 100);
            m_log.InfoFormat("[CITY BUILDER]: [COMMERCIAL DENSITY] {0}%", cityDensities[1] * 100);
            m_log.InfoFormat("[CITY BUILDER]: [CORPORATE DENSITY] {0}%", cityDensities[2] * 100);
            m_log.InfoFormat("[CITY BUILDER]: [INDUSTRIAL DENISTY] {0}%", cityDensities[3] * 100);
            m_log.InfoFormat("[CITY BUILDER]: [AVERAGE DENSITY] {0}%", avgDensity);

            m_log.Info("[CITY BUILDER]: [BLOCKS]");
            m_log.Info("[CITY BUILDER]: [ALLOTMENT PLOTS]");
            m_log.Info("[CITY BUILDER]: [BUILDINGS]");

            return (true);
        }
示例#60
0
        void EstateUnLinkRegionCommand(IScene scene, string [] cmd)
        {
            IEstateConnector estateConnector = Framework.Utilities.DataManager.RequestPlugin <IEstateConnector> ();
            IGridService     gridService     = m_registry.RequestModuleInterface <IGridService> ();

            string estateName = "";
            string regionName = "";

            // check for passed estate name
            estateName = (cmd.Length < 4)
                ? MainConsole.Instance.Prompt("Estate name", estateName)
                : cmd [3];
            if (estateName == "")
            {
                return;
            }

            // verify that the estate does exist
            EstateSettings ES = estateConnector.GetEstateSettings(estateName);

            if (ES == null)
            {
                MainConsole.Instance.ErrorFormat("[EstateService]: The estate '{0}' does not exist!", estateName);
                return;
            }

            // check for passed  region to link to
            if (scene != null)
            {
                regionName = scene.RegionInfo.RegionName;
            }

            regionName = (cmd.Length < 4)
                ? MainConsole.Instance.Prompt("Region to remove", regionName)
                : cmd [4];
            if (regionName == "")
            {
                return;
            }

            // verify that the region does exist
            var region = gridService.GetRegionByName(null, regionName);

            if (region == null)
            {
                MainConsole.Instance.ErrorFormat("[EstateService]: The requested region '{0}' does not exist!", regionName);
                return;
            }
            regionName = region.RegionName;

            // verify that the region is actually part of the estate
            if (!estateConnector.EstateRegionExists((int)ES.EstateID, region.RegionID))
            {
                MainConsole.Instance.ErrorFormat("[EstateService]: The requested region '{0}' is not part of the '{1}' estate!",
                                                 regionName, ES.EstateName);
                return;
            }

            // have all details.. do it...
            if (!estateConnector.DelinkRegion(region.RegionID))
            {
                MainConsole.Instance.Warn("Unlinking the region failed. Please try again.");
                return;
            }

            // unlink was successful..
            MainConsole.Instance.InfoFormat("Region '{0}' has been removed from estate '{1}'",
                                            regionName, estateName);

            //We really need to attach it to another estate though...
            ISystemEstateService sysEstateInfo = m_registry.RequestModuleInterface <ISystemEstateService> ();

            ES = estateConnector.GetEstateSettings(sysEstateInfo.SystemEstateName);
            if (ES != null)
            {
                if (estateConnector.LinkRegion(region.RegionID, (int)ES.EstateID))
                {
                    MainConsole.Instance.WarnFormat("'{0}' has been placed in the '{1}' estate until re-assigned",
                                                    regionName, sysEstateInfo.SystemEstateName);
                    UpdateConsoleRegionEstate(regionName, ES);
                }
            }
        }