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: Code supportin Login form.
|
---|
7 | Current Release: Version 1.1 Patch 40 (January 7, 2005))
|
---|
8 | *************************************************************** }
|
---|
9 |
|
---|
10 | {**************************************************
|
---|
11 | ver. 1.1.4 1/6/99 (DCM)
|
---|
12 |
|
---|
13 | XWB*1.1*4 adds a try-except block in SetUpSignOn to close
|
---|
14 | login form when the server job times out. Also adds a try-
|
---|
15 | except block in btnOkClick in order to cancel the action
|
---|
16 | if the server job times out. Danila
|
---|
17 |
|
---|
18 | ver. 1.1.11 9/13/99
|
---|
19 | XWB*1.1*11 deleted obsolete code. DCM (9/13/99)
|
---|
20 | **********************************************************}
|
---|
21 | unit Loginfrm;
|
---|
22 |
|
---|
23 | interface
|
---|
24 |
|
---|
25 | uses
|
---|
26 | SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
|
---|
27 | Forms, Dialogs, StdCtrls, XWBut1, ExtCtrls, Buttons,
|
---|
28 | Hash, MFunStr, Trpcb, SgnonCnf, frmSignonMessage, ShellApi,
|
---|
29 | Windows, XWBRich20{, ActiveX}; //, {OleServer;}
|
---|
30 |
|
---|
31 | { TODO : remove units from directory: APi, xuesap_TLB, fRPCBTimer, fConfirmMapping, fESSOConf }
|
---|
32 |
|
---|
33 | type
|
---|
34 | TfrmSignon = class(TForm)
|
---|
35 | Panel1: TPanel;
|
---|
36 | Panel7: TPanel;
|
---|
37 | Panel8: TPanel;
|
---|
38 | Label1: TLabel;
|
---|
39 | Label2: TLabel;
|
---|
40 | verifyCode: TEdit;
|
---|
41 | accessCode: TEdit;
|
---|
42 | btnOk: TBitBtn;
|
---|
43 | btnCancel: TBitBtn;
|
---|
44 | Image1: TImage;
|
---|
45 | Bevel1: TBevel;
|
---|
46 | Bevel2: TBevel;
|
---|
47 | Bevel3: TBevel;
|
---|
48 | Bevel4: TBevel;
|
---|
49 | Bevel5: TBevel;
|
---|
50 | Label3: TLabel;
|
---|
51 | Label4: TLabel;
|
---|
52 | Label5: TLabel;
|
---|
53 | Label6: TLabel;
|
---|
54 | lblServer: TLabel;
|
---|
55 | lblVolume: TLabel;
|
---|
56 | lblUCI: TLabel;
|
---|
57 | lblPort: TLabel;
|
---|
58 | introText: TXWBRichEdit;
|
---|
59 | cbxChangeVerifyCode: TCheckBox;
|
---|
60 | RpcbiBroker: TRPCBroker;
|
---|
61 | procedure btnOkClick(Sender: TObject);
|
---|
62 | procedure btnCancelClick(Sender: TObject);
|
---|
63 | procedure FormShow(Sender: TObject);
|
---|
64 | procedure FormCreate(Sender: TObject);
|
---|
65 | procedure FormClose(Sender: TObject; var Action: TCloseAction);
|
---|
66 | procedure introTextURLClick(Sender: TObject; URL: String);
|
---|
67 | private
|
---|
68 | FChngVerify: Boolean; // indicates whether user has requested changing verify code
|
---|
69 | OrigHelp : String; //Help filename of calling application.
|
---|
70 | function DoVerify: Boolean;
|
---|
71 | procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;
|
---|
72 | public
|
---|
73 | DefaultSignonConfiguration: TSignonValues;
|
---|
74 | public
|
---|
75 | end;
|
---|
76 |
|
---|
77 | procedure PrepareSignonForm(AppBroker: TRPCBroker);
|
---|
78 | function SetUpSignOn : Boolean;
|
---|
79 |
|
---|
80 | var
|
---|
81 | frmSignon: TfrmSignon;
|
---|
82 | intDeviceLock: integer;
|
---|
83 | LoginfrmSignOnBroker: TRPCBroker;
|
---|
84 |
|
---|
85 | Const
|
---|
86 | SC_Configure = 1;
|
---|
87 | SC_About = 2;
|
---|
88 |
|
---|
89 | implementation
|
---|
90 |
|
---|
91 |
|
---|
92 | uses
|
---|
93 | RpcSlogin, VCEdit, fRPCBErrMsg, RpcConf1;
|
---|
94 |
|
---|
95 | var
|
---|
96 | SysMenu: HMenu;
|
---|
97 |
|
---|
98 | {$R *.DFM}
|
---|
99 |
|
---|
100 | procedure PrepareSignonForm(AppBroker: TRPCBroker);
|
---|
101 | begin
|
---|
102 | LoginfrmSignonBroker := AppBroker;
|
---|
103 | end;
|
---|
104 |
|
---|
105 | function SetUpSignOn : Boolean;
|
---|
106 | begin
|
---|
107 | Result := True; //By default Signon is needed.
|
---|
108 | if LoginfrmSignonBroker = nil then LoginfrmSignonBroker := frmSignon.RpcbiBroker;
|
---|
109 | {SignonBroker superseeds RpcbiBroker}
|
---|
110 | with frmSignon do
|
---|
111 | begin
|
---|
112 | try
|
---|
113 | with LoginfrmSignonBroker do
|
---|
114 | begin
|
---|
115 | RemoteProcedure := 'XUS SIGNON SETUP';
|
---|
116 | Call;
|
---|
117 | end;
|
---|
118 | except {P4}
|
---|
119 | frmSignon.Free; {P4} // Release jli 041104
|
---|
120 | exit; {P4}
|
---|
121 | end; {P4}
|
---|
122 | lblServer.Caption := LoginfrmSignonBroker.Results[0];
|
---|
123 | lblVolume.Caption := LoginfrmSignonBroker.Results[1];
|
---|
124 | lblUCI.Caption := LoginfrmSignonBroker.Results[2];
|
---|
125 | lblPort.Caption := LoginfrmSignonBroker.Results[3];
|
---|
126 | intDeviceLock := 0;
|
---|
127 | if LoginfrmSignonBroker.Results.Count > 5 then //Server sent single signon info.
|
---|
128 | if LoginfrmSignonBroker.Results[5] = '1' then //Signon not needed
|
---|
129 | Result := False
|
---|
130 | else
|
---|
131 | Result := True;
|
---|
132 | LoginfrmSignonBroker.Login.IsProductionAccount := False;
|
---|
133 | LoginfrmSignonBroker.Login.DomainName := '';
|
---|
134 | if LoginfrmSignonBroker.Results.Count > 7 then
|
---|
135 | begin
|
---|
136 | LoginfrmSignonBroker.Login.DomainName := LoginfrmSignonBroker.Results[6];
|
---|
137 | if LoginfrmSignonBroker.Results[7] = '1' then
|
---|
138 | LoginfrmSignonBroker.Login.IsProductionAccount := True;
|
---|
139 | end;
|
---|
140 | end;
|
---|
141 | end;
|
---|
142 |
|
---|
143 | {--------------------- TfrmSignon.btnOkClick ---------------------
|
---|
144 | This gets called when user presses OK button on the login form.
|
---|
145 | Access and verify codes are transmitted as access;verify to the server.
|
---|
146 | Server responds with a multi-purpose array where each node has some
|
---|
147 | special meaning, which may change periodically and should be revised.
|
---|
148 | SignonBroker.Results[0] - DUZ (0 if unsuccessful signon)
|
---|
149 | SignonBroker.Results[1] - 0=OK 1=device lock (too many bad tries)
|
---|
150 | SignonBroker.Results[2] - 0=verify doesn't need to be changed
|
---|
151 | 1=verify needs changing
|
---|
152 | SignonBroker.Results[3] - message (i.e. signon inhibited, etc.)
|
---|
153 | SignonBroker.Results[4] - reserved
|
---|
154 | SignonBroker.Results[5] - number of lines in greeting message
|
---|
155 | (currently hard set to 0) to suppress msg display
|
---|
156 | SignonBroker.Results[6-n] - greeting message
|
---|
157 | ------------------------------------------------------------------}
|
---|
158 | procedure TfrmSignon.btnOkClick(Sender: TObject);
|
---|
159 | var
|
---|
160 | I: integer;
|
---|
161 | begin
|
---|
162 | frmSignon.Tag := 0; {initialize signon flag}
|
---|
163 | try //P4
|
---|
164 | with LoginfrmSignonBroker do begin
|
---|
165 | with Param[0] do begin
|
---|
166 | Value := Encrypt(accessCode.text + ';' + verifyCode.text);
|
---|
167 | PType := literal;
|
---|
168 | end;
|
---|
169 | RemoteProcedure := 'XUS AV CODE';
|
---|
170 | Call;
|
---|
171 |
|
---|
172 | {Device is locked -- too many failures}
|
---|
173 | if Results[1] = '1' then
|
---|
174 | begin
|
---|
175 | RPCBShowErrMsg(Results[3]);
|
---|
176 | Close;
|
---|
177 | end
|
---|
178 |
|
---|
179 | {Verify code must change}
|
---|
180 | else if Results[2] = '1' then
|
---|
181 | begin
|
---|
182 | MessageDlg('You must change your VERIFY CODE at this time.',
|
---|
183 | mtWarning, [mbOK], 0); //Notify that VC must change.
|
---|
184 | if DoVerify then
|
---|
185 | frmSignon.Tag := 1; //VC changed -> OK
|
---|
186 | Close;
|
---|
187 | {Note: if VC change necessary and it wasn't made,
|
---|
188 | Tag remains 0 meaning unsuccessful signon.}
|
---|
189 | end
|
---|
190 |
|
---|
191 | {Signon failed for some other reason}
|
---|
192 | else if Results[0] = '0' then
|
---|
193 | begin
|
---|
194 | accessCode.text := '';
|
---|
195 | verifyCode.text := '';
|
---|
196 | RPCBShowErrMsg(Results[3]);
|
---|
197 | accessCode.SetFocus; //Try again.
|
---|
198 | end
|
---|
199 |
|
---|
200 | {Signon succeeded.}
|
---|
201 | else
|
---|
202 | begin
|
---|
203 | frmSignon.Tag := 1; {set flag that signon was good}
|
---|
204 | {display any server greeting messages}
|
---|
205 |
|
---|
206 | if cbxChangeVerifyCode.Checked then
|
---|
207 | DoVerify;
|
---|
208 | if Results.Count > 5 then
|
---|
209 | begin
|
---|
210 | if Results[5] <> '0' then
|
---|
211 | begin
|
---|
212 | frmSignonMsg := TfrmSignonMsg.Create(Self);
|
---|
213 | try
|
---|
214 | with frmSignonMsg do begin
|
---|
215 | for I := 1 to StrToInt(Results[5]) do
|
---|
216 | mmoMsg.Lines.Add(Results[5+I]);
|
---|
217 | ShowApplicationAndFocusOK(Application);
|
---|
218 | ShowModal;
|
---|
219 | end;
|
---|
220 | finally
|
---|
221 | frmSignonMsg.Free; // Release; jli 041104
|
---|
222 | end;
|
---|
223 | end;
|
---|
224 | end;
|
---|
225 | Close;
|
---|
226 | end;
|
---|
227 | end;
|
---|
228 | except //P4
|
---|
229 | btnCancelClick(self); //P4
|
---|
230 | end; //P4
|
---|
231 | end;
|
---|
232 |
|
---|
233 | procedure TfrmSignon.btnCancelClick(Sender: TObject);
|
---|
234 | begin
|
---|
235 | LoginfrmSignOnBroker.Login.ErrorText := 'User Cancelled Login Process';
|
---|
236 | Close;
|
---|
237 | end;
|
---|
238 |
|
---|
239 | procedure TfrmSignon.FormShow(Sender: TObject);
|
---|
240 | var
|
---|
241 | Str: String;
|
---|
242 | begin
|
---|
243 | Str := 'RPCBroker';
|
---|
244 | {add Configure... to system menu}
|
---|
245 | SysMenu := GetSystemMenu(Handle, False);
|
---|
246 | AppendMenu(SysMenu, MF_Enabled + MF_String + MF_Unchecked, SC_Configure,
|
---|
247 | '&Properties...');
|
---|
248 | AppendMenu(SysMenu, MF_Enabled + MF_String + MF_Unchecked, SC_About,PChar('&About '+Str));
|
---|
249 | with LoginfrmSignonBroker do begin
|
---|
250 | RemoteProcedure := 'XUS INTRO MSG';
|
---|
251 | lstCall(introText.Lines);
|
---|
252 | end;
|
---|
253 | OrigHelp := Application.HelpFile; // Save original helpfile.
|
---|
254 | Application.HelpFile := ReadRegData(HKLM, REG_BROKER, 'BrokerDr') +
|
---|
255 | '\clagent.hlp'; // Identify ConnectTo helpfile.
|
---|
256 | end;
|
---|
257 |
|
---|
258 | procedure TfrmSignon.FormCreate(Sender: TObject);
|
---|
259 | var
|
---|
260 | SignonConfiguration: TSignonConfiguration;
|
---|
261 | begin
|
---|
262 | if Pos('RPCSharedBrokerSessionMgr',ParamStr(0)) > 0 then
|
---|
263 | IsSharedBroker := True;
|
---|
264 |
|
---|
265 | if (Pos('LARGE',UpperCase(ReadRegDataDefault(HKCU, 'Control Panel\Appearance', 'Current',''))) > 0) or
|
---|
266 | (Screen.Width < 800) then
|
---|
267 | begin
|
---|
268 | WindowState := wsMaximized;
|
---|
269 | with Screen do
|
---|
270 | begin
|
---|
271 | if Width < 700 then // 640
|
---|
272 | IntroText.Font.Size := 9
|
---|
273 | else if Width < 750 then // 720
|
---|
274 | IntroText.Font.Size := 10
|
---|
275 | else if Width < 900 then // 800
|
---|
276 | IntroText.Font.Size := 11
|
---|
277 | else if Width < 1100 then // 1024
|
---|
278 | IntroText.Font.Size := 15
|
---|
279 | else if Width < 1200 then // 1152
|
---|
280 | IntroText.Font.Size := 16
|
---|
281 | else
|
---|
282 | IntroText.Font.Size := 19; // 1280
|
---|
283 | end; // with
|
---|
284 | end;
|
---|
285 |
|
---|
286 | FormStyle := fsStayOnTop; // make form stay on top of others so it can be found
|
---|
287 | {adjust appearance per user's preferences}
|
---|
288 | SignonConfiguration := TSignonConfiguration.Create;
|
---|
289 | try
|
---|
290 | DefaultSignonConfiguration := TSignOnValues.Create;
|
---|
291 | DefaultSignonConfiguration.BackColor := IntroText.Color;
|
---|
292 | DefaultSignonConfiguration.Height := Height;
|
---|
293 | DefaultSignonConfiguration.Width := Width;
|
---|
294 | DefaultSignonConfiguration.Position := '0';
|
---|
295 | DefaultSignonConfiguration.Size := '0';
|
---|
296 | DefaultSignonConfiguration.Left := Left;
|
---|
297 | DefaultSignonConfiguration.Top := Top;
|
---|
298 | DefaultSignonConfiguration.Font := IntroText.Font;
|
---|
299 | DefaultSignonConfiguration.TextColor := IntroText.Font.Color;
|
---|
300 | DefaultSignonConfiguration.FontStyles := IntroText.Font.Style;
|
---|
301 | SignonDefaults.SetEqual(DefaultSignonConfiguration);
|
---|
302 |
|
---|
303 |
|
---|
304 | SignonConfiguration.ReadRegistrySettings;
|
---|
305 | if InitialValues.Size = '0' then
|
---|
306 | begin {restore defaults}
|
---|
307 | Width:= DefaultSignonConfiguration.Width;
|
---|
308 | Height := DefaultSignonConfiguration.Height;
|
---|
309 | end
|
---|
310 | else begin
|
---|
311 | try
|
---|
312 | Position := poDesigned;
|
---|
313 | Width := StrToInt(Piece(strSize,U,2));
|
---|
314 | Height := StrToInt(Piece(strSize,U,3));
|
---|
315 | except
|
---|
316 | Width:= DefaultSignonConfiguration.Width;
|
---|
317 | Height := DefaultSignonConfiguration.Height;
|
---|
318 | end;
|
---|
319 | end;
|
---|
320 |
|
---|
321 | if InitialValues.Position = '0' then {restore defaults}
|
---|
322 | Position := poScreenCenter
|
---|
323 | else begin
|
---|
324 | try
|
---|
325 | Top:= StrToInt(Piece(strPosition,U,2));
|
---|
326 | Left := StrToInt(Piece(strPosition,U,3));
|
---|
327 | except
|
---|
328 | Position := poScreenCenter
|
---|
329 | end;
|
---|
330 | end;
|
---|
331 |
|
---|
332 | if InitialValues.BackColor <> 0 then
|
---|
333 | introText.Color := InitialValues.BackColor
|
---|
334 | else
|
---|
335 | introText.Color := clWindow;
|
---|
336 |
|
---|
337 | introText.Font := InitialValues.Font;
|
---|
338 |
|
---|
339 | finally
|
---|
340 | SignonConfiguration.Free;
|
---|
341 | end;
|
---|
342 | FChngVerify := False;
|
---|
343 | end;
|
---|
344 |
|
---|
345 | procedure TfrmSignon.WMSysCommand(var Message: TWMSysCommand);
|
---|
346 | var
|
---|
347 | Str: String;
|
---|
348 | SignonConfiguration: TSignonConfiguration;
|
---|
349 | frmErrMsg: TfrmErrMsg;
|
---|
350 | begin
|
---|
351 | if Message.CmdType = SC_Configure then
|
---|
352 | begin
|
---|
353 | if IsSharedBroker then
|
---|
354 | Self.WindowState := wsMinimized;
|
---|
355 | SignonConfiguration := TSignonConfiguration.Create;
|
---|
356 | try
|
---|
357 | ShowApplicationAndFocusOK(Application);
|
---|
358 | SignonConfiguration.ShowModal;
|
---|
359 | finally
|
---|
360 | SignonConfiguration.Free;
|
---|
361 | Self.WindowState := wsNormal;
|
---|
362 | end;
|
---|
363 | end
|
---|
364 | else if Message.CmdType = SC_About then
|
---|
365 | begin
|
---|
366 | frmErrMsg := TfrmErrMsg.Create(Application);
|
---|
367 | try
|
---|
368 | frmErrMsg.Caption := 'About RPCBroker';
|
---|
369 | Str := 'RPCBroker Version is '+RpcbiBroker.BrokerVersion;
|
---|
370 | frmErrMsg.mmoErrorMessage.Lines.Add(Str);
|
---|
371 | ShowApplicationAndFocusOK(Application);
|
---|
372 | frmErrMsg.ShowModal;
|
---|
373 | finally
|
---|
374 | frmErrMsg.Free;
|
---|
375 | end;
|
---|
376 | end
|
---|
377 | else inherited;
|
---|
378 | end;
|
---|
379 |
|
---|
380 | procedure TfrmSignon.FormClose(Sender: TObject; var Action: TCloseAction);
|
---|
381 | begin
|
---|
382 | if Piece(strSize,U,1) = '2' then begin
|
---|
383 | strSize := '2^'+IntToStr(Width)+ U + IntToStr(Height);
|
---|
384 | WriteRegData(HKCU, REG_SIGNON, 'SignonSiz', strSize);
|
---|
385 | end;
|
---|
386 |
|
---|
387 | if Piece(strPosition,U,1) = '2' then begin
|
---|
388 | strPosition := '2^'+IntToStr(Top)+ U + IntToStr(Left);
|
---|
389 | WriteRegData(HKCU, REG_SIGNON, 'SignonPos', strPosition);
|
---|
390 | end;
|
---|
391 | Application.HelpFile := OrigHelp; // Restore helpfile.
|
---|
392 | end;
|
---|
393 |
|
---|
394 | procedure TfrmSignon.introTextURLClick(Sender: TObject; URL: String);
|
---|
395 | begin
|
---|
396 | ShellExecute(Application.Handle,'open',PChar(URL),nil,nil,SW_NORMAL);
|
---|
397 | end;
|
---|
398 |
|
---|
399 | function TfrmSignon.DoVerify: Boolean;
|
---|
400 | var
|
---|
401 | VCEdit1: TVCEdit;
|
---|
402 | begin
|
---|
403 | VCEdit1 := TVCEdit.Create(Self);
|
---|
404 | try
|
---|
405 | VCEdit1.RPCBroker := LoginfrmSignonBroker;
|
---|
406 | Result := VCEdit1.ChangeVCKnowOldVC(VerifyCode.Text); //invoke VCEdit form.
|
---|
407 | finally
|
---|
408 | VCEdit1.Free;
|
---|
409 | end;
|
---|
410 | end;
|
---|
411 |
|
---|
412 | end.
|
---|
413 |
|
---|