Ejemplo n.º 1
0
 public bool HasGroupPower(UGUI agentOwner, UGI group, GroupPowers power) => (GetGroupPowers(agentOwner, group) & power) != 0;
Ejemplo n.º 2
0
 /* check access when doing QueryAccess
  * These checks are informational only to the arriving agent and
  * cannot be granted to be validating correctly at all times.
  */
 /* throws NotAuthorizedException when not allowed */
 public abstract void QueryAccess(UGUI agent, UUID regionID);
Ejemplo n.º 3
0
 bool IGroupRolemembersInterface.ContainsKey(UGUI requestingAgent, UGI group, UUID roleID, UGUI principal)
 {
     if (UUID.Zero == roleID)
     {
         return(Members.ContainsKey(requestingAgent, group, principal));
     }
     else
     {
         using (var conn = new MySqlConnection(m_ConnectionString))
         {
             conn.Open();
             using (var cmd = new MySqlCommand("SELECT rm.GroupID FROM grouprolememberships AS rm INNER JOIN grouproles AS r ON rm.GroupID = r.GroupID AND rm.RoleID = r.RoleID WHERE rm.GroupID = @groupid AND rm.RoleID = @roleid and rm.PrincipalID = @principalid LIMIT 1", conn))
             {
                 cmd.Parameters.AddParameter("@groupid", group.ID);
                 cmd.Parameters.AddParameter("@roleid", roleID);
                 cmd.Parameters.AddParameter("@principalid", principal.ID);
                 using (MySqlDataReader reader = cmd.ExecuteReader())
                 {
                     return(reader.Read());
                 }
             }
         }
     }
 }
Ejemplo n.º 4
0
 bool IGroupRolesInterface.TryGetValue(UGUI requestingAgent, UGI group, UUID roleID, out GroupRole groupRole) =>
 m_InnerService.Roles.TryGetValue(requestingAgent, group, roleID, out groupRole);
Ejemplo n.º 5
0
 List <GroupRole> IGroupRolesInterface.this[UGUI requestingAgent, UGI group, UGUI principal] =>
 m_InnerService.Roles[requestingAgent, group, principal];
 public abstract void Logout(UGUI agentID, UUID sessionID, UUID secureSessionID);
 /** <summary> Start a transaction for paying another user by a user</summary>
  * <exception cref="InsufficientFundsException">this exception is thrown when not enough funds are available</exception>
  */
 public abstract IActiveTransaction BeginTransferTransaction(UGUI sourceID, UGUI destinationID, BaseTransaction transactionData, int amount);
 List <GroupRolemembership> IGroupRolemembersInterface.this[UGUI requestingAgent, UGUI principal] =>
 m_InnerService.Rolemembers[requestingAgent, principal];
 List <GroupRolemember> IGroupRolemembersInterface.this[UGUI requestingAgent, UGI group] =>
 m_InnerService.Rolemembers[requestingAgent, group];
 bool IGroupRolemembersInterface.TryGetValue(UGUI requestingAgent, UGI group, UUID roleID, UGUI principal, out GroupRolemember grolemem) =>
 m_InnerService.Rolemembers.TryGetValue(requestingAgent, group, roleID, principal, out grolemem);
 bool IGroupRolemembersInterface.ContainsKey(UGUI requestingAgent, UGI group, UUID roleID, UGUI principal) =>
 m_InnerService.Rolemembers.ContainsKey(requestingAgent, group, roleID, principal);
