Advertisement
Matixs

Untitled

May 5th, 2023
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 8.14 KB | None | 0 0
  1. unit Main;
  2.  
  3. interface
  4.  
  5. uses
  6.   Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  7.   Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Login, BidirectionalUserList,
  8.   Vcl.Imaging.pngimage, Vcl.ExtCtrls, AdministratorPageMain, Vcl.StdCtrls, Captcha, EntityUser,
  9.   ConstantsFile,  ConstantsRole,
  10.   ManagerAPageMain, ManagerAPageAddEdit, PavilionPageMain, PavilionPageAddEdit,
  11.   AdministatorPageAddEdit;
  12.  
  13. type
  14.   TMainForm = class(TForm)
  15.     AdminFrameMain: TAdminFrameMain;
  16.     Panel1: TPanel;
  17.     Image1: TImage;
  18.     Panel2: TPanel;
  19.     Label1: TLabel;
  20.     AdminFrameAdd: TAdminFrameAdd;
  21.     LBCurrentPage: TLabel;
  22.     ManagerAFrameMain: TManagerAFrameMain;
  23.     ManagerAFrameAddEdit: TManagerAFrameAddEdit;
  24.     PavilionFrameMain: TPavilionFrameMain;
  25.     PavilionFrameAddEdit: TPavilionFrameAddEdit;
  26.     Image2: TImage;
  27.     Label2: TLabel;
  28.     procedure AdminFrameMainButtonRecoverClick(Sender: TObject);
  29.     procedure AdminFrameMainBtnDeleteClick(Sender: TObject);
  30.     procedure ManagerAFrameAddEditBtnSaveClick(Sender: TObject);
  31.     procedure ManagerAFrameMainBtnEditClick(Sender: TObject);
  32.     procedure ManagerAFrameMainBtnDeleteClick(Sender: TObject);
  33.     procedure PavilionFrameMainBtnEditClick(Sender: TObject);
  34.     procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  35.     procedure Image2Click(Sender: TObject);
  36.   private
  37.     { Private declarations }
  38.     procedure CheckLogin;
  39.     function  LoginCorrect(Login, Pass : String) : Boolean;
  40.   public
  41.     { Public declarations }
  42.     Constructor Create(AOwner : TComponent); override;
  43.   end;
  44.  
  45. var
  46.   MainForm: TMainForm;
  47.   CountIncorrectData : Integer;
  48.   CurrentUser : TUser;
  49.  
  50. implementation
  51.  
  52. {$R *.dfm}
  53.  
  54. uses UnitHelp;
  55.  
  56.  
  57. Function TMainForm.LoginCorrect(Login: string; Pass: string): Boolean;
  58. var
  59.     I : Integer;
  60.     List : TUserList;
  61. begin
  62.     List := TUserList.Create;
  63.     LoginCorrect := List.IsCorrectDataAuth(Login, Pass, ConstantsFile.FILE_NAME_USER);
  64.     List.Destroy;
  65. end;
  66.  
  67. procedure TMainForm.ManagerAFrameAddEditBtnSaveClick(Sender: TObject);
  68. begin
  69.     ManagerAFrameAddEdit.BtnSaveClick(Sender);
  70. end;
  71.  
  72. procedure TMainForm.ManagerAFrameMainBtnDeleteClick(Sender: TObject);
  73. begin
  74.     ManagerAFrameMain.BtnDeleteClick(Sender);
  75. end;
  76.  
  77. procedure TMainForm.ManagerAFrameMainBtnEditClick(Sender: TObject);
  78. begin
  79.     ManagerAFrameMain.BtnEditClick(Sender);
  80. end;
  81.  
  82. procedure TMainForm.PavilionFrameMainBtnEditClick(Sender: TObject);
  83. begin
  84.   PavilionFrameMain.BtnEditClick(Sender);
  85. end;
  86.  
  87. procedure TMainForm.AdminFrameMainBtnDeleteClick(Sender: TObject);
  88. begin
  89.       AdminFrameMain.BtnDeleteClick(Sender);
  90. end;
  91.  
  92. procedure TMainForm.AdminFrameMainButtonRecoverClick(Sender: TObject);
  93. begin
  94.      AdminFrameMain.ButtonRecoverClick(Sender);
  95. end;
  96.  
  97. Procedure TMainForm.CheckLogin();
  98. var
  99.     LoginFormI : TLoginForm;
  100.     List : TUserList;
  101.     CaptchaFormI : TFormCaptcha;
  102.     R : TModalResult;
  103.     Log, Pass : String;
  104. begin
  105.     CaptchaFormI := TFormCaptcha.Create(NIL); // Инициализция формы Капча
  106.     LoginFormI := TLoginForm.Create(NIL); // Инициализция формы Логин
  107.     List := TUserList.Create; // Инициализация двусвязного списка пользователей
  108.  
  109.     Try
  110.         Repeat
  111.             R := LoginFormI.ShowModal; // Получение свойства ModalResult от LoginFormI
  112.             if R = mrOk then          // Если пользователь нажал на кнопку "ОК"
  113.             begin
  114.  
  115.                 Log := LoginFormI.ELogin. Text;
  116.                 Pass := LoginFormI.EPassword.Text;
  117.  
  118.                 try
  119.                     if LoginCorrect(Log,Pass) then // Аутентификация
  120.                     begin
  121.  
  122.                         CurrentUser := List.GetUserByLogin(Log,ConstantsFile.FILE_NAME_USER);
  123.  
  124.                         if CurrentUser.Role = ConstantsRole.ROLE_ADMIN then // Администратор
  125.                             AdminFrameMain.Visible := True;
  126.                         if CurrentUser.Role = ConstantsRole.ROLE_MANAGER_A then // Менеджер А
  127.                             ManagerAFrameMain.Visible := True;
  128.                         if CurrentUser.Role = ConstantsRole.ROLE_DELETED then // Удаленный пользователь
  129.                         begin
  130.                             Application.MessageBox('Вам отказано в авторизации! Системный администратор удалил ваш профиль. Обратитесь к нему для выяснения ситуации.','Завершение работы программы',MB_OK+MB_ICONWARNING);
  131.                             Application.Terminate;
  132.                             Abort;
  133.                         end;
  134.  
  135.                         Application.MessageBox(PChar(Concat('Здравствуйте, ',CurrentUser.LastName,'! Ваша роль - ', CurrentUser.Role)),'Успешная авторизация',MB_OK+MB_ICONINFORMATION);
  136.                         LBCurrentPage.Caption := 'Главная страница';
  137.  
  138.                         break
  139.                     end
  140.                     else if CountIncorrectData = 3 then // Вызов капчи если пользователь ввел неверно логин/пароль 3 раза
  141.                     begin
  142.                         Application.MessageBox('Вами было введено больше 3 раза неправильно логин/пароль, пройдите проверку на бота.','CAPTCHA',MB_OK + MB_ICONINFORMATION);
  143.                         CaptchaFormI.ShowModal;
  144.                         CountIncorrectData := 1;
  145.                     end
  146.                     else
  147.                     begin
  148.                         Application.MessageBox('Неверный логин/пароль','Авторизация',MB_OK+MB_ICONWARNING);
  149.                         Inc(CountIncorrectData);
  150.                     end;
  151.                 except
  152.                     On E : EAccessViolation do
  153.                     begin
  154.                         Application.MessageBox(PCHAR('Ошибка доступа к файлу.'),'Завершение работы программы',MB_OK + MB_ICONWARNING);
  155.                         Application.Terminate;
  156.                         Abort;
  157.                     end;
  158.                     On E : Exception do
  159.                     begin
  160.                        Application.MessageBox(PCHAR('Неизвестная ошибка, передайте ее системному администратору: ' + E.Message),'Завершение работы программы',MB_OK + MB_ICONWARNING);
  161.                        Application.Terminate;
  162.                        Abort;
  163.                     end;
  164.                 end;
  165.             end;
  166.         Until R = mrCancel;
  167.         if R = mrCancel then // Если пользователь нажал на кнопку "Отмена" в форме LoginForm
  168.         begin
  169.             Application.MessageBox('Отказ от авторизации. Программа завершит свою работу.','Завершение программы', MB_OK + MB_ICONINFORMATION);
  170.             Application.Terminate;
  171.             Abort;
  172.         end;
  173.     Finally
  174.         LoginFormI.Free; // Метод уничтожения формы авторизации
  175.         CaptchaFormI.Free; // Метод уничтожения формы капчи
  176.         List.Destroy; // Метод освобождения памяти
  177.     End;
  178. end;
  179.  
  180. Constructor TMainForm.Create(AOwner: TComponent);
  181. begin
  182.     CountIncorrectData := 1;
  183.     inherited;
  184.     CheckLogin;
  185. end;
  186.  
  187. procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  188. begin
  189.     CanClose := Application.MessageBox('Вы действительно желаете закрыть программу?','Закрытие программы', MB_YESNO + MB_ICONQUESTION) = IDYES;
  190. end;
  191.  
  192. procedure TMainForm.Image2Click(Sender: TObject);
  193. var
  194.     HelpFormNew : THelpForm;
  195. begin
  196.     HelpFormNew := THelpForm.Create(NIL, CurrentUser.Role);
  197.     HelpFormNew.ShowModal;
  198.     HelpFormNew.Free;
  199. end;
  200.  
  201. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement