private ExtendedGroupMembershipData GetAgentGroupMembership(string RequestingAgentID, string AgentID, UUID GroupID, MembershipData membership) { // 2. get the active group GroupData group = m_Database.RetrieveGroup(GroupID); if (group == null) return null; // 3. get the membership info if we don't have it already if (membership == null) { membership = m_Database.RetrieveMember(group.GroupID, AgentID); if (membership == null) return null; } // 4. get the active role UUID activeRoleID = new UUID(membership.Data["SelectedRoleID"]); RoleData role = m_Database.RetrieveRole(group.GroupID, activeRoleID); ExtendedGroupMembershipData data = new ExtendedGroupMembershipData(); data.AcceptNotices = membership.Data["AcceptNotices"] == "1" ? true : false; data.AccessToken = membership.Data["AccessToken"]; data.Active = true; data.ActiveRole = activeRoleID; data.AllowPublish = group.Data["AllowPublish"] == "1" ? true : false; data.Charter = group.Data["Charter"]; data.Contribution = Int32.Parse(membership.Data["Contribution"]); data.FounderID = new UUID(group.Data["FounderID"]); data.GroupID = new UUID(group.GroupID); data.GroupName = group.Data["Name"]; data.GroupPicture = new UUID(group.Data["InsigniaID"]); if (role != null) { data.GroupPowers = UInt64.Parse(role.Data["Powers"]); data.GroupTitle = role.Data["Title"]; } data.ListInProfile = membership.Data["ListInProfile"] == "1" ? true : false; data.MaturePublish = group.Data["MaturePublish"] == "1" ? true : false; data.MembershipFee = Int32.Parse(group.Data["MembershipFee"]); data.OpenEnrollment = group.Data["OpenEnrollment"] == "1" ? true : false; data.ShowInList = group.Data["ShowInList"] == "1" ? true : false; return data; }
protected void _AddAgentToGroup(string RequestingAgentID, string AgentID, UUID GroupID, UUID RoleID, string accessToken) { // Check if it's already there MembershipData data = m_Database.RetrieveMember(GroupID, AgentID); if (data != null) return; // Add the membership data = new MembershipData(); data.PrincipalID = AgentID; data.GroupID = GroupID; data.Data = new Dictionary<string, string>(); data.Data["SelectedRoleID"] = RoleID.ToString(); data.Data["Contribution"] = "0"; data.Data["ListInProfile"] = "1"; data.Data["AcceptNotices"] = "1"; data.Data["AccessToken"] = accessToken; m_Database.StoreMember(data); // Add principal to everyone role _AddAgentToGroupRole(RequestingAgentID, AgentID, GroupID, UUID.Zero); // Add principal to role, if different from everyone role if (RoleID != UUID.Zero) _AddAgentToGroupRole(RequestingAgentID, AgentID, GroupID, RoleID); // Make thit this active group PrincipalData pdata = new PrincipalData(); pdata.PrincipalID = AgentID; pdata.ActiveGroupID = GroupID; m_Database.StorePrincipal(pdata); }
public bool CreateGroupProxy(string RequestingAgentID, string agentID, string accessToken, UUID groupID, string serviceLocation, string name, out string reason) { reason = string.Empty; Uri uri = null; try { uri = new Uri(serviceLocation); } catch (UriFormatException) { reason = "Bad location for group proxy"; return false; } // Check if it already exists GroupData grec = m_Database.RetrieveGroup(groupID); if (grec == null || (grec != null && grec.Data["Location"] != string.Empty && grec.Data["Location"].ToLower() != serviceLocation.ToLower())) { // Create the group grec = new GroupData(); grec.GroupID = groupID; grec.Data = new Dictionary<string, string>(); grec.Data["Name"] = name + " @ " + uri.Authority; grec.Data["Location"] = serviceLocation; grec.Data["Charter"] = string.Empty; grec.Data["InsigniaID"] = UUID.Zero.ToString(); grec.Data["FounderID"] = UUID.Zero.ToString(); grec.Data["MembershipFee"] = "0"; grec.Data["OpenEnrollment"] = "0"; grec.Data["ShowInList"] = "0"; grec.Data["AllowPublish"] = "0"; grec.Data["MaturePublish"] = "0"; grec.Data["OwnerRoleID"] = UUID.Zero.ToString(); if (!m_Database.StoreGroup(grec)) return false; } if (grec.Data["Location"] == string.Empty) { reason = "Cannot add proxy membership to non-proxy group"; return false; } UUID uid = UUID.Zero; string url = string.Empty, first = string.Empty, last = string.Empty, tmp = string.Empty; Util.ParseUniversalUserIdentifier(RequestingAgentID, out uid, out url, out first, out last, out tmp); string fromName = first + "." + last + "@" + url; // Invite to group again InviteToGroup(fromName, groupID, new UUID(agentID), grec.Data["Name"]); // Stick the proxy membership in the DB already // we'll delete it if the agent declines the invitation MembershipData membership = new MembershipData(); membership.PrincipalID = agentID; membership.GroupID = groupID; membership.Data = new Dictionary<string, string>(); membership.Data["SelectedRoleID"] = UUID.Zero.ToString(); membership.Data["Contribution"] = "0"; membership.Data["ListInProfile"] = "1"; membership.Data["AcceptNotices"] = "1"; membership.Data["AccessToken"] = accessToken; m_Database.StoreMember(membership); return true; }