Ejemplo n.º 12
0
        List <GroupRolemembership> IGroupRolemembersInterface.this[UGUI requestingAgent, UGUI principal]
        {
            get
            {
                var rolemembers = new List <GroupRolemembership>();
                using (var conn = new MySqlConnection(m_ConnectionString))
                {
                    conn.Open();
                    using (var cmd = new MySqlCommand("SELECT rm.*, r.Powers, r.Title FROM grouprolememberships AS rm INNER JOIN grouproles AS r ON rm.GroupID = r.GroupID AND rm.RoleID = r.RoleID WHERE rm.PrincipalID = @principalid", conn))
                    {
                        cmd.Parameters.AddParameter("@principalid", principal.ID);
                        using (MySqlDataReader reader = cmd.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                GroupRolemembership grolemem = reader.ToGroupRolemembership();
                                grolemem.Principal = ResolveName(grolemem.Principal);
                                grolemem.Group     = ResolveName(requestingAgent, grolemem.Group);
                                rolemembers.Add(grolemem);
                            }
                        }
                    }

                    using (var cmd = new MySqlCommand("SELECT * FROM groupmemberships WHERE rm.PrincipalID = @principalid", conn))
                    {
                        cmd.Parameters.AddParameter("@principalid", principal.ID);
                        using (MySqlDataReader reader = cmd.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                var       group = new UGI(reader.GetUUID("GroupID"));
                                GroupRole groupRole;
                                if (Roles.TryGetValue(requestingAgent, group, UUID.Zero, out groupRole))
                                {
                                    GroupRolemembership grolemem = reader.ToGroupRolemembershipEveryone(groupRole.Powers);
                                    grolemem.Principal  = ResolveName(grolemem.Principal);
                                    grolemem.Group      = ResolveName(requestingAgent, grolemem.Group);
                                    grolemem.GroupTitle = groupRole.Title;
                                    rolemembers.Add(grolemem);
                                }
                            }
                        }
                    }
                }

                return(rolemembers);
            }
        }
Ejemplo n.º 13
0
 bool IGroupRolemembersInterface.TryGetValue(UGUI requestingAgent, UGI group, UUID roleID, UGUI principal, out GroupRolemember grolemem)
 {
     grolemem = null;
     if (UUID.Zero == roleID)
     {
         GroupMember gmem;
         GroupRole   role;
         if (Members.TryGetValue(requestingAgent, group, principal, out gmem) &&
             Roles.TryGetValue(requestingAgent, group, UUID.Zero, out role))
         {
             grolemem = new GroupRolemember
             {
                 Powers    = role.Powers,
                 Principal = ResolveName(principal),
                 RoleID    = UUID.Zero,
                 Group     = gmem.Group
             };
             return(true);
         }
     }
     else
     {
         using (var conn = new MySqlConnection(m_ConnectionString))
         {
             conn.Open();
             using (var cmd = new MySqlCommand("SELECT rm.*, r.Powers FROM grouprolememberships AS rm INNER JOIN grouproles AS r ON rm.GroupID = r.GroupID AND rm.RoleID = r.RoleID WHERE rm.GroupID = @groupid AND rm.RoleID = @roleid and rm.PrincipalID = @principalid LIMIT 1", conn))
             {
                 cmd.Parameters.AddParameter("@groupid", group.ID);
                 cmd.Parameters.AddParameter("@roleid", roleID);
                 cmd.Parameters.AddParameter("@principalid", principal.ID);
                 using (MySqlDataReader reader = cmd.ExecuteReader())
                 {
                     if (reader.Read())
                     {
                         grolemem           = reader.ToGroupRolemember();
                         grolemem.Principal = ResolveName(grolemem.Principal);
                         grolemem.Group     = ResolveName(requestingAgent, grolemem.Group);
                         return(true);
                     }
                 }
             }
         }
     }
     return(false);
 }
