diff options
Diffstat (limited to 'OpenSim/Region/CoreModules/Framework/UserManagement/HGUserManagementModule.cs')
-rw-r--r-- | OpenSim/Region/CoreModules/Framework/UserManagement/HGUserManagementModule.cs | 76 |
1 files changed, 43 insertions, 33 deletions
diff --git a/OpenSim/Region/CoreModules/Framework/UserManagement/HGUserManagementModule.cs b/OpenSim/Region/CoreModules/Framework/UserManagement/HGUserManagementModule.cs index 66de8e4..4eecaa2 100644 --- a/OpenSim/Region/CoreModules/Framework/UserManagement/HGUserManagementModule.cs +++ b/OpenSim/Region/CoreModules/Framework/UserManagement/HGUserManagementModule.cs | |||
@@ -71,43 +71,52 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement | |||
71 | 71 | ||
72 | protected override void AddAdditionalUsers(UUID avatarID, string query, List<UserData> users) | 72 | protected override void AddAdditionalUsers(UUID avatarID, string query, List<UserData> users) |
73 | { | 73 | { |
74 | string[] words = query.Split(new char[] { ' ' }); | 74 | if (query.Contains("@")) // First.Last@foo.com, maybe? |
75 | |||
76 | for (int i = 0; i < words.Length; i++) | ||
77 | { | 75 | { |
78 | if (words[i].Length < 3) | 76 | string[] words = query.Split(new char[] { '@' }); |
77 | if (words.Length != 2) | ||
79 | { | 78 | { |
80 | if (i != words.Length - 1) | 79 | m_log.DebugFormat("[USER MANAGEMENT MODULE]: Malformed address {0}", query); |
81 | Array.Copy(words, i + 1, words, i, words.Length - i - 1); | 80 | return; |
82 | Array.Resize(ref words, words.Length - 1); | ||
83 | } | 81 | } |
84 | } | ||
85 | 82 | ||
86 | if (words.Length == 0 || words.Length > 2) | 83 | words[0] = words[0].Trim(); // it has at least 1 |
87 | return; | 84 | words[1] = words[1].Trim(); |
88 | 85 | ||
89 | if (words.Length == 2) // First.Last @foo.com, maybe? | 86 | if (words[0] == String.Empty) // query was @foo.com? |
90 | { | 87 | { |
91 | bool found = false; | 88 | foreach (UserData d in m_UserCache.Values) |
89 | { | ||
90 | if (d.LastName.ToLower().StartsWith("@" + words[1].ToLower())) | ||
91 | users.Add(d); | ||
92 | } | ||
93 | |||
94 | // We're done | ||
95 | return; | ||
96 | } | ||
97 | |||
98 | // words.Length == 2 and words[0] != string.empty | ||
99 | // first.last@foo.com ? | ||
92 | foreach (UserData d in m_UserCache.Values) | 100 | foreach (UserData d in m_UserCache.Values) |
93 | { | 101 | { |
94 | if (d.LastName.StartsWith("@") && | 102 | if (d.LastName.StartsWith("@") && |
95 | d.FirstName.ToLower().Equals(words[0].ToLower()) && | 103 | d.FirstName.ToLower().Equals(words[0].ToLower()) && |
96 | d.LastName.ToLower().Equals(words[1].ToLower())) | 104 | d.LastName.ToLower().Equals("@" + words[1].ToLower())) |
97 | { | 105 | { |
98 | users.Add(d); | 106 | users.Add(d); |
99 | found = true; | 107 | // It's cached. We're done |
100 | break; | 108 | return; |
101 | } | 109 | } |
102 | } | 110 | } |
103 | 111 | ||
104 | if (!found && words[1].StartsWith("@") && words[0].Contains(".")) // This is it! Let's ask the other world | 112 | // This is it! Let's ask the other world |
113 | if (words[0].Contains(".")) | ||
105 | { | 114 | { |
106 | string[] names = words[0].Split(new char[] { '.' }); | 115 | string[] names = words[0].Split(new char[] { '.' }); |
107 | if (names.Length >= 2) | 116 | if (names.Length >= 2) |
108 | { | 117 | { |
109 | 118 | ||
110 | string uriStr = "http://" + words[1].Substring(1); // remove the @ | 119 | string uriStr = "http://" + words[1]; |
111 | // Let's check that the last name is a valid address | 120 | // Let's check that the last name is a valid address |
112 | try | 121 | try |
113 | { | 122 | { |
@@ -115,6 +124,7 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement | |||
115 | } | 124 | } |
116 | catch (UriFormatException) | 125 | catch (UriFormatException) |
117 | { | 126 | { |
127 | m_log.DebugFormat("[USER MANAGEMENT MODULE]: Malformed address {0}", uriStr); | ||
118 | return; | 128 | return; |
119 | } | 129 | } |
120 | 130 | ||
@@ -125,26 +135,26 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement | |||
125 | UserData ud = new UserData(); | 135 | UserData ud = new UserData(); |
126 | ud.Id = userID; | 136 | ud.Id = userID; |
127 | ud.FirstName = words[0]; | 137 | ud.FirstName = words[0]; |
128 | ud.LastName = words[1]; | 138 | ud.LastName = "@" + words[1]; |
129 | users.Add(ud); | 139 | users.Add(ud); |
130 | AddUser(userID, ud.FirstName, ud.LastName, uriStr); | 140 | AddUser(userID, names[0], names[1], uriStr); |
131 | m_log.DebugFormat("[USER MANAGEMENT MODULE]: User {0} {1} found", words[0], words[1]); | 141 | m_log.DebugFormat("[USER MANAGEMENT MODULE]: User {0}@{1} found", words[0], words[1]); |
132 | } | 142 | } |
133 | else | 143 | else |
134 | m_log.DebugFormat("[USER MANAGEMENT MODULE]: User {0} {1} not found", words[0], words[1]); | 144 | m_log.DebugFormat("[USER MANAGEMENT MODULE]: User {0}@{1} not found", words[0], words[1]); |
135 | } | 145 | } |
136 | } | 146 | } |
137 | } | 147 | } |
138 | else | 148 | //else |
139 | { | 149 | //{ |
140 | foreach (UserData d in m_UserCache.Values) | 150 | // foreach (UserData d in m_UserCache.Values) |
141 | { | 151 | // { |
142 | if (d.LastName.StartsWith("@") && | 152 | // if (d.LastName.StartsWith("@") && |
143 | (d.FirstName.ToLower().StartsWith(query.ToLower()) || | 153 | // (d.FirstName.ToLower().StartsWith(query.ToLower()) || |
144 | d.LastName.ToLower().StartsWith(query.ToLower()))) | 154 | // d.LastName.ToLower().StartsWith(query.ToLower()))) |
145 | users.Add(d); | 155 | // users.Add(d); |
146 | } | 156 | // } |
147 | } | 157 | //} |
148 | } | 158 | } |
149 | 159 | ||
150 | } | 160 | } |