Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /WebModuleUnit1.pas

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3 - (hide annotations) (download) (as text)
Thu Sep 24 05:40:03 2015 UTC (8 years, 6 months ago) by yamat0jp
File MIME type: text/x-pascal
File size: 19253 byte(s)
投稿エラーの文字化けがなおりました

パスワードが再設定しやすいです
1 yamat0jp 1 unit WebModuleUnit1;
2    
3     interface
4    
5     uses System.SysUtils, System.Classes, Web.HTTPApp, FireDAC.Stan.Intf,
6     FireDAC.Stan.Option, FireDAC.Stan.Param, FireDAC.Stan.Error, FireDAC.DatS,
7     FireDAC.Phys.Intf, FireDAC.DApt.Intf, FireDAC.Stan.Async, FireDAC.DApt,
8     FireDAC.UI.Intf, FireDAC.Stan.Def, FireDAC.Stan.Pool, FireDAC.Phys,
9     FireDAC.Phys.SQLite, FireDAC.Phys.SQLiteDef, FireDAC.Stan.ExprFuncs, Data.DB,
10     FireDAC.Comp.Client, FireDAC.Comp.DataSet, Web.HTTPProd, Web.DSProd,
11     AnsiStrings, System.DateUtils, System.Types;
12    
13     type
14     TWebModule1 = class(TWebModule)
15     FDTable1: TFDTable;
16     FDConnection1: TFDConnection;
17     FDTable2: TFDTable;
18     FDTable2home: TWideMemoField;
19     FDTable2title: TWideMemoField;
20     FDTable2title2: TWideMemoField;
21     FDTable2pass: TWideMemoField;
22     PageProducer1: TPageProducer;
23     DataSetPageProducer2: TDataSetPageProducer;
24     FDTable1name: TWideMemoField;
25     FDTable1no: TIntegerField;
26     FDTable1date: TWideMemoField;
27     FDTable1sub: TWideMemoField;
28     FDTable1com: TWideMemoField;
29     FDTable1pass: TWideMemoField;
30     adminDS: TDataSetPageProducer;
31     FDTable2ngwords: TWideMemoField;
32     FDTable3: TFDTable;
33     FDTable3link: TIntegerField;
34     FDTable3count: TIntegerField;
35     FDTable1line: TIntegerField;
36     FDTable3line: TIntegerField;
37     procedure WebModule1DefaultHandlerAction(Sender: TObject;
38     Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
39     procedure PageProducer1HTMLTag(Sender: TObject; Tag: TTag;
40     const TagString: string; TagParams: TStrings; var ReplaceText: string);
41     procedure WebModule1registAction(Sender: TObject; Request: TWebRequest;
42     Response: TWebResponse; var Handled: Boolean);
43     procedure DataSetPageProducer2HTMLTag(Sender: TObject; Tag: TTag;
44     const TagString: string; TagParams: TStrings; var ReplaceText: string);
45     procedure WebModule1userdelAction(Sender: TObject; Request: TWebRequest;
46     Response: TWebResponse; var Handled: Boolean);
47     procedure WebModule1adminAction(Sender: TObject; Request: TWebRequest;
48     Response: TWebResponse; var Handled: Boolean);
49     procedure WebModule1admindelAction(Sender: TObject; Request: TWebRequest;
50     Response: TWebResponse; var Handled: Boolean);
51     procedure WebModule1loginAction(Sender: TObject; Request: TWebRequest;
52     Response: TWebResponse; var Handled: Boolean);
53     procedure WebModuleBeforeDispatch(Sender: TObject; Request: TWebRequest;
54     Response: TWebResponse; var Handled: Boolean);
55     procedure WebModule1setupAction(Sender: TObject; Request: TWebRequest;
56     Response: TWebResponse; var Handled: Boolean);
57     procedure WebModule1searchAction(Sender: TObject; Request: TWebRequest;
58     Response: TWebResponse; var Handled: Boolean);
59     procedure WebModuleCreate(Sender: TObject);
60     procedure WebModuleDestroy(Sender: TObject);
61 yamat0jp 3 procedure WebModule1adminsetAction(Sender: TObject; Request: TWebRequest;
62     Response: TWebResponse; var Handled: Boolean);
63 yamat0jp 1 private
64     { private ���� }
65     public
66     { public ���� }
67     user: string;
68     time: Int64;
69     words: TStringList;
70     position: integer;
71     uri: string;
72 yamat0jp 3 er: string;
73 yamat0jp 1 foo: string;
74     function footer(const path: string): string;
75     function regist(var com: string): integer;
76 yamat0jp 3 procedure AddCookie(day: integer; const pass: string);
77 yamat0jp 1 end;
78    
79     var
80     WebModuleClass: TComponentClass = TWebModule1;
81    
82     implementation
83    
84     { %CLASSGROUP 'Vcl.Controls.TControl' }
85    
86     {$R *.dfm}
87    
88 yamat0jp 3 procedure TWebModule1.AddCookie(day: integer; const pass: string);
89     begin
90     with Response.Cookies.Add do
91     begin
92     Path := ReplaceText(FDTable2.FieldByName('home').AsAnsiString + 'admin','http','https');
93     Expires := Now + day;
94     Name := 'psw';
95     Value := AnsiString(pass);
96     Secure := True;
97     end;
98     end;
99    
100 yamat0jp 1 procedure TWebModule1.DataSetPageProducer2HTMLTag(Sender: TObject; Tag: TTag;
101     const TagString: string; TagParams: TStrings; var ReplaceText: string);
102     begin
103     ReplaceText := FDTable1.FieldByName(TagString).AsString;
104     end;
105    
106     function TWebModule1.footer(const path: string): string;
107     var
108     s1, s2, t1, t2: string;
109     home: string;
110     i, k, count: integer;
111     function linkcontent: string;
112     var
113     j, link: integer;
114     begin
115     result := '';
116     link := FDTable3.FieldByName('link').AsInteger;
117     if position > link div 2 then
118     begin
119     if (FDTable1.RecordCount - 1) div count < position + link div 2 then
120     i := FDTable1.RecordCount div count - link - position
121     else
122     i := -(link div 2)
123     end
124     else if position = -1 then
125     i := -position + FDTable1.RecordCount div count - link
126     else
127     i := -position;
128     for j := 0 to link do
129     begin
130     if FDTable1.RecordCount <= (position + i + j) * count then
131     break;
132     if position + i + j < 0 then
133     continue;
134     if i + j = 0 then
135     result := result + ' ' + IntToStr(position + 1) + ' '
136     else
137     result := result + Format(' <a href="' + home + path +
138     '?pos=%d">%d</a> ', [position + i + j, position + 1 + i + j]);
139     end;
140     end;
141    
142     begin
143     count := FDTable3.FieldByName('count').AsInteger;
144     if path = 'admin' then
145     home := String(ReplaceText(FDTable2.FieldByName('home').AsAnsiString,
146     'http', 'https'))
147     else
148     home := FDTable2.FieldByName('home').AsString;
149     if position <= -1 then
150     begin
151     s1 := '���V%d�����L�����\��<br><center>Pages : [<b>';
152     s2 := '<<' + linkcontent + '>>] ���V</b><br></center>';
153     result := Format(s1, [count]) + s2;
154     end
155     else
156     begin
157     if position = 0 then
158     t1 := '?pos=0'
159     else
160     t1 := '?pos=' + IntToStr(position - 1);
161     i := (FDTable1.RecordCount - 1) div count;
162     if position > i then
163     position := i;
164     if position = i then
165     begin
166     t2 := '?pos=' + IntToStr(position);
167     k := FDTable1.RecordCount;
168     end
169     else
170     begin
171     t2 := '?pos=' + IntToStr(position + 1);
172     k := (position + 1) * count;
173     end;
174     s1 := '%d ���� %d ������ %d �������\��<br><center>Page : [<b>';
175     s2 := '<a href="' + home + path + t1 + '"><<</a>' + linkcontent +
176     '<a href="' + home + path + t2 + '">>></a>] <a href="' + home + path +
177     '">���V</a></b></center>';
178     result := Format(s1, [FDTable1.RecordCount, position * count + 1, k]) + s2;
179     end;
180     end;
181    
182     procedure TWebModule1.PageProducer1HTMLTag(Sender: TObject; Tag: TTag;
183     const TagString: string; TagParams: TStrings; var ReplaceText: string);
184     var
185     i, j, count: integer;
186     s: TDataSetPageProducer;
187     begin
188     if TagString = 'home' then
189     begin
190 yamat0jp 2 if (uri = 'admin')or(uri = 'login')or(TagParams.Values['ssl'] = 'true') then
191     ReplaceText := String(AnsiReplaceText(FDTable2.FieldByName('home').AsAnsiString, 'http', 'https'))
192 yamat0jp 1 else
193     ReplaceText := FDTable2.FieldByName('home').AsString;
194     end;
195     if (TagString = 'title') or (TagString = 'title2') then
196     ReplaceText := FDTable2.FieldByName(TagString).AsString;
197     if TagString = 'username' then
198     ReplaceText := user;
199     if TagString = 'main' then
200     begin
201     if FDTable1.RecordCount = 0 then
202     begin
203     if uri = 'index' then
204     ReplaceText := '�������e������������.';
205     end
206     else
207     begin
208     count := FDTable3.FieldByName('count').AsInteger;
209     if uri = 'admin' then
210     s := adminDS
211     else
212     s := DataSetPageProducer2;
213     if position < -1 then
214     position := -1;
215     if (position + 1) * count > FDTable1.RecordCount then
216     position := (FDTable1.RecordCount - 1) div count;
217     if position = -1 then
218     begin
219     if FDTable1.RecordCount < count then
220     j := FDTable1.RecordCount mod count
221     else
222     j := count;
223     end
224     else if FDTable1.RecordCount < (position + 1) * count then
225     j := FDTable1.RecordCount - position * count
226     else
227     j := count;
228     if position = -1 then
229     FDTable1.Last
230     else
231     FDTable1.RecNo := (position + 1) * count;
232     for i := 1 to j do
233     begin
234     ReplaceText := ReplaceText + s.Content;
235     FDTable1.Prior;
236     end;
237     end;
238     end;
239     if TagString = 'footer' then
240     if TagParams.Values['refer'] = 'true' then
241     ReplaceText := foo
242     else
243     begin
244     foo := footer(uri);
245     ReplaceText := foo;
246     end;
247     if TagString = 'text' then
248     if FDTable1.Filtered = false then
249     ReplaceText := '����������'
250     else
251     ReplaceText := '�Y������ ' + IntToStr(FDTable1.RecordCount) + ' ��' +
252     '<br><#main>';
253 yamat0jp 3 if TagString = 'pass' then
254     ReplaceText:=FDTable2.FieldByName('pass').AsString;
255     if TagString = 'content' then
256     ReplaceText:=er;
257 yamat0jp 1 end;
258    
259     function TWebModule1.regist(var com: string): integer;
260     var
261     i: integer;
262     begin
263     result := 1;
264     i := 1;
265     while True do
266     begin
267     i := Pos(#$D#$A, com, i);
268     if i = 0 then
269     break;
270     Delete(com, i, Length(#$D#$A));
271     Insert('<br>', com, i);
272     inc(i, 4);
273     inc(result);
274     end;
275     end;
276    
277     procedure TWebModule1.WebModule1adminAction(Sender: TObject;
278     Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
279     var
280 yamat0jp 3 t: string;
281 yamat0jp 1 x: Boolean;
282     procedure something;
283     var
284     s: TResourceStream;
285     begin
286     x := false;
287     s := TResourceStream.Create(HInstance,'admin',RT_RCDATA);
288     try
289     uri:='admin';
290     PageProducer1.HTMLDoc.LoadFromStream(s);
291     Response.ContentType := 'text/html; charset=utf-8;';
292     Response.Content := PageProducer1.Content;
293     finally
294     s.Free;
295     end;
296     end;
297    
298     begin
299     if Request.Query = 'del' then
300     begin
301 yamat0jp 3 AddCookie(-3,'');
302 yamat0jp 1 Response.SendRedirect(FDTable2.FieldByName('home').AsAnsiString);
303     Exit;
304     end;
305     x := True;
306 yamat0jp 3 t := Request.ContentFields.Values['password'];
307 yamat0jp 1 position := StrToIntDef(Request.QueryFields.Values['pos'], -1);
308 yamat0jp 3 if t <> '' then
309 yamat0jp 1 begin
310 yamat0jp 3 AddCookie(1,t);
311     if t = FDTable2.FieldByName('pass').AsString then
312 yamat0jp 1 something;
313     end
314     else if Request.CookieFields.Values['psw'] = FDTable2.FieldByName('pass').AsString
315     then
316     something;
317     if x = True then
318 yamat0jp 2 Response.SendRedirect(AnsiReplaceText(FDTable2.FieldByName('home').AsAnsiString,'http','https') + 'login');
319 yamat0jp 1 end;
320    
321     procedure TWebModule1.WebModule1admindelAction(Sender: TObject;
322     Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
323     var
324     i: integer;
325     begin
326 yamat0jp 3 for i := 0 to Request.ContentFields.Count - 1 do
327 yamat0jp 1 if FDTable1.Locate('no', Request.ContentFields.ValueFromIndex[i], []) = True
328     then
329     FDTable1.Delete;
330     Response.SendRedirect(ReplaceText(FDTable2.FieldByName('home').AsAnsiString +
331     'admin', 'http', 'https'));
332     end;
333    
334 yamat0jp 3 procedure TWebModule1.WebModule1adminsetAction(Sender: TObject;
335     Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
336     var
337     s: string;
338     begin
339     s:=Request.ContentFields.Values['pass'];
340     FDTable2.Edit;
341     FDTable2.FieldByName('pass').AsString:=s;
342     FDTable2.Post;
343     AddCookie(1,s);
344     Response.SendRedirect(ReplaceText(FDTable2.FieldByName('home').AsAnsiString+'admin','http','https'));
345     end;
346    
347 yamat0jp 1 procedure TWebModule1.WebModule1DefaultHandlerAction(Sender: TObject;
348     Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
349     var
350     s: TResourceStream;
351     begin
352     position := StrToIntDef(Request.QueryFields.Values['pos'], -1);
353     user := Request.CookieFields.Values['UID'];
354     s:=TResourceStream.Create(HInstance,'index',RT_RCDATA);
355     try
356     uri:='index';
357     PageProducer1.HTMLDoc.LoadFromStream(s);
358     Response.ContentType := 'text/html; charset=utf-8;';
359     Response.Content := PageProducer1.Content;
360     finally
361     s.Free;
362     end;
363     end;
364    
365     procedure TWebModule1.WebModule1loginAction(Sender: TObject;
366     Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
367     var
368     s: TResourceStream;
369     begin
370     s:=TResourceStream.Create(HInstance,'login',RT_RCDATA);
371     try
372     uri:='login';
373     PageProducer1.HTMLDoc.LoadFromStream(s);
374     Response.ContentType := 'text/html; charset=utf-8;';
375     Response.Content := PageProducer1.Content;
376     finally
377     s.Free;
378     end;
379     end;
380    
381     procedure TWebModule1.WebModule1registAction(Sender: TObject;
382     Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
383     var
384     na, sub, com, pass: string;
385     no, line: integer;
386     i: integer;
387 yamat0jp 3 s: TResourceStream;
388 yamat0jp 1 begin
389     with Request.ContentFields do
390     begin
391     na := Values['name'];
392     sub := Values['title'];
393     com := Values['comment'];
394     pass := Values['password'];
395     end;
396 yamat0jp 3 er:='';
397 yamat0jp 1 line:=0;
398     if na = '' then
399     na := '�N������';
400     if sub = '' then
401     sub := '�^�C�g������';
402     if com = '' then
403 yamat0jp 3 er := '�{��������������.'#$D#$A
404 yamat0jp 1 else
405     line := regist(com);
406     for i := 0 to words.count - 1 do
407     if ContainsText(AnsiString(com), AnsiString(words[i])) = True then
408     begin
409 yamat0jp 3 er:=er + '���~����������������.';
410 yamat0jp 1 break;
411     end;
412     if FDTable1.RecordCount = 0 then
413     no := 1
414     else
415     begin
416     FDTable1.Last;
417     no := FDTable1.FieldByName('no').AsInteger + 1;
418     if SecondsBetween(Now, StrToDateTime(FDTable1.FieldByName('date').AsString))
419     < time then
420 yamat0jp 3 er := '����������������.';
421 yamat0jp 1 end;
422 yamat0jp 3 if er <> '' then
423 yamat0jp 1 begin
424 yamat0jp 3 Response.ContentType := 'text/html; charset=utf-8;';
425     s:=TResourceStream.Create(HInstance,'regist',RT_RCDATA);
426     try
427     Response.Content:=PageProducer1.ContentFromStream(s);
428     finally
429     s.Free;
430     end;
431 yamat0jp 1 Exit;
432     end;
433     FDTable1.AppendRecord([na, no, DateTimeToStr(Now), sub, com, pass, line]);
434     with Response.Cookies.Add do
435     begin
436     path := FDTable2.FieldByName('home').AsAnsiString;
437     Name := 'UID';
438     Value := AnsiString(na);
439     Expires := Now + 1;
440     end;
441     Response.SendRedirect(FDTable2.FieldByName('home').AsAnsiString);
442     end;
443    
444     procedure TWebModule1.WebModule1searchAction(Sender: TObject;
445     Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
446     var
447     s: TStringList;
448     t1, t2, t3: string;
449     i, j: integer;
450     m: TResourceStream;
451     begin
452     t1 := Request.ContentFields.Values['filter'];
453     t3 := '';
454     s := TStringList.Create;
455     try
456     s.DelimitedText := Request.ContentFields.Values['word1'];
457     for i := 0 to s.count - 1 do
458     begin
459     t2 := Trim(s[i]);
460     if t2 = '' then
461     continue;
462     if t3 <> '' then
463     t3 := t3 + ' and ';
464     t3 := t3 + t1 + ' LIKE ''%' + t2 + '%''';
465     end;
466     finally
467     s.Free;
468     end;
469     if t3 = '' then
470     begin
471     m:=TResourceStream.Create(HInstance,'search',RT_RCDATA);
472     try
473     PageProducer1.HTMLDoc.LoadFromStream(m);
474 yamat0jp 3 Response.ContentType := 'text/html; cahrset=utf-8';
475 yamat0jp 1 Response.Content := PageProducer1.Content;
476     finally
477     m.Free;
478     end;
479     Exit;
480     end;
481     FDTable1.Filter := t3;
482     FDTable1.Filtered := True;
483     m:=TResourceStream.Create(HInstance,'search',RT_RCDATA);
484     try
485     j := 0;
486     for i := 1 to FDTable1.RecordCount - 1 do
487     begin
488     inc(j, FDTable1.FieldByName('line').AsInteger);
489     FDTable1.Next;
490     end;
491     PageProducer1.HTMLDoc.LoadFromStream(m);
492     Response.ContentType := 'text/html; charset=utf-8;';
493     if (t3 <> '') and (j > FDTable3.FieldByName('line').AsInteger) then
494     begin
495     t1 := PageProducer1.Content;
496     i := Pos('<#main>', t1);
497     Delete(t1, i, Length('<#main>'));
498     Response.Content := t1 + Format('�\���s����%d�s��������������.',
499     [FDTable3.FieldByName('line').AsInteger]);
500     end
501     else
502     Response.Content := PageProducer1.ContentFromString
503     (PageProducer1.Content);
504     finally
505     FDTable1.Filtered := false;
506     m.Free;
507     end;
508     end;
509    
510     procedure TWebModule1.WebModule1setupAction(Sender: TObject;
511     Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
512     var
513     i: integer;
514     s: string;
515     begin
516 yamat0jp 2 for i := 0 to Request.ContentFields.Count - 1 do
517 yamat0jp 1 begin
518     s := Request.ContentFields.Names[i];
519     if s <> 'home' then
520     FDTable2.FieldByName(s).AsString :=
521     Request.ContentFields.ValueFromIndex[i];
522     end;
523     Handled := false;
524     end;
525    
526     procedure TWebModule1.WebModule1userdelAction(Sender: TObject;
527     Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
528     var
529     s: string;
530     i: integer;
531     begin
532     i := StrToIntDef(Request.ContentFields.Values['number'], 0);
533     if (i > 0) and (FDTable1.Locate('no', i, []) = True) then
534     begin
535     s := FDTable1.FieldByName('pass').AsString;
536     if (s <> '') and (s = Request.ContentFields.Values['password']) then
537     FDTable1.Delete;
538     end;
539     Handled := false;
540     end;
541    
542     procedure TWebModule1.WebModuleBeforeDispatch(Sender: TObject;
543     Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
544     var
545 yamat0jp 3 s: string;
546 yamat0jp 1 m: TResourceStream;
547     begin
548     if FDTable1.Exists = false then
549     FDTable1.CreateTable(false, [tpTable]);
550     if FDTable2.Exists = false then
551     begin
552     FDTable2.CreateTable(false, [tpTable]);
553     FDTable2.Active := True;
554     {
555     if (Request.ServerPort = 80) or (Request.ServerPort = 443) then
556     s := 'http://' + String(Request.Host)
557     else
558     s := 'http://' + String(Request.Host) + ':' +
559     IntToStr(Request.ServerPort);
560     }
561     s:='http://'+String(Request.Host);
562     if Request.ScriptName <> '' then
563     s := s + String(Request.ScriptName) + '/'
564     else
565     s := s + '/';
566     FDTable2.AppendRecord([s, 'pbbs clone',
567     '<center><font size=5 face=Verdana color=gray><b>P-BBS CLONE</b></font></center>',
568     'admin', '����,����,����']);
569     m:=TResourceStream.Create(HInstance,'setup',RT_RCDATA);
570     try
571     uri:='setup';
572     PageProducer1.HTMLDoc.LoadFromStream(m);
573     Response.ContentType := 'text/html; charset=utf-8;';
574     Response.Content := PageProducer1.Content;
575     finally
576     m.Free;
577     end;
578     Handled := True;
579     end
580     else
581     FDTable2.Active := True;
582     if FDTable3.Exists = false then
583     begin
584     FDTable3.CreateTable(false, [tpTable]);
585     FDTable3.Active := True;
586     FDTable3.AppendRecord([5, 20, 500]);
587     end
588     else
589     FDTable3.Active := True;
590     words.DelimitedText := FDTable2.FieldByName('ngwords').AsString;
591     FDTable1.Active := True;
592     if FileExists('maintenance.htm') = True then
593     begin
594     PageProducer1.HTMLFile := 'maintenance.htm';
595     Response.ContentType := 'text/html; charset=utf-8;';
596     Response.Content := PageProducer1.Content;
597     Handled := True;
598     end;
599 yamat0jp 2 {
600     t:='';
601     ssl:=TStringList.Create;
602     try
603     ssl.Add('/login');
604     ssl.Add('/admin');
605     if (ssl.IndexOf(Request.PathInfo) > -1)and(StartsText('https',FDTable2.FieldByName('home').AsString) = false) then
606     begin
607     s:=FDTable2.FieldByName('home').AsAnsiString;
608     Delete(s,Length(s),1);
609     t:='https'+Copy(s,5,Length(s))+Request.PathInfo;
610     end;
611     finally
612     ssl.Free;
613     end;
614     if t <> '' then
615     begin
616     Response.SendRedirect(t);
617     Exit;
618     end;
619     }
620 yamat0jp 1 end;
621    
622     procedure TWebModule1.WebModuleCreate(Sender: TObject);
623     begin
624     time := 1;
625     words := TStringList.Create;
626     end;
627    
628     procedure TWebModule1.WebModuleDestroy(Sender: TObject);
629     begin
630     words.Free;
631     end;
632    
633     end.

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26