Ejemplo n.º 14
0
        void IGroupRolemembersInterface.Delete(UGUI requestingAgent, UGI group, UUID roleID, UGUI principal)
        {
            if (UUID.Zero == roleID)
            {
                throw new NotSupportedException();
            }
            else
            {
                var tablenames = new string[] { "groupinvites", "grouprolememberships" };

                using (var conn = new MySqlConnection(m_ConnectionString))
                {
                    conn.Open();
                    conn.InsideTransaction((transaction) =>
                    {
                        using (var cmd = new MySqlCommand("UPDATE groupmemberships SET SelectedRoleID=@zeroid WHERE SelectedRoleID = @roleid AND GroupID = @groupid AND PrincipalID = @principalid", conn)
                        {
                            Transaction = transaction
                        })
                        {
                            cmd.Parameters.AddParameter("@zeroid", UUID.Zero);
                            cmd.Parameters.AddParameter("@principalid", principal.ID);
                            cmd.Parameters.AddParameter("@groupid", group.ID);
                            cmd.Parameters.AddParameter("@roleid", roleID);
                            cmd.ExecuteNonQuery();
                        }

                        foreach (string table in tablenames)
                        {
                            using (var cmd = new MySqlCommand("DELETE FROM " + table + " WHERE GroupID = @groupid AND RoleID = @roleid AND PrincipalID = @principalid", conn)
                            {
                                Transaction = transaction
                            })
                            {
                                cmd.Parameters.AddParameter("@principalid", principal.ID);
                                cmd.Parameters.AddParameter("@groupid", group.ID);
                                cmd.Parameters.AddParameter("@roleid", roleID);
                                cmd.ExecuteNonQuery();
                            }
                        }
                    });
                }
            }
        }
 public abstract CurrencyQuote GetCurrencyQuote(UGUI sourceID, string language, int currencyToBuy);
        void IGroupRolemembersInterface.Delete(UGUI requestingAgent, UGI group, UUID roleID, UGUI principal)
        {
            bool isUnlimited = false;

            if (!IsGroupOwner(group, requestingAgent))
            {
                try
                {
                    VerifyAgentPowers(group, requestingAgent, GroupPowers.AssignMember);
                    isUnlimited = true;
                }
                catch (GroupInsufficientPowersException)
                {
                    VerifyAgentPowers(group, requestingAgent, GroupPowers.AssignMemberLimited);
                }
            }
            else
            {
                isUnlimited = true;
            }

            if (!isUnlimited && !Rolemembers.ContainsKey(requestingAgent, group, roleID, requestingAgent))
            {
                throw new GroupInsufficientPowersException(GroupPowers.AssignMemberLimited);
            }

            m_InnerService.Rolemembers.Delete(requestingAgent, group, roleID, principal);
        }
 public abstract void BuyCurrency(UGUI sourceID, string language, CurrencyBuy quote);
Ejemplo n.º 18
0
 public bool IsRegionOwner(UGUI agent) => agent.EqualsGrid(Owner);
 /** <summary> Start a transaction for paying a grid service</summary>
  * <exception cref="InsufficientFundsException">this exception is thrown when not enough funds are available</exception>
  */
 public abstract IActiveTransaction BeginChargeTransaction(UGUI agentID, BaseTransaction transactionData, int amount);
Ejemplo n.º 20
0
        private bool IsInGodAgents(UGUI agent)
        {
            RwLockedList <UGUI> activeList = m_GodAgentsSetToLocal ? m_GodAgentsLocal : m_GodAgentsGlobal;

            return(activeList.Find((e) => agent.EqualsGrid(e)) != null);
        }
 /** <summary> Start a transaction for paying a group by a user</summary>
  * <exception cref="InsufficientFundsException">this exception is thrown when not enough funds are available</exception>
  * <exception cref="NotSupportedException">this exception is thrown when the economy service does not support group accounts</exception>
  */
 public virtual IActiveTransaction BeginTransferTransaction(UGUI sourceID, UGI destinationID, BaseTransaction transactionData, int amount)
 {
     throw new NotSupportedException();
 }
Ejemplo n.º 22
0
 public bool IsPossibleGod(UGUI agent) => agent.EqualsGrid(Owner) ||
 (EstateManagerIsGod && IsEstateManager(agent)) ||
 IsInGodAgents(agent);
Ejemplo n.º 23
0
 bool IGroupRolesInterface.ContainsKey(UGUI requestingAgent, UGI group, UUID roleID) =>
 m_InnerService.Roles.ContainsKey(requestingAgent, group, roleID);
Ejemplo n.º 24
0
 public bool CanRez(UUID rezzerid, UGUI agent, Vector3 location) => CanRez(rezzerid, agent, location, UUID.Zero, UUID.Zero);
Ejemplo n.º 25
0
 void IGroupRolesInterface.Add(UGUI requestingAgent, GroupRole role)
 {
     VerifyAgentPowers(role.Group, requestingAgent, GroupPowers.CreateRole);
     m_InnerService.Roles.Add(requestingAgent, role);
 }
Ejemplo n.º 26
0
        public bool CanMove(IAgent agent, ObjectGroup group, Vector3 location)
        {
            UGUI agentOwner = agent.Owner;
            UGUI groupOwner = group.Owner;

            if (IsPossibleGod(agentOwner))
            {
                if (group.RootPart.IsLocked && groupOwner.EqualsGrid(agentOwner))
                {
                    return(false);
                }
                return(true);
            }
            /* deny modification of admin objects by non-admins */
            else if (IsPossibleGod(groupOwner))
            {
                return(false);
            }

            /* check locked state */
            if (group.RootPart.IsLocked)
            {
                return(false);
            }

            /* check object owner */
            if (agentOwner.EqualsGrid(groupOwner))
            {
                return(true);
            }
            else if (group.IsAttached)
            {
                /* others should not be able to edit attachments */
                return(false);
            }

#warning Add Friends Rights to CanMove

            if (group.RootPart.CheckPermissions(agentOwner, agent.Group, InventoryPermissionsMask.Move))
            {
                return(true);
            }
            else if ((group.RootPart.EveryoneMask & InventoryPermissionsMask.Move) != 0)
            {
                return(true);
            }

            if (HasGroupPower(agent.Owner, group.Group, GroupPowers.ObjectManipulate))
            {
                return(true);
            }

            ParcelInfo pinfo;
            if (Parcels.TryGetValue(location, out pinfo))
            {
                if (pinfo.Owner.EqualsGrid(agentOwner))
                {
                    return(true);
                }

                if (HasGroupPower(agent.Owner, pinfo.Group, GroupPowers.ObjectManipulate))
                {
                    return(true);
                }
            }

            return(false);
        }
Ejemplo n.º 27
0
        public static void RaiseSphere(UGUI agentOwner, SceneInterface scene, ModifyLand modify, ModifyLand.Data data)
        {
            var changed = new List <LayerPatch>();

            int xFrom = (int)(data.West - data.BrushSize + 0.5);
            int xTo   = (int)(data.West + data.BrushSize + 0.5);
            int yFrom = (int)(data.South - data.BrushSize + 0.5);
            int yTo   = (int)(data.South + data.BrushSize + 0.5);

            if (xFrom < 0)
            {
                xFrom = 0;
            }

            if (yFrom < 0)
            {
                yFrom = 0;
            }

            if (xTo >= scene.SizeX)
            {
                xTo = (int)scene.SizeX - 1;
            }

            if (yTo >= scene.SizeY)
            {
                yTo = (int)scene.SizeY - 1;
            }

#if DEBUG
            m_Log.DebugFormat("Terraforming {0},{1} RaiseSphere {2}-{3} / {4}-{5}", data.West, data.South, xFrom, xTo, yFrom, yTo);
#endif

            for (int x = xFrom; x <= xTo; x++)
            {
                for (int y = yFrom; y <= yTo; y++)
                {
                    var pos = new Vector3(x, y, 0);
                    if (!scene.CanTerraform(agentOwner, pos))
                    {
                        continue;
                    }

                    // Calculate a cos-sphere and add it to the heightmap
                    double r = Math.Sqrt((x - data.West) * (x - data.West) + ((y - data.South) * (y - data.South)));
                    double z = Math.Cos(r * Math.PI / (data.BrushSize * 2));
                    if (z > 0.0)
                    {
                        LayerPatch lp = scene.Terrain.AdjustTerrain((uint)x, (uint)y, z * modify.Seconds);
                        if (lp != null && !changed.Contains(lp))
                        {
                            changed.Add(lp);
                        }
                    }
                }
            }

            if (changed.Count != 0)
            {
                foreach (LayerPatch lp in changed)
                {
                    lp.IncrementSerial();
                    scene.Terrain.UpdateTerrainListeners(lp);
                }
                scene.Terrain.UpdateTerrainDataToClients();
            }
        }
 public override GroupPowers GetAgentPowers(UGI group, UGUI agent) => m_InnerService.GetAgentPowers(group, agent);