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; /* Allow access to the system 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); 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> (); string error = ""; UUID userID = httpRequest.Query.ContainsKey ("userid") ? UUID.Parse (httpRequest.Query ["userid"].ToString ()) : UUID.Parse (requestParameters ["userid"].ToString ()); IUserAccountService userService = webInterface.Registry.RequestModuleInterface<IUserAccountService> (); UserAccount account = null; if (userService != null) account = userService.GetUserAccount (null, userID); var agentService = Framework.Utilities.DataManager.RequestPlugin<IAgentConnector> (); IAgentInfo agent = agentService.GetAgent (userID); if (agent == null) error = "No agent information is available"; // Set user type if (requestParameters.ContainsKey ("Submit") && requestParameters ["Submit"].ToString () == "SubmitSetUserType") { string UserType = requestParameters ["UserType"].ToString (); int UserFlags = webInterface.UserTypeToUserFlags (UserType); // set the user account type if (account != null) { account.UserFlags = UserFlags; userService.StoreUserAccount (account); } else { response = "User account not found - Unable to update!'"; return null; } if (agent != null) { agent.OtherAgentInformation ["UserFlags"] = UserFlags; agentService.UpdateAgent (agent); } else { response = "Agent information is not available! Has the user logged in yet?"; return null; } IProfileConnector profileData = Framework.Utilities.DataManager.RequestPlugin<IProfileConnector> (); if (profileData != null) { IUserProfileInfo profile = profileData.GetUserProfile (userID); if (profile == null) { profileData.CreateNewProfile (userID); profile = profileData.GetUserProfile (userID); } profile.MembershipGroup = webInterface.UserFlagToType (UserFlags, webInterface.EnglishTranslator); // membership is english profileData.UpdateUserProfile (profile); } response = "User account has been updated."; return null; } // Password change if (requestParameters.ContainsKey ("Submit") && requestParameters ["Submit"].ToString () == "SubmitPasswordChange") { string password = requestParameters ["password"].ToString (); string passwordconf = requestParameters ["passwordconf"].ToString (); if (password != passwordconf) response = "Passwords do not match"; else { IAuthenticationService authService = webInterface.Registry.RequestModuleInterface<IAuthenticationService> (); if (authService != null) response = authService.SetPassword (userID, "UserAccount", password) ? "Successfully set password" : "Failed to set your password, try again later"; else response = "No authentication service was available to change the account passwor!"; } return null; } // Email change if (requestParameters.ContainsKey ("Submit") && requestParameters ["Submit"].ToString () == "SubmitEmailChange") { string email = requestParameters ["email"].ToString (); if (account != null) { account.Email = email; userService.StoreUserAccount (account); response = "Successfully updated email"; } else response = "No authentication service was available to change the email details!"; return null; } // Delete user if (requestParameters.ContainsKey ("Submit") && requestParameters ["Submit"].ToString () == "SubmitDeleteUser") { string username = requestParameters ["username"].ToString (); if (account != null) { if (username == account.Name) { userService.DeleteUser (account.PrincipalID, account.Name, "", false, false); response = "User has been successfully deleted"; } else response = "The user name did not match!"; } else response = "No account details to verify user against!"; return null; } // Temp Ban user if (requestParameters.ContainsKey ("Submit") && requestParameters ["Submit"].ToString () == "SubmitTempBanUser") { int timeDays = int.Parse (requestParameters ["TimeDays"].ToString ()); int timeHours = int.Parse (requestParameters ["TimeHours"].ToString ()); int timeMinutes = int.Parse (requestParameters ["TimeMinutes"].ToString ()); if (agent != null) { agent.Flags |= IAgentFlags.TempBan; DateTime until = DateTime.Now.AddDays (timeDays).AddHours (timeHours).AddMinutes (timeMinutes); agent.OtherAgentInformation ["Temperory BanInfo"] = until; agentService.UpdateAgent (agent); response = "User has been banned."; } else response = "Agent information is not available! Has the user logged in yet?"; return null; } // Ban user if (requestParameters.ContainsKey ("Submit") && requestParameters ["Submit"].ToString () == "SubmitBanUser") { if (agent != null) { agent.Flags |= IAgentFlags.PermBan; agentService.UpdateAgent (agent); response = "User has been banned."; } else response = "Agent information is not available! Has the user logged in yet?"; return null; } //UnBan user if (requestParameters.ContainsKey ("Submit") && requestParameters ["Submit"].ToString () == "SubmitUnbanUser") { if (agent != null) { agent.Flags &= ~IAgentFlags.TempBan; agent.Flags &= ~IAgentFlags.PermBan; agent.OtherAgentInformation.Remove ("Temporary BanInfo"); agentService.UpdateAgent (agent); response = "User has been unbanned."; } else response = "Agent information is not available! Has the user logged in yet?"; return null; } // Login as user if (requestParameters.ContainsKey ("Submit") && requestParameters ["Submit"].ToString () == "SubmitLoginAsUser") { Authenticator.ChangeAuthentication (httpRequest, account); webInterface.Redirect (httpResponse, "/"); return vars; } // Kick user if (requestParameters.ContainsKey ("Submit") && requestParameters ["Submit"].ToString () == "SubmitKickUser") { string message = requestParameters ["KickMessage"].ToString (); if (account != null) { IGridWideMessageModule messageModule = webInterface.Registry.RequestModuleInterface<IGridWideMessageModule> (); if (messageModule != null) messageModule.KickUser (account.PrincipalID, message); response = "User has been kicked."; } else response = "Unable to determine user to kick!"; return null; } // Message user if (requestParameters.ContainsKey ("Submit") && requestParameters ["Submit"].ToString () == "SubmitMessageUser") { string message = requestParameters ["Message"].ToString (); if (account != null) { IGridWideMessageModule messageModule = webInterface.Registry.RequestModuleInterface<IGridWideMessageModule> (); if (messageModule != null) { messageModule.MessageUser (account.PrincipalID, message); response = "User has been sent the message."; } } else response = "User account details are unavailable to send the message!"; return null; } // page variables string bannedUntil = ""; bool userBanned = false; if (agent != null) userBanned = ((agent.Flags & IAgentFlags.PermBan) == IAgentFlags.PermBan || (agent.Flags & IAgentFlags.TempBan) == IAgentFlags.TempBan); bool TempUserBanned = false; if (userBanned) { if ((agent.Flags & IAgentFlags.TempBan) == IAgentFlags.TempBan && agent.OtherAgentInformation ["Temperory BanInfo"].AsDate () < DateTime.Now.ToUniversalTime ()) { userBanned = false; agent.Flags &= ~IAgentFlags.TempBan; agent.Flags &= ~IAgentFlags.PermBan; agent.OtherAgentInformation.Remove ("Temporary BanInfo"); agentService.UpdateAgent (agent); } else { DateTime bannedTime = agent.OtherAgentInformation ["Temporary BanInfo"].AsDate (); TempUserBanned = bannedTime != Util.UnixEpoch; bannedUntil = string.Format ("{0} {1}", bannedTime.ToShortDateString (), bannedTime.ToLongTimeString ()); } } bool userOnline = false; IAgentInfoService agentInfoService = webInterface.Registry.RequestModuleInterface<IAgentInfoService> (); if (agentInfoService != null) { UserInfo Info = null; if (account != null) Info = agentInfoService.GetUserInfo (account.PrincipalID.ToString ()); userOnline = Info != null && Info.IsOnline; } if (account != null) { vars.Add ("EmailValue", account.Email); vars.Add ("UserID", account.PrincipalID); vars.Add ("UserName", account.Name); } else { vars.Add ("EmailValue", ""); vars.Add ("UserID", ""); vars.Add ("UserName", ""); } vars.Add ("UserOnline", userOnline); vars.Add ("NotUserBanned", !userBanned); vars.Add ("UserBanned", userBanned); vars.Add ("TempUserBanned", TempUserBanned); vars.Add ("BannedUntil", bannedUntil); vars.Add ("ErrorMessage", error); vars.Add ("ChangeUserInformationText", translator.GetTranslatedString ("ChangeUserInformationText")); vars.Add ("ChangePasswordText", translator.GetTranslatedString ("ChangePasswordText")); vars.Add ("NewPasswordText", translator.GetTranslatedString ("NewPasswordText")); vars.Add ("NewPasswordConfirmationText", translator.GetTranslatedString ("NewPasswordConfirmationText")); vars.Add ("ChangeEmailText", translator.GetTranslatedString ("ChangeEmailText")); vars.Add ("NewEmailText", translator.GetTranslatedString ("NewEmailText")); vars.Add ("UserNameText", translator.GetTranslatedString ("UserNameText")); vars.Add ("PasswordText", translator.GetTranslatedString ("PasswordText")); vars.Add ("DeleteUserText", translator.GetTranslatedString ("DeleteUserText")); vars.Add ("DeleteText", translator.GetTranslatedString ("DeleteText")); vars.Add ("DeleteUserInfoText", translator.GetTranslatedString ("DeleteUserInfoText")); vars.Add ("Submit", translator.GetTranslatedString ("Submit")); vars.Add ("Login", translator.GetTranslatedString ("Login")); vars.Add ("TypeUserNameToConfirm", translator.GetTranslatedString ("TypeUserNameToConfirm")); vars.Add ("AdminUserTypeInfoText", translator.GetTranslatedString ("AdminUserTypeInfoText")); vars.Add ("AdminSetUserTypeText", translator.GetTranslatedString ("UserTypeText")); vars.Add ("AdminLoginInAsUserText", translator.GetTranslatedString ("AdminLoginInAsUserText")); vars.Add ("AdminLoginInAsUserInfoText", translator.GetTranslatedString ("AdminLoginInAsUserInfoText")); vars.Add ("AdminDeleteUserText", translator.GetTranslatedString ("AdminDeleteUserText")); vars.Add ("AdminDeleteUserInfoText", translator.GetTranslatedString ("AdminDeleteUserInfoText")); vars.Add ("AdminUnbanUserText", translator.GetTranslatedString ("AdminUnbanUserText")); vars.Add ("AdminTempBanUserText", translator.GetTranslatedString ("AdminTempBanUserText")); vars.Add ("AdminTempBanUserInfoText", translator.GetTranslatedString ("AdminTempBanUserInfoText")); vars.Add ("AdminBanUserText", translator.GetTranslatedString ("AdminBanUserText")); vars.Add ("AdminBanUserInfoText", translator.GetTranslatedString ("AdminBanUserInfoText")); vars.Add ("BanText", translator.GetTranslatedString ("BanText")); vars.Add ("UnbanText", translator.GetTranslatedString ("UnbanText")); vars.Add ("TimeUntilUnbannedText", translator.GetTranslatedString ("TimeUntilUnbannedText")); vars.Add ("EdittingText", translator.GetTranslatedString ("EdittingText")); vars.Add ("BannedUntilText", translator.GetTranslatedString ("BannedUntilText")); vars.Add ("KickAUserInfoText", translator.GetTranslatedString ("KickAUserInfoText")); vars.Add ("KickAUserText", translator.GetTranslatedString ("KickAUserText")); vars.Add ("KickMessageText", translator.GetTranslatedString ("KickMessageText")); vars.Add ("KickUserText", translator.GetTranslatedString ("KickUserText")); vars.Add ("MessageAUserText", translator.GetTranslatedString ("MessageAUserText")); vars.Add ("MessageAUserInfoText", translator.GetTranslatedString ("MessageAUserInfoText")); vars.Add ("MessageUserText", translator.GetTranslatedString ("MessageUserText")); List<Dictionary<string, object>> daysArgs = new List<Dictionary<string, object>> (); for (int i = 0; i <= 100; i++) daysArgs.Add (new Dictionary<string, object> { { "Value", i } }); List<Dictionary<string, object>> hoursArgs = new List<Dictionary<string, object>> (); for (int i = 0; i <= 23; i++) hoursArgs.Add (new Dictionary<string, object> { { "Value", i } }); List<Dictionary<string, object>> minutesArgs = new List<Dictionary<string, object>> (); for (int i = 0; i <= 59; i++) minutesArgs.Add (new Dictionary<string, object> { { "Value", i } }); vars.Add ("Days", daysArgs); vars.Add ("Hours", hoursArgs); vars.Add ("Minutes", minutesArgs); vars.Add ("DaysText", translator.GetTranslatedString ("DaysText")); vars.Add ("HoursText", translator.GetTranslatedString ("HoursText")); vars.Add ("MinutesText", translator.GetTranslatedString ("MinutesText")); vars.Add ("UserType", webInterface.UserTypeArgs (translator)); return vars; }