Example #1
0
        bool IGroupRolemembersInterface.TryGetValue(UGUI requestingAgent, UGI group, UUID roleID, UGUI principal, out GroupRolemember grolemem)
        {
            MemoryGroupInfo info;
            MemoryGroupRole role;

            grolemem = null;
            if (roleID != UUID.Zero)
            {
                if (m_Groups.TryGetValue(group.ID, out info) && info.Roles.TryGetValue(roleID, out role) && role.Rolemembers.ContainsKey(principal))
                {
                    grolemem = new GroupRolemember
                    {
                        Group     = info.ID,
                        Powers    = role.Powers,
                        Principal = principal,
                        RoleID    = roleID
                    };
                }
            }
            else
            {
                if (m_Groups.TryGetValue(group.ID, out info) && info.Roles.TryGetValue(roleID, out role) && info.Members.ContainsKey(principal))
                {
                    grolemem = new GroupRolemember
                    {
                        Group     = info.ID,
                        Powers    = role.Powers,
                        Principal = principal,
                        RoleID    = roleID
                    };
                }
            }
            return(grolemem != null);
        }
Example #2
0
 public GroupRolemember(GroupRolemember src)
 {
     Group     = new UGI(src.Group);
     RoleID    = src.RoleID;
     Principal = new UGUI(src.Principal);
     Powers    = src.Powers;
 }
        void IGroupRolemembersInterface.Add(UGUI requestingAgent, GroupRolemember rolemember)
        {
            bool isUnlimited = false;

            if (m_InnerService.Invites[requestingAgent, rolemember.Group, rolemember.RoleID, rolemember.Principal].Count != 0)
            {
            }
            else
            {
                if (!IsGroupOwner(rolemember.Group, requestingAgent))
                {
                    try
                    {
                        VerifyAgentPowers(rolemember.Group, requestingAgent, GroupPowers.AssignMember);
                        isUnlimited = true;
                    }
                    catch (GroupInsufficientPowersException)
                    {
                        VerifyAgentPowers(rolemember.Group, requestingAgent, GroupPowers.AssignMemberLimited);
                    }
                }
                else
                {
                    isUnlimited = true;
                }

                if (!isUnlimited && !Rolemembers.ContainsKey(requestingAgent, rolemember.Group, rolemember.RoleID, requestingAgent))
                {
                    throw new GroupInsufficientPowersException(GroupPowers.AssignMemberLimited);
                }
            }

            m_InnerService.Rolemembers.Add(requestingAgent, rolemember);
        }
        public GroupMember AddAgentToGroup(UGUI requestingAgent, UGI group, UUID roleid, UGUI agent, string accessToken)
        {
            bool alreadyInGroup;

            GroupMember gmem;

            alreadyInGroup = Members.TryGetValue(requestingAgent, group, agent, out gmem);
            if (!alreadyInGroup)
            {
                gmem = Members.Add(requestingAgent, group, agent, roleid, accessToken);
            }

            try
            {
                if (!Rolemembers.ContainsKey(requestingAgent, group, UUID.Zero, agent))
                {
                    var rolemember = new GroupRolemember
                    {
                        Group     = group,
                        Principal = agent,
                        RoleID    = UUID.Zero
                    };
                    Rolemembers.Add(requestingAgent, rolemember);
                }

                if (UUID.Zero != roleid)
                {
                    var rolemember = new GroupRolemember
                    {
                        Group     = group,
                        Principal = agent,
                        RoleID    = roleid
                    };
                    Rolemembers.Add(requestingAgent, rolemember);
                }

                try
                {
                    var invites = Invites[requestingAgent, group, roleid, agent];
                    foreach (var invite in invites)
                    {
                        invites.Remove(invite);
                    }
                }
                catch
                {
                    /* intentionally ignored */
                }
            }
            catch
            {
                if (!alreadyInGroup)
                {
                    Members.Delete(requestingAgent, group, agent);
                }
            }

            return(gmem);
        }
        List <GroupRolemember> IGroupRolemembersInterface.this[UUI requestingAgent, UGI group, UUID roleID]
        {
            get
            {
                var rolemembers = new List <GroupRolemember>();

                if (UUID.Zero == roleID)
                {
                    GroupRole groupRole;
                    if (!Roles.TryGetValue(requestingAgent, group, roleID, out groupRole))
                    {
                        return(rolemembers);
                    }

                    using (var conn = new MySqlConnection(m_ConnectionString))
                    {
                        conn.Open();
                        using (var cmd = new MySqlCommand("SELECT * FROM groupmemberships WHERE rm.GroupID = @groupid", conn))
                        {
                            cmd.Parameters.AddParameter("@groupid", group.ID);
                            using (MySqlDataReader reader = cmd.ExecuteReader())
                            {
                                while (reader.Read())
                                {
                                    GroupRolemember grolemem = reader.ToGroupRolememberEveryone(groupRole.Powers);
                                    grolemem.Principal = ResolveName(grolemem.Principal);
                                    grolemem.Group     = ResolveName(requestingAgent, grolemem.Group);
                                    rolemembers.Add(grolemem);
                                }
                            }
                        }
                    }
                }
                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", conn))
                        {
                            cmd.Parameters.AddParameter("@groupid", group.ID);
                            cmd.Parameters.AddParameter("@roleid", roleID);
                            using (MySqlDataReader reader = cmd.ExecuteReader())
                            {
                                while (reader.Read())
                                {
                                    GroupRolemember grolemem = reader.ToGroupRolemember();
                                    grolemem.Principal = ResolveName(grolemem.Principal);
                                    grolemem.Group     = ResolveName(requestingAgent, grolemem.Group);
                                    rolemembers.Add(grolemem);
                                }
                            }
                        }
                    }
                }
                return(rolemembers);
            }
        }
        public virtual GroupInfo CreateGroup(UGUI requestingAgent, GroupInfo ginfo, GroupPowers everyonePowers, GroupPowers ownerPowers)
        {
            var role_everyone = new GroupRole
            {
                ID          = UUID.Zero,
                Group       = ginfo.ID,
                Name        = "Everyone",
                Description = "Everyone in the group",
                Title       = "Member of " + ginfo.ID.GroupName,
                Powers      = everyonePowers
            };
            var role_owner = new GroupRole
            {
                ID          = UUID.Random,
                Group       = ginfo.ID,
                Name        = "Owners",
                Description = "Owners of the group",
                Title       = "Owner of " + ginfo.ID.GroupName,
                Powers      = ownerPowers
            };

            ginfo.OwnerRoleID = role_owner.ID;

            var gmemrole_owner = new GroupRolemember
            {
                Group     = ginfo.ID,
                RoleID    = role_owner.ID,
                Principal = ginfo.Founder
            };
            var gmemrole_everyone = new GroupRolemember
            {
                Group     = ginfo.ID,
                RoleID    = role_everyone.ID,
                Principal = ginfo.Founder
            };

            Groups.Create(requestingAgent, ginfo);

            try
            {
                Roles.Add(requestingAgent, role_everyone);
                Roles.Add(requestingAgent, role_owner);
                Members.Add(requestingAgent, ginfo.ID, ginfo.Founder, role_owner.ID, UUID.Random.ToString());
                Rolemembers.Add(requestingAgent, gmemrole_owner);
                Rolemembers.Add(requestingAgent, gmemrole_everyone);
                ginfo.RoleCount   = 2;
                ginfo.MemberCount = 1;
            }
            catch
            {
                Groups.Delete(requestingAgent, ginfo.ID);
                throw;
            }
            return(ginfo);
        }
