mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-07-08 02:35:58 +02:00
146 lines
3.5 KiB
ObjectPascal
146 lines
3.5 KiB
ObjectPascal
unit wmusers;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, HTTPDefs, websession, fpHTTP, fpWeb,
|
|
IBConnection, sqldb, fpwebdata, fpjson, extjsjson, extjsxml, sqldbwebdata;
|
|
|
|
type
|
|
|
|
{ TCombinedModule }
|
|
|
|
TCombinedModule = class(TFPWebProviderDataModule)
|
|
ProviderFormatter: TExtJSJSONDataFormatter;
|
|
ProviderInputAdaptor: TExtJSJSonWebdataInputAdaptor;
|
|
IBConnection1: TIBConnection;
|
|
Users: TSQLDBWebDataProvider;
|
|
QGetID: TSQLQuery;
|
|
SQLTransaction1: TSQLTransaction;
|
|
procedure DataModuleNewSession(Sender: TObject);
|
|
procedure ProviderFormatterBeforeDataToJSON(Sender: TObject;
|
|
AObject: TJSONObject);
|
|
procedure ProviderFormatterBeforeDelete(Sender: TObject);
|
|
procedure ProviderFormatterBeforeInsert(Sender: TObject);
|
|
procedure ProviderFormatterBeforeUpdate(Sender: TObject);
|
|
procedure UsersGetNewID(Sender: TObject; out AID: String);
|
|
procedure DataModuleCreate(Sender: TObject);
|
|
procedure DataModuleGetContentProducer(Sender: TObject;
|
|
var AContentProducer: TCustomHTTPDataContentProducer);
|
|
procedure DataModuleGetInputAdaptor(Sender: TObject;
|
|
var AInputAdaptor: TCustomWebdataInputAdaptor);
|
|
private
|
|
procedure CheckLoggedIn;
|
|
{ private declarations }
|
|
public
|
|
{ public declarations }
|
|
end;
|
|
|
|
var
|
|
CombinedModule: TCombinedModule;
|
|
|
|
implementation
|
|
|
|
{$R *.lfm}
|
|
|
|
uses inifiles;
|
|
|
|
{ TCombinedModule }
|
|
|
|
procedure TCombinedModule.DataModuleGetContentProducer(
|
|
Sender: TObject; var AContentProducer: TCustomHTTPDataContentProducer);
|
|
begin
|
|
end;
|
|
|
|
procedure TCombinedModule.DataModuleCreate(Sender: TObject);
|
|
|
|
Var
|
|
FN : String;
|
|
Ini : TMemIniFile;
|
|
|
|
begin
|
|
// Not yet published.
|
|
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;
|
|
|
|
procedure TCombinedModule.UsersGetNewID(Sender: TObject; out
|
|
AID: String);
|
|
begin
|
|
With QGetID Do
|
|
begin
|
|
Close;
|
|
Open;
|
|
try
|
|
if (EOF and BOF) then
|
|
Raise Exception.Create('No ID generated');
|
|
AID:=Fields[0].AsString;
|
|
finally
|
|
Close;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TCombinedModule.CheckLoggedIn;
|
|
|
|
begin
|
|
If StrToIntDef(Session.Variables['UserID'],-1)=-1 then
|
|
Raise Exception.Create('You must be logged in to see or modify data');
|
|
end;
|
|
procedure TCombinedModule.ProviderFormatterBeforeDataToJSON(
|
|
Sender: TObject; AObject: TJSONObject);
|
|
begin
|
|
CheckLoggedIn;
|
|
end;
|
|
|
|
procedure TCombinedModule.DataModuleNewSession(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 TCombinedModule.ProviderFormatterBeforeDelete(
|
|
Sender: TObject);
|
|
begin
|
|
CheckLoggedIn;
|
|
end;
|
|
|
|
procedure TCombinedModule.ProviderFormatterBeforeInsert(
|
|
Sender: TObject);
|
|
begin
|
|
CheckLoggedIn;
|
|
end;
|
|
|
|
procedure TCombinedModule.ProviderFormatterBeforeUpdate(
|
|
Sender: TObject);
|
|
begin
|
|
CheckLoggedIn;
|
|
end;
|
|
|
|
procedure TCombinedModule.DataModuleGetInputAdaptor(Sender: TObject;
|
|
var AInputAdaptor: TCustomWebdataInputAdaptor);
|
|
begin
|
|
end;
|
|
|
|
initialization
|
|
RegisterHTTPModule('Provider', TCombinedModule);
|
|
end.
|
|
|