// GET -> api/messages | id in params public static ResponseData GetMessages(Session session, Dictionary <string, string> kwargs) { string id; ResponseData ret = new ResponseData(); if (kwargs.TryGetValue("id", out id) && id != "") { string temp; if (session.SessionData.TryGetValue("currentRoom", out temp) && temp != id) { session.SessionData["currentRoom"] = id; session.MessageOffset = 0; } Guid ID = Guid.Parse(id); ChatRoom cr = JSONFileService.GetAll <ChatRoom>().First(c => c.ID == ID); ret.Data = Encoding.UTF8.GetBytes(JsonSerializer.Serialize(cr.Messages)); ret.ContentType = "text/json"; ret.Complete = true; ret.Encoding = Encoding.UTF8; ret.Status = ServerStatus.OK; } else { ret.Status = ServerStatus.UnknownType; //bad request ret.Complete = true; } return(ret); }
// GET -> api/chatinit public static ResponseData InitializeChatroom(Session session, Dictionary <string, string> kwargs) { Guid userID = Guid.Parse(session.SessionData["UserID"]); User user = JSONFileService.GetAll <User>().First(r => r.ID == userID); IEnumerable <ChatRoom> allChatRooms = JSONFileService.GetAll <ChatRoom>(); List <ChatRoom> userChatRooms = new List <ChatRoom>(); foreach (var chatRoomID in user.IDList) { ChatRoom cr = allChatRooms.Single(cr => chatRoomID == cr.ID); cr.Minimize(); userChatRooms.Add(cr); } if (userChatRooms.Count() != 0) { session.SessionData["currentRoom"] = userChatRooms[0].ID.ToString(); } return(new ResponseData() { ContentType = "text/json", Complete = true, Encoding = Encoding.UTF8, Status = ServerStatus.OK, Data = Encoding.UTF8.GetBytes(JsonSerializer.Serialize(userChatRooms)) }); }
// GET -> api/getuser public static ResponseData GetCurrentUserData(Session session, Dictionary <string, string> kwargs) { Guid userID = Guid.Parse(session.SessionData["UserID"]); User user = JSONFileService.GetAll <User>().First(u => u.ID == userID); user.IDList.Clear(); user.Password = ""; return(new ResponseData() { Data = Encoding.UTF8.GetBytes(user.ToString()), Encoding = Encoding.UTF8, ContentType = "text/json", Complete = true, Status = ServerStatus.OK }); }
// POST -> api/login | username and password in form data public static ResponseData LoginHandler(Session session, Dictionary <string, string> kwargs) { string username = kwargs["username"]; string password = kwargs["password"]; string submitButton = kwargs["operation"]; string Status = ""; var user = JSONFileService.GetAll <User>().FirstOrDefault(user => user.Username == username); if (user != null) { if (submitButton == "register") { Status = "Username already taken!"; } else if (AesEncryptor.Compare(password, user)) { //successful login, redirect user to the app session.Authorized = true; session.SessionData.TryAdd("UserID", user.ID.ToString()); session.SessionData.TryAdd("Username", user.Username); var dataPacket = new JSONPacket(); if (user.Icon != null) { dataPacket.Redirect = "/welcome"; dataPacket.HasIcon = true; } else { dataPacket.HasIcon = false; } var ret = new ResponseData() { Data = Encoding.UTF8.GetBytes(dataPacket.ToString()), ContentType = "text/json", Complete = true, Status = ServerStatus.OK, Encoding = Encoding.UTF8 }; return(ret); } else { Status = "Wrong password!"; } } else { if (submitButton == "login") { Status = "No such user exists!"; } else { if (ParseCredentials(username, password)) { Status = "Registered new user!"; user = new User { Username = username, Password = password, DateCreated = DateTime.UtcNow.ToString() }; AesEncryptor.Encrypt(user); JSONFileService.Add(user); } else { Status = "Username and password cannot be empty!"; } } } var dataWrapper = new JSONPacket() { Data = Status, Redirect = null, HasIcon = true }; return(new ResponseData() { ContentType = "text/json", Encoding = Encoding.UTF8, Data = Encoding.UTF8.GetBytes(dataWrapper.ToString()), Status = ServerStatus.OK, Complete = true }); }