Example #7
0
        List <GroupRolemember> IGroupRolemembersInterface.this[UGUI requestingAgent, UGI group]
        {
            get
            {
                var rolemembers = new List <GroupRolemember>();

                using (var conn = new NpgsqlConnection(m_ConnectionString))
                {
                    conn.Open();
                    using (var cmd = new NpgsqlCommand("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", conn))
                    {
                        cmd.Parameters.AddParameter("@groupid", group.ID);
                        using (NpgsqlDataReader reader = cmd.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                GroupRolemember grolemem = reader.ToGroupRolemember();
                                grolemem.Principal = ResolveName(grolemem.Principal);
                                grolemem.Group     = ResolveName(requestingAgent, grolemem.Group);
                                rolemembers.Add(grolemem);
                            }
                        }
                    }

                    using (var cmd = new NpgsqlCommand("SELECT * FROM groupmemberships WHERE rm.\"PrincipalID\" = @principalid", conn))
                    {
                        cmd.Parameters.AddParameter("@groupid", group.ID);
                        using (NpgsqlDataReader reader = cmd.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                GroupRole groupRole;
                                if (Roles.TryGetValue(requestingAgent, group, UUID.Zero, out groupRole))
                                {
                                    GroupRolemember grolemem = reader.ToGroupRolememberEveryone(groupRole.Powers);
                                    grolemem.Principal = ResolveName(grolemem.Principal);
                                    grolemem.Group     = ResolveName(requestingAgent, grolemem.Group);
                                    rolemembers.Add(grolemem);
                                }
                            }
                        }
                    }
                }

                return(rolemembers);
            }
        }
 bool IGroupRolemembersInterface.TryGetValue(UUI requestingAgent, UGI group, UUID roleID, UUI 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", 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);
 }
        void IGroupRolemembersInterface.Add(UUI requestingAgent, GroupRolemember rolemember)
        {
            if (rolemember.RoleID == UUID.Zero)
            {
                return; /* ignore those */
            }
            var vals = new Dictionary <string, object>
            {
                ["GroupID"]     = rolemember.Group.ID,
                ["RoleID"]      = rolemember.RoleID,
                ["PrincipalID"] = rolemember.Principal.ID
            };

            using (var conn = new MySqlConnection(m_ConnectionString))
            {
                conn.Open();
                conn.InsertInto("grouprolememberships", vals);
            }
        }
Example #10
0
 void IGroupRolemembersInterface.Add(UGUI requestingAgent, GroupRolemember rolemember)
 {
     m_Groups[rolemember.Group.ID].Roles[rolemember.RoleID].Rolemembers.Add(rolemember.Principal, true);
 }
Example #11
0
        bool IGroupRolemembersInterface.TryGetValue(UGUI requestingAgent, UGI group, UUID roleID, UGUI principal, out GroupRolemember grolemem)
        {
            grolemem = default(GroupRolemember);
            GroupsBrokerEntry groupsService;

            return(TryGetGroupsService(group, out groupsService) && groupsService.Rolemembers.TryGetValue(requestingAgent, group, roleID, principal, out grolemem));
        }
Example #12
0
 void IGroupRolemembersInterface.Add(UGUI requestingAgent, GroupRolemember rolemember) =>
 GetGroupsService(rolemember.Group).Rolemembers.Add(requestingAgent, rolemember);
 bool IGroupRolemembersInterface.TryGetValue(UGUI requestingAgent, UGI group, UUID roleID, UGUI principal, out GroupRolemember grolemem) =>
 m_InnerService.Rolemembers.TryGetValue(requestingAgent, group, roleID, principal, out grolemem);