Exemple #1
0
        public PostedNote.PostedNotePayload ToggleHighlightNote([FromForm] int noteId)
        {
            ProMaUser user = DataController.LoggedInUser;

            if (user == null)
            {
                throw new NotLoggedInException();
            }

            PostedNote relevantNote = PostedNoteHandler.GetNote(noteId);

            if (relevantNote == null)
            {
                throw new Exception("No note with id " + noteId.ToString());
            }

            if (relevantNote.NoteTypeId.HasValue && !NoteTypeHandler.UserCanPostNotesOfType(user.UserId, relevantNote.NoteTypeId.Value))
            {
                throw new Exception("Cannot modify or create notes of this type");
            }

            relevantNote.Highlighted = !relevantNote.Highlighted;

            relevantNote.EditedTime   = ProMaUser.NowTime();
            relevantNote.EditedUserId = user.UserId;

            PostedNoteHandler.UpdatePostedNote(relevantNote);

            return(PostedNoteHandler.GetPayloadNote(relevantNote, user.UserId));
        }
Exemple #2
0
        public LogInProMaUserResponse LogInProMaUser([FromBody] LogInProMaUserRequestObject requestObject)
        {
            string shaPassword = requestObject.skipHash ? requestObject.password : ProMaUser.ComputeSHA256(requestObject.password);

            // For the convenience of users, we want to return a message in the case where a user name exists, but the password is wrong
            // the slight security concerns relating to this is noted
            ProMaUser relevantUser = ProMaUserHandler.ThisCache.FirstOrDefault(x => x.UserName.ToLower() == requestObject.userName.ToLower());

            if (relevantUser != null)
            {
                if (relevantUser.HashedPassword == shaPassword)
                {
                    HttpContext.Session.SetInt32(USERIDSESSIONKEY, relevantUser.UserId);
                    HttpContext.Session.SetString(USERPASSWORDSESSIONKEY, shaPassword);

                    LogInProMaUserResponse response = new LogInProMaUserResponse();
                    response.User             = relevantUser;
                    response.PassBackPassword = shaPassword;

                    return(response);
                }
                else
                {
                    throw new InvalidLogInException();
                }
            }
            else
            {
                throw new InvalidLogInException();
            }
        }
Exemple #3
0
        public void ChangeUsername([FromForm] string userName)
        {
            ProMaUser user = DataController.LoggedInUser;

            if (user == null)
            {
                throw new NotLoggedInException();
            }

            if (!ProMaUser.VerifyName(userName))
            {
                throw new Exception("Invalid user name");
            }

            // make sure no user with the same name
            ProMaUser existingUser = ProMaUserHandler.GetUserByUserName(userName);

            if (existingUser.IsDemo)
            {
                throw new Exception("Can't change Demo Account user name");
            }

            if (existingUser == null)
            {
                user.UserName = userName;

                ProMaUserHandler.UpdateUser(user);
            }
            else
            {
                throw new Exception("User already exists by that name");
            }
        }
Exemple #4
0
        public void SendFriendRequest([FromForm] int toUser)
        {
            ProMaUser user = DataController.LoggedInUser;

            if (user == null)
            {
                throw new NotLoggedInException();
            }

            if (user.IsDemo)
            {
                throw new Exception("Can't send friend requests as the Demo account");
            }

            ProMaUser target = ProMaUserHandler.GetUser(toUser);

            if (target == null)
            {
                throw new Exception("No user with that ID exists");
            }

            if (target.IsDemo)
            {
                throw new Exception("Can't send friend requests to the Demo account");
            }

            FriendshipRequest newRequest = new FriendshipRequest();

            newRequest.SenderId    = user.UserId;
            newRequest.RecipientId = toUser;

            FriendshipRequestHandler.AddFriendshipRequest(newRequest);
        }
Exemple #5
0
        public PostedNote.PostedNotePayload SetNoteActive([FromBody] SetNoteActiveRequestObject requestObject)
        {
            ProMaUser user = DataController.LoggedInUser;

            if (user == null)
            {
                throw new NotLoggedInException();
            }

            PostedNote relevantNote = PostedNoteHandler.GetNote(requestObject.noteId);

            if (relevantNote == null)
            {
                throw new Exception("No note with id " + requestObject.noteId.ToString());
            }

            if (relevantNote.NoteTypeId.HasValue && !NoteTypeHandler.UserCanPostNotesOfType(user.UserId, relevantNote.NoteTypeId.Value))
            {
                throw new Exception("Cannot modify or create notes of this type");
            }

            relevantNote.Active = requestObject.active;

            relevantNote.EditedTime   = ProMaUser.NowTime();
            relevantNote.EditedUserId = user.UserId;

            PostedNoteHandler.UpdatePostedNote(relevantNote);

            return(PostedNoteHandler.GetPayloadNote(relevantNote, user.UserId));
        }
Exemple #6
0
        public void AddNoteType([FromForm] string noteTypeName)
        {
            ProMaUser user = DataController.LoggedInUser;

            if (user == null)
            {
                throw new NotLoggedInException();
            }

            if (noteTypeName.Contains("'") || noteTypeName.Contains("\""))
            {
                throw new Exception("Invalid Note Type name");
            }

            NoteType newNoteType = new NoteType();

            newNoteType.NoteTypeName = noteTypeName;
            NoteTypeHandler.AddNoteType(newNoteType);

            NoteTypeMembership originalMembership = new NoteTypeMembership();

            originalMembership.UserId      = user.UserId;
            originalMembership.NoteTypeId  = newNoteType.NoteTypeId;
            originalMembership.IsCreator   = true;
            originalMembership.CanUseNotes = true;
            NoteTypeMembershipHandler.AddNoteTypeMembership(originalMembership);
        }
        public void ResetCaches()
        {
            ProMaUser user = DataController.LoggedInUser;

            if (user == null)
            {
                throw new NotLoggedInException();
            }

            if (!user.IsAdmin)
            {
                throw new AdminAccessRequiredException();
            }

            lock (ProMaUserHandler.ThisCache)
            {
                ProMaUserHandler.ThisCache = null;
            }
            lock (NoteTypeHandler.ThisCache)
            {
                NoteTypeHandler.ThisCache = null;
            }

            CompletedChoreHandler.AddToEveryUserChoreCacheIterator();
            FriendshipRequestHandler.AddToEveryUserFriendshipCacheIterator();
        }
Exemple #8
0
        public string UploadImage(IFormFile image)
        {
            ProMaUser user = LoggedInUser;

            if (user == null)
            {
                throw new NotLoggedInException();
            }

            if (image == null)
            {
                throw new ArgumentException("No image in transport; this system only allows for uploading of a single image");
            }

            if (image.Length > 10485760)             // 10 MB; the web.config won't allow anything this large to get through in the first place, though
            {
                throw new Exception("File too large");
            }

            byte[] uploadBytes;

            using (MemoryStream stream = new MemoryStream())
            {
                image.CopyTo(stream);
                uploadBytes = stream.ToArray();
            }

            Dictionary <string, string> content = new Dictionary <string, string>();

            content.Add("type", "base64");
            content.Add("image", Convert.ToBase64String(uploadBytes));

            IConfigurationBuilder builder = new ConfigurationBuilder()
                                            .SetBasePath(Directory.GetCurrentDirectory())
                                            .AddJsonFile("localsettings.json");

            IConfigurationRoot Configuration = builder.Build();

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://api.imgur.com/3/image");

            request.Headers.Add("Authorization", $"Client-ID {Configuration.GetSection("IMGURAPI").GetValue<string>("ClientID")}");
            request.Method        = "POST";
            request.ContentType   = "application/x-www-form-urlencoded";
            request.ContentLength = uploadBytes.Length;

            Stream writer = request.GetRequestStream();

            writer.Write(uploadBytes, 0, uploadBytes.Length);

            HttpWebResponse response = (HttpWebResponse)request.GetResponse();

            using (Stream responseStream = response.GetResponseStream())
            {
                StreamReader reader         = new StreamReader(responseStream, true);
                string       responseString = reader.ReadToEnd();
                return(JObject.Parse(responseString).SelectToken("data.link").Value <string>());
            }
        }
