| 1 | { **************************************************************
 | 
|---|
| 2 |         Package: XWB - Kernel RPCBroker
 | 
|---|
| 3 |         Date Created: Sept 18, 1997 (Version 1.1)
 | 
|---|
| 4 |         Site Name: Oakland, OI Field Office, Dept of Veteran Affairs
 | 
|---|
| 5 |         Developers: Danila Manapsal, Don Craven, Joel Ivey
 | 
|---|
| 6 |         Description: Verify Code edit dialog.
 | 
|---|
| 7 |         Current Release: Version 1.1 Patch 40 (January 7, 2005))
 | 
|---|
| 8 | *************************************************************** }
 | 
|---|
| 9 | 
 | 
|---|
| 10 | unit VCEdit;
 | 
|---|
| 11 | 
 | 
|---|
| 12 | interface
 | 
|---|
| 13 | 
 | 
|---|
| 14 | uses
 | 
|---|
| 15 |   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 | 
|---|
| 16 |   StdCtrls, Buttons,
 | 
|---|
| 17 |   {Broker units}
 | 
|---|
| 18 |   Trpcb, Hash;
 | 
|---|
| 19 | 
 | 
|---|
| 20 | type
 | 
|---|
| 21 |   TVCEdit = class(TComponent)
 | 
|---|
| 22 |     private
 | 
|---|
| 23 |       FRPCBroker : TRPCBroker;
 | 
|---|
| 24 |       FOldVC     : string;
 | 
|---|
| 25 |       FConfirmFailCnt : integer;  //counts failed confirms.
 | 
|---|
| 26 |       FHelp      : string;
 | 
|---|
| 27 |       FOldVCSet: Boolean;  // Shows whether old code was passed in, even if NULL
 | 
|---|
| 28 |       procedure NoChange(reason : string);
 | 
|---|
| 29 |     protected
 | 
|---|
| 30 |     public
 | 
|---|
| 31 |       constructor Create(AOwner: TComponent); override;
 | 
|---|
| 32 |       destructor Destroy; override;
 | 
|---|
| 33 |       function ChangeVCKnowOldVC(strOldVC : string) : Boolean;
 | 
|---|
| 34 |       function ChangeVC : Boolean;
 | 
|---|
| 35 |     published
 | 
|---|
| 36 |       property RPCBroker : TRPCBroker read FRPCBroker write FRPCBroker;
 | 
|---|
| 37 |   end;
 | 
|---|
| 38 | 
 | 
|---|
| 39 | 
 | 
|---|
| 40 | 
 | 
|---|
| 41 |   TfrmVCEdit = class(TForm)
 | 
|---|
| 42 |     lblOldVC: TLabel;
 | 
|---|
| 43 |     lblNewVC: TLabel;
 | 
|---|
| 44 |     lblConfirmVC: TLabel;
 | 
|---|
| 45 |     edtOldVC: TEdit;
 | 
|---|
| 46 |     edtNewVC: TEdit;
 | 
|---|
| 47 |     edtConfirmVC: TEdit;
 | 
|---|
| 48 |     btnOK: TBitBtn;
 | 
|---|
| 49 |     btnCancel: TBitBtn;
 | 
|---|
| 50 |     btnHelp: TBitBtn;
 | 
|---|
| 51 |     procedure btnOKClick(Sender: TObject);
 | 
|---|
| 52 |     procedure btnHelpClick(Sender: TObject);
 | 
|---|
| 53 |     procedure edtNewVCExit(Sender: TObject);
 | 
|---|
| 54 |     procedure edtOldVCChange(Sender: TObject);
 | 
|---|
| 55 |   protected
 | 
|---|
| 56 |     { Private declarations }
 | 
|---|
| 57 |     FVCEdit : TVCEdit;   //Links form to instance of VCEdit.
 | 
|---|
| 58 |   public
 | 
|---|
| 59 |     { Public declarations }
 | 
|---|
| 60 |   end;
 | 
|---|
| 61 | 
 | 
|---|
| 62 | function ChangeVerify(RPCBroker: TRPCBroker): Boolean;
 | 
|---|
| 63 | function SilentChangeVerify(RPCBroker: TRPCBroker; OldVerify, NewVerify1, NewVerify2: String; var Reason: String): Boolean;
 | 
|---|
| 64 | 
 | 
|---|
| 65 | var
 | 
|---|
| 66 |   frmVCEdit: TfrmVCEdit;
 | 
|---|
| 67 | 
 | 
|---|
| 68 | const
 | 
|---|
| 69 |   MAX_CONFIRM_FAIL : integer = 3;
 | 
|---|
| 70 |   U = '^';
 | 
|---|
| 71 | 
 | 
|---|
| 72 | {procedure Register;}
 | 
|---|
| 73 | 
 | 
|---|
| 74 | implementation
 | 
