summaryrefslogtreecommitdiff
path: root/packages/fcl-web/examples/combined/wmlogin.pp
diff options
context:
space:
mode:
authorflorian <florian@3ad0048d-3df7-0310-abae-a5850022a9f2>2011-04-10 19:20:48 +0000
committerflorian <florian@3ad0048d-3df7-0310-abae-a5850022a9f2>2011-04-10 19:20:48 +0000
commit160cc1e115eeb75638dce6effdd16b2bc810ddb4 (patch)
treeb791a95695a7cf674e61a6153139c6f9c6c491fa /packages/fcl-web/examples/combined/wmlogin.pp
parent3843727e74b31bbf2a34e7e3b89ee422269f770e (diff)
parent413a6aa6469e6c297780217a27ca91363c637944 (diff)
downloadfpc-160cc1e115eeb75638dce6effdd16b2bc810ddb4.tar.gz
* rebase to trunk@17295avr
git-svn-id: http://svn.freepascal.org/svn/fpc/branches/avr@17296 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages/fcl-web/examples/combined/wmlogin.pp')
-rw-r--r--packages/fcl-web/examples/combined/wmlogin.pp129
1 files changed, 129 insertions, 0 deletions
diff --git a/packages/fcl-web/examples/combined/wmlogin.pp b/packages/fcl-web/examples/combined/wmlogin.pp
new file mode 100644
index 0000000000..671dedcd27
--- /dev/null
+++ b/packages/fcl-web/examples/combined/wmlogin.pp
@@ -0,0 +1,129 @@
+unit wmlogin;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, FileUtil, HTTPDefs, websession, fpHTTP, fpWeb, fpjsonrpc,
+ fpjson, IBConnection, sqldb, webjsonrpc, fpextdirect, sqldbwebdata;
+
+type
+
+ { TSessionManagement }
+
+ TSessionManagement = class(TExtDirectModule)
+ IBConnection1: TIBConnection;
+ Logout: TJSONRPCHandler;
+ Login: TJSONRPCHandler;
+ SessionManagement: TJSONRPCHandler;
+ QAuthenticate: TSQLQuery;
+ SQLTransaction1: TSQLTransaction;
+ procedure DataModuleCreate(Sender: TObject);
+ procedure LoginExecute(Sender: TObject; const Params: TJSONData;
+ out Res: TJSONData);
+ procedure LogoutExecute(Sender: TObject; const Params: TJSONData;
+ out Res: TJSONData);
+ private
+ function AuthenticateUser(AUsername, APassword: String): Integer;
+ procedure DoOnNewSession(Sender: TObject);
+ { private declarations }
+ public
+ { public declarations }
+ end;
+
+var
+ SessionManagement: TSessionManagement;
+
+implementation
+
+uses inifiles;
+
+{$R *.lfm}
+
+{ TSessionManagement }
+
+function TSessionManagement.AuthenticateUser(AUsername,APassword : String) : Integer;
+
+begin
+ With QAuthenticate do
+ begin
+ ParamByName('Login').AsString:=AUserName;
+ ParamByName('Password').AsString:=APassword;
+ Open;
+ try
+ if (EOF and BOF) then
+ Result:=-1
+ else
+ begin
+ Result:=FieldByName('U_ID').AsInteger;
+ Session.Variables['UserName']:=FieldByName('U_NAME').AsString;
+ end;
+ Session.Variables['UserID']:=IntToStr(Result);
+ finally
+ Close;
+ end;
+ end;
+end;
+
+procedure TSessionManagement.LoginExecute(Sender: TObject;
+ const Params: TJSONData; out Res: TJSONData);
+
+Var
+ A : TJSONArray ;
+ AUserName,APassword : String;
+begin
+ A:=Params as TJSONArray;
+ AUserName:=A.Strings[0];
+ APassword:=A.Strings[1];
+ Res:=TJSONIntegerNumber.Create(AuthenticateUser(AUsername,APassword));
+end;
+
+procedure TSessionManagement.LogoutExecute(Sender: TObject;
+ const Params: TJSONData; out Res: TJSONData);
+begin
+ // To be sure
+ Session.Variables['UserID']:='-1';
+ Session.Terminate;
+ // A result must always be sent back.
+ Res:=TJSONString.Create('Bye');
+end;
+
+procedure TSessionManagement.DoOnNewSession(Sender : TObject);
+
+begin
+ // The cookies must all originate from the same path, otherwise the 2 datamodules will use a different session.
+ (Sender as TFPWebSession).SessionCookiePath:='/';
+end;
+
+procedure TSessionManagement.DataModuleCreate(Sender: TObject);
+Var
+ FN : String;
+ Ini : TMemIniFile;
+
+begin
+ // The following 2 statements are needed because the 2 properties are (currently) not published.
+ OnNewSession:=@DoOnNewSession;
+ CreateSession:=True;
+ FN:=ChangeFileExt(Paramstr(0),'.ini');
+ If FileExists(FN) then
+ begin
+ Ini:=TMemIniFile.Create(FN);
+ try
+ With IBConnection1 do
+ begin
+ DatabaseName:=Ini.ReadString('Database','Path',DatabaseName);
+ UserName:=Ini.ReadString('Database','UserName',UserName);
+ Password:=Ini.ReadString('Database','Password',Password);
+ end;
+ finally
+ Ini.Free;
+ end;
+ end;
+ IBConnection1.Connected:=True;
+end;
+
+initialization
+ RegisterHTTPModule('Login', TSessionManagement);
+end.
+