Exemple #9
0
        public List <ProMaUser> GetFriends()
        {
            ProMaUser user = LoggedInUser;

            if (user == null)
            {
                throw new NotLoggedInException();
            }

            return(FriendshipHandler.GetUserFriends(user.UserId));
        }
Exemple #10
0
        public void RemoveFriend([FromForm] int fromUser)
        {
            ProMaUser user = DataController.LoggedInUser;

            if (user == null)
            {
                throw new NotLoggedInException();
            }

            FriendshipHandler.RemoveFriendship(user.UserId, fromUser);
        }
Exemple #11
0
        public void RejectFriendRequest([FromForm] int fromUser)
        {
            ProMaUser user = DataController.LoggedInUser;

            if (user == null)
            {
                throw new NotLoggedInException();
            }

            FriendshipRequestHandler.RejectRequestBetweenUsers(user.UserId, fromUser);
        }
Exemple #12
0
        public void RemoveChoreMembership([FromForm] int choreId)
        {
            ProMaUser user = DataController.LoggedInUser;

            if (user == null)
            {
                throw new NotLoggedInException();
            }

            SharedChoreMembershipHandler.RemoveSharedChoreMembership(choreId, user.UserId);
        }
Exemple #13
0
        public void CancelFriendRequest([FromForm] int recipient)
        {
            ProMaUser user = DataController.LoggedInUser;

            if (user == null)
            {
                throw new NotLoggedInException();
            }

            FriendshipRequestHandler.RejectRequestBetweenUsers(recipient, user.UserId);
        }
        public List <CalendarEntry> GetCalendarEntries([FromForm] int utcOffset)
        {
            ProMaUser user = DataController.LoggedInUser;

            if (user == null)
            {
                throw new NotLoggedInException();
            }

            return(CalendarHandler.GetCalendarEntriesForUser(user.UserId, utcOffset));
        }
Exemple #15
0
        public void RememberSorting([FromForm] SerializableIntIntPair[] pairings)
        {
            ProMaUser user = DataController.LoggedInUser;

            if (user == null)
            {
                throw new NotLoggedInException();
            }

            SharedChoreMembershipHandler.SaveSortingOrders(pairings, user.UserId);
        }
Exemple #16
0
 public bool HeartBeat()
 {
     if (LoggedInUser == null)
     {
         return(false);
     }
     else
     {
         HttpContext.Session.SetInt32("tick", ProMaUser.NowTime().Second);                 // add something to the session so that the heartbeat stays alive
         return(true);
     }
 }
Exemple #17
0
        public void ChangeEnterPref([FromForm] bool value)
        {
            ProMaUser user = DataController.LoggedInUser;

            if (user == null)
            {
                throw new NotLoggedInException();
            }

            user.EnterIsNewLinePref = value;

            ProMaUserHandler.UpdateUser(user);
        }
Exemple #18
0
        public List <NoteType> GetNoteTypes()
        {
            ProMaUser user = DataController.LoggedInUser;

            if (user == null)
            {
                throw new NotLoggedInException();
            }

            List <NoteType> returnThis = NoteTypeHandler.GetNoteTypesForUser(user.UserId).OrderByDescending(x => x.Membership.IsCreator).ThenBy(x => x.NoteTypeName).ThenBy(x => x.NoteTypeId).ToList();

            return(returnThis);
        }
Exemple #19
0
        public void RemoveFromNoteType([FromForm] int noteTypeId)
        {
            ProMaUser user = DataController.LoggedInUser;

            if (user == null)
            {
                throw new NotLoggedInException();
            }

            NoteTypeMembership toRemove = NoteTypeMembershipHandler.GetMembership(user.UserId, noteTypeId);

            NoteTypeMembershipHandler.RemoveNoteTypeMembership(toRemove);
        }
Exemple #20
0
        public void AddNewChore([FromForm] string newItemName)
        {
            ProMaUser user = DataController.LoggedInUser;

            if (user == null)
            {
                throw new NotLoggedInException();
            }

            SharedChore newChore = new SharedChore();

            newChore.ChoreName = newItemName;
            SharedChoreHandler.AddSharedChore(newChore, user.UserId);
        }