|---|
| 75 | 
 | 
|---|
| 76 | {$R *.DFM}
 | 
|---|
| 77 | 
 | 
|---|
| 78 | function ChangeVerify(RPCBroker: TRPCBroker): Boolean;
 | 
|---|
| 79 | var
 | 
|---|
| 80 |   VCEdit1: TVCEdit;
 | 
|---|
| 81 | begin
 | 
|---|
| 82 | //  Str := '';
 | 
|---|
| 83 |   VCEdit1 := TVCEdit.Create(Application);
 | 
|---|
| 84 |   try
 | 
|---|
| 85 |     VCEdit1.RPCBroker := RPCBroker;
 | 
|---|
| 86 |     if VCEdit1.ChangeVC then  //invoke VCEdit form.                                              //VC changed.
 | 
|---|
| 87 |       Result := True
 | 
|---|
| 88 |     else
 | 
|---|
| 89 |       Result := False;
 | 
|---|
| 90 |   finally
 | 
|---|
| 91 |     VCEdit1.Free;
 | 
|---|
| 92 |   end;
 | 
|---|
| 93 | end;
 | 
|---|
| 94 | 
 | 
|---|
| 95 | function SilentChangeVerify(RPCBroker: TRPCBroker; OldVerify, NewVerify1, NewVerify2: String; var Reason: String): Boolean;
 | 
|---|
| 96 | var
 | 
|---|
| 97 |   OrigContext: String;
 | 
|---|
| 98 | begin
 | 
|---|
| 99 |   Result := False;
 | 
|---|
| 100 |   Reason := '';
 | 
|---|
| 101 |   if UpperCase(OldVerify) = UpperCase(NewVerify1) then
 | 
|---|
| 102 |     Reason := 'The new code is the same as the current one.'
 | 
|---|
| 103 |   else
 | 
|---|
| 104 |   if UpperCase(NewVerify1) <> UpperCase(NewVerify2) then
 | 
|---|
| 105 |     Reason := 'The confirmation code does not match.';
 | 
|---|
| 106 |   if Reason = '' then
 | 
|---|
| 107 |   try
 | 
|---|
| 108 |     with RPCBroker do
 | 
|---|
| 109 |     begin
 | 
|---|
| 110 |       OrigContext := CurrentContext;
 | 
|---|
| 111 |       CreateContext('XUS SIGNON');
 | 
|---|
| 112 |       RemoteProcedure := 'XUS CVC';
 | 
|---|
| 113 |       Param[0].PType := literal;
 | 
|---|
| 114 |       Param[0].Value := Encrypt(UpperCase(OldVerify))
 | 
|---|
| 115 |                         + U + Encrypt(UpperCase(NewVerify1))
 | 
|---|
| 116 |                         + U + Encrypt(UpperCase(NewVerify2)) ;
 | 
|---|
| 117 |       Call;
 | 
|---|
| 118 |       Reason := '';
 | 
|---|
| 119 |       if Results[0] = '0' then
 | 
|---|
| 120 |         Result := True
 | 
|---|
| 121 |       else if Results.Count > 1 then
 | 
|---|
| 122 |         Reason := Results[1];
 | 
|---|
| 123 |       CreateContext(OrigContext);
 | 
|---|
| 124 |     end;
 | 
|---|
| 125 |   except
 | 
|---|
| 126 |     on E: Exception do
 | 
|---|
| 127 |     begin
 | 
|---|
| 128 |       RPCBroker.RPCBError := E.Message;
 | 
|---|
| 129 |       if Assigned(RPCBroker.OnRPCBFailure) then
 | 
|---|
| 130 |         RPCBroker.OnRPCBFailure(RPCBroker)
 | 
|---|
| 131 |       else if RPCBroker.ShowErrorMsgs = semRaise then
 | 
|---|
| 132 |         Raise;
 | 
|---|
| 133 |     end;
 | 
|---|
| 134 |   end;
 | 
|---|
| 135 | end;
 | 
|---|
| 136 | 
 | 
|---|
| 137 | {------------------TVCEdit component------------------------------------}
 | 
|---|
| 138 | 
 | 
|---|
| 139 | constructor TVCEDit.Create(AOwner: TComponent);
 | 
|---|
| 140 | begin
 | 
|---|
| 141 |   inherited Create(AOwner);
 | 
|---|
| 142 |   FOldVCSet := False;
 | 
|---|
| 143 | end;
 | 
|---|
| 144 | 
 | 
|---|
| 145 | destructor TVCEDit.Destroy;
 | 
|---|
| 146 | begin
 | 
|---|
| 147 |   inherited Destroy;
 | 
|---|
| 148 | end;
 | 
|---|
| 149 | 
 | 
|---|
| 150 | 
 | 
|---|
| 151 | function TVCEdit.ChangeVCKnowOldVC(strOldVC : string) : Boolean;
 | 
|---|
| 152 | begin
 | 
|---|
| 153 |   FOldVC := strOldVC;
 | 
|---|
| 154 |   FOldVCSet := True;
 | 
|---|
| 155 |   Result := ChangeVC;
 | 
|---|
| 156 |   FOldVCSet := False;  // set it back to false in case we come in again
 | 
|---|
| 157 | end;
 | 
|---|
| 158 | 
 | 
|---|
| 159 | {--------------------------ChangeVC function---------------------------}
 | 
|---|
| 160 | function TVCEdit.ChangeVC : Boolean;
 | 
|---|
| 161 | var
 | 
|---|
| 162 |   OldHandle: THandle;
 | 
|---|
| 163 | begin
 | 
|---|
| 164 |   Result := False;
 | 
|---|
| 165 |   try
 | 
|---|
| 166 |     frmVCEDit := TfrmVCEDit.Create(application);
 | 
|---|
| 167 |     with frmVCEDit do
 | 
|---|
| 168 |     begin
 | 
|---|
| 169 |       FVCEdit := Self;      //To link form to VCEdit instance.
 | 
|---|
| 170 |       if FOldVCSet then      //If old VC known, stuff it & disable editing.
 | 
|---|
| 171 |       begin
 | 
|---|
| 172 |         edtOldVC.Color := clBtnFace;
 | 
|---|
| 173 |         edtOldVC.Enabled := False;
 | 
|---|
| 174 |         edtOldVC.Text := FOldVC;
 | 
|---|
| 175 |       end{if};
 | 
|---|
| 176 | //          ShowApplicationAndFocusOK(Application);
 | 
|---|
| 177 |       OldHandle := GetForegroundWindow;
 | 
|---|
| 178 |       SetForegroundWindow(frmVCEdit.Handle);
 | 
|---|
| 179 |       if ShowModal = mrOK then    //outcome of form.
 | 
|---|
| 180 |         Result := True;
 | 
|---|
| 181 |       SetForegroundWindow(OldHandle);
 | 
|---|
| 182 |     end{with};
 | 
|---|
| 183 |   frmVCEDit.Free;
 | 
|---|
| 184 |   except
 | 
|---|
| 185 |     on E: Exception do
 | 
|---|
| 186 |     begin
 | 
|---|
| 187 |       FRPCBroker.RPCBError := E.Message;
 | 
|---|
| 188 |       if Assigned(FRPCBroker.OnRPCBFailure) then
 | 
|---|
| 189 |         FRPCBroker.OnRPCBFailure(FRPCBroker)
 | 
|---|
| 190 |       else if FRPCBroker.ShowErrorMsgs = semRaise then
 | 
|---|
| 191 |         Raise;
 | 
|---|
| 192 |     end;
 | 
|---|
| 193 |   end{except};
 | 
|---|
| 194 | end;
 | 
|---|
| 195 | 
 | 
|---|
| 196 | {------------------TVCEdit.NoChange-------------------------------------
 | 
|---|
| 197 | -----------Displays error messages when change fails.-------------------}
 | 
|---|
| 198 | procedure TVCEdit.NoChange(reason : string);
 | 
|---|
| 199 | begin
 | 
|---|
| 200 |   ShowMessage('Your VERIFY code was not changed.' + #13 +
 | 
|---|
| 201 |               reason + #13 );
 | 
|---|
| 202 | end;
 | 
|---|
| 203 | 
 | 
|---|
| 204 | 
 | 
|---|
| 205 | {-------------------------TfrmVCEdit methods-------------------------------}
 | 
|---|
| 206 | procedure TfrmVCEdit.btnOKClick(Sender: TObject);
 | 
|---|
| 207 | begin
 | 
|---|
| 208 |   with FVCEdit do
 | 
|---|
| 209 |   begin
 | 
|---|
| 210 |     if edtOldVC.Text = edtNewVC.Text then
 | 
|---|
| 211 |     begin
 | 
|---|
| 212 |       NoChange('The new code is the same as the current one.');
 | 
|---|
| 213 |       edtNewVC.Text := '';
 | 
|---|
| 214 |       edtConfirmVC.Text := '';
 | 
|---|
| 215 |       edtNewVC.SetFocus;
 | 
|---|
| 216 |     end
 | 
|---|
| 217 |     else
 | 
|---|
| 218 |     if edtNewVC.Text <> edtConfirmVC.Text then
 | 
|---|
| 219 |     begin
 | 
|---|
| 220 |       inc(FConfirmFailCnt);
 | 
|---|
| 221 |       if FConfirmFailCnt > MAX_CONFIRM_FAIL then
 | 
|---|
| 222 |       begin
 | 
|---|
| 223 |         edtNewVC.Text := '';
 | 
|---|
| 224 |         edtConfirmVC.Text := '';
 | 
|---|
| 225 |         NoChange('The confirmation code does not match.');
 | 
|---|
| 226 |         edtNewVC.SetFocus;
 | 
|---|
| 227 |       end
 | 
|---|
| 228 |       else
 | 
|---|
| 229 |       begin
 | 
|---|
| 230 |         edtConfirmVC.text := '';
 | 
|---|
| 231 |         NoChange('The confirmation code does not match.  Try again.');
 | 
|---|
| 232 |         edtConfirmVC.SetFocus;
 | 
|---|
| 233 |       end;
 | 
|---|
| 234 |     end
 | 
|---|
| 235 |     else
 | 
|---|
| 236 |     with FRPCBroker do
 | 
|---|
| 237 |     begin
 | 
|---|
| 238 |       RemoteProcedure := 'XUS CVC';
 | 
|---|
| 239 |       Param[0].PType := literal;
 | 
|---|
| 240 |       Param[0].Value := Encrypt(UpperCase(edtOldVC.Text))
 | 
|---|
| 241 |                         + U + Encrypt(UpperCase(edtNewVC.Text))
 | 
|---|
| 242 |                         + U + Encrypt(UpperCase(edtConfirmVC.Text)) ;
 | 
|---|
| 243 |       Call;
 | 
|---|
| 244 |       if Results[0] = '0' then
 | 
|---|
| 245 |       begin
 | 
|---|
| 246 |         ShowMessage('Your VERIFY CODE has been changed');
 | 
|---|
| 247 |         ModalResult := mrOK;  //Close form.
 | 
|---|
| 248 |       end
 | 
|---|
| 249 |       else
 | 
|---|
| 250 |       begin
 | 
|---|
| 251 |         if Results.Count > 1 then
 | 
|---|
| 252 |           NoChange(Results[1])
 | 
|---|
| 253 |         else
 | 
|---|
| 254 |           NoChange('');
 | 
|---|
| 255 |         edtNewVC.Text := '';
 | 
|---|
| 256 |         edtConfirmVC.Text := '';
 | 
|---|
| 257 |         edtNewVC.SetFocus;
 | 
|---|
| 258 |       end;
 | 
|---|
| 259 |     end;
 | 
|---|
| 260 |   end{with};
 | 
|---|
| 261 | end;
 | 
|---|
| 262 | 
 | 
|---|
| 263 | procedure TfrmVCEdit.btnHelpClick(Sender: TObject);
 | 
|---|
| 264 | begin
 | 
|---|
| 265 |   with FVCEdit do
 | 
|---|
| 266 |   begin
 | 
|---|
| 267 |     if FHelp = '' then
 | 
|---|
| 268 |     begin
 | 
|---|
| 269 |       with FRPCBroker do
 | 
|---|
| 270 |       begin
 | 
|---|
| 271 |         RemoteProcedure := 'XUS AV HELP';
 | 
|---|
| 272 |         Call;
 | 
|---|
| 273 |         if Results.Count > 0 then
 | 
|---|
| 274 |           FHelp := Results[0];
 | 
|---|
| 275 |         FHelp := 'Enter a new verify code and then confirm it.'
 | 
|---|
| 276 |                  + #13#13 + FHelp;
 | 
|---|
| 277 |         if FOldVC = '' then
 | 
|---|
| 278 |           FHelp := 'Enter your current verify code first.' + #13#10 + FHelp;
 | 
|---|
| 279 |       end{with};
 | 
|---|
| 280 |     end{if};
 | 
|---|
| 281 |     ShowMessage(FHelp);
 | 
|---|
| 282 |   end{with};
 | 
|---|
| 283 | end;
 | 
|---|
| 284 | 
 | 
|---|
| 285 | procedure TfrmVCEdit.edtNewVCExit(Sender: TObject);
 | 
|---|
| 286 | begin
 | 
|---|
| 287 |   if edtNewVC.Modified then
 | 
|---|
| 288 |   begin
 | 
|---|
| 289 |     FVCEdit.FConfirmFailCnt := 0;                //Reset counter.
 | 
|---|
| 290 |     edtNewVC.Modified := False;
 | 
|---|
| 291 |   end;
 | 
|---|
| 292 | end;
 | 
|---|
| 293 | 
 | 
|---|
| 294 | procedure TfrmVCEdit.edtOldVCChange(Sender: TObject); //Also NewVC and ConfirmVC
 | 
|---|
| 295 | begin
 | 
|---|
| 296 |   btnOk.Default := ((edtNewVC.Text <> '') and        //Update status of OK btn.
 | 
|---|
| 297 |                     (edtOldVC.Text <> '') and
 | 
|---|
| 298 |                     (edtConfirmVC.Text <> '') );
 | 
|---|
| 299 | end;
 | 
|---|
| 300 | 
 | 
|---|
| 301 | end.
 | 
|---|