// // MLPasswordChangeTableViewController.m // Monal // // Created by Anurodh Pokharel on 5/22/19. // Copyright © 2019 Monal.im. All rights reserved. // #import "MLPasswordChangeTableViewController.h" #import "MBProgressHUD.h" #import "MLXMPPManager.h" @interface MLPasswordChangeTableViewController () @property (nonatomic, weak) MLTextInputCell* passwordOld; @property (nonatomic, weak) MLTextInputCell* passwordNew; @property (nonatomic, strong) MBProgressHUD* progress; @end @implementation MLPasswordChangeTableViewController -(void) closeView { [self dismissViewControllerAnimated:YES completion:nil]; } -(IBAction) changePress:(id)sender { if(!self.xmppAccount) { UIAlertController* messageAlert = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"No connected accounts", @"") message:NSLocalizedString(@"Please make sure you are connected before changing your password.", @"") preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction* closeAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"Close", @"") style:UIAlertActionStyleCancel handler:^(UIAlertAction* action __unused) {}]; [messageAlert addAction:closeAction]; [self presentViewController:messageAlert animated:YES completion:nil]; } else { if([self.passwordNew getText].length > 0 && [self.passwordOld getText] > 0) { if([[MLXMPPManager sharedInstance] isValidPassword:[self.passwordOld getText] forAccount:self.xmppAccount.accountID] == NO) { UIAlertController* messageAlert = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"Invalid Password!", @"") message:NSLocalizedString(@"The current password is not correct.", @"") preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction* closeAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"Close", @"") style:UIAlertActionStyleCancel handler:^(UIAlertAction* action __unused) {}]; [messageAlert addAction:closeAction]; [self presentViewController:messageAlert animated:YES completion:nil]; return; } self.progress = [MBProgressHUD showHUDAddedTo:self.view animated:YES]; self.progress.label.text = NSLocalizedString(@"Changing Password", @""); self.progress.mode = MBProgressHUDModeIndeterminate; self.progress.removeFromSuperViewOnHide = YES; self.progress.hidden = NO; [self.xmppAccount changePassword:[self.passwordNew getText] withCompletion:^(BOOL success, NSString* message) { dispatch_async(dispatch_get_main_queue(), ^{ self.progress.hidden = YES; NSString* title = NSLocalizedString(@"Error", @""); NSString* displayMessage = message; if(success == YES) { title = NSLocalizedString(@"Success", @""); displayMessage = NSLocalizedString(@"The password has been changed", @""); [[MLXMPPManager sharedInstance] updatePassword:[self.passwordNew getText] forAccount:self.xmppAccount.accountID]; } else { if(displayMessage.length == 0) displayMessage = NSLocalizedString(@"Could not change the password", @""); } UIAlertController* messageAlert = [UIAlertController alertControllerWithTitle:title message:displayMessage preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction* closeAction =[UIAlertAction actionWithTitle:NSLocalizedString(@"Close", @"") style:UIAlertActionStyleCancel handler:^(UIAlertAction* action __unused) { }]; [messageAlert addAction:closeAction]; [self presentViewController:messageAlert animated:YES completion:nil]; }); }]; } else { UIAlertController *messageAlert =[UIAlertController alertControllerWithTitle:NSLocalizedString(@"Error", @"") message:NSLocalizedString(@"Password cannot be empty", @"") preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction* closeAction =[UIAlertAction actionWithTitle:NSLocalizedString(@"Close", @"") style:UIAlertActionStyleCancel handler:^(UIAlertAction* action __unused) { }]; [messageAlert addAction:closeAction]; [self presentViewController:messageAlert animated:YES completion:nil]; } } } #pragma mark - textfield delegate - (BOOL)textFieldShouldReturn:(UITextField *)textField { [textField resignFirstResponder]; return YES; } - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { return YES; } #pragma mark View life cycle -(void) viewDidLoad { [super viewDidLoad]; self.navigationItem.title=NSLocalizedString(@"Change Password", @""); [self.tableView registerNib:[UINib nibWithNibName:@"MLTextInputCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"TextCell"]; } -(void) viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; } #pragma mark tableview datasource delegate -(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView { return 2; } - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { if(section == 0) return NSLocalizedString(@"Enter your new password. Passwords may not be empty. They may also be governed by server or company policies.",@ ""); else return nil; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { NSInteger toreturn = 0; switch (section) { case 0: toreturn = 2; break; case 1: toreturn = 1; break; default: break; } return toreturn; } - (UITableViewCell*) tableView:(UITableView*) tableView cellForRowAtIndexPath:(NSIndexPath*) indexPath { if(indexPath.section == 0) { MLTextInputCell* textCell = [tableView dequeueReusableCellWithIdentifier:@"TextCell"]; if(indexPath.row == 0) { #ifdef IS_QUICKSY [textCell initTextCell:[[MLXMPPManager sharedInstance] getPasswordForAccount:self.xmppAccount.accountID] andPlaceholder:NSLocalizedString(@"Current Password", @"") andDelegate:self]; #else [textCell initPasswordCell:[[MLXMPPManager sharedInstance] getPasswordForAccount:self.xmppAccount.accountID] andPlaceholder:NSLocalizedString(@"Current Password", @"") andDelegate:self]; #endif self.passwordOld = textCell; } else if(indexPath.row == 1) { [textCell initPasswordCell:nil andPlaceholder:NSLocalizedString(@"New Password", @"") andDelegate:self]; self.passwordNew = textCell; } else { unreachable(); } return textCell; } else return [tableView dequeueReusableCellWithIdentifier:@"addButton"]; } #pragma mark tableview delegate - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { } @end