delphimvcframework/samples/CustomAuth/MainClientFormU.pas

189 lines
4.7 KiB
ObjectPascal
Raw Normal View History

2016-09-20 11:19:09 +02:00
// ***************************************************************************
//
// Delphi MVC Framework
//
2019-01-08 12:48:27 +01:00
// Copyright (c) 2010-2019 Daniele Teti and the DMVCFramework Team
2016-09-20 11:19:09 +02:00
//
// https://github.com/danieleteti/delphimvcframework
//
// ***************************************************************************
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// *************************************************************************** }
unit MainClientFormU;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.AppEvnts, MVCFramework.RESTClient,
Vcl.ExtCtrls;
type
TForm7 = class(TForm)
GroupBox1: TGroupBox;
edtUsername: TEdit;
edtPassword: TEdit;
btnLogInLogOut: TButton;
ApplicationEvents1: TApplicationEvents;
Panel1: TPanel;
Button1: TButton;
Memo1: TMemo;
Button2: TButton;
Button3: TButton;
Label1: TLabel;
Label2: TLabel;
ListBox1: TListBox;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
procedure FormCreate(Sender: TObject);
procedure ApplicationEvents1Idle(Sender: TObject; var Done: Boolean);
procedure btnLogInLogOutClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
private
FRESTClient: TRESTClient;
FLogoutUrl: string;
FLogoutMethod: string;
procedure FillMemo(Response: IRESTResponse);
{ Private declarations }
public
{ Public declarations }
end;
var
Form7: TForm7;
implementation
uses
System.JSON,
MVCFramework.SystemJSONUtils;
2016-09-20 11:19:09 +02:00
{$R *.dfm}
procedure TForm7.ApplicationEvents1Idle(Sender: TObject; var Done: Boolean);
begin
if FRESTClient.SessionID.IsEmpty then
begin
btnLogInLogOut.Caption := 'LOGIN';
Panel1.Caption := 'Not Logged';
edtUsername.Enabled := True;
edtPassword.Enabled := True;
end
else
begin
btnLogInLogOut.Caption := 'LOGOUT';
Panel1.Caption := 'SessionID = ' + FRESTClient.SessionID;
edtUsername.Enabled := False;
edtPassword.Enabled := False;
end;
end;
procedure TForm7.btnLogInLogOutClick(Sender: TObject);
var
lJObj: TJSONObject;
lRes: IRESTResponse;
begin
if btnLogInLogOut.Caption = 'LOGIN' then
begin
lJObj := TJSONObject.Create;
try
lJObj.AddPair('username', edtUsername.Text);
lJObj.AddPair('password', edtPassword.Text);
lRes := FRESTClient.doPOST('/system/users/logged', [], TSystemJSON.JSONValueToString(lJObj, False));
2016-09-20 11:19:09 +02:00
if lRes.HasError then
begin
ShowMessage(lRes.Error.ExceptionMessage);
end;
FLogoutUrl := lRes.HeaderValue('X-LOGOUT-URL');
FLogoutMethod := lRes.HeaderValue('X-LOGOUT-METHOD');
finally
lJObj.Free;
end;
end
else
begin
Assert(FLogoutMethod = 'DELETE');
lRes := FRESTClient.doDELETE(FLogoutUrl, []);
if lRes.HasError then
begin
ShowMessage(lRes.Error.ExceptionMessage);
end;
end;
end;
procedure TForm7.Button1Click(Sender: TObject);
var
lRes: IRESTResponse;
begin
lRes := FRESTClient.doGET('/private/public/action', []);
FillMemo(lRes);
end;
procedure TForm7.Button2Click(Sender: TObject);
var
lRes: IRESTResponse;
begin
lRes := FRESTClient.doGET('/private/role1', []);
FillMemo(lRes);
end;
procedure TForm7.Button3Click(Sender: TObject);
var
lRes: IRESTResponse;
begin
lRes := FRESTClient.doGET('/private/role2', []);
FillMemo(lRes);
end;
procedure TForm7.FillMemo(Response: IRESTResponse);
begin
Memo1.Lines.Add(
Format('[%s] [%s] %s',
[TimeToStr(Time),
Response.ResponseText,
Response.BodyAsString]));
end;
procedure TForm7.FormCreate(Sender: TObject);
begin
FRESTClient := TRESTClient.Create('localhost', 8080);
end;
procedure TForm7.ListBox1Click(Sender: TObject);
var
lText: string;
lPieces: TArray<string>;
begin
if ListBox1.ItemIndex > -1 then
begin
lText := ListBox1.Items[ListBox1.ItemIndex];
lPieces := lText.Split([':']);
edtUsername.Text := lPieces[0];
edtPassword.Text := lPieces[1];
ShowMessage('Now you can log in using the login/logout button');
end;
end;
end.