Exemple #21
0
        public List <FriendshipRequest> GetFriendshipRequests()
        {
            ProMaUser user = DataController.LoggedInUser;

            if (user == null)
            {
                throw new NotLoggedInException();
            }

            List <FriendshipRequest> requests = FriendshipRequestHandler.GetRequestsForUser(user.UserId).Where(x => x.RecipientId == user.UserId || x.SenderId == user.UserId).ToList();

            requests.ForEach(x => { x.Sender = ProMaUserHandler.GetUser(x.SenderId); x.Recipient = ProMaUserHandler.GetUser(x.RecipientId); });

            return(requests);
        }
        public List <ProMaUser> GetMostRecentUsers()
        {
            ProMaUser user = DataController.LoggedInUser;

            if (user == null)
            {
                throw new NotLoggedInException();
            }

            if (!user.IsAdmin)
            {
                throw new AdminAccessRequiredException();
            }

            return(ProMaUserHandler.ThisCache.OrderByDescending(x => x.JoinTime).Take(5).ToList());
        }
Exemple #23
0
        public List <ProMaUser> GetUsersNotAssignedToChore([FromForm] int choreId)
        {
            using (ProMaDB scope = new ProMaDB())
            {
                ProMaUser user = DataController.LoggedInUser;

                if (user == null)
                {
                    throw new NotLoggedInException();
                }

                // get each shared chore membership for this chore
                List <SharedChoreMembership> memberships = SharedChoreMembershipHandler.GetSharedChoreMembershipsForChore(choreId);

                return(FriendshipHandler.GetUserFriends(user.UserId).Where(x => !memberships.Any(y => y.UserId == x.UserId)).ToList());
            }
        }
Exemple #24
0
        public ProMaUser RegisterProMaUser([FromBody] RegisterProMaUserRequestObject requestObject)
        {
            using (ProMaDB scope = new ProMaDB())
            {
                if (string.IsNullOrWhiteSpace(requestObject.md5Password))
                {
                    throw new Exception("Invalid password");
                }

                if (!ProMaUser.VerifyName(requestObject.userName))
                {
                    throw new Exception("Invalid user name");
                }

                // make sure no user with the same name
                ProMaUser existingUser = ProMaUserHandler.GetUserByUserName(requestObject.userName);

                if (existingUser != null)
                {
                    throw new Exception("User already exists by that name");
                }

                ProMaUser newUser = new ProMaUser();

                newUser.HashedPassword = ProMaUser.ComputeSHA256(requestObject.md5Password);;
                newUser.JoinTime       = ProMaUser.NowTime();
                newUser.UserName       = requestObject.userName;

                ProMaUserHandler.AddProMaUser(newUser);

                PostedNote seedNote = new PostedNote();
                seedNote.UserId        = newUser.UserId;
                seedNote.NoteText      = @"You can create new notes by using the text area in the right.\r\n\r\nNotes can have note types (see the ""as type"" selector). You can create new note types using the utilties area to the bottom right, and selecting the ""Note Types"" tab.\r\n\r\nYou can sort by note types using the filters at the bottom of the screen, among other filter options.\r\n\r\nEach note has buttons to the top right of them, like the pencil icon for editing a note or the target icon for marking it as complete. Use these to alter the notes however you would like.\r\n\r\nTry out the other tabs for useful utilities, like keeping track of daily chores, or the Egg Timer tab to handle productivity cycles.\r\n\r\nHave fun using ProMa!";
                seedNote.PostedTime    = ProMaUser.NowTime();
                seedNote.Active        = true;
                seedNote.Completed     = false;
                seedNote.CompletedTime = null;
                seedNote.Highlighted   = false;
                seedNote.NoteTypeId    = null;

                PostedNoteHandler.AddPostedNote(seedNote);

                return(newUser);
            }
        }
Exemple #25
0
        public void UpdateEmailAddress([FromForm] string emailAddress)
        {
            ProMaUser user = DataController.LoggedInUser;

            if (user == null)
            {
                throw new NotLoggedInException();
            }

            if (user.IsDemo)
            {
                throw new Exception("Can't change Demo Account email address");
            }

            user.EmailAddress = emailAddress;

            ProMaUserHandler.UpdateUser(user);
        }
        public void AddCalendar([FromBody] AddCalendarRequestObject requestObject)
        {
            ProMaUser user = DataController.LoggedInUser;

            if (user == null)
            {
                throw new NotLoggedInException();
            }

            CalendarEntry newEntry = new CalendarEntry();

            newEntry.CalendarName = requestObject.newItemName;
            newEntry.Yearly       = requestObject.yearly;
            newEntry.ForDate      = new DateTimeOffset(requestObject.year, requestObject.month, requestObject.day, 0, 0, 0, new TimeSpan());
            newEntry.UserId       = user.UserId;

            CalendarHandler.AddCalendar(newEntry);
        }
        public void DeleteCalendar([FromForm] int calendarId)
        {
            ProMaUser user = DataController.LoggedInUser;

            if (user == null)
            {
                throw new NotLoggedInException();
            }

            CalendarEntry toDelete = CalendarHandler.GetEntry(calendarId);

            if (toDelete.UserId != user.UserId)
            {
                throw new Exception("Created by someone else");
            }

            CalendarHandler.DeleteCalendar(calendarId);
        }
Exemple #28
0
        public void AssignUserToChore([FromBody] AssignUserToChoreRequestObject requestObject)
        {
            ProMaUser user = DataController.LoggedInUser;

            if (user == null)
            {
                throw new NotLoggedInException();
            }

            if (FriendshipHandler.GetUserFriends(user.UserId).Any(x => x.UserId == requestObject.userId))
            {
                SharedChoreMembershipHandler.AddSharedChoreMembership(requestObject.choreId, requestObject.userId);
            }
            else
            {
                throw new Exception("User not in friends list");
            }
        }
Exemple #29
0
        void ClearDemoAccount()
        {
            ProMaUser demoUser = ProMaUserHandler.GetUserByUserName("DemoAccount");

            if (demoUser != null)
            {
                ProMaUserHandler.PermanentlyDeleteUser(demoUser);
            }

            ProMaUser demoAccount =
                new DataController().RegisterProMaUser(new DataController.RegisterProMaUserRequestObject()
            {
                userName = "******", md5Password = ProMaUser.ComputeMD5Hash("DemoAccount")
            });

            demoAccount.IsDemo = true;

            ProMaUserHandler.UpdateUser(demoAccount);
        }
Exemple #30
0
        public List <CompletedChore> GetChoreItems([FromBody] GetChoreItemsRequestObject requestObject)
        {
            ProMaUser user = DataController.LoggedInUser;

            if (user == null)
            {
                throw new NotLoggedInException();
            }

            DateTime dayForRequest = new DateTime(requestObject.year, requestObject.month, requestObject.day).Date;

            List <CompletedChore> returnThis = CompletedChoreHandler.GetChoreItemsForDateAndUser(user.UserId, dayForRequest);

            // we need to hydrate the data appropriately
            foreach (CompletedChore curChore in returnThis)
            {
                curChore.SharedChore = SharedChoreHandler.GetSharedChore(curChore.SharedChoreId);

                if (curChore.UserId.HasValue)
                {
                    curChore.CompletedUser = ProMaUserHandler.GetUser(curChore.UserId.Value);
                }

                curChore.SharedChore.Membership = SharedChoreMembershipHandler.GetSharedChoreMembership(curChore.SharedChoreId, user.UserId);

                // find the last completed version of this chore
                // we only need to do this if this chore isn't complete, because it won't be displayed in the ui otherwise
                if (!curChore.Completed)
                {
                    CompletedChore lastCompletion = CompletedChoreHandler.GetPreviousCompletedChore(curChore);

                    if (lastCompletion != null)
                    {
                        curChore.LastDoneUser = ProMaUserHandler.GetUser(lastCompletion.UserId.Value);
                        curChore.LastDoneTime = lastCompletion.ChoreDate;
                    }
                }
            }

            return(returnThis.ToList());
        }