wmusers.pp 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. unit wmusers;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils, FileUtil, LResources, 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. uses inifiles;
  38. { TCombinedModule }
  39. procedure TCombinedModule.DataModuleGetContentProducer(
  40. Sender: TObject; var AContentProducer: TCustomHTTPDataContentProducer);
  41. begin
  42. end;
  43. procedure TCombinedModule.DataModuleCreate(Sender: TObject);
  44. Var
  45. FN : String;
  46. Ini : TMemIniFile;
  47. begin
  48. // Not yet published.
  49. CreateSession:=True;
  50. FN:=ChangeFileExt(Paramstr(0),'.ini');
  51. If FileExists(FN) then
  52. begin
  53. Ini:=TMemIniFile.Create(FN);
  54. try
  55. With IBConnection1 do
  56. begin
  57. DatabaseName:=Ini.ReadString('Database','Path',DatabaseName);
  58. UserName:=Ini.ReadString('Database','UserName',UserName);
  59. Password:=Ini.ReadString('Database','Password',Password);
  60. end;
  61. finally
  62. Ini.Free;
  63. end;
  64. end;
  65. IBConnection1.Connected:=True;
  66. end;
  67. procedure TCombinedModule.UsersGetNewID(Sender: TObject; out
  68. AID: String);
  69. begin
  70. With QGetID Do
  71. begin
  72. Close;
  73. Open;
  74. try
  75. if (EOF and BOF) then
  76. Raise Exception.Create('No ID generated');
  77. AID:=Fields[0].AsString;
  78. finally
  79. Close;
  80. end;
  81. end;
  82. end;
  83. procedure TCombinedModule.CheckLoggedIn;
  84. begin
  85. If StrToIntDef(Session.Variables['UserID'],-1)=-1 then
  86. Raise Exception.Create('You must be logged in to see or modify data');
  87. end;
  88. procedure TCombinedModule.ProviderFormatterBeforeDataToJSON(
  89. Sender: TObject; AObject: TJSONObject);
  90. begin
  91. CheckLoggedIn;
  92. end;
  93. procedure TCombinedModule.DataModuleNewSession(Sender: TObject);
  94. begin
  95. // The cookies must all originate from the same path, otherwise the 2 datamodules will use a different session.
  96. (Sender as TFPWebSession).SessionCookiePath:='/';
  97. end;
  98. procedure TCombinedModule.ProviderFormatterBeforeDelete(
  99. Sender: TObject);
  100. begin
  101. CheckLoggedIn;
  102. end;
  103. procedure TCombinedModule.ProviderFormatterBeforeInsert(
  104. Sender: TObject);
  105. begin
  106. CheckLoggedIn;
  107. end;
  108. procedure TCombinedModule.ProviderFormatterBeforeUpdate(
  109. Sender: TObject);
  110. begin
  111. CheckLoggedIn;
  112. end;
  113. procedure TCombinedModule.DataModuleGetInputAdaptor(Sender: TObject;
  114. var AInputAdaptor: TCustomWebdataInputAdaptor);
  115. begin
  116. end;
  117. initialization
  118. {$I wmusers.lrs}
  119. RegisterHTTPModule('Provider', TCombinedModule);
  120. end.