Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /WebModuleUnit1.pas

Parent Directory Parent Directory | Revision Log Revision Log


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

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