285 lines
6.6 KiB
Plaintext
285 lines
6.6 KiB
Plaintext
{$IFDEF WIN32}
|
|
{$I DEFINES.INC}
|
|
{$ENDIF}
|
|
|
|
{$A+,B-,D+,E-,F+,I-,L+,N-,O+,R-,S+,V-}
|
|
|
|
UNIT NewUsers;
|
|
|
|
INTERFACE
|
|
|
|
PROCEDURE NewUser;
|
|
PROCEDURE NewUserInit;
|
|
|
|
IMPLEMENTATION
|
|
|
|
USES
|
|
Common,
|
|
CUser,
|
|
EMail,
|
|
Mail0,
|
|
Menus,
|
|
MiscUser,
|
|
Script,
|
|
SysOp2G,
|
|
TimeFunc;
|
|
|
|
PROCEDURE NewUser;
|
|
VAR
|
|
Letter: Text;
|
|
User: UserRecordType;
|
|
UserIDX: UserIDXRec;
|
|
MHeader: MHeaderRec;
|
|
TempStr: STRING;
|
|
Cmd,
|
|
NewMenuCmd: AStr;
|
|
NewUserPassword: Str20;
|
|
SaveMenu,
|
|
PasswordAttemps,
|
|
CmdToExec: Byte;
|
|
Counter,
|
|
Counter1,
|
|
TempNewApp: Integer;
|
|
CmdNotHid,
|
|
CmdExists,
|
|
Done: Boolean;
|
|
BEGIN
|
|
SL1('* New user logon');
|
|
|
|
UserNum := 0;
|
|
|
|
Update_Node(RGNoteStr(36,TRUE){'New user logging on'},TRUE);
|
|
|
|
UserNum := -1;
|
|
|
|
IF (General.NewUserPW <> '') THEN
|
|
BEGIN
|
|
PasswordAttemps := 0;
|
|
NewUserPassword := '';
|
|
WHILE ((NewUserPassword <> General.NewUserPW) AND (PasswordAttemps < General.MaxLogonTries) AND (NOT HangUp)) DO
|
|
BEGIN
|
|
(*
|
|
Prt(FString.NewUserPassword);
|
|
*)
|
|
RGMainStr(10,FALSE);
|
|
GetPassword(NewUserPassword,20);
|
|
IF ((NewUserPassword <> '') AND (General.NewUserPW <> NewUserPassword)) THEN
|
|
BEGIN
|
|
(*
|
|
Print('Invalid password, keep trying ...');
|
|
*)
|
|
RGNoteStr(38,FALSE);
|
|
SL1('* Invalid new user password: '+NewUserPassword);
|
|
Inc(PasswordAttemps);
|
|
END;
|
|
END;
|
|
IF (PasswordAttemps >= General.MaxLogonTries) THEN
|
|
BEGIN
|
|
PrintF('NUPWFAIL');
|
|
IF (NoFile) THEN
|
|
(*
|
|
Print('You have exceeded the maximum new user logon attempts, hanging up ...');
|
|
*)
|
|
RGNoteStr(39,FALSE);
|
|
SL1('* Maximum new user logon attempts exceeded - hung user up.');
|
|
HangUp := TRUE;
|
|
END;
|
|
END;
|
|
|
|
IF (NOT HangUp) THEN
|
|
BEGIN
|
|
PrintF('NEWUSER');
|
|
Counter := 1;
|
|
WHILE (Counter <= 20) AND (NOT HangUp) DO
|
|
BEGIN
|
|
IF (General.NewUserToggles[Counter] <> 0) THEN
|
|
BEGIN
|
|
Update_Screen;
|
|
CStuff(General.NewUserToggles[Counter],1,ThisUser);
|
|
END;
|
|
Inc(Counter);
|
|
END;
|
|
|
|
Abort := FALSE;
|
|
Next := FALSE;
|
|
|
|
SaveMenu := CurMenu;
|
|
CurMenu := General.NewUserInformationMenu;
|
|
LoadMenuPW;
|
|
AutoExecCmd('FIRSTCMD');
|
|
REPEAT
|
|
MainMenuHandle(Cmd);
|
|
NewMenuCmd := '';
|
|
CmdToExec := 0;
|
|
Done := FALSE;
|
|
REPEAT
|
|
FCmd(Cmd,CmdToExec,CmdExists,CmdNotHid);
|
|
IF (CmdToExec <> 0) THEN
|
|
BEGIN
|
|
DoMenuCommand(Done,
|
|
MemCmd^[CmdToExec].CmdKeys,
|
|
MemCmd^[CmdToExec].Options,
|
|
NewMenuCmd,
|
|
MemCmd^[CmdToExec].NodeActivityDesc);
|
|
|
|
IF (MemCmd^[CmdToExec].CmdKeys = 'OQ') THEN
|
|
Abort := TRUE;
|
|
|
|
END;
|
|
UNTIL (CmdToExec = 0) OR (Done) OR (HangUp);
|
|
UNTIL (Abort) OR (Next) OR (HangUp);
|
|
CurMenu := SaveMenu;
|
|
NewMenuToLoad := TRUE;
|
|
LastError := IOResult;
|
|
|
|
END;
|
|
IF (NOT HangUp) THEN
|
|
BEGIN
|
|
(*
|
|
Prompt('Saving your information ... ');
|
|
*)
|
|
RGNoteStr(40,FALSE);
|
|
SysOpLog('Saving new user information ...');
|
|
Counter1 := 0;
|
|
Counter := 1;
|
|
Reset(UserIDXFile);
|
|
WHILE (Counter <= (FileSize(UserIDXFile) - 1)) AND (Counter1 = 0) DO
|
|
BEGIN
|
|
Read(UserIDXFile,UserIDX);
|
|
IF (UserIDX.Deleted) THEN
|
|
BEGIN
|
|
LoadURec(User,UserIDX.Number);
|
|
IF (Deleted IN User.SFlags) THEN
|
|
Counter1 := UserIDX.Number;
|
|
END;
|
|
Inc(Counter);
|
|
END;
|
|
Close(UserIDXFile);
|
|
LastError := IOResult;
|
|
IF (Counter1 > 0) THEN
|
|
UserNum := Counter1
|
|
ELSE
|
|
UserNum := MaxUsers;
|
|
WITH ThisUser DO
|
|
BEGIN
|
|
FirstOn := GetPackDateTime;
|
|
LastOn := FirstOn;
|
|
IF (CallerIDNumber <> '') THEN
|
|
BEGIN
|
|
CallerID := CallerIDNumber;
|
|
Note := CallerID;
|
|
END;
|
|
END;
|
|
|
|
SaveURec(ThisUser,UserNum);
|
|
|
|
AutoValidate(ThisUser,UserNum,'!');
|
|
|
|
InsertIndex(ThisUser.Name,UserNum,FALSE,FALSE);
|
|
InsertIndex(ThisUser.Realname,UserNum,TRUE,FALSE);
|
|
Inc(lTodayNumUsers);
|
|
SaveGeneral(TRUE);
|
|
(*
|
|
Print('^3Saved.');
|
|
*)
|
|
RGNoteStr(41,FALSE);
|
|
SysOpLog('Saved as user #'+IntToStr(UserNum));
|
|
UserOn := TRUE;
|
|
WasNewUser := TRUE;
|
|
END;
|
|
IF (NOT HangUp) THEN
|
|
BEGIN
|
|
CLS;
|
|
IF ((Exist(General.MiscPath+'NEWUSER.INF')) OR (Exist(General.DataPath+'NEWUSER.INF'))) THEN
|
|
ReadQ('NEWUSER');
|
|
Update_Screen;
|
|
TempNewApp := -1;
|
|
IF (General.NewApp <> -1) THEN
|
|
BEGIN
|
|
TempNewApp := General.NewApp;
|
|
IF (TempNewApp < 1) OR (TempNewApp > (MaxUsers - 1)) THEN
|
|
BEGIN
|
|
SL1('* Invalid user number for New User Application: '+IntToStr(General.NewApp));
|
|
TempNewApp := 1;
|
|
END;
|
|
END;
|
|
IF (TempNewApp <> -1) THEN
|
|
BEGIN
|
|
PrintF('NEWAPP');
|
|
IF (NoFile) THEN
|
|
(*
|
|
Print('You must now send a new user application letter to the SysOp.');
|
|
*)
|
|
RGNoteStr(42,FALSE);
|
|
InResponseTo := '\'+#1+RGNoteStr(43,TRUE); { 'New User Application' }
|
|
MHeader.Status := [];
|
|
SeMail(TempNewApp,MHeader);
|
|
END;
|
|
END;
|
|
IF (NOT HangUp) THEN
|
|
BEGIN
|
|
IF (Exist(General.MiscPath+'NEWLET.ASC')) THEN
|
|
BEGIN
|
|
FillChar(MHeader,SizeOf(MHeader),0);
|
|
InitMsgArea(-1);
|
|
Reset(MsgHdrF);
|
|
Seek(MsgHdrF,FileSize(MsgHdrF));
|
|
Reset(MsgTxtF,1);
|
|
Seek(MsgTxtF,FileSize(MsgTxtF));
|
|
MHeader.Pointer := (FileSize(MsgTxtF) + 1);
|
|
MHeader.TextSize := 0;
|
|
Assign(Letter,General.MiscPath+'NEWLET.ASC');
|
|
Reset(Letter);
|
|
ReadLn(Letter,MHeader.From.A1S);
|
|
ReadLn(Letter,MHeader.Subject);
|
|
WITH MHeader DO
|
|
BEGIN
|
|
From.UserNum := TempNewApp;
|
|
MTO.UserNum := UserNum;
|
|
MTO.A1S := ThisUser.Name;
|
|
Date := GetPackDateTime;
|
|
Status := [AllowMCI];
|
|
END;
|
|
WHILE NOT EOF(Letter) DO
|
|
BEGIN
|
|
ReadLn(Letter,TempStr);
|
|
Inc(MHeader.TextSize,(Length(TempStr) + 1));
|
|
BlockWrite(MsgTxtF,TempStr[0],(Length(TempStr) + 1));
|
|
END;
|
|
Close(Letter);
|
|
Close(MsgTxtF);
|
|
Write(MsgHdrF,MHeader);
|
|
Close(MsgHdrF);
|
|
LastError := IOResult;
|
|
ThisUser.Waiting := 1;
|
|
END;
|
|
END;
|
|
END;
|
|
|
|
PROCEDURE NewUserInit;
|
|
BEGIN
|
|
IF (General.ClosedSystem) THEN
|
|
BEGIN
|
|
PrintF('NONEWUSR');
|
|
IF (NoFile) THEN
|
|
(*
|
|
Print('This BBS is currently not accepting new users, hanging up ...');
|
|
*)
|
|
RGNoteStr(32,FALSE);
|
|
SL1('* Attempted logon when BBS closed to new users - hung user up.');
|
|
HangUp := TRUE;
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
LoadURec(ThisUser,0);
|
|
WITH ThisUser DO
|
|
BEGIN
|
|
FirstOn := GetPackDateTime;
|
|
LastOn := FirstOn;
|
|
END;
|
|
InitTrapFile;
|
|
END;
|
|
END;
|
|
|
|
END.
|