// DeleteUser <username> public static string Execute(string[] data) { if (data.Length != 2) { throw new InvalidOperationException($"Command {data[0]} not valid!"); } string username = data[1]; AuthenticationCheck.CheckUserCredentials(username); using (var context = new PhotoShareContext()) { var user = context.Users .FirstOrDefault(u => u.Username == username); if (user == null) { throw new ArgumentException($"User {username} not found!"); } if (user.IsDeleted.Value == true) { throw new InvalidOperationException($"User {username} is already deleted!"); } user.IsDeleted = true; context.SaveChanges(); } return($"User {username} was deleted successfully!"); }
// AddTown <townName> <countryName> public static string Execute(string[] data) { if (data.Length != 3) { throw new InvalidOperationException($"Command {data[0]} not valid!"); } AuthenticationCheck.CheckLogin(); string townName = data[1]; string country = data[2]; using (PhotoShareContext context = new PhotoShareContext()) { if (context.Towns.Any(t => t.Name == townName)) { throw new ArgumentException($"Town {townName} was already added!"); } Town town = new Town { Name = townName, Country = country }; context.Towns.Add(town); context.SaveChanges(); return($"Town {townName} was added successfully!"); } }
// AddTag <tag> public static string Execute(string[] data) { if (data.Length != 2) { throw new InvalidOperationException($"Command {data[0]} not valid!"); } AuthenticationCheck.CheckLogin(); string tagName = data[1].ValidateOrTransform(); using (PhotoShareContext context = new PhotoShareContext()) { if (context.Tags.Any(t => t.Name == tagName)) { throw new ArgumentException($"Tag {tagName} exists!"); } context.Tags.Add(new Tag { Name = tagName }); context.SaveChanges(); } return($"Tag {tagName} was added successfully!"); }
// AcceptFriend <username1> <username2> public static string Execute(string[] data) { if (data.Length != 3) { throw new InvalidOperationException($"Command {data[0]} not valid!"); } AuthenticationCheck.CheckLogin(); string rqAccepterUsername = data[1]; string rqSenderUsername = data[2]; using (var context = new PhotoShareContext()) { var rqAccepter = context.Users .Include(u => u.FriendsAdded) .ThenInclude(fa => fa.Friend) .FirstOrDefault(u => u.Username == rqAccepterUsername); var rqSender = context.Users .Include(u => u.FriendsAdded) .ThenInclude(fa => fa.Friend) .FirstOrDefault(u => u.Username == rqSenderUsername); if (rqAccepter == null || rqSender == null) { string userDoesNotExist = rqAccepter == null ? rqAccepterUsername : rqSenderUsername; throw new ArgumentException($"{userDoesNotExist} not found!"); } AuthenticationCheck.CheckUserCredentials(rqAccepterUsername); bool alreadyFriends = (rqAccepter.FriendsAdded.Any(u => u.Friend == rqSender) && (rqSender.FriendsAdded.Any(u => u.Friend == rqAccepter))); bool isInvititationSent = rqSender.FriendsAdded.Any(u => u.Friend == rqAccepter); if (alreadyFriends) { throw new InvalidOperationException($"{rqSenderUsername} is already a friend to {rqAccepterUsername}"); } if (!isInvititationSent) { throw new InvalidOperationException($"{rqSenderUsername} has not added {rqAccepterUsername} as a friend"); } rqAccepter.FriendsAdded.Add( new Friendship() { User = rqAccepter, Friend = rqSender }); context.SaveChanges(); } return($"{rqAccepterUsername} accepted {rqSenderUsername} as a friend"); }
// 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 SimpleAuthenticator(string realm, AuthenticationCheck authenticationCheck) : base(realm) { if (authenticationCheck != null) { AuthenticationCheck = authenticationCheck; } else { throw new NotImplementedException("No DoCheck delegate was specified for WWWAuthenticator."); } }
// AddTagTo <albumName> <tag> public static string Execute(string[] data) { if (data.Length != 3) { throw new InvalidOperationException($"Command {data[0]} not valid!"); } AuthenticationCheck.CheckLogin(); string albumTitle = data[1]; string tagName = TagUtilities.ValidateOrTransform(data[2]); using (var context = new PhotoShareContext()) { var album = context.Albums .Include(a => a.AlbumTags) .ThenInclude(at => at.Tag) .FirstOrDefault(a => a.Name.ToLower() == albumTitle.ToLower()); var tag = context.Tags .FirstOrDefault(t => t.Name.ToLower() == tagName.ToLower()); if (album == null || tag == null) { throw new ArgumentException("Either tag or album do not exist!"); } if (album.AlbumTags.Any(at => at.Tag.Name.ToLower() == tagName.ToLower())) { throw new ArgumentException($"Tag {tagName} already present in album {albumTitle}"); } var userId = Session.User.Id; AuthenticationCheck.CheckAlbumOwnership(userId, album.Id, context); context.AlbumTags.Add( new AlbumTag() { Album = album, Tag = tag }); context.SaveChanges(); } return($"Tag {tagName} added to {albumTitle}!"); }
// UploadPicture <albumName> <pictureTitle> <pictureFilePath> public static string Execute(string[] data) { if (data.Length != 4) { throw new InvalidOperationException($"Command {data[0]} not valid!"); } AuthenticationCheck.CheckLogin(); string albumTitle = data[1]; string pictureTitle = data[2]; string filePath = data[3]; using (var context = new PhotoShareContext()) { var album = context.Albums .Include(a => a.Pictures) .SingleOrDefault(a => a.Name == albumTitle); if (album == null) { throw new ArgumentException($"Album {albumTitle} not found!"); } int currentlyLoggedinUserId = Session.User.Id; AuthenticationCheck.CheckAlbumOwnership(currentlyLoggedinUserId, album.Id, context); if (album.Pictures.Any(p => p.Title.ToLower() == pictureTitle.ToLower())) { throw new InvalidOperationException( $"A picture with the name {pictureTitle} is already present in album {albumTitle}"); } album.Pictures.Add( new Picture() { Title = pictureTitle, Path = filePath, Album = album }); context.SaveChanges(); } return($"Picture {pictureTitle} added to {albumTitle}!"); }
// RegisterUser <username> <password> <repeat-password> <email> public static string Execute(string[] data) { if (data.Length != 5) { throw new InvalidOperationException($"Command {data[0]} not valid!"); } AuthenticationCheck.CheckLogout(); string username = data[1]; string password = data[2]; string repeatPassword = data[3]; string email = data[4]; using (var context = new PhotoShareContext()) { if (context.Users.Any(u => u.Username == username)) { throw new InvalidOperationException($"Username {username} is already taken!"); } } if (password != repeatPassword) { throw new ArgumentException("Passwords do not match!"); } 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!"); }
// CreateAlbum <username> <albumTitle> <BgColor> <tag1> <tag2>...<tagN> public static string Execute(string[] data) { if (data.Length < 4) { throw new InvalidOperationException($"Command {data[0]} not valid!"); } AuthenticationCheck.CheckLogin(); string username = data[1]; string albumTitle = data[2]; string bgColor = ConvertToTitleCase(data[3].ToLower()); var tags = data .Skip(4) .Select(t => TagUtilities.ValidateOrTransform(t)) .ToArray(); AuthenticationCheck.CheckUserCredentials(username); using (var context = new PhotoShareContext()) { var user = context.Users .FirstOrDefault(u => u.Username == username); if (user == null) { throw new ArgumentException($"User {username} not found!"); } if (context.Albums.Any(a => a.Name == albumTitle)) { throw new ArgumentException($"Album {albumTitle} exists!"); } bool bgColorIsValid = Enum.TryParse(bgColor, out Color color); if (!bgColorIsValid) { throw new ArgumentException($"Color {bgColor} not found!"); } var album = new Album() { Name = albumTitle, IsPublic = false, BackgroundColor = color, }; context.Albums.Add(album); var currentAlbumRole = new AlbumRole { Album = album, User = user, Role = Role.Owner }; context.AlbumRoles.Add(currentAlbumRole); for (int i = 0; i < tags.Length; i++) { var currentTag = context.Tags.FirstOrDefault(t => t.Name.ToLower() == tags[i].ToLower()); if (currentTag == null) { throw new ArgumentException("Invalid tags!"); } context.AlbumTags.Add( new AlbumTag() { TagId = currentTag.Id, AlbumId = album.Id }); } context.SaveChanges(); } return($"Album {albumTitle} successfully created!"); }
public Login() { InitializeComponent(); ac = new AuthenticationCheck(); }
public Register() { InitializeComponent(); au = new AuthenticationCheck(); }
public SimpleAuthenticator(string realm, AuthenticationCheck authenticationCheck) : base(realm) { if (authenticationCheck != null) AuthenticationCheck = authenticationCheck; else throw new NotImplementedException("No DoCheck delegate was specified for WWWAuthenticator."); }
// ModifyUser <username> <property> <new value> // For example: // ModifyUser <username> Password <NewPassword> // ModifyUser <username> BornTown <newBornTownName> // ModifyUser <username> CurrentTown <newCurrentTownName> // !!! Cannot change username public static string Execute(string[] data) { if (data.Length != 4) { throw new InvalidOperationException($"Command {data[0]} not valid!"); } string username = data[1]; string property = data[2]; string newValue = data[3]; string exceptionMessage = $"Value {newValue} not valid.{Environment.NewLine}"; using (var context = new PhotoShareContext()) { var currentUser = context.Users .Where(u => u.Username == username) .FirstOrDefault(); if (currentUser == null) { throw new ArgumentException($"User {username} not found!"); } AuthenticationCheck.CheckUserCredentials(username); switch (property.ToLower()) { case "password": if (!newValue.Any(char.IsLower) || !newValue.Any(char.IsDigit)) { throw new ArgumentException($"{exceptionMessage}Invalid Password"); } currentUser.Password = newValue; break; case "borntown": var bornTownValue = context.Towns .Where(t => t.Name == newValue) .FirstOrDefault(); if (bornTownValue == null) { throw new ArgumentException($"{exceptionMessage}Town {newValue} not found!"); } currentUser.BornTown = bornTownValue; break; case "currenttown": var currentTownValue = context.Towns .Where(t => t.Name == newValue) .FirstOrDefault(); if (currentTownValue == null) { throw new ArgumentException($"{exceptionMessage}Town {newValue} not found!"); } currentUser.CurrentTown = currentTownValue; break; default: throw new ArgumentException($"Property {property} not supported!"); } context.SaveChanges(); } return($"User {username} {property} is {newValue}."); }