Exemple #1
0
        // ShareAlbum <albumId> <username> <permission>
        // For example:
        // ShareAlbum 4 dragon321 Owner
        // ShareAlbum 4 dragon11 Viewer
        public static string Execute(string[] data, Session session)
        {
            if (!session.IsLoggedIn())
            {
                throw new InvalidOperationException("Invalid credentials!");
            }

            int    albumId         = int.Parse(data[0]);
            string username        = data[1];
            string permissionInput = data[2];

            using (PhotoShareContext context = new PhotoShareContext())
            {
                Album album = context.Albums
                              .Find(albumId);

                if (album == null)
                {
                    throw new ArgumentException($"Album with Id {albumId} not found!");
                }

                User user = context.Users
                            .FirstOrDefault(u => u.Username == username);

                if (user == null)
                {
                    throw new ArgumentException($"User {username} not found!");
                }

                if (user.Username != session.User.Username)
                {
                    throw new InvalidOperationException("Invalid credentials!");
                }

                Role permission;
                if (!Enum.TryParse(permissionInput, out permission))
                {
                    throw new ArgumentException("Permission must be either “Owner” or “Viewer”!");
                }

                AlbumRole newAlbumRole = new AlbumRole()
                {
                    Album = album,
                    User  = user,
                    Role  = permission
                };

                if (context.AlbumRoles.Any(ar => ar.Album == newAlbumRole.Album && ar.User == newAlbumRole.User))
                {
                    throw new ArgumentException($"Album {album.Name} already shared to {user.Username} with role {permission}");
                }

                context.AlbumRoles.Add(newAlbumRole);
                context.SaveChanges();

                return($"Username {user.Username} added to album {album.Name} ({permission})");
            }
        }
 private void SetPassword(User user, string newPassword)
 {
     using (var context = new PhotoShareContext())
     {
         user.Password = newPassword;
         context.Users.Update(user);
         context.SaveChanges();
     }
 }
        // RegisterUser <username> <password> <repeat-password> <email>
        public static string Execute(string[] data)
        {
            string username       = data[1];
            string password       = data[2];
            string repeatPassword = data[3];
            string email          = data[4];

            if (data.Length < 5)
            {
                throw new IndexOutOfRangeException($"Command {data[0]} not valid!");
            }

            if (Session.User != null)
            {
                throw new InvalidOperationException("Invalid Credentials!");
            }

            if (password != repeatPassword)
            {
                throw new ArgumentException("Passwords do not match!");
            }

            using (var db = new PhotoShareContext())
            {
                //var checkUser = db.Users
                //    .AsNoTracking()
                //    .Where(e => e.Username == username)
                //    .FirstOrDefault();
                //if (checkUser != null)
                //{
                //    throw new InvalidOperationException($"Username {username} is already taken!");
                //}

                if (db.Users.Any(e => e.Username == username))
                {
                    throw new InvalidOperationException($"Username {username} is already taken!");
                }
            }

            User user = new User
            {
                Username         = username,
                Password         = password,
                Email            = email,
                IsDeleted        = false,
                RegisteredOn     = DateTime.Now,
                LastTimeLoggedIn = DateTime.Now
            };

            using (PhotoShareContext context = new PhotoShareContext())
            {
                context.Users.Add(user);
                context.SaveChanges();
            }

            return("User " + user.Username + " was registered successfully!");
        }
Exemple #4
0
        // ShareAlbum <albumId> <username> <permission>
        // For example:
        // ShareAlbum 4 dragon321 Owner
        // ShareAlbum 4 dragon11 Viewer
        public static string Execute(string[] data)
        {
            var albumId    = int.Parse(data[1]);
            var userName   = data[2];
            var permission = data[3].ToLower();

            if (data.Length < 4)
            {
                throw new IndexOutOfRangeException($"Command {data[0]} not valid!");
            }

            using (var db = new PhotoShareContext())
            {
                var album = db.Albums.FirstOrDefault(e => e.Id == albumId);

                if (album == null)
                {
                    throw new ArgumentException($"Album {albumId} not found!");
                }

                var user = db.Users.FirstOrDefault(e => e.Username == userName);

                if (Session.User.Username != userName)
                {
                    throw new ArgumentException("Invalid credentials!");
                }

                if (user == null)
                {
                    throw new ArgumentException($"User {userName} not found!");
                }

                var albumRole = new AlbumRole();

                switch (permission)
                {
                case "owner":
                    albumRole.Album = album;
                    albumRole.User  = user;
                    albumRole.Role  = Role.Owner;
                    break;

                case "viewer":
                    albumRole.Album = album;
                    albumRole.User  = user;
                    albumRole.Role  = Role.Viewer;
                    break;

                default:
                    throw new ArgumentException("Permission must be either “Owner” or “Viewer”!");
                }
                db.AlbumRoles.Add(albumRole);
                db.SaveChanges();

                return($"Username {userName} added to album {album.Name} ({permission})");
            }
        }
 public bool IsPicExisting(string albumName, string picTitle, string pictureFilePath)
 {
     using (PhotoShareContext context = new PhotoShareContext())
     {
         return(context.Albums.SingleOrDefault(alb => alb.Name == albumName)
                .Pictures
                .Any(p => p.Title == picTitle && p.Path == pictureFilePath));
     }
 }
