wmusers.pp 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. unit wmusers;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils, HTTPDefs, websession, fpHTTP, fpWeb,
  6. IBConnection, sqldb, fpwebdata, fpjson, extjsjson, extjsxml, sqldbwebdata;
  7. type
  8. { TCombinedModule }
  9. TCombinedModule = class(TFPWebProviderDataModule)
  10. ProviderFormatter: TExtJSJSONDataFormatter;
  11. ProviderInputAdaptor: TExtJSJSonWebdataInputAdaptor;
  12. IBConnection1: TIBConnection;
  13. Users: TSQLDBWebDataProvider;
  14. QGetID: TSQLQuery;
  15. SQLTransaction1: TSQLTransaction;
  16. procedure DataModuleNewSession(Sender: TObject);
  17. procedure ProviderFormatterBeforeDataToJSON(Sender: TObject;
  18. AObject: TJSONObject);
  19. procedure ProviderFormatterBeforeDelete(Sender: TObject);
  20. procedure ProviderFormatterBeforeInsert(Sender: TObject);
  21. procedure ProviderFormatterBeforeUpdate(Sender: TObject);
  22. procedure UsersGetNewID(Sender: TObject; out AID: String);
  23. procedure DataModuleCreate(Sender: TObject);
  24. procedure DataModuleGetContentProducer(Sender: TObject;
  25. var AContentProducer: TCustomHTTPDataContentProducer);
  26. procedure DataModuleGetInputAdaptor(Sender: TObject;
  27. var AInputAdaptor: TCustomWebdataInputAdaptor);
  28. private
  29. procedure CheckLoggedIn;
  30. { private declarations }
  31. public
  32. { public declarations }
  33. end;
  34. var
  35. CombinedModule: TCombinedModule;
  36. implementation
  37. {$R *.lfm}
  38. uses inifiles;
  39. { TCombinedModule }
  40. procedure TCombinedModule.DataModuleGetContentProducer(
  41. Sender: TObject; var AContentProducer: TCustomHTTPDataContentProducer);
  42. begin
  43. end;
  44. procedure TCombinedModule.DataModuleCreate(Sender: TObject);
  45. Var
  46. FN : String;
  47. Ini : TMemIniFile;
  48. begin
  49. // Not yet published.
  50. CreateSession:=True;
  51. FN:=ChangeFileExt(Paramstr(0),'.ini');
  52. If FileExists(FN) then
  53. begin
  54. Ini:=TMemIniFile.Create(FN);
  55. try
  56. With IBConnection1 do
  57. begin
  58. DatabaseName:=Ini.ReadString('Database','Path',DatabaseName);
  59. UserName:=Ini.ReadString('Database','UserName',UserName);
  60. Password:=Ini.ReadString('Database','Password',Password);
  61. end;
  62. finally
  63. Ini.Free;
  64. end;
  65. end;
  66. IBConnection1.Connected:=True;
  67. end;
  68. procedure TCombinedModule.UsersGetNewID(Sender: TObject; out
  69. AID: String);
  70. begin
  71. With QGetID Do
  72. begin
  73. Close;
  74. Open;
  75. try
  76. if (EOF and BOF) then
  77. Raise Exception.Create('No ID generated');
  78. AID:=Fields[0].AsString;
  79. finally
  80. Close;
  81. end;
  82. end;
  83. end;
  84. procedure TCombinedModule.CheckLoggedIn;
  85. begin
  86. If StrToIntDef(Session.Variables['UserID'],-1)=-1 then
  87. Raise Exception.Create('You must be logged in to see or modify data');
  88. end;
  89. procedure TCombinedModule.ProviderFormatterBeforeDataToJSON(
  90. Sender: TObject; AObject: TJSONObject);
  91. begin
  92. CheckLoggedIn;
  93. end;
  94. procedure TCombinedModule.DataModuleNewSession(Sender: TObject);
  95. begin
  96. // The cookies must all originate from the same path, otherwise the 2 datamodules will use a different session.
  97. (Sender as TFPWebSession).SessionCookiePath:='/';
  98. end;
  99. procedure TCombinedModule.ProviderFormatterBeforeDelete(
  100. Sender: TObject);
  101. begin
  102. CheckLoggedIn;
  103. end;
  104. procedure TCombinedModule.ProviderFormatterBeforeInsert(
  105. Sender: TObject);
  106. begin
  107. CheckLoggedIn;
  108. end;
  109. procedure TCombinedModule.ProviderFormatterBeforeUpdate(
  110. Sender: TObject);
  111. begin
  112. CheckLoggedIn;
  113. end;
  114. procedure TCombinedModule.DataModuleGetInputAdaptor(Sender: TObject;
  115. var AInputAdaptor: TCustomWebdataInputAdaptor);
  116. begin
  117. end;
  118. initialization
  119. RegisterHTTPModule('Provider', TCombinedModule);
  120. end.