private void OnNewClient(IClientAPI client) { client.OnInstantMessage += OnInstantMessage; client.OnApproveFriendRequest += OnApproveFriendRequest; client.OnDenyFriendRequest += OnDenyFriendRequest; client.OnTerminateFriendship += OnTerminateFriendship; client.OnGrantUserRights += OnGrantUserRights; lock (m_Friends) { if (m_Friends.ContainsKey(client.AgentId)) { m_Friends[client.AgentId].Refcount++; return; } UserFriendData newFriends = new UserFriendData(); newFriends.PrincipalID = client.AgentId; newFriends.Friends = m_FriendsService.GetFriends(client.AgentId); newFriends.Refcount = 1; newFriends.RegionID = UUID.Zero; m_Friends.Add(client.AgentId, newFriends); } }
public List <UUID> GetOnlineFriends(UUID foreignUserID, List <string> friends) { List <UUID> online = new List <UUID>(); if (m_FriendsService == null || m_PresenceService == null) { m_log.WarnFormat("[USER AGENT SERVICE]: Unable to get online friends because friends or presence services are missing"); return(online); } m_log.DebugFormat("[USER AGENT SERVICE]: Foreign user {0} wants to know status of {1} local friends", foreignUserID, friends.Count); // First, let's double check that the reported friends are, indeed, friends of that user // And let's check that the secret matches and the rights List <string> usersToBeNotified = new List <string>(); foreach (string uui in friends) { UUID localUserID; string secret = string.Empty, tmp = string.Empty; if (Util.ParseUniversalUserIdentifier(uui, out localUserID, out tmp, out tmp, out tmp, out secret)) { FriendInfo[] friendInfos = m_FriendsService.GetFriends(localUserID); foreach (FriendInfo finfo in friendInfos) { if (finfo.Friend.StartsWith(foreignUserID.ToString()) && finfo.Friend.EndsWith(secret) && (finfo.TheirFlags & (int)FriendRights.CanSeeOnline) != 0 && (finfo.TheirFlags != -1)) { // great! usersToBeNotified.Add(localUserID.ToString()); } } } } // Now, let's find out their status m_log.DebugFormat("[USER AGENT SERVICE]: GetOnlineFriends: user has {0} local friends with status rights", usersToBeNotified.Count); // First, let's send notifications to local users who are online in the home grid PresenceInfo[] friendSessions = m_PresenceService.GetAgents(usersToBeNotified.ToArray()); if (friendSessions != null && friendSessions.Length > 0) { foreach (PresenceInfo pi in friendSessions) { UUID presenceID; if (UUID.TryParse(pi.UserID, out presenceID)) { online.Add(presenceID); } } } return(online); }
private byte[] GetFriends(Dictionary <string, object> request) { UUID principalID = UUID.Zero; if (request.ContainsKey("PRINCIPALID")) { UUID.TryParse(request["PRINCIPALID"].ToString(), out principalID); } else { m_log.WarnFormat("[FRIENDS HANDLER]: no principalID in request to get friends"); } FriendInfo[] finfos = m_FriendsService.GetFriends(principalID); return(PackageFriends(finfos)); }
public FriendInfo[] GetFriends(UUID PrincipalID) { FriendInfo[] friends = m_localService.GetFriends(PrincipalID); if (friends == null || friends.Length == 0) { friends = m_remoteService.GetFriends(PrincipalID); } return(friends); }
public List <FriendInfo> GetFriends(UUID PrincipalID) { List <FriendInfo> friends = m_localService.GetFriends(PrincipalID); if (friends == null || friends.Count == 0) { friends = (List <FriendInfo>)DoRemoteForced(PrincipalID); } return(friends ?? new List <FriendInfo>()); }
public FriendsPageModel GetFriends(FriendsPageFilter filter) { var(totaNumber, friends) = _friendsService.GetFriends(filter); return(new FriendsPageModel() { Friends = friends.Select(s => FriendWebConverter.ToModel(s)).ToList(), TotalNumber = totaNumber }); }
byte[] GetFriendPerms(Dictionary <string, object> request) { if (!VerifyServiceKey(request)) { return(FailureResult()); } UUID principalID = UUID.Zero; if (request.ContainsKey("PRINCIPALID")) { UUID.TryParse(request["PRINCIPALID"].ToString(), out principalID); } else { MainConsole.Instance.WarnFormat("[HGFRIENDS HANDLER]: no principalID in request to get friend perms"); return(FailureResult()); } UUID friendID = UUID.Zero; if (request.ContainsKey("FRIENDID")) { UUID.TryParse(request["FRIENDID"].ToString(), out friendID); } else { MainConsole.Instance.WarnFormat("[HGFRIENDS HANDLER]: no friendID in request to get friend perms"); return(FailureResult()); } List <FriendInfo> friendsInfo = m_FriendsService.GetFriends(principalID); foreach (FriendInfo finfo in friendsInfo) { if (finfo.Friend.StartsWith(friendID.ToString())) { return(SuccessResult(finfo.TheirFlags.ToString())); } } return(FailureResult("Friend not found")); }
public IActionResult Get(int latitude, int longitude, [FromServices] IFriendsService friendsService) { try { return(new ObjectResult(friendsService.GetFriends(latitude, longitude))); } catch { return(BadRequest()); } }
protected object OnGenericEvent(string FunctionName, object parameters) { if (FunctionName == "UserStatusChange") { //A user has logged in or out... we need to update friends lists across the grid ISyncMessagePosterService asyncPoster = m_registry.RequestModuleInterface <ISyncMessagePosterService>(); IFriendsService friendsService = m_registry.RequestModuleInterface <IFriendsService>(); if (asyncPoster != null && friendsService != null) { //Get all friends object[] info = (object[])parameters; UUID us = UUID.Parse(info[0].ToString()); bool isOnline = bool.Parse(info[1].ToString()); List <FriendInfo> friends = friendsService.GetFriends(us); List <UUID> OnlineFriends = new List <UUID>(); foreach (FriendInfo friend in friends) { if (friend.TheirFlags == -1 || friend.MyFlags == -1) { continue; //Not validiated yet! } UUID FriendToInform = UUID.Zero; if (!UUID.TryParse(friend.Friend, out FriendToInform)) { continue; } UserInfo user = m_agentInfoService.GetUserInfo(friend.Friend); //Now find their caps service so that we can find where they are root (and if they are logged in) if (user != null && user.IsOnline) { //Find the root agent OnlineFriends.Add(FriendToInform); //Post! asyncPoster.Post(user.CurrentRegionURI, SyncMessageHelper.AgentStatusChange(us, FriendToInform, isOnline)); } } //If the user is coming online, send all their friends online statuses to them if (isOnline) { UserInfo user = m_agentInfoService.GetUserInfo(us.ToString()); if (user != null) { asyncPoster.Post(user.CurrentRegionURI, SyncMessageHelper.AgentStatusChanges(OnlineFriends, us, true)); } } } } return(null); }
public List <UserModel> GetFriends(Guid id) { var friends = friendsService.GetFriends(id); var friendsModel = new List <UserModel>(); foreach (var friend in friends) { friendsModel.Add(new UserModel(friend)); } return(friendsModel); }
protected object OnGenericEvent(string FunctionName, object parameters) { if (FunctionName == "UserStatusChange") { //A user has logged in or out... we need to update friends lists across the grid IAsyncMessagePostService asyncPoster = m_registry.RequestModuleInterface <IAsyncMessagePostService>(); IFriendsService friendsService = m_registry.RequestModuleInterface <IFriendsService>(); ICapsService capsService = m_registry.RequestModuleInterface <ICapsService>(); IGridService gridService = m_registry.RequestModuleInterface <IGridService>(); if (asyncPoster != null && friendsService != null && capsService != null && gridService != null) { //Get all friends UserInfo info = (UserInfo)parameters; FriendInfo[] friends = friendsService.GetFriends(UUID.Parse(info.UserID)); List <UUID> OnlineFriends = new List <UUID>(); UUID us = UUID.Parse(info.UserID); foreach (FriendInfo friend in friends) { UUID FriendToInform = UUID.Parse(friend.Friend); //Now find their caps service so that we can find where they are root (and if they are logged in) IClientCapsService clientCaps = capsService.GetClientCapsService(FriendToInform); if (clientCaps != null) { OnlineFriends.Add(FriendToInform); //Find the root agent IRegionClientCapsService regionClientCaps = clientCaps.GetRootCapsService(); if (regionClientCaps != null) { //Post! asyncPoster.Post(regionClientCaps.RegionHandle, SyncMessageHelper.AgentStatusChange(us, FriendToInform, info.IsOnline)); } } } //If they are online, send all friends online statuses to them if (info.IsOnline) { GridRegion ourRegion = gridService.GetRegionByUUID(UUID.Zero, info.CurrentRegionID); if (ourRegion != null) { foreach (UUID onlineFriend in OnlineFriends) { asyncPoster.Post(ourRegion.RegionHandle, SyncMessageHelper.AgentStatusChange(onlineFriend, us, info.IsOnline)); } } } } } return(null); }
public async Task <IActionResult> GetFriends() { try { var res = await _service.GetFriends(); return(Ok(res)); } catch (Exception ex) { _logger.LogError(ex, "FriendsAPIController.GetFriends"); return(new StatusCodeResult(500)); } }
private async Task GetLeadAccountsFriends() { int counter = 0; foreach (var acc in leadAccounts) { var friends = await friendsService.GetFriends(acc); foreach (var friend in friends) { var user = GetUser(friend.Id, friend.Login); user.LeadFriendsCount++; } ChangeProgress(new Progress(operationCount, operationsCount, ++counter, leadAccounts.Count)); } }
private byte[] GetFriends(Dictionary <string, object> request) { UUID principalID = UUID.Zero; if (request.ContainsKey("PRINCIPALID")) { UUID.TryParse(request["PRINCIPALID"].ToString(), out principalID); } else { MainConsole.Instance.WarnFormat("[FRIENDS HANDLER]: no principalID in request to get friends"); } FriendInfo[] finfos = m_FriendsService.GetFriends(principalID); //MainConsole.Instance.DebugFormat("[FRIENDS HANDLER]: neighbours for region {0}: {1}", regionID, rinfos.Count); Dictionary <string, object> result = new Dictionary <string, object>(); if ((finfos == null) || ((finfos != null) && (finfos.Length == 0))) { result["result"] = "null"; } else { int i = 0; #if (!ISWIN) foreach (FriendInfo finfo in finfos) { Dictionary <string, object> rinfoDict = finfo.ToKeyValuePairs(); result["friend" + i] = rinfoDict; i++; } #else foreach (Dictionary <string, object> rinfoDict in finfos.Select(finfo => finfo.ToKeyValuePairs())) { result["friend" + i] = rinfoDict; i++; } #endif } string xmlString = WebUtils.BuildXmlResponse(result); //MainConsole.Instance.DebugFormat("[FRIENDS HANDLER]: resp string: {0}", xmlString); UTF8Encoding encoding = new UTF8Encoding(); return(encoding.GetBytes(xmlString)); }
public int GetFriendPerms(UUID userID, UUID friendID) { FriendInfo[] friendsInfo = m_FriendsService.GetFriends(userID); foreach (FriendInfo finfo in friendsInfo) { if (finfo.Friend.StartsWith(friendID.ToString())) { return(finfo.TheirFlags); } } return(-1); }
protected override async Task OnProcess(Func <AppState> getState, LoginAction action, IMultiDispatcher dispatcher, CancellationToken cancellationToken) { List <Friend> friends = new List <Friend>(); try { cancellationToken.ThrowIfCancellationRequested(); dispatcher.DispatchImmediate(new LoadingFriendListAction()); var state = getState(); friends = await _friendService.GetFriends(state.UserName, state.AuthToken).AsCancelable(cancellationToken).ConfigureAwait(false); } finally { dispatcher.Dispatch(new AddToFriendListAction(friends)); } }
public bool DeleteFriendship(FriendInfo friend, string secret) { FriendInfo[] finfos = m_FriendsService.GetFriends(friend.PrincipalID); foreach (FriendInfo finfo in finfos) { // We check the secret here. Or if the friendship request was initiated here, and was declined if (finfo.Friend.StartsWith(friend.Friend) && finfo.Friend.EndsWith(secret)) { m_log.DebugFormat("[HGFRIENDS SERVICE]: Delete friendship {0} {1}", friend.PrincipalID, friend.Friend); m_FriendsService.Delete(friend.PrincipalID, finfo.Friend); m_FriendsService.Delete(finfo.Friend, friend.PrincipalID.ToString()); return(true); } } return(false); }
OSDMap GetFriends(OSDMap map) { OSDMap resp = new OSDMap(); if (map.ContainsKey("UserID") == false) { resp ["Failed"] = OSD.FromString("User ID not specified."); return(resp); } IFriendsService friendService = m_registry.RequestModuleInterface <IFriendsService> (); if (friendService == null) { resp ["Failed"] = OSD.FromString("No friend service found."); return(resp); } List <FriendInfo> friendsList = friendService.GetFriends(map ["UserID"].AsUUID()); OSDArray friends = new OSDArray(friendsList.Count); foreach (FriendInfo friendInfo in friendsList) { UserAccount userAcct = m_registry.RequestModuleInterface <IUserAccountService> ().GetUserAccount(null, UUID.Parse(friendInfo.Friend)); OSDMap friend = new OSDMap(4); friend ["PrincipalID"] = friendInfo.Friend; friend ["Name"] = userAcct.Name; friend ["MyFlags"] = friendInfo.MyFlags; friend ["TheirFlags"] = friendInfo.TheirFlags; friends.Add(friend); } resp ["Friends"] = friends; friendsList.Clear(); return(resp); }
public Dictionary <string, object> Fill(WebInterface webInterface, string filename, OSHttpRequest httpRequest, OSHttpResponse httpResponse, Dictionary <string, object> requestParameters, ITranslator translator, out string response) { response = null; var vars = new Dictionary <string, object>(); UserAccount account = null; if (httpRequest.Query.ContainsKey("regionid")) { var regionService = webInterface.Registry.RequestModuleInterface <IGridService> (); var region = regionService.GetRegionByUUID(null, UUID.Parse(httpRequest.Query ["regionid"].ToString())); UUID userid = region.EstateOwner; account = webInterface.Registry.RequestModuleInterface <IUserAccountService>().GetUserAccount(null, userid); } if (account == null) { return(vars); } vars.Add("UserName", account.Name); // TODO: User Profile inworld shows this as the standard mm/dd/yyyy // Do we want this to be localised into the users Localisation or keep it as standard ? vars.Add("UserBorn", Util.ToDateTime(account.Created).ToShortDateString()); IUserProfileInfo profile = Framework.Utilities.DataManager.RequestPlugin <IProfileConnector>().GetUserProfile(account.PrincipalID); if (profile != null) { vars.Add("UserType", profile.MembershipGroup == "" ? "Resident" : profile.MembershipGroup); if (profile != null) { if (profile.Partner != UUID.Zero) { account = webInterface.Registry.RequestModuleInterface <IUserAccountService> ().GetUserAccount(null, profile.Partner); vars.Add("UserPartner", account.Name); } else { vars.Add("UserPartner", "No partner"); } vars.Add("UserAboutMe", profile.AboutText == "" ? "Nothing here" : profile.AboutText); string url = "../images/icons/no_avatar.jpg"; IWebHttpTextureService webhttpService = webInterface.Registry.RequestModuleInterface <IWebHttpTextureService> (); if (webhttpService != null && profile.Image != UUID.Zero) { url = webhttpService.GetTextureURL(profile.Image); } vars.Add("UserPictureURL", url); } } else { // no profile yet for this user vars.Add("UserType", "Unknown"); vars.Add("UserPartner", "Unknown"); vars.Add("UserPictureURL", "../images/icons/no_avatar.jpg"); } UserAccount ourAccount = Authenticator.GetAuthentication(httpRequest); if (ourAccount != null) { IFriendsService friendsService = webInterface.Registry.RequestModuleInterface <IFriendsService>(); var friends = friendsService.GetFriends(account.PrincipalID); UUID friendID = UUID.Zero; if (friends.Any(f => UUID.TryParse(f.Friend, out friendID) && friendID == ourAccount.PrincipalID)) { IAgentInfoService agentInfoService = webInterface.Registry.RequestModuleInterface <IAgentInfoService>(); IGridService gridService = webInterface.Registry.RequestModuleInterface <IGridService>(); UserInfo ourInfo = agentInfoService.GetUserInfo(account.PrincipalID.ToString()); if (ourInfo != null && ourInfo.IsOnline) { vars.Add("OnlineLocation", gridService.GetRegionByUUID(null, ourInfo.CurrentRegionID).RegionName); } vars.Add("UserIsOnline", ourInfo != null && ourInfo.IsOnline); vars.Add("IsOnline", ourInfo != null && ourInfo.IsOnline ? translator.GetTranslatedString("Online") : translator.GetTranslatedString("Offline")); } else { vars.Add("OnlineLocation", ""); vars.Add("UserIsOnline", false); vars.Add("IsOnline", translator.GetTranslatedString("Offline")); } } else { vars.Add("OnlineLocation", ""); vars.Add("UserIsOnline", false); vars.Add("IsOnline", translator.GetTranslatedString("Offline")); } vars.Add("UserProfileFor", translator.GetTranslatedString("UserProfileFor")); vars.Add("ResidentSince", translator.GetTranslatedString("ResidentSince")); vars.Add("AccountType", translator.GetTranslatedString("AccountType")); vars.Add("PartnersName", translator.GetTranslatedString("PartnersName")); vars.Add("AboutMe", translator.GetTranslatedString("AboutMe")); vars.Add("IsOnlineText", translator.GetTranslatedString("IsOnlineText")); vars.Add("OnlineLocationText", translator.GetTranslatedString("OnlineLocationText")); return(vars); }
public List <UUID> StatusNotification(List <string> friends, UUID foreignUserID, bool online) { if (m_FriendsService == null || m_PresenceService == null) { m_log.WarnFormat("[USER AGENT SERVICE]: Unable to perform status notifications because friends or presence services are missing"); return(new List <UUID>()); } List <UUID> localFriendsOnline = new List <UUID>(); m_log.DebugFormat("[USER AGENT SERVICE]: Status notification: foreign user {0} wants to notify {1} local friends", foreignUserID, friends.Count); // First, let's double check that the reported friends are, indeed, friends of that user // And let's check that the secret matches List <string> usersToBeNotified = new List <string>(); foreach (string uui in friends) { UUID localUserID; string secret = string.Empty, tmp = string.Empty; if (Util.ParseUniversalUserIdentifier(uui, out localUserID, out tmp, out tmp, out tmp, out secret)) { FriendInfo[] friendInfos = m_FriendsService.GetFriends(localUserID); foreach (FriendInfo finfo in friendInfos) { if (finfo.Friend.StartsWith(foreignUserID.ToString()) && finfo.Friend.EndsWith(secret)) { // great! usersToBeNotified.Add(localUserID.ToString()); } } } } // Now, let's send the notifications m_log.DebugFormat("[USER AGENT SERVICE]: Status notification: user has {0} local friends", usersToBeNotified.Count); // First, let's send notifications to local users who are online in the home grid PresenceInfo[] friendSessions = m_PresenceService.GetAgents(usersToBeNotified.ToArray()); if (friendSessions != null && friendSessions.Length > 0) { PresenceInfo friendSession = null; foreach (PresenceInfo pinfo in friendSessions) { if (pinfo.RegionID != UUID.Zero) // let's guard against traveling agents { friendSession = pinfo; break; } } if (friendSession != null) { ForwardStatusNotificationToSim(friendSession.RegionID, foreignUserID, friendSession.UserID, online); usersToBeNotified.Remove(friendSession.UserID.ToString()); UUID id; if (UUID.TryParse(friendSession.UserID, out id)) { localFriendsOnline.Add(id); } } } //// Lastly, let's notify the rest who may be online somewhere else //foreach (string user in usersToBeNotified) //{ // UUID id = new UUID(user); // if (m_Database.ContainsKey(id) && m_Database[id].GridExternalName != m_GridName) // { // string url = m_Database[id].GridExternalName; // // forward // m_log.WarnFormat("[USER AGENT SERVICE]: User {0} is visiting {1}. HG Status notifications still not implemented.", user, url); // } //} // and finally, let's send the online friends if (online) { return(localFriendsOnline); } else { return(new List <UUID>()); } }
public Dictionary <string, object> Fill(WebInterface webInterface, string filename, OSHttpRequest httpRequest, OSHttpResponse httpResponse, Dictionary <string, object> requestParameters, ITranslator translator, out string response) { response = null; var vars = new Dictionary <string, object> (); IWebHttpTextureService webhttpService = webInterface.Registry.RequestModuleInterface <IWebHttpTextureService> (); //string username = filename.Split('/').LastOrDefault(); UserAccount account = Authenticator.GetAuthentication(httpRequest); if (account == null) { return(vars); } /* Allow access to the syatem user info - needed for Estate owner Profiles of regions * * if ( Utilities.IsSystemUser(account.PrincipalID)) * return vars; */ vars.Add("UserName", account.Name); // TODO: User Profile inworld shows this as the standard mm/dd/yyyy // Do we want this to be localised into the users Localisation or keep it as standard ? // // vars.Add("UserBorn", Culture.LocaleDate(Util.ToDateTime(account.Created))); vars.Add("UserBorn", Util.ToDateTime(account.Created).ToShortDateString()); IUserProfileInfo profile = Framework.Utilities.DataManager.RequestPlugin <IProfileConnector> (). GetUserProfile(account.PrincipalID); string picUrl = "../images/icons/no_avatar.jpg"; if (profile != null) { vars.Add("UserType", profile.MembershipGroup == "" ? "Resident" : profile.MembershipGroup); if (profile.Partner != UUID.Zero) { account = webInterface.Registry.RequestModuleInterface <IUserAccountService> (). GetUserAccount(null, profile.Partner); vars.Add("UserPartner", account.Name); } else { vars.Add("UserPartner", "No partner"); } vars.Add("UserAboutMe", profile.AboutText == "" ? "Nothing here" : profile.AboutText); if (webhttpService != null && profile.Image != UUID.Zero) { picUrl = webhttpService.GetTextureURL(profile.Image); } } else { // no profile yet vars.Add("UserType", "Guest"); vars.Add("UserPartner", "Not specified yet"); vars.Add("UserAboutMe", "Nothing here yet"); } vars.Add("UserPictureURL", picUrl); // TODO: This is only showing online status if you are logged in ?? UserAccount ourAccount = Authenticator.GetAuthentication(httpRequest); if (ourAccount != null) { IFriendsService friendsService = webInterface.Registry.RequestModuleInterface <IFriendsService> (); var friends = friendsService.GetFriends(account.PrincipalID); UUID friendID = UUID.Zero; if (friends.Any(f => UUID.TryParse(f.Friend, out friendID) && friendID == ourAccount.PrincipalID)) { IAgentInfoService agentInfoService = webInterface.Registry.RequestModuleInterface <IAgentInfoService> (); IGridService gridService = webInterface.Registry.RequestModuleInterface <IGridService> (); UserInfo ourInfo = agentInfoService.GetUserInfo(account.PrincipalID.ToString()); if (ourInfo != null && ourInfo.IsOnline) { vars.Add("OnlineLocation", gridService.GetRegionByUUID(null, ourInfo.CurrentRegionID).RegionName); } vars.Add("UserIsOnline", ourInfo != null && ourInfo.IsOnline); vars.Add("IsOnline", ourInfo != null && ourInfo.IsOnline ? translator.GetTranslatedString("Online") : translator.GetTranslatedString("Offline")); } else { vars.Add("OnlineLocation", ""); vars.Add("UserIsOnline", false); vars.Add("IsOnline", translator.GetTranslatedString("Offline")); } } else { vars.Add("OnlineLocation", ""); vars.Add("UserIsOnline", false); vars.Add("IsOnline", translator.GetTranslatedString("Offline")); } vars.Add("UsersGroupsText", translator.GetTranslatedString("UsersGroupsText")); IGroupsServiceConnector groupsConnector = Framework.Utilities.DataManager.RequestPlugin <IGroupsServiceConnector> (); List <Dictionary <string, object> > groups = new List <Dictionary <string, object> > (); if (groupsConnector != null) { var groupsIn = groupsConnector.GetAgentGroupMemberships(account.PrincipalID, account.PrincipalID); if (groupsIn != null) { foreach (var grp in groupsIn) { var grpData = groupsConnector.GetGroupProfile(account.PrincipalID, grp.GroupID); string url = "../images/icons/no_groups.jpg"; if (grpData != null) { if (webhttpService != null && grpData.InsigniaID != UUID.Zero) { url = webhttpService.GetTextureURL(grpData.InsigniaID); } groups.Add(new Dictionary <string, object> { { "GroupPictureURL", url }, { "GroupName", grp.GroupName } }); } } } if (groups.Count == 0) { groups.Add(new Dictionary <string, object> { { "GroupPictureURL", "../images/icons/no_groups.jpg" }, { "GroupName", "None yet" } }); } } vars.Add("GroupNameText", translator.GetTranslatedString("GroupNameText")); vars.Add("Groups", groups); vars.Add("GroupsJoined", groups.Count); // Menus vars.Add("MenuProfileTitle", translator.GetTranslatedString("MenuProfileTitle")); vars.Add("TooltipsMenuProfile", translator.GetTranslatedString("TooltipsMenuProfile")); vars.Add("MenuGroupTitle", translator.GetTranslatedString("MenuGroupTitle")); vars.Add("TooltipsMenuGroups", translator.GetTranslatedString("TooltipsMenuGroups")); vars.Add("MenuPicksTitle", translator.GetTranslatedString("MenuPicksTitle")); vars.Add("TooltipsMenuPicks", translator.GetTranslatedString("TooltipsMenuPicks")); vars.Add("MenuRegionsTitle", translator.GetTranslatedString("MenuRegionsTitle")); vars.Add("TooltipsMenuRegions", translator.GetTranslatedString("TooltipsMenuRegions")); // User data vars.Add("UserProfileFor", translator.GetTranslatedString("UserProfileFor")); vars.Add("ResidentSince", translator.GetTranslatedString("ResidentSince")); vars.Add("AccountType", translator.GetTranslatedString("AccountType")); vars.Add("PartnersName", translator.GetTranslatedString("PartnersName")); vars.Add("AboutMe", translator.GetTranslatedString("AboutMe")); vars.Add("IsOnlineText", translator.GetTranslatedString("IsOnlineText")); vars.Add("OnlineLocationText", translator.GetTranslatedString("OnlineLocationText")); // Style Switcher vars.Add("styles1", translator.GetTranslatedString("styles1")); vars.Add("styles2", translator.GetTranslatedString("styles2")); vars.Add("styles3", translator.GetTranslatedString("styles3")); vars.Add("styles4", translator.GetTranslatedString("styles4")); vars.Add("styles5", translator.GetTranslatedString("styles5")); vars.Add("StyleSwitcherStylesText", translator.GetTranslatedString("StyleSwitcherStylesText")); vars.Add("StyleSwitcherLanguagesText", translator.GetTranslatedString("StyleSwitcherLanguagesText")); vars.Add("StyleSwitcherChoiceText", translator.GetTranslatedString("StyleSwitcherChoiceText")); // Language Switcher vars.Add("en", translator.GetTranslatedString("en")); vars.Add("fr", translator.GetTranslatedString("fr")); vars.Add("de", translator.GetTranslatedString("de")); vars.Add("it", translator.GetTranslatedString("it")); vars.Add("es", translator.GetTranslatedString("es")); vars.Add("nl", translator.GetTranslatedString("nl")); var settings = webInterface.GetWebUISettings(); vars.Add("ShowLanguageTranslatorBar", !settings.HideLanguageTranslatorBar); vars.Add("ShowStyleBar", !settings.HideStyleBar); return(vars); }
public LoginResponse Login(string firstName, string lastName, string passwd, string startLocation, UUID scopeID, string clientVersion, string channel, string mac, string id0, IPEndPoint clientIP) { bool success = false; UUID session = UUID.Random(); m_log.InfoFormat("[LLOGIN SERVICE]: Login request for {0} {1} from {2} with user agent {3} starting in {4}", firstName, lastName, clientIP.Address.ToString(), clientVersion, startLocation); try { // // Get the account and check that it exists // UserAccount account = m_UserAccountService.GetUserAccount(scopeID, firstName, lastName); if (account == null) { m_log.InfoFormat("[LLOGIN SERVICE]: Login failed, reason: user not found"); return(LLFailedLoginResponse.UserProblem); } if (account.UserLevel < m_MinLoginLevel) { m_log.InfoFormat("[LLOGIN SERVICE]: Login failed, reason: login is blocked for user level {0}", account.UserLevel); return(LLFailedLoginResponse.LoginBlockedProblem); } // If a scope id is requested, check that the account is in // that scope, or unscoped. // if (scopeID != UUID.Zero) { if (account.ScopeID != scopeID && account.ScopeID != UUID.Zero) { m_log.InfoFormat("[LLOGIN SERVICE]: Login failed, reason: user not found"); return(LLFailedLoginResponse.UserProblem); } } else { scopeID = account.ScopeID; } // // Authenticate this user // if (!passwd.StartsWith("$1$")) { passwd = "$1$" + Util.Md5Hash(passwd); } passwd = passwd.Remove(0, 3); //remove $1$ string token = m_AuthenticationService.Authenticate(account.PrincipalID, passwd, 30); UUID secureSession = UUID.Zero; if ((token == string.Empty) || (token != string.Empty && !UUID.TryParse(token, out secureSession))) { m_log.InfoFormat("[LLOGIN SERVICE]: Login failed, reason: authentication failed"); return(LLFailedLoginResponse.UserProblem); } // // Get the user's inventory // if (m_RequireInventory && m_InventoryService == null) { m_log.WarnFormat("[LLOGIN SERVICE]: Login failed, reason: inventory service not set up"); return(LLFailedLoginResponse.InventoryProblem); } List <InventoryFolderBase> inventorySkel = m_InventoryService.GetInventorySkeleton(account.PrincipalID); if (m_RequireInventory && ((inventorySkel == null) || (inventorySkel != null && inventorySkel.Count == 0))) { m_log.InfoFormat("[LLOGIN SERVICE]: Login failed, reason: unable to retrieve user inventory"); return(LLFailedLoginResponse.InventoryProblem); } // Get active gestures List <InventoryItemBase> gestures = m_InventoryService.GetActiveGestures(account.PrincipalID); m_log.DebugFormat("[LLOGIN SERVICE]: {0} active gestures", gestures.Count); // // Login the presence // if (m_PresenceService != null) { success = m_PresenceService.LoginAgent(account.PrincipalID.ToString(), session, secureSession); if (!success) { m_log.InfoFormat("[LLOGIN SERVICE]: Login failed, reason: could not login presence"); return(LLFailedLoginResponse.GridProblem); } } // // Change Online status and get the home region // GridRegion home = null; GridUserInfo guinfo = m_GridUserService.LoggedIn(account.PrincipalID.ToString()); if (guinfo != null && (guinfo.HomeRegionID != UUID.Zero) && m_GridService != null) { home = m_GridService.GetRegionByUUID(scopeID, guinfo.HomeRegionID); } if (guinfo == null) { // something went wrong, make something up, so that we don't have to test this anywhere else guinfo = new GridUserInfo(); guinfo.LastPosition = guinfo.HomePosition = new Vector3(128, 128, 30); } // // Find the destination region/grid // string where = string.Empty; Vector3 position = Vector3.Zero; Vector3 lookAt = Vector3.Zero; GridRegion gatekeeper = null; GridRegion destination = FindDestination(account, scopeID, guinfo, session, startLocation, home, out gatekeeper, out where, out position, out lookAt); if (destination == null) { m_PresenceService.LogoutAgent(session); m_log.InfoFormat("[LLOGIN SERVICE]: Login failed, reason: destination not found"); return(LLFailedLoginResponse.GridProblem); } // // Get the avatar // AvatarAppearance avatar = null; if (m_AvatarService != null) { avatar = m_AvatarService.GetAppearance(account.PrincipalID); } // // Instantiate/get the simulation interface and launch an agent at the destination // string reason = string.Empty; GridRegion dest; AgentCircuitData aCircuit = LaunchAgentAtGrid(gatekeeper, destination, account, avatar, session, secureSession, position, where, clientVersion, channel, mac, id0, clientIP, out where, out reason, out dest); destination = dest; if (aCircuit == null) { m_PresenceService.LogoutAgent(session); m_log.InfoFormat("[LLOGIN SERVICE]: Login failed, reason: {0}", reason); return(new LLFailedLoginResponse("key", reason, "false")); } // Get Friends list FriendInfo[] friendsList = new FriendInfo[0]; if (m_FriendsService != null) { friendsList = m_FriendsService.GetFriends(account.PrincipalID); m_log.DebugFormat("[LLOGIN SERVICE]: Retrieved {0} friends", friendsList.Length); } // // Finally, fill out the response and return it // LLLoginResponse response = new LLLoginResponse(account, aCircuit, guinfo, destination, inventorySkel, friendsList, m_LibraryService, where, startLocation, position, lookAt, gestures, m_WelcomeMessage, home, clientIP, m_MapTileURL, m_SearchURL); m_log.DebugFormat("[LLOGIN SERVICE]: All clear. Sending login response to client."); return(response); } catch (Exception e) { m_log.WarnFormat("[LLOGIN SERVICE]: Exception processing login for {0} {1}: {2} {3}", firstName, lastName, e.ToString(), e.StackTrace); if (m_PresenceService != null) { m_PresenceService.LogoutAgent(session); } return(LLFailedLoginResponse.InternalError); } }
public Dictionary <string, object> Fill(WebInterface webInterface, string filename, OSHttpRequest httpRequest, OSHttpResponse httpResponse, Dictionary <string, object> requestParameters, ITranslator translator, out string response) { response = null; var vars = new Dictionary <string, object>(); string username = filename.Split('/').LastOrDefault(); UserAccount account = null; if (httpRequest.Query.ContainsKey("userid")) { string userid = httpRequest.Query["userid"].ToString(); account = webInterface.Registry.RequestModuleInterface <IUserAccountService>(). GetUserAccount(null, UUID.Parse(userid)); } else if (httpRequest.Query.ContainsKey("name")) { string name = httpRequest.Query.ContainsKey("name") ? httpRequest.Query["name"].ToString() : username; name = name.Replace('.', ' '); name = name.Replace("%20", " "); account = webInterface.Registry.RequestModuleInterface <IUserAccountService>(). GetUserAccount(null, name); } else { username = username.Replace("%20", " "); webInterface.Redirect(httpResponse, "/webprofile/?name=" + username); return(vars); } if (account == null) { return(vars); } vars.Add("UserName", account.Name); // TODO: User Profile inworld shows this as the standard mm/dd/yyyy // Do we want this to be localised into the users Localisation or keep it as standard ? vars.Add("UserBorn", Util.ToDateTime(account.Created).ToShortDateString()); IUserProfileInfo profile = Framework.Utilities.DataManager.RequestPlugin <IProfileConnector>(). GetUserProfile(account.PrincipalID); string picUrl = "../images/icons/no_avatar.jpg"; if (profile != null) { vars.Add("UserType", profile.MembershipGroup == "" ? "Resident" : profile.MembershipGroup); if (profile.Partner != UUID.Zero) { account = webInterface.Registry.RequestModuleInterface <IUserAccountService> (). GetUserAccount(null, profile.Partner); vars.Add("UserPartner", account.Name); } else { vars.Add("UserPartner", "No partner"); } vars.Add("UserAboutMe", profile.AboutText == "" ? "Nothing here" : profile.AboutText); IWebHttpTextureService webhttpService = webInterface.Registry.RequestModuleInterface <IWebHttpTextureService> (); if (webhttpService != null && profile.Image != UUID.Zero) { picUrl = webhttpService.GetTextureURL(profile.Image); } } else { // no profile yet vars.Add("UserType", "Guest"); vars.Add("UserPartner", "Not specified yet"); vars.Add("UserAboutMe", "Nothing here yet"); } vars.Add("UserPictureURL", picUrl); // TODO: This is only showing online status if you are logged in ?? UserAccount ourAccount = Authenticator.GetAuthentication(httpRequest); if (ourAccount != null) { IFriendsService friendsService = webInterface.Registry.RequestModuleInterface <IFriendsService>(); var friends = friendsService.GetFriends(account.PrincipalID); UUID friendID = UUID.Zero; if (friends.Any(f => UUID.TryParse(f.Friend, out friendID) && friendID == ourAccount.PrincipalID)) { IAgentInfoService agentInfoService = webInterface.Registry.RequestModuleInterface <IAgentInfoService>(); IGridService gridService = webInterface.Registry.RequestModuleInterface <IGridService>(); UserInfo ourInfo = agentInfoService.GetUserInfo(account.PrincipalID.ToString()); if (ourInfo != null && ourInfo.IsOnline) { vars.Add("OnlineLocation", gridService.GetRegionByUUID(null, ourInfo.CurrentRegionID).RegionName); } vars.Add("UserIsOnline", ourInfo != null && ourInfo.IsOnline); vars.Add("IsOnline", ourInfo != null && ourInfo.IsOnline ? translator.GetTranslatedString("Online") : translator.GetTranslatedString("Offline")); } else { vars.Add("OnlineLocation", ""); vars.Add("UserIsOnline", false); vars.Add("IsOnline", translator.GetTranslatedString("Offline")); } } else { vars.Add("OnlineLocation", ""); vars.Add("UserIsOnline", false); vars.Add("IsOnline", translator.GetTranslatedString("Offline")); } // Menus vars.Add("MenuProfileTitle", translator.GetTranslatedString("MenuProfileTitle")); vars.Add("TooltipsMenuProfile", translator.GetTranslatedString("TooltipsMenuProfile")); vars.Add("MenuGroupTitle", translator.GetTranslatedString("MenuGroupTitle")); vars.Add("TooltipsMenuGroups", translator.GetTranslatedString("TooltipsMenuGroups")); vars.Add("MenuPicksTitle", translator.GetTranslatedString("MenuPicksTitle")); vars.Add("TooltipsMenuPicks", translator.GetTranslatedString("TooltipsMenuPicks")); vars.Add("MenuRegionsTitle", translator.GetTranslatedString("MenuRegionsTitle")); vars.Add("TooltipsMenuRegions", translator.GetTranslatedString("TooltipsMenuRegions")); // User data vars.Add("UserProfileFor", translator.GetTranslatedString("UserProfileFor")); vars.Add("ResidentSince", translator.GetTranslatedString("ResidentSince")); vars.Add("AccountType", translator.GetTranslatedString("AccountType")); vars.Add("PartnersName", translator.GetTranslatedString("PartnersName")); vars.Add("AboutMe", translator.GetTranslatedString("AboutMe")); vars.Add("IsOnlineText", translator.GetTranslatedString("IsOnlineText")); vars.Add("OnlineLocationText", translator.GetTranslatedString("OnlineLocationText")); // Style Switcher vars.Add("styles1", translator.GetTranslatedString("styles1")); vars.Add("styles2", translator.GetTranslatedString("styles2")); vars.Add("styles3", translator.GetTranslatedString("styles3")); vars.Add("styles4", translator.GetTranslatedString("styles4")); vars.Add("styles5", translator.GetTranslatedString("styles5")); vars.Add("StyleSwitcherStylesText", translator.GetTranslatedString("StyleSwitcherStylesText")); vars.Add("StyleSwitcherLanguagesText", translator.GetTranslatedString("StyleSwitcherLanguagesText")); vars.Add("StyleSwitcherChoiceText", translator.GetTranslatedString("StyleSwitcherChoiceText")); // Language Switcher vars.Add("en", translator.GetTranslatedString("en")); vars.Add("fr", translator.GetTranslatedString("fr")); vars.Add("de", translator.GetTranslatedString("de")); vars.Add("it", translator.GetTranslatedString("it")); vars.Add("es", translator.GetTranslatedString("es")); vars.Add("nl", translator.GetTranslatedString("nl")); var settings = webInterface.GetWebUISettings(); vars.Add("ShowLanguageTranslatorBar", !settings.HideLanguageTranslatorBar); vars.Add("ShowStyleBar", !settings.HideStyleBar); return(vars); }
public Dictionary <string, object> Fill(WebInterface webInterface, string filename, OSHttpRequest httpRequest, OSHttpResponse httpResponse, Dictionary <string, object> requestParameters, ITranslator translator, out string response) { response = null; var vars = new Dictionary <string, object>(); var usersList = new List <Dictionary <string, object> >(); var agentInfo = Framework.Utilities.DataManager.RequestPlugin <IAgentInfoConnector> (); uint amountPerQuery = 10; int start = httpRequest.Query.ContainsKey("Start") ? int.Parse(httpRequest.Query["Start"].ToString()) : 0; //uint count = agentInfo.RecentlyOnline(15*60, true); uint count = agentInfo.OnlineUsers(0); int maxPages = (int)(count / amountPerQuery) - 1; if (start == -1) { start = (int)(maxPages < 0 ? 0 : maxPages); } vars.Add("CurrentPage", start); vars.Add("NextOne", start + 1 > maxPages ? start : start + 1); vars.Add("BackOne", start - 1 < 0 ? 0 : start - 1); var IsAdmin = Authenticator.CheckAdminAuthentication(httpRequest); //var activeUsers = agentInfo.RecentlyOnline(15*60, true, new Dictionary<string, bool>(), (uint) start, amountPerQuery); var activeUsers = agentInfo.CurrentlyOnline(0, new Dictionary <string, bool>(), (uint)start, amountPerQuery); if (activeUsers.Count > 0) { var activeUsersList = new List <UUID>(); if (IsAdmin) // display all online users { foreach (var user in activeUsers) { activeUsersList.Add((UUID)user.UserID); } } else // only show the users online friends { UserAccount ourAccount = Authenticator.GetAuthentication(httpRequest); if (ourAccount != null) { IFriendsService friendsService = webInterface.Registry.RequestModuleInterface <IFriendsService> (); var friends = friendsService.GetFriends(ourAccount.PrincipalID); foreach (var friend in friends) { UUID friendID = UUID.Zero; UUID.TryParse(friend.Friend, out friendID); if (friendID != UUID.Zero) { // if ( (friendID != UUID.Zero) && (friendID == ourAccount.PrincipalID)) activeUsersList.Add(friendID); } } } } if (activeUsersList.Count > 0) { IUserAccountService accountService = webInterface.Registry.RequestModuleInterface <IUserAccountService> (); IGridService gridService = webInterface.Registry.RequestModuleInterface <IGridService> (); foreach (var user in activeUsers) { if (Utilities.IsSystemUser((UUID)user.UserID)) { continue; } if (!activeUsersList.Contains((UUID)user.UserID)) { continue; } var region = gridService.GetRegionByUUID(null, user.CurrentRegionID); if (region != null) { var account = accountService.GetUserAccount(region.AllScopeIDs, UUID.Parse(user.UserID)); if (account != null) { usersList.Add(new Dictionary <string, object> { { "UserName", account.Name }, { "UserRegion", region.RegionName }, { "UserLocation", user.CurrentPosition }, { "UserID", user.UserID }, { "UserRegionID", region.RegionID } }); } } } } } if (usersList.Count == 0) { usersList.Add( new Dictionary <string, object> { { "UserName", "" }, { "UserRegion", "" }, { "UserLocation", "No users are currently logged in" }, { "UserID", "" }, { "UserRegionID", "" } }); } if (requestParameters.ContainsKey("Order")) { if (requestParameters["Order"].ToString() == "RegionName") { usersList.Sort((a, b) => a["UserRegion"].ToString().CompareTo(b["UserRegion"].ToString())); } if (requestParameters["Order"].ToString() == "UserName") { usersList.Sort((a, b) => a["UserName"].ToString().CompareTo(b["UserName"].ToString())); } } vars.Add("UsersOnlineList", usersList); vars.Add("OnlineUsersText", translator.GetTranslatedString("OnlineUsersText")); vars.Add("UserNameText", translator.GetTranslatedString("UserNameText")); vars.Add("OnlineLocationText", translator.GetTranslatedString("OnlineLocationText")); vars.Add("RegionNameText", translator.GetTranslatedString("RegionNameText")); vars.Add("MoreInfoText", translator.GetTranslatedString("MoreInfoText")); vars.Add("FirstText", translator.GetTranslatedString("FirstText")); vars.Add("BackText", translator.GetTranslatedString("BackText")); vars.Add("NextText", translator.GetTranslatedString("NextText")); vars.Add("LastText", translator.GetTranslatedString("LastText")); vars.Add("CurrentPageText", translator.GetTranslatedString("CurrentPageText")); return(vars); }
public Dictionary <string, object> Fill(WebInterface webInterface, string filename, OSHttpRequest httpRequest, OSHttpResponse httpResponse, Dictionary <string, object> requestParameters, ITranslator translator, out string response) { response = null; var vars = new Dictionary <string, object>(); string username = filename.Split('/').LastOrDefault(); UserAccount account = null; if (httpRequest.Query.ContainsKey("userid")) { string userid = httpRequest.Query["userid"].ToString(); account = webInterface.Registry.RequestModuleInterface <IUserAccountService>(). GetUserAccount(null, UUID.Parse(userid)); } else if (httpRequest.Query.ContainsKey("name")) { string name = httpRequest.Query.ContainsKey("name") ? httpRequest.Query["name"].ToString() : username; name = name.Replace('.', ' '); name = name.Replace("%20", " "); account = webInterface.Registry.RequestModuleInterface <IUserAccountService>(). GetUserAccount(null, name); } else { username = username.Replace("%20", " "); webInterface.Redirect(httpResponse, "/webprofile/?name=" + username); return(vars); } if (account == null) { return(vars); } vars.Add("UserName", account.Name); vars.Add("UserBorn", Util.ToDateTime(account.Created).ToShortDateString()); vars.Add("UserType", account.UserTitle == "" ? "Resident" : account.UserTitle); IUserProfileInfo profile = Aurora.DataManager.DataManager.RequestPlugin <IProfileConnector>(). GetUserProfile(account.PrincipalID); if (profile != null) { if (profile.Partner != UUID.Zero) { account = webInterface.Registry.RequestModuleInterface <IUserAccountService>(). GetUserAccount(null, profile.Partner); vars.Add("UserPartner", account.Name); } else { vars.Add("UserPartner", "No partner"); } vars.Add("UserAboutMe", profile.AboutText == "" ? "Nothing here" : profile.AboutText); string url = "../images/icons/no_picture.jpg"; IWebHttpTextureService webhttpService = webInterface.Registry.RequestModuleInterface <IWebHttpTextureService>(); if (webhttpService != null && profile.Image != UUID.Zero) { url = webhttpService.GetTextureURL(profile.Image); } vars.Add("UserPictureURL", url); } UserAccount ourAccount = Authenticator.GetAuthentication(httpRequest); if (ourAccount != null) { IFriendsService friendsService = webInterface.Registry.RequestModuleInterface <IFriendsService>(); var friends = friendsService.GetFriends(account.PrincipalID); UUID friendID = UUID.Zero; if (friends.Any(f => UUID.TryParse(f.Friend, out friendID) && friendID == ourAccount.PrincipalID)) { ICapsService capsService = webInterface.Registry.RequestModuleInterface <ICapsService>(); IClientCapsService clientCaps = capsService == null ? null : capsService.GetClientCapsService(account.PrincipalID); if (clientCaps != null) { vars.Add("OnlineLocation", clientCaps.GetRootCapsService().Region.RegionName); } vars.Add("UserIsOnline", clientCaps != null); vars.Add("IsOnline", clientCaps != null ? translator.GetTranslatedString("Online") : translator.GetTranslatedString("Offline")); } else { vars.Add("OnlineLocation", ""); vars.Add("UserIsOnline", false); vars.Add("IsOnline", translator.GetTranslatedString("Offline")); } } else { vars.Add("OnlineLocation", ""); vars.Add("UserIsOnline", false); vars.Add("IsOnline", translator.GetTranslatedString("Offline")); } // Menu Profile vars.Add("MenuProfileTitle", translator.GetTranslatedString("MenuProfileTitle")); vars.Add("MenuGroupTitle", translator.GetTranslatedString("MenuGroupTitle")); vars.Add("MenuPicksTitle", translator.GetTranslatedString("MenuPicksTitle")); vars.Add("UserProfileFor", translator.GetTranslatedString("UserProfileFor")); vars.Add("ResidentSince", translator.GetTranslatedString("ResidentSince")); vars.Add("AccountType", translator.GetTranslatedString("AccountType")); vars.Add("PartnersName", translator.GetTranslatedString("PartnersName")); vars.Add("AboutMe", translator.GetTranslatedString("AboutMe")); vars.Add("IsOnlineText", translator.GetTranslatedString("IsOnlineText")); vars.Add("OnlineLocationText", translator.GetTranslatedString("OnlineLocationText")); // Style Switcher vars.Add("styles1", translator.GetTranslatedString("styles1")); vars.Add("styles2", translator.GetTranslatedString("styles2")); vars.Add("styles3", translator.GetTranslatedString("styles3")); vars.Add("styles4", translator.GetTranslatedString("styles4")); vars.Add("styles5", translator.GetTranslatedString("styles5")); vars.Add("StyleSwitcherStylesText", translator.GetTranslatedString("StyleSwitcherStylesText")); vars.Add("StyleSwitcherLanguagesText", translator.GetTranslatedString("StyleSwitcherLanguagesText")); vars.Add("StyleSwitcherChoiceText", translator.GetTranslatedString("StyleSwitcherChoiceText")); // Language Switcher vars.Add("en", translator.GetTranslatedString("en")); vars.Add("fr", translator.GetTranslatedString("fr")); vars.Add("de", translator.GetTranslatedString("de")); vars.Add("it", translator.GetTranslatedString("it")); vars.Add("es", translator.GetTranslatedString("es")); IGenericsConnector generics = Aurora.DataManager.DataManager.RequestPlugin <IGenericsConnector>(); var settings = generics.GetGeneric <GridSettings>(UUID.Zero, "WebSettings", "Settings"); vars.Add("ShowLanguageTranslatorBar", !settings.HideLanguageTranslatorBar); vars.Add("ShowStyleBar", !settings.HideStyleBar); return(vars); }
public List <UUID> StatusNotification(List <string> friends, UUID foreignUserID, bool online) { if (m_FriendsService == null || m_PresenceService == null) { MainConsole.Instance.WarnFormat("[USER AGENT SERVICE]: Unable to perform status notifications because friends or presence services are missing"); return(new List <UUID> ()); } List <UUID> localFriendsOnline = new List <UUID> (); MainConsole.Instance.DebugFormat("[USER AGENT SERVICE]: Status notification: foreign user {0} wants to notify {1} local friends", foreignUserID, friends.Count); // First, let's double check that the reported friends are, indeed, friends of that user // And let's check that the secret matches List <string> usersToBeNotified = new List <string> (); foreach (string uui in friends) { UUID localUserID; string secret = string.Empty, tmp = string.Empty; if (HGUtil.ParseUniversalUserIdentifier(uui, out localUserID, out tmp, out tmp, out tmp, out secret)) { List <FriendInfo> friendInfos = m_FriendsService.GetFriends(localUserID); foreach (FriendInfo finfo in friendInfos) { if (finfo.Friend.StartsWith(foreignUserID.ToString()) && finfo.Friend.EndsWith(secret)) { // great! usersToBeNotified.Add(localUserID.ToString()); } } } } // Now, let's send the notifications MainConsole.Instance.DebugFormat("[USER AGENT SERVICE]: Status notification: user has {0} local friends", usersToBeNotified.Count); // First, let's send notifications to local users who are online in the home grid //Send "" because if we pass the UUID, it will get the locations for all friends, even on the grid they came from List <UserInfo> friendSessions = m_PresenceService.GetUserInfos(usersToBeNotified); foreach (UserInfo friend in friendSessions) { if (friend.IsOnline) { GridRegion ourRegion = m_GridService.GetRegionByUUID(null, friend.CurrentRegionID); if (ourRegion != null) { m_asyncPostService.Post(ourRegion.RegionHandle, SyncMessageHelper.AgentStatusChange(foreignUserID, UUID.Parse(friend.UserID), true)); } } } // Lastly, let's notify the rest who may be online somewhere else foreach (string user in usersToBeNotified) { UUID id = new UUID(user); if (m_TravelingAgents.ContainsKey(id) && m_TravelingAgents[id].GridExternalName != m_GridName) { string url = m_TravelingAgents[id].GridExternalName; // forward MainConsole.Instance.WarnFormat("[USER AGENT SERVICE]: User {0} is visiting {1}. HG Status notifications still not implemented.", user, url); } } // and finally, let's send the online friends if (online) { return(localFriendsOnline); } else { return(new List <UUID> ()); } }
public Dictionary <string, object> Fill(WebInterface webInterface, string filename, OSHttpRequest httpRequest, OSHttpResponse httpResponse, Dictionary <string, object> requestParameters, ITranslator translator, out string response) { response = null; var vars = new Dictionary <string, object>(); var usersList = new List <Dictionary <string, object> >(); uint amountPerQuery = 10; string noDetails = translator.GetTranslatedString("NoDetailsText"); if (requestParameters.ContainsKey("Submit")) { IUserAccountService accountService = webInterface.Registry.RequestModuleInterface <IUserAccountService>(); var IsAdmin = Authenticator.CheckAdminAuthentication(httpRequest); string userName = requestParameters["username"].ToString(); // allow '*' wildcards var username = userName.Replace('*', '%'); int start = httpRequest.Query.ContainsKey("Start") ? int.Parse(httpRequest.Query ["Start"].ToString()) : 0; uint count = accountService.NumberOfUserAccounts(null, username); int maxPages = (int)(count / amountPerQuery) - 1; if (start == -1) { start = (int)(maxPages < 0 ? 0 : maxPages); } vars.Add("CurrentPage", start); vars.Add("NextOne", start + 1 > maxPages ? start : start + 1); vars.Add("BackOne", start - 1 < 0 ? 0 : start - 1); // check for admin wildcard search if ((username.Trim().Length > 0) || IsAdmin) { var users = accountService.GetUserAccounts(null, username, (uint)start, amountPerQuery); var searchUsersList = new List <UUID>(); if (IsAdmin) // display all users { foreach (var user in users) { searchUsersList.Add(user.PrincipalID); } } else // only show the users friends { UserAccount ourAccount = Authenticator.GetAuthentication(httpRequest); if (ourAccount != null) { IFriendsService friendsService = webInterface.Registry.RequestModuleInterface <IFriendsService> (); var friends = friendsService.GetFriends(ourAccount.PrincipalID); foreach (var friend in friends) { UUID friendID = UUID.Zero; UUID.TryParse(friend.Friend, out friendID); if (friendID != UUID.Zero) { searchUsersList.Add(friendID); } } } } if (searchUsersList.Count > 0) { noDetails = ""; foreach (var user in users) { if (!searchUsersList.Contains(user.PrincipalID)) { continue; } if (Utilities.IsSystemUser(user.PrincipalID)) { continue; } usersList.Add(new Dictionary <string, object> { { "UserName", user.Name }, { "UserID", user.PrincipalID }, { "CanEdit", IsAdmin } }); } } if (usersList.Count == 0) { usersList.Add(new Dictionary <string, object> { { "UserName", translator.GetTranslatedString("NoDetailsText") }, { "UserID", "" }, { "CanEdit", false } }); } } } else { vars.Add("CurrentPage", 0); vars.Add("NextOne", 0); vars.Add("BackOne", 0); } vars.Add("NoDetailsText", noDetails); vars.Add("UsersList", usersList); vars.Add("UserSearchText", translator.GetTranslatedString("UserSearchText")); vars.Add("SearchForUserText", translator.GetTranslatedString("SearchForUserText")); vars.Add("UserNameText", translator.GetTranslatedString("UserNameText")); vars.Add("Search", translator.GetTranslatedString("Search")); vars.Add("SearchResultForUserText", translator.GetTranslatedString("SearchResultForUserText")); vars.Add("EditText", translator.GetTranslatedString("EditText")); vars.Add("EditUserAccountText", translator.GetTranslatedString("EditUserAccountText")); vars.Add("FirstText", translator.GetTranslatedString("FirstText")); vars.Add("BackText", translator.GetTranslatedString("BackText")); vars.Add("NextText", translator.GetTranslatedString("NextText")); vars.Add("LastText", translator.GetTranslatedString("LastText")); vars.Add("CurrentPageText", translator.GetTranslatedString("CurrentPageText")); return(vars); }
public Dictionary <string, object> Fill(WebInterface webInterface, string filename, OSHttpRequest httpRequest, OSHttpResponse httpResponse, Dictionary <string, object> requestParameters, ITranslator translator, out string response) { response = null; var vars = new Dictionary <string, object> (); var usersList = new List <Dictionary <string, object> > (); var IsAdmin = Authenticator.CheckAdminAuthentication(httpRequest); string noDetails = translator.GetTranslatedString("NoDetailsText"); if (requestParameters.ContainsKey("Submit")) { IUserAccountService accountService = webInterface.Registry.RequestModuleInterface <IUserAccountService> (); string userName = requestParameters ["username"].ToString(); // allow '*' wildcards var username = userName.Replace('*', '%'); // check for admin wildcard search if ((username.Trim().Length > 0) || IsAdmin) { var users = accountService.GetUserAccounts(null, username, null, null); var searchUsersList = new List <UUID> (); if (IsAdmin) // display all users { foreach (var user in users) { searchUsersList.Add(user.PrincipalID); } } else // only show the users friends { UserAccount ourAccount = Authenticator.GetAuthentication(httpRequest); if (ourAccount != null) { IFriendsService friendsService = webInterface.Registry.RequestModuleInterface <IFriendsService> (); var friends = friendsService.GetFriends(ourAccount.PrincipalID); foreach (var friend in friends) { UUID friendID = UUID.Zero; UUID.TryParse(friend.Friend, out friendID); if (friendID != UUID.Zero) { searchUsersList.Add(friendID); } } } } if (searchUsersList.Count > 0) { noDetails = ""; foreach (var user in users) { if (!searchUsersList.Contains(user.PrincipalID)) { continue; } if (Utilities.IsSystemUser(user.PrincipalID)) { continue; } usersList.Add(new Dictionary <string, object> { { "UserName", user.Name }, { "UserID", user.PrincipalID }, { "CanEdit", IsAdmin } }); } } if (usersList.Count == 0) { usersList.Add(new Dictionary <string, object> { { "UserName", translator.GetTranslatedString("NoDetailsText") }, { "UserID", "" }, { "CanEdit", false } }); } } } vars.Add("NoDetailsText", noDetails); vars.Add("UsersList", usersList); vars.Add("UserSearchText", translator.GetTranslatedString("UserSearchText") + (IsAdmin ? "" : " (Friends)")); vars.Add("SearchForUserText", translator.GetTranslatedString("SearchForUserText")); vars.Add("UserNameText", translator.GetTranslatedString("UserNameText")); vars.Add("Search", translator.GetTranslatedString("Search")); vars.Add("SearchResultForUserText", translator.GetTranslatedString("SearchResultForUserText")); vars.Add("EditText", translator.GetTranslatedString("EditText")); vars.Add("EditUserAccountText", translator.GetTranslatedString("EditUserAccountText")); return(vars); }
public LoginResponse Login(string firstName, string lastName, string passwd, string startLocation, UUID scopeID, string clientVersion, string channel, string mac, string id0, IPEndPoint clientIP) { bool success = false; UUID session = UUID.Random(); m_log.InfoFormat("[LLOGIN SERVICE]: Login request for {0} {1} at {2} using viewer {3}, channel {4}, IP {5}, Mac {6}, Id0 {7}", firstName, lastName, startLocation, clientVersion, channel, clientIP.Address.ToString(), mac, id0); try { // // Check client // if (m_AllowedClients != string.Empty) { Regex arx = new Regex(m_AllowedClients); Match am = arx.Match(clientVersion); if (!am.Success) { m_log.InfoFormat( "[LLOGIN SERVICE]: Login failed for {0} {1}, reason: client {2} is not allowed", firstName, lastName, clientVersion); return(LLFailedLoginResponse.LoginBlockedProblem); } } if (m_DeniedClients != string.Empty) { Regex drx = new Regex(m_DeniedClients); Match dm = drx.Match(clientVersion); if (dm.Success) { m_log.InfoFormat( "[LLOGIN SERVICE]: Login failed for {0} {1}, reason: client {2} is denied", firstName, lastName, clientVersion); return(LLFailedLoginResponse.LoginBlockedProblem); } } // // Get the account and check that it exists // UserAccount account = m_UserAccountService.GetUserAccount(scopeID, firstName, lastName); if (account == null) { m_log.InfoFormat( "[LLOGIN SERVICE]: Login failed for {0} {1}, reason: user not found", firstName, lastName); return(LLFailedLoginResponse.UserProblem); } if (account.UserLevel < m_MinLoginLevel) { m_log.InfoFormat( "[LLOGIN SERVICE]: Login failed for {0} {1}, reason: user level is {2} but minimum login level is {3}", firstName, lastName, account.UserLevel, m_MinLoginLevel); return(LLFailedLoginResponse.LoginBlockedProblem); } // If a scope id is requested, check that the account is in // that scope, or unscoped. // if (scopeID != UUID.Zero) { if (account.ScopeID != scopeID && account.ScopeID != UUID.Zero) { m_log.InfoFormat( "[LLOGIN SERVICE]: Login failed, reason: user {0} {1} not found", firstName, lastName); return(LLFailedLoginResponse.UserProblem); } } else { scopeID = account.ScopeID; } // // Authenticate this user // if (!passwd.StartsWith("$1$")) { passwd = "$1$" + Util.Md5Hash(passwd); } passwd = passwd.Remove(0, 3); //remove $1$ string token = m_AuthenticationService.Authenticate(account.PrincipalID, passwd, 30); UUID secureSession = UUID.Zero; if ((token == string.Empty) || (token != string.Empty && !UUID.TryParse(token, out secureSession))) { m_log.InfoFormat( "[LLOGIN SERVICE]: Login failed for {0} {1}, reason: authentication failed", firstName, lastName); return(LLFailedLoginResponse.UserProblem); } // // Get the user's inventory // if (m_RequireInventory && m_InventoryService == null) { m_log.WarnFormat( "[LLOGIN SERVICE]: Login failed for {0} {1}, reason: inventory service not set up", firstName, lastName); return(LLFailedLoginResponse.InventoryProblem); } if (m_HGInventoryService != null) { // Give the Suitcase service a chance to create the suitcase folder. // (If we're not using the Suitcase inventory service then this won't do anything.) m_HGInventoryService.GetRootFolder(account.PrincipalID); } List <InventoryFolderBase> inventorySkel = m_InventoryService.GetInventorySkeleton(account.PrincipalID); if (m_RequireInventory && ((inventorySkel == null) || (inventorySkel != null && inventorySkel.Count == 0))) { m_log.InfoFormat( "[LLOGIN SERVICE]: Login failed, for {0} {1}, reason: unable to retrieve user inventory", firstName, lastName); return(LLFailedLoginResponse.InventoryProblem); } // Get active gestures List <InventoryItemBase> gestures = m_InventoryService.GetActiveGestures(account.PrincipalID); // m_log.DebugFormat("[LLOGIN SERVICE]: {0} active gestures", gestures.Count); // // Login the presence // if (m_PresenceService != null) { success = m_PresenceService.LoginAgent(account.PrincipalID.ToString(), session, secureSession); if (!success) { m_log.InfoFormat( "[LLOGIN SERVICE]: Login failed for {0} {1}, reason: could not login presence", firstName, lastName); return(LLFailedLoginResponse.GridProblem); } } // // Change Online status and get the home region // GridRegion home = null; GridUserInfo guinfo = m_GridUserService.LoggedIn(account.PrincipalID.ToString()); // We are only going to complain about no home if the user actually tries to login there, to avoid // spamming the console. if (guinfo != null) { if (guinfo.HomeRegionID == UUID.Zero && startLocation == "home") { m_log.WarnFormat( "[LLOGIN SERVICE]: User {0} tried to login to a 'home' start location but they have none set", account.Name); } else if (m_GridService != null) { home = m_GridService.GetRegionByUUID(scopeID, guinfo.HomeRegionID); if (home == null && startLocation == "home") { m_log.WarnFormat( "[LLOGIN SERVICE]: User {0} tried to login to a 'home' start location with ID {1} but this was not found.", account.Name, guinfo.HomeRegionID); } } } else { // something went wrong, make something up, so that we don't have to test this anywhere else m_log.DebugFormat("{0} Failed to fetch GridUserInfo. Creating empty GridUserInfo as home", LogHeader); guinfo = new GridUserInfo(); guinfo.LastPosition = guinfo.HomePosition = new Vector3(128, 128, 30); } // // Find the destination region/grid // string where = string.Empty; Vector3 position = Vector3.Zero; Vector3 lookAt = Vector3.Zero; GridRegion gatekeeper = null; TeleportFlags flags; GridRegion destination = FindDestination(account, scopeID, guinfo, session, startLocation, home, out gatekeeper, out where, out position, out lookAt, out flags); if (destination == null) { m_PresenceService.LogoutAgent(session); m_log.InfoFormat( "[LLOGIN SERVICE]: Login failed for {0} {1}, reason: destination not found", firstName, lastName); return(LLFailedLoginResponse.GridProblem); } else { m_log.DebugFormat( "[LLOGIN SERVICE]: Found destination {0}, endpoint {1} for {2} {3}", destination.RegionName, destination.ExternalEndPoint, firstName, lastName); } if (account.UserLevel >= 200) { flags |= TeleportFlags.Godlike; } // // Get the avatar // AvatarAppearance avatar = null; if (m_AvatarService != null) { avatar = m_AvatarService.GetAppearance(account.PrincipalID); } // // Instantiate/get the simulation interface and launch an agent at the destination // string reason = string.Empty; GridRegion dest; AgentCircuitData aCircuit = LaunchAgentAtGrid(gatekeeper, destination, account, avatar, session, secureSession, position, where, clientVersion, channel, mac, id0, clientIP, flags, out where, out reason, out dest); destination = dest; if (aCircuit == null) { m_PresenceService.LogoutAgent(session); m_log.InfoFormat("[LLOGIN SERVICE]: Login failed for {0} {1}, reason: {2}", firstName, lastName, reason); return(new LLFailedLoginResponse("key", reason, "false")); } // Get Friends list FriendInfo[] friendsList = new FriendInfo[0]; if (m_FriendsService != null) { friendsList = m_FriendsService.GetFriends(account.PrincipalID); // m_log.DebugFormat("[LLOGIN SERVICE]: Retrieved {0} friends", friendsList.Length); } // // Finally, fill out the response and return it // LLLoginResponse response = new LLLoginResponse( account, aCircuit, guinfo, destination, inventorySkel, friendsList, m_LibraryService, where, startLocation, position, lookAt, gestures, m_WelcomeMessage, home, clientIP, m_MapTileURL, m_ProfileURL, m_OpenIDURL, m_SearchURL, m_Currency, m_DSTZone, m_DestinationGuide, m_AvatarPicker, m_ClassifiedFee); m_log.DebugFormat("[LLOGIN SERVICE]: All clear. Sending login response to {0} {1}", firstName, lastName); return(response); } catch (Exception e) { m_log.WarnFormat("[LLOGIN SERVICE]: Exception processing login for {0} {1}: {2} {3}", firstName, lastName, e.ToString(), e.StackTrace); if (m_PresenceService != null) { m_PresenceService.LogoutAgent(session); } return(LLFailedLoginResponse.InternalError); } }
protected object OnGenericEvent(string FunctionName, object parameters) { if (FunctionName == "UserStatusChange") { //A user has logged in or out... we need to update friends lists across the grid IAsyncMessagePostService asyncPoster = m_registry.RequestModuleInterface <IAsyncMessagePostService>(); IFriendsService friendsService = m_registry.RequestModuleInterface <IFriendsService>(); ICapsService capsService = m_registry.RequestModuleInterface <ICapsService>(); IGridService gridService = m_registry.RequestModuleInterface <IGridService>(); if (asyncPoster != null && friendsService != null && capsService != null && gridService != null) { //Get all friends object[] info = (object[])parameters; UUID us = UUID.Parse(info[0].ToString()); bool isOnline = bool.Parse(info[1].ToString()); List <FriendInfo> friends = friendsService.GetFriends(us); List <UUID> OnlineFriends = new List <UUID>(); List <string> previouslyContactedURLs = new List <string>(); foreach (FriendInfo friend in friends) { if (friend.TheirFlags == -1 || friend.MyFlags == -1) { continue; //Not validiated yet! } UUID FriendToInform = UUID.Zero; string url, first, last, secret; if (!UUID.TryParse(friend.Friend, out FriendToInform)) { HGUtil.ParseUniversalUserIdentifier(friend.Friend, out FriendToInform, out url, out first, out last, out secret); } //Now find their caps service so that we can find where they are root (and if they are logged in) IClientCapsService clientCaps = capsService.GetClientCapsService(FriendToInform); if (clientCaps != null) { //Find the root agent IRegionClientCapsService regionClientCaps = clientCaps.GetRootCapsService(); if (regionClientCaps != null) { OnlineFriends.Add(FriendToInform); //Post! asyncPoster.Post(regionClientCaps.RegionHandle, SyncMessageHelper.AgentStatusChange(us, FriendToInform, isOnline)); } else { //If they don't have a root agent, wtf happened? capsService.RemoveCAPS(clientCaps.AgentID); } } else { IAgentInfoService agentInfoService = m_registry.RequestModuleInterface <IAgentInfoService>(); if (agentInfoService != null) { UserInfo friendinfo = agentInfoService.GetUserInfo(FriendToInform.ToString()); if (friendinfo != null && friendinfo.IsOnline) { OnlineFriends.Add(FriendToInform); //Post! GridRegion r = gridService.GetRegionByUUID(UUID.Zero, friendinfo.CurrentRegionID); if (r != null) { asyncPoster.Post(r.RegionHandle, SyncMessageHelper.AgentStatusChange(us, FriendToInform, isOnline)); } } else { IUserAgentService uas = m_registry.RequestModuleInterface <IUserAgentService>(); if (uas != null) { bool online = uas.RemoteStatusNotification(friend, us, isOnline); if (online) { OnlineFriends.Add(FriendToInform); } } } } } } //If the user is coming online, send all their friends online statuses to them if (isOnline) { GridRegion ourRegion = gridService.GetRegionByUUID(UUID.Zero, UUID.Parse(info[2].ToString())); if (ourRegion != null) { foreach (UUID onlineFriend in OnlineFriends) { asyncPoster.Post(ourRegion.RegionHandle, SyncMessageHelper.AgentStatusChange(onlineFriend, us, isOnline)); } } } } } return(null); }