/// <summary> /// Register /// The client sends a request to register themselves /// with a username and password. If they are already registered /// the CustomValidation tries to validate their credentials /// </summary> /// <param name="username">(string) user name</param> /// <param name="password">(string) password</param> /// <returns>(boolean) if successful, false otherwise</returns> public bool Register(string username, string password) { // Registration Success Flag bool registered = false; // Obtain callback for the client IServiceCallback callback = OperationContext.Current.GetCallbackChannel <IServiceCallback>(); // First Verify User Does Not Already Exist in Registration if (!(RegisteredUsers.Any(x => x.UserName == username))) { // User is Not Registered, Register User // Create new user User user = new User(username, password, callback); /// Add to Registered Users RegisteredUsers.Add(user); // Set Return Value registered = true; Console.WriteLine($"User {username} registered..."); } else { DuplicateUserFault fault = new DuplicateUserFault() { Reason = "User '" + username + "' already registered." }; throw new FaultException <DuplicateUserFault>(fault, fault.Reason); } return(registered); } // end of Register method
} // end of Greet Me /// <summary> /// Login /// Logs in a registered user. /// Throws faults (to client) if there are issues /// </summary> /// <param name="username">(string) username to login</param> /// <returns>(boolean) true if successful, false otherwise</returns> public bool Login(string username) { bool loggedin = false; // First Verify User Not Already Logged In if (!(LoggedInUsers.Any(x => x.UserName == username))) { // See if User is Registered if (RegisteredUsers.Any(x => x.UserName == username)) { // User is Already Authenticated Per Custom Validator LoggedInUsers.Add(RegisteredUsers.Find(x => x.UserName == username)); loggedin = true; Console.WriteLine($"User {username} logged in."); // Send message to callback SendMessageToUsers($"User {username} logged in."); } // User is Not Registered else { loggedin = false; // This will be sent to client as a generic fault throw new ArgumentException("User: "******" is not registered"); } } else { loggedin = false; // Send custom fault to client DuplicateUserFault fault = new DuplicateUserFault() { Reason = "User '" + username + "' already logged in!" }; throw new FaultException <DuplicateUserFault>(fault, fault.Reason); } return(loggedin); } // end of method