Exemple #6
0
        // AcceptFriend <username1> <username2>
        public override string Execute(string[] data, PhotoShareContext context)
        {
            string receiverUsername = data[0];
            string senderUsername   = data[1];

            User receiver = context
                            .Users
                            .Include(u => u.FriendsAdded)
                            .ThenInclude(f => f.Friend)
                            .Include(u => u.AddedAsFriendBy)
                            .ThenInclude(f => f.Friend)
                            .SingleOrDefault(u => u.Username.Equals(receiverUsername));

            if (receiver == null)
            {
                throw new ArgumentException($"{receiverUsername} not found!");
            }

            if (!Helpers.IsUserTheCurrentlyLoggedOne(receiver))
            {
                throw new InvalidOperationException("Invalid credentials!");
            }

            User sender = context
                          .Users
                          .Include(u => u.FriendsAdded)
                          .ThenInclude(f => f.Friend)
                          .Include(u => u.AddedAsFriendBy)
                          .ThenInclude(f => f.Friend)
                          .SingleOrDefault(u => u.Username.Equals(senderUsername));

            if (sender == null)
            {
                throw new ArgumentException($"{senderUsername} not found!");
            }

            if (receiver.FriendsAdded.Any(f => f.Friend.Username.Equals(senderUsername)))
            {
                throw new InvalidOperationException($"{senderUsername} is already a friend to {receiverUsername}!");
            }

            if (!sender.FriendsAdded.Any(f => f.Friend.Username.Equals(receiverUsername)))
            {
                throw new InvalidOperationException($"{senderUsername} has not added {receiverUsername} as a friend!");
            }

            Friendship friendship = new Friendship
            {
                User   = receiver,
                Friend = sender
            };

            receiver.FriendsAdded.Add(friendship);
            context.SaveChanges();

            return($"{receiverUsername} accepted {senderUsername} as a friend.");
        }
Exemple #7
0
 public void UpdateCurrentTown(User updatedUser)
 {
     using (PhotoShareContext context = new PhotoShareContext())
     {
         context.Users.SingleOrDefault(u => u.Id == updatedUser.Id).CurrentTown =
             context.Towns.FirstOrDefault(t => t.Id == updatedUser.CurrentTown.Id);
         context.SaveChanges();
     }
 }
 private void SetBornTown(User currentUser, Town userTown)
 {
     using (var context = new PhotoShareContext())
     {
         currentUser.BornTown = userTown;
         context.Users.Update(currentUser);
         context.SaveChanges();
     }
 }
Exemple #9
0
        // ModifyUser <username> <property> <new value>
        // For example:
        // ModifyUser <username> Password <NewPassword>
        // ModifyUser <username> BornTown <newBornTownName>
        // ModifyUser <username> CurrentTown <newCurrentTownName>
        // !!! Cannot change username
        public string Execute(string[] data)
        {
            if (data.Length != 3)
            {
                throw new InvalidOperationException("Command ModifyUser not valid!");
            }

            string username = data[0];
            string property = data[1];
            string value    = data[2];

            if (Session.LoggedUser == null || username != Session.LoggedUser.Username)
            {
                throw new InvalidOperationException("Invalid credentials!");
            }

            using (var context = new PhotoShareContext())
            {
                var user = context.Users
                           .Include(u => u.BornTown)
                           .Include(u => u.CurrentTown)
                           .SingleOrDefault(u => u.Username == username);

                if (user == null)
                {
                    throw new ArgumentException($"User {username} not found!");
                }

                if (property.Contains("Town") && !context.Towns.Any(t => t.Name == value))
                {
                    throw new ArgumentException($"Value {value} not valid.{Environment.NewLine}Town {value} not found!");
                }
                switch (property)
                {
                case "Password":
                    if (!value.Any(Char.IsDigit) || !value.Any(Char.IsLower) || value.Length < 6 || value.Length > 50)
                    {
                        throw new ArgumentException($"Value {value} not valid.{Environment.NewLine}Invalid Password");
                    }
                    user.Password = value;
                    break;

                case "BornTown":
                    user.BornTownId = context.Towns.SingleOrDefault(t => t.Name == value).Id;
                    break;

                case "CurrentTown":
                    user.CurrentTownId = context.Towns.SingleOrDefault(t => t.Name == value).Id;
                    break;

                default: throw new ArgumentException($"Property {property} not supported!");
                }

                context.SaveChanges();
            }
            return($"User {username} {property} is {value}.");
        }
