private XmlRpcStruct GetParticipatedTopics(string participantUserName, int startIndex, int endIndex, string searchId, int participantUserId) { var aftContext = ActiveForumsTapatalkModuleContext.Create(Context); if (aftContext == null || aftContext.Module == null) throw new XmlRpcFaultException(100, "Invalid Context"); Context.Response.AddHeader("Mobiquo_is_login", aftContext.UserId > 0 ? "true" : "false"); var portalId = aftContext.Module.PortalID; var forumModuleId = aftContext.ModuleSettings.ForumModuleId; var userId = aftContext.UserId; // Lookup the user id for the username if needed if (participantUserId <= 0) { var forumUser = new ActiveForums.UserController().GetUser(aftContext.Portal.PortalID, aftContext.ModuleSettings.ForumModuleId, participantUserName); if (forumUser != null) participantUserId = forumUser.UserId; } // If we don't have a valid participant user id at this point, return invalid result if (participantUserId <= 0) { return new XmlRpcStruct { {"result", false}, {"result_text", "User Not Found".ToBytes()}, {"total_topic_num", 0}, {"total_unread_num", 0} }; } // Build a list of forums the user has access to var fc = new AFTForumController(); var forumIds = fc.GetForumsForUser(aftContext.ForumUser.UserRoles, portalId, forumModuleId, "CanRead"); var mainSettings = new SettingsInfo { MainSettings = new Entities.Modules.ModuleController().GetModuleSettings(forumModuleId) }; var maxRows = endIndex + 1 - startIndex; var participatedTopics = fc.GetParticipatedTopics(portalId, forumModuleId, userId, forumIds, participantUserId, startIndex, maxRows).ToList(); return new XmlRpcStruct { {"result", true}, {"total_topic_num", participatedTopics.Count > 0 ? participatedTopics[0].TopicCount : 0}, {"total_unread_num", participatedTopics.Count > 0 ? participatedTopics[0].UnreadTopicCount : 0}, {"topics", participatedTopics.Select(t => new ExtendedTopicStructure{ TopicId = t.TopicId.ToString(), AuthorAvatarUrl = GetAvatarUrl(t.LastReplyAuthorId), AuthorId = t.LastReplyAuthorId.ToString(), AuthorName = GetLastReplyAuthorName(mainSettings, t).ToBytes(), ForumId = t.ForumId.ToString(), ForumName = t.ForumName.ToBytes(), HasNewPosts = (t.LastReplyId < 0 && t.TopicId > t.UserLastTopicRead) || t.LastReplyId > t.UserLastReplyRead, IsLocked = t.IsLocked, IsSubscribed = t.SubscriptionType > 0, CanSubscribe = ActiveForums.Permissions.HasPerm(aftContext.ForumUser.UserRoles, fc.GetForumPermissions(t.ForumId).CanSubscribe), // GetforumPermissions uses cache so it shouldn't be a performance issue ReplyCount = t.ReplyCount, Summary = GetSummary(null, t.LastReplyBody).ToBytes(), ViewCount = t.ViewCount, DateCreated = t.LastReplyDate, Title = HttpUtility.HtmlDecode(t.Subject + string.Empty).ToBytes() }).ToArray()} }; }
public XmlRpcStruct Login(string login, string password) { var aftContext = ActiveForumsTapatalkModuleContext.Create(Context); if (aftContext == null || aftContext.Portal == null) throw new XmlRpcFaultException(100, "Invalid Context"); var loginStatus = UserLoginStatus.LOGIN_FAILURE; Entities.Users.UserController.ValidateUser(aftContext.Portal.PortalID, login, password, string.Empty, aftContext.Portal.PortalName, Context.Request.UserHostAddress, ref loginStatus); var result = false; var resultText = string.Empty; switch (loginStatus) { case UserLoginStatus.LOGIN_SUCCESS: case UserLoginStatus.LOGIN_SUPERUSER: result = true; break; case UserLoginStatus.LOGIN_FAILURE: resultText = "Invalid Login/Password Combination"; break; case UserLoginStatus.LOGIN_USERNOTAPPROVED: resultText = "User Not Approved"; break; case UserLoginStatus.LOGIN_USERLOCKEDOUT: resultText = "User Temporarily Locked Out"; break; default: resultText = "Unknown Login Error"; break; } User forumUser = null; if (result) { // Get the User var userInfo = Entities.Users.UserController.GetUserByName(aftContext.Module.PortalID, login); if (userInfo == null) { result = false; resultText = "Unknown Login Error"; } else { // Set Login Cookie var expiration = DateTime.Now.Add(FormsAuthentication.Timeout); var ticket = new FormsAuthenticationTicket(1, login, DateTime.Now, expiration, false, userInfo.UserID.ToString()); var authCookie = new HttpCookie(aftContext.AuthCookieName, FormsAuthentication.Encrypt(ticket)) { Domain = FormsAuthentication.CookieDomain, Path = FormsAuthentication.FormsCookiePath, }; Context.Response.SetCookie(authCookie); forumUser = new ActiveForums.UserController().GetUser(aftContext.Module.PortalID, aftContext.ModuleSettings.ForumModuleId, userInfo.UserID); } } Context.Response.AddHeader("Mobiquo_is_login", result ? "true" : "false"); var rpcstruct = new XmlRpcStruct { {"result", result }, {"result_text", resultText.ToBytes()}, {"can_upload_avatar", false}, {"can_pm", false} }; if (result && forumUser != null) { rpcstruct.Add("user_id", forumUser.UserId.ToString()); rpcstruct.Add("username", forumUser.UserName.ToBytes()); rpcstruct.Add("email", forumUser.Email.ToBytes()); rpcstruct.Add("usergroup_id", new string[] { }); rpcstruct.Add("post_count", forumUser.PostCount); rpcstruct.Add("icon_url", GetAvatarUrl(forumUser.UserId)); } return rpcstruct; }