Esempio n. 1
0
        protected override void AddAdditionalUsers(UUID avatarID, string query, List <UserData> users)
        {
            if (query.Contains("@"))  // [email protected], maybe?
            {
                string[] words = query.Split(new char[] { '@' });
                if (words.Length != 2)
                {
                    m_log.DebugFormat("[USER MANAGEMENT MODULE]: Malformed address {0}", query);
                    return;
                }

                words[0] = words[0].Trim(); // it has at least 1
                words[1] = words[1].Trim();

                if (words[0] == String.Empty) // query was @foo.com?
                {
                    foreach (UserData d in m_UserCache.Values)
                    {
                        if (d.LastName.ToLower().StartsWith("@" + words[1].ToLower()))
                        {
                            users.Add(d);
                        }
                    }

                    // We're done
                    return;
                }

                // words.Length == 2 and words[0] != string.empty
                // [email protected] ?
                foreach (UserData d in m_UserCache.Values)
                {
                    if (d.LastName.StartsWith("@") &&
                        d.FirstName.ToLower().Equals(words[0].ToLower()) &&
                        d.LastName.ToLower().Equals("@" + words[1].ToLower()))
                    {
                        users.Add(d);
                        // It's cached. We're done
                        return;
                    }
                }

                // This is it! Let's ask the other world
                if (words[0].Contains("."))
                {
                    string[] names = words[0].Split(new char[] { '.' });
                    if (names.Length >= 2)
                    {
                        string uriStr = "http://" + words[1];
                        // Let's check that the last name is a valid address
                        try
                        {
                            new Uri(uriStr);
                        }
                        catch (UriFormatException)
                        {
                            m_log.DebugFormat("[USER MANAGEMENT MODULE]: Malformed address {0}", uriStr);
                            return;
                        }

                        UserAgentServiceConnector uasConn = new UserAgentServiceConnector(uriStr);
                        UUID userID = uasConn.GetUUID(names[0], names[1]);
                        if (!userID.Equals(UUID.Zero))
                        {
                            UserData ud = new UserData();
                            ud.Id        = userID;
                            ud.FirstName = words[0];
                            ud.LastName  = "@" + words[1];
                            users.Add(ud);
                            // WARNING! that uriStr is not quite right... it may be missing the / at the end,
                            // which will cause trouble (duplicate entries on some tables). We should
                            // get the UUI instead from the UAS. TO BE FIXED.
                            AddUser(userID, names[0], names[1], uriStr);
                            m_log.DebugFormat("[USER MANAGEMENT MODULE]: User {0}@{1} found", words[0], words[1]);
                        }
                        else
                        {
                            m_log.DebugFormat("[USER MANAGEMENT MODULE]: User {0}@{1} not found", words[0], words[1]);
                        }
                    }
                }
            }
            //else
            //{
            //    foreach (UserData d in m_UserCache.Values)
            //    {
            //        if (d.LastName.StartsWith("@") &&
            //            (d.FirstName.ToLower().StartsWith(query.ToLower()) ||
            //             d.LastName.ToLower().StartsWith(query.ToLower())))
            //            users.Add(d);
            //    }
            //}
        }
Esempio n. 2
0
        protected override void AddAdditionalUsers(string query, List <UserData> users, HashSet <UUID> found)
        {
            if (query.Contains("@"))  // [email protected], maybe?
            {
                string[] words = query.Split(new char[] { '@' });
                if (words.Length != 2)
                {
                    m_log.DebugFormat("[USER MANAGEMENT MODULE]: Malformed address {0}", query);
                    return;
                }

                words[0] = words[0].Trim(); // it has at least 1
                words[1] = words[1].Trim().ToLower();
                string match1 = "@" + words[1];
                if (String.IsNullOrWhiteSpace(words[0])) // query was @foo.com?
                {
                    foreach (UserData d in m_userCacheByID.Values)
                    {
                        if (found.Contains(d.Id))
                        {
                            continue;
                        }
                        if (d.LastName.ToLower().StartsWith(match1))
                        {
                            users.Add(d);
                        }
                    }

                    // We're done
                    return;
                }

                string match0 = words[0].ToLower();
                // words.Length == 2 and words[0] != string.empty
                // [email protected] ?
                foreach (UserData d in m_userCacheByID.Values)
                {
                    if (found.Contains(d.Id))
                    {
                        continue;
                    }
                    if (d.LastName.ToLower().Equals(match1) &&
                        d.FirstName.ToLower().Equals(match0))
                    {
                        users.Add(d);
                        // It's cached. We're done
                        return;
                    }
                }

                // This is it! Let's ask the other world
                if (words[0].Contains("."))
                {
                    string[] names = words[0].Split(new char[] { '.' });
                    if (names.Length >= 2)
                    {
                        string uriStr = "http://" + words[1];
                        // Let's check that the last name is a valid address
                        try
                        {
                            new Uri(uriStr);
                        }
                        catch (UriFormatException)
                        {
                            m_log.DebugFormat("[USER MANAGEMENT MODULE]: Malformed address {0}", uriStr);
                            return;
                        }

                        UUID userID = UUID.Zero;
                        uriStr = uriStr.ToLower();
                        if (!WebUtil.GlobalExpiringBadURLs.ContainsKey(uriStr))
                        {
                            UserAgentServiceConnector uasConn = new UserAgentServiceConnector(uriStr);
                            try
                            {
                                userID = uasConn.GetUUID(names[0], names[1]);
                            }
                            catch (Exception e)
                            {
                                m_log.Debug("[USER MANAGEMENT MODULE]: GetUUID call failed ", e);
                            }
                        }

                        if (!userID.Equals(UUID.Zero))
                        {
                            UserData ud = new UserData();
                            ud.Id        = userID;
                            ud.FirstName = words[0];
                            ud.LastName  = "@" + words[1];
                            users.Add(ud);
                            AddUser(userID, names[0], names[1], uriStr);
                            m_log.DebugFormat("[USER MANAGEMENT MODULE]: User {0}@{1} found", words[0], words[1]);
                        }
                        else
                        {
                            m_log.DebugFormat("[USER MANAGEMENT MODULE]: User {0}@{1} not found", words[0], words[1]);
                        }
                    }
                }
            }
        }