Exemple #10
0
        // AcceptFriend <username1> <username2>
        public static string Execute(string[] data)
        {
            var acceptingUserName  = data[1];
            var requestingUserName = data[2];

            if (data.Length < 3)
            {
                throw new IndexOutOfRangeException($"Command {data[0]} not valid!");
            }

            using (var db = new PhotoShareContext())
            {
                var acceptingUser = db.Users.Include(e => e.FriendsAdded).ThenInclude(fa => fa.Friend).FirstOrDefault(e => e.Username == acceptingUserName);

                if (Session.User.Username != acceptingUserName)
                {
                    throw new ArgumentException("Invalid credentials!");
                }

                if (acceptingUser == null)
                {
                    throw new ArgumentException($"{acceptingUserName} not found!");
                }

                var requestingUser = db.Users.Include(e => e.FriendsAdded).ThenInclude(fa => fa.Friend).FirstOrDefault(e => e.Username == requestingUserName);

                if (requestingUser == null)
                {
                    throw new ArgumentException($"{requestingUserName} not found!");
                }

                bool alreadyAccepted = acceptingUser.FriendsAdded.Any(u => u.Friend == requestingUser);

                bool Added = requestingUser.FriendsAdded.Any(u => u.Friend == acceptingUser);

                if (!Added)
                {
                    throw new InvalidOperationException($"{requestingUserName} has not added {acceptingUserName} as a friend");
                }

                if (alreadyAccepted && Added)
                {
                    throw new InvalidOperationException($"{requestingUserName} is already a friend to {acceptingUserName}");
                }

                acceptingUser.FriendsAdded.Add(new Friendship
                {
                    User   = acceptingUser,
                    Friend = requestingUser
                });

                db.SaveChanges();

                return($"{acceptingUserName} accepted {requestingUserName} as a friend");
            }
        }
        // CreateAlbum <username> <albumTitle> <BgColor> <tag1> <tag2>...<tagN>
        public static string Execute(string[] data)
        {
            var username   = data[0];
            var albumTitle = data[1];

            var tags = new List <string>();

            for (int i = 3; i < data.Length; i++)
            {
                tags.Add($"#{data[i]}");
            }
            using (var context = new PhotoShareContext())
            {
                var user = context.Users.FirstOrDefault(x => x.Username == username);
                if (user == null)
                {
                    throw new ArgumentException($"User {data[0]} not found!");
                }
                if (user.AlbumRoles.Any(x => x.Album.Name == albumTitle))
                {
                    throw new ArgumentException($"Album {albumTitle} exists!");
                }
                if (!Enum.GetNames(typeof(Color)).Contains(data[2]))
                {
                    throw new ArgumentException($"Color {data[2]} not found!");
                }
                foreach (var tag in tags)
                {
                    if (!context.Tags.Select(x => x.Name).Any(x => x == $"#{tag}"))
                    {
                        throw new ArgumentException($"Invalid tags!");
                    }
                }
                var album = new Album()
                {
                    Name            = albumTitle,
                    BackgroundColor = (Color)Enum.Parse(typeof(Color), data[2]),
                };
                context.Albums.Add(album);

                foreach (var tag in tags)
                {
                    Tag foundTag = context.Tags.SingleOrDefault(x => x.Name == tag);

                    context.AlbumTags.Add(new AlbumTag()
                    {
                        Album = album,
                        Tag   = foundTag
                    });
                }

                context.SaveChanges();

                return($"Album {albumTitle} successfully created!");
            }
        }
        // AddTagTo <albumName> <tag>
        public static string Execute(string[] data, Session session)
        {
            if (!session.IsLoggedIn())
            {
                throw new InvalidOperationException("Invalid credentials!");
            }

            string albumName = data[0];
            string tagName   = data[1].ValidateOrTransform();

            using (PhotoShareContext context = new PhotoShareContext())
            {
                Album album = context.Albums
                              .Include(a => a.AlbumTags)
                              .Include(a => a.AlbumRoles)
                              .ThenInclude(ar => ar.User)
                              .FirstOrDefault(a => a.Name == albumName);

                if (album == null)
                {
                    throw new ArgumentException($"Album {albumName} do not exist!");
                }

                bool isUserOwner = album.AlbumRoles
                                   .Any(ar => ar.Role == Role.Owner && ar.User.Username == session.User.Username);

                if (!isUserOwner)
                {
                    throw new InvalidOperationException("Invalid credentials!");
                }

                Tag tag = context.Tags
                          .FirstOrDefault(t => t.Name == tagName);

                if (tag == null)
                {
                    throw new ArgumentException($"Tag {tagName} do not exist!");
                }

                AlbumTag albumTag = new AlbumTag()
                {
                    Album = album,
                    Tag   = tag
                };

                if (album.AlbumTags.Any(at => at.AlbumId == album.Id && at.TagId == tag.Id))
                {
                    throw new InvalidOperationException($"Tag {tag.Name} is already added to album {album.Name}");
                }

                album.AlbumTags.Add(albumTag);
                context.SaveChanges();
            }

            return($"Tag {tagName} added to {albumName}!");
        }
Exemple #13
0
        // ShareAlbum <albumId> <username> <permission>
        // For example:
        // ShareAlbum 4 dragon321 Owner
        // ShareAlbum 4 dragon11 Viewer
        public static string Execute(string[] data)
        {
            if (data.Length != 4)
            {
                throw new InvalidOperationException($"Command {data[0]} not valid!");
            }

            int    albumId        = int.Parse(data[1]);
            string username       = data[2];
            string permissionType = ConvertToTitleCase(data[3].ToLower());
            string albumTitle     = string.Empty;

            using (var context = new PhotoShareContext())
            {
                var album = context.Albums
                            .Include(a => a.AlbumRoles)
                            .FirstOrDefault(a => a.Id == albumId);

                if (album == null)
                {
                    throw new ArgumentException($"Album {albumId} not found!");
                }

                albumTitle = album.Name;

                var user = context.Users
                           .Include(a => a.AlbumRoles)
                           .FirstOrDefault(u => u.Username == username);

                if (user == null)
                {
                    throw new ArgumentException($"User {username} not found!");
                }

                bool permissionTypeIsValid = Enum.TryParse(permissionType, out Role role);

                if (!permissionTypeIsValid)
                {
                    throw new ArgumentException("Permission must be either “Owner” or “Viewer”!");
                }

                AuthenticationCheck.CheckAlbumOwnership(Session.User.Id, albumId, context);

                context.AlbumRoles.Add(
                    new AlbumRole()
                {
                    AlbumId = albumId,
                    UserId  = user.Id,
                    Role    = role
                });

                context.SaveChanges();
            }

            return($"Username {username} added to album {albumTitle} ({permissionType})");
        }
        public void DeleteUser(string username)
        {
            using (PhotoShareContext context = new PhotoShareContext())
            {
                User user = context.Users.FirstOrDefault(u => u.Username == username);
                user.IsDeleted = true;

                context.SaveChanges();
            }
        }
Exemple #15
0
        private static void ResetDatabase()
        {
            PhotoShareContext context = new PhotoShareContext();

            using (context)
            {
                context.Database.EnsureDeleted();
                context.Database.EnsureCreated();
            }
        }
        public User CheckUserExistence(string userName, PhotoShareContext context)
        {
            var user = context.Users.SingleOrDefault(u => u.Username == userName);

            if (user == null)
            {
                throw new ArgumentException($"User with {userName} was not found!");
            }
            return(user);
        }
Exemple #17
0
        private static int?GetTownId(PhotoShareContext context, string nulll)
        {
            var townIDs = context.Towns.Where(x => x.Country == country).Select(x => x.Id).ToArray();

            if (townIDs.Length == 0)
            {
                return(null);
            }
            return(townIDs[random.Next(1, townIDs.Length)]);
        }
Exemple #18
0
 public bool isRoleExistingForUser(string username, int albumId, Role role)
 {
     using (PhotoShareContext context = new PhotoShareContext())
     {
         return(context.AlbumRoles.Any(ar =>
                                       ar.User.Username == username &&
                                       ar.Album.Id == albumId
                                       ));
     }
 }
Exemple #19
0
        // ShareAlbum <albumId> <username> <permission>
        // For example:
        // ShareAlbum 4 dragon321 Owner
        // ShareAlbum 4 dragon11 Viewer
        public static string Execute(string[] data)
        {
            var albumId    = int.Parse(data[1]);
            var username   = data[2];
            var permission = data[3];

            using (var db = new PhotoShareContext())
            {
                var album = db.Albums
                            .Where(x => x.Id == albumId)
                            .SingleOrDefault();

                if (album == null)
                {
                    throw new ArgumentException($"Album with ID:{albumId} not found!");
                }

                var user = db.Users
                           .Where(x => x.Username == username)
                           .FirstOrDefault();

                if (user == null)
                {
                    throw new ArgumentException($"User {username} not found!");
                }

                var role = new Role();

                switch (permission.ToLower())
                {
                case "owner":
                    role = Role.Owner;
                    break;

                case "viewer":
                    role = Role.Viewer;
                    break;

                default:
                    throw new ArgumentException("Permission must be either “Owner” or “Viewer”!");
                }
                ;
                var albumRole = new AlbumRole()
                {
                    Album = album,
                    User  = user,
                    Role  = role
                };

                db.AlbumRoles.Add(albumRole);
                db.SaveChanges();

                return($"Username {username} added to album {album.Name} ({permission})");
            }
        }
Exemple #20
0
        // AcceptFriend <username1> <username2>
        public static string Execute(string[] data)
        {
            var user1Username = data[0];
            var user2Username = data[1];

            using (var context = new PhotoShareContext())
            {
                var user1 = context.Users
                            .Include(u => u.FriendsAdded)
                            .ThenInclude(fa => fa.Friend)
                            .FirstOrDefault(u => u.Username == user1Username);

                var user2 = context.Users
                            .Include(u => u.FriendsAdded)
                            .ThenInclude(fa => fa.Friend)
                            .FirstOrDefault(u => u.Username == user2Username);

                if (user1 == null)
                {
                    throw new ArgumentException($"{user1Username} not found!");
                }

                if (user2 == null)
                {
                    throw new ArgumentException($"{user2Username} not found!");
                }

                var iSUser1HasFriendUser2 = user1.FriendsAdded.Any(u => u.Friend == user2);
                var IsUser2HasFriendUser1 = user2.FriendsAdded.Any(u => u.Friend == user1);

                if (!iSUser1HasFriendUser2 && IsUser2HasFriendUser1)
                {
                    throw new InvalidOperationException($"{user2Username} is already a friend to {user1Username}");
                }

                if (iSUser1HasFriendUser2 && !IsUser2HasFriendUser1)
                {
                    throw new InvalidOperationException($"{user2Username} has not added {user1Username} as a friend");
                }

                //if (!iSUser1HasFriendUser2 && IsUser2HasFriendUser1)
                //{
                //    throw new InvalidOperationException($"{user2Username} has not added {user1Username} as a friend");
                //}

                user2.FriendsAdded.Add(new Friendship()
                {
                    User   = user2,
                    Friend = user1
                });

                context.SaveChanges();
                return($"{user1Username} accepted {user2Username} as a friend");
            }
        }
        // ShareAlbum <albumId> <username> <permission>
        // For example:
        // ShareAlbum 4 dragon321 Owner
        // ShareAlbum 4 dragon11 Viewer
        public override string Execute(string[] data, PhotoShareContext context)
        {
            int albumId = int.Parse(data[0]);

            Album album = context.Albums
                          .Include(a => a.AlbumRoles)
                          .SingleOrDefault(a => a.Id == albumId);

            if (album == null)
            {
                throw new ArgumentException($"Album {albumId} not found!");
            }

            string username = data[1];

            User user = context.Users
                        .SingleOrDefault(u => u.Username.Equals(username));

            if (user == null)
            {
                throw new ArgumentException($"User {username} not found!");
            }

            bool isPermissionValid = Enum.TryParse(data[2], true, out Role permissionRole);

            if (!isPermissionValid)
            {
                throw new ArgumentException("Permission must be either “Owner” or “Viewer”!");
            }

            AlbumRole role = new AlbumRole
            {
                Album = album,
                User  = user,
                Role  = permissionRole
            };

            if (album.AlbumRoles.Any(r => r.UserId == user.UserId && r.AlbumId == album.Id))
            {
                Role currentRole = album.AlbumRoles.Single(r => r.UserId == user.UserId && r.AlbumId == album.Id).Role;

                throw new ArgumentException($"User {username} has already assigned {currentRole.ToString()} role to album {album.Name}.");
            }

            if (!album.AlbumRoles.Select(r => r.UserId).Contains(Session.User.UserId) ||
                album.AlbumRoles.Single(r => r.UserId == Session.User.UserId).Role != Role.Owner)
            {
                throw new InvalidOperationException("Invalid credentials!");
            }

            album.AlbumRoles.Add(role);
            context.SaveChanges();

            return($"Username {user.Username} added to album {album.Name} ({permissionRole.ToString()})");
        }
        // AddFriend <username1> <username2>
        public string Execute(string[] data)
        {
            if (data.Length != 2)
            {
                throw new InvalidOperationException("Command AddFriend not valid!");
            }

            if (Session.LoggedUser == null || data[0] != Session.LoggedUser.Username)
            {
                throw new InvalidOperationException("Invalid credentials!");
            }

            using (var context = new PhotoShareContext())
            {
                var user1 = context.Users
                            .Include(u => u.FriendsAdded)
                            .Include(u => u.AddedAsFriendBy)
                            .SingleOrDefault(u => u.Username == data[0]);

                var user2 = context.Users
                            .Include(u => u.FriendsAdded)
                            .Include(u => u.AddedAsFriendBy)
                            .SingleOrDefault(u => u.Username == data[1]);

                if (user1 == null || user2 == null || user1.IsDeleted == true || user2.IsDeleted == true)
                {
                    throw new ArgumentException(user1 == null || user1.IsDeleted == true
                                                    ? $"{data[0]} not found!" : $"{data[1]} not found!");
                }

                if (user1.Username == user2.Username)
                {
                    throw new InvalidOperationException("Invalid friend request!");
                }

                if (user1.FriendsAdded.Any(u => u.FriendId == user2.Id) && user2.FriendsAdded.All(u => u.FriendId != user1.Id))
                {
                    throw new InvalidOperationException($"You have already sent a request to {user2.Username}");
                }

                if (user1.FriendsAdded.Any(u => u.FriendId == user2.Id) && user2.FriendsAdded.Any(u => u.FriendId == user1.Id))
                {
                    throw new InvalidOperationException($"{user2.Username} is already a friend to {user1.Username}");
                }

                user1.FriendsAdded.Add(new Friendship()
                {
                    User = user1, Friend = user2
                });

                context.SaveChanges();
            }

            return($"Friend {data[1]} added to {data[0]}");
        }
Exemple #23
0
        // AddFriend <username1> <username2>
        public static string Execute(string[] data)
        {
            string reqUsername         = data[1];
            string addedFriendUsername = data[2];

            using (var context = new PhotoShareContext())
            {
                var loggedUser = IsLogged.IsLoggedIn(context);

                var reqUser = context.Users
                              .Include(u => u.FriendsAdded)
                              .ThenInclude(fa => fa.Friend)
                              .FirstOrDefault(u => u.Username == reqUsername);
                if (loggedUser != reqUser)
                {
                    throw new InvalidOperationException("Invalid credentials!");
                }

                if (reqUser == null)
                {
                    throw new ArgumentException($"{reqUsername} not found!");
                }
                var addedFriend = context.Users
                                  .Include(u => u.FriendsAdded)
                                  .ThenInclude(fa => fa.Friend)
                                  .FirstOrDefault(u => u.Username == addedFriendUsername);
                if (addedFriend == null)
                {
                    throw new ArgumentException($"{addedFriendUsername} not found!");
                }

                bool alreadyAdded = reqUser.FriendsAdded.Any(u => u.Friend == addedFriend);
                bool accepted     = addedFriend.FriendsAdded.Any(u => u.Friend == reqUser);
                if (alreadyAdded && accepted)
                {
                    throw new InvalidOperationException($"{addedFriendUsername} is already a friend to {reqUsername}");
                }
                if (alreadyAdded && !accepted)
                {
                    throw new InvalidOperationException($"{reqUsername} is already sent invite to {addedFriendUsername}");
                }
                if (!alreadyAdded && accepted)
                {
                    throw new InvalidOperationException($"{addedFriend} is already sent invite to {reqUser}");
                }
                reqUser.FriendsAdded.Add(
                    new Friendship()
                {
                    User   = reqUser,
                    Friend = addedFriend
                });
                context.SaveChanges();
            }
            return($"Friend {addedFriendUsername} added to {reqUsername}");
        }
Exemple #24
0
        // ModifyUser <username> <property> <new value>
        // For example:
        // ModifyUser <username> Password <NewPassword>
        // ModifyUser <username> BornTown <newBornTownName>
        // ModifyUser <username> CurrentTown <newCurrentTownName>
        // !!! Cannot change username
        public string Execute(string[] data)
        {
            Authorization.Instance.ValidateIsUserLoggedIn();

            string userName = data[0];
            string property = data[1];
            string value    = data[2];

            if (Authorization.Instance.CurrentUser.Username != userName)
            {
                throw new InvalidOperationException("You can modify only your profile!");
            }
            using (PhotoShareContext context = new PhotoShareContext())
            {
                if (!context.Users.Any(u => u.Username == userName))
                {
                    throw new ArgumentException($"User {userName} not found!");
                }

                User user = context.Users.FirstOrDefault(u => u.Username == userName);

                switch (property)
                {
                case "Password":
                    user.Password = value;
                    context.SaveChanges();
                    break;

                case "BornTown":
                    if (!context.Towns.Any(t => t.Name == value))
                    {
                        throw new ArgumentException($"Value {value} not valid!\nTown {value} not found!");
                    }
                    Town town = context.Towns.FirstOrDefault(t => t.Name == value);
                    user.BornTown = town;
                    context.SaveChanges();
                    break;

                case "CurrentTown":
                    if (!context.Towns.Any(t => t.Name == value))
                    {
                        throw new ArgumentException($"Value {value} not valid!\nTown {value} not found!");
                    }
                    Town town1 = context.Towns.FirstOrDefault(t => t.Name == value);
                    user.CurrentTown = town1;
                    context.SaveChanges();
                    break;

                default:
                    throw new ArgumentException($"Property {property} not supported!");
                }
            }

            return("User " + userName + " " + property + " is " + value + ".");
        }
 public bool IsAlbumSharedWithUserInRole(int albumId, string username, Role role)
 {
     using (PhotoShareContext context = new PhotoShareContext())
     {
         return(context.AlbumRoles
                .Any(ar =>
                     ar.Album.Id == albumId &&
                     ar.User.Username == username &&
                     ar.Role == role));
     }
 }
        public void AddTagToAlbum(string albumName, string tagName)
        {
            using (PhotoShareContext context = new PhotoShareContext())
            {
                Tag   tag   = context.Tags.SingleOrDefault(t => t.Name == tagName);
                Album album = context.Albums.SingleOrDefault(a => a.Name == albumName);

                album.Tags.Add(tag);
                context.SaveChanges();
            }
        }
 public bool HasAlbumTag(string albumName, string tagName)
 {
     using (PhotoShareContext context = new PhotoShareContext())
     {
         return(context.Albums
                .Include("Tags")
                .SingleOrDefault(a => a.Name == albumName)
                .Tags
                .Any(t => t.Name == tagName));
     }
 }
 public bool IsPictureInAlbum(string albumName, string pictureTitle, string pictureFilePath)
 {
     using (PhotoShareContext context = new PhotoShareContext())
     {
         return(context.Albums
                .Include("Pictures")
                .SingleOrDefault(a => a.Name == albumName)
                .Pictures
                .Any(p => p.Title == pictureTitle && p.Path == pictureFilePath));
     }
 }
Exemple #29
0
        public void ModifyPassword(string username, string password)
        {
            using (PhotoShareContext context = new PhotoShareContext())
            {
                var user = context.Users.FirstOrDefault(u => u.Username == username);

                user.Password = password;

                context.SaveChanges();
            }
        }
        public bool IsFriendToUser(string userUsername, string friendUsername)
        {
            using (PhotoShareContext context = new PhotoShareContext())
            {
                User user = context.Users
                            .Include(u => u.Friends)
                            .SingleOrDefault(u => u.Username == userUsername);

                return(user.Friends.Any(f => f.Username == friendUsername));
            }
        }