• R/O
  • SSH
  • HTTPS

cico: コミット


コミットメタ情報

リビジョン12 (tree)
日時2020-02-15 03:03:07
作者derekwildstar

ログメッセージ

Removida toda codificação que considerava que os Cookies precisavam ser gerenciados. O WinInet gerencia os Cookies automaticamente quando o flag "INTERNET_FLAG_NO_COOKIES" não é usado

変更サマリ

差分

--- trunk/client/prj/CiCoD.dproj (revision 11)
+++ trunk/client/prj/CiCoD.dproj (revision 12)
@@ -89,7 +89,6 @@
8989 <AppEnableRuntimeThemes>true</AppEnableRuntimeThemes>
9090 <VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
9191 <VerInfo_Locale>1033</VerInfo_Locale>
92- <Debugger_RunParams>u 02322719412 ******</Debugger_RunParams>
9392 <AppDPIAwarenessMode>PerMonitor</AppDPIAwarenessMode>
9493 </PropertyGroup>
9594 <PropertyGroup Condition="'$(Cfg_2)'!=''">
--- trunk/client/src/cicoda/UDAMOPrincipal.pas (revision 11)
+++ trunk/client/src/cicoda/UDAMOPrincipal.pas (revision 12)
@@ -210,6 +210,7 @@
210210
211211 // Inicializa um record para guardar informações estendidas a serem
212212 // associadas ao item que está sendo adicionado a LIVIMensagens
213+ { TODO : EU não sei porque eu precisei fazer isso. Mas vou descobrir depois }
213214 New(MCF);
214215 MCF.Id := RMR.Id;
215216 MCF.Mensagem := '??? não sei o que colocar aqui';
--- trunk/client/src/lib/UCiCo.pas (revision 11)
+++ trunk/client/src/lib/UCiCo.pas (revision 12)
@@ -22,7 +22,13 @@
2222 History: THistory;
2323 end;
2424
25-{ TODO : Descobri que após a primeira utilização o headers não são mais retornados e mesmo assim tudo continua funcionando. Será que eles são desnecessários? }
25+// O WinInet automaticamente gerencia os Cookies, ou seja, você não precisa se
26+// preocupar em salvar cookies retornados para posterior envio. Outros
27+// cabeçalhos precisam de gerenciamento de forma usual. Ao utilizar o flag
28+// INTERNET_FLAG_NO_COOKIES (o qual está comentado em vários locais abaixo) os
29+// Cookies não são mais automaticamente gerenciados, obrigando o programador a
30+// construir toda uma lógica para mantê-los, excluí-los e reenviá-los
31+
2632 function CurrentStatus(AHandle: THandle; AProducao: Boolean; ACPF: String; APassaword: String; AMatricula: String): TCheckInChecOutInfo;
2733 function CheckIn(AHandle: THandle; AProducao: Boolean; ACPF: String; APassword: String; AMatricula: String): Boolean;
2834 function CheckOut(AHandle: THandle; AProducao: Boolean; ACPF: String; APassword: String; AMatricula: String): Boolean;
@@ -35,17 +41,22 @@
3541 StrUtils;
3642
3743 const
38- URLBASEH = 'https://homologacao.tjpe.gov.br/controlefrequencia/';
44+ URLBASEH = 'https://homologacao-controlefrequencia.app.tjpe.gov.br/';
3945 URLBASEP = 'https://www.tjpe.jus.br/controlefrequencia/';
4046 SEMVERIFICATIONCOOKIE = 'Não foi possível obter o cookie de verificação. Revise suas informações de login e tente novamente';
4147
4248 type
4349 TAdditionalInfo = record
44- VerificationCookie: String;
4550 IdBotaoRegistroEntradaSaida: String;
4651 end;
4752
48-function GetBaseCookie(AHandle: THandle; AProducao: Boolean): String;
53+//: Acessa, via método GET, a página inicial (página de login) para obter os
54+//: Cookies que serão requeridos por todas as outras requisições subsequentes.
55+//: A página de login é ponto de entrada para o sistema e configura alguns
56+//: cookies básicos que outras requisições usarão. Outras requisições,
57+//: realizadas por outras subrotinas contidas aqui podem obter Cookies
58+//: adicionais, os quais serão gerenciados automaticamente pelo WinInet
59+procedure GetInitialCookies(AHandle: THandle; AProducao: Boolean);
4960 var
5061 RO: TRequestOptions;
5162 RE: TResponse;
@@ -80,7 +91,7 @@
8091 RO.HttpOpenRequestParams.ReceiveTimeout := 30000;
8192 RO.HttpOpenRequestParams.AcceptTypes := TStringList.Create;
8293 RO.HttpOpenRequestParams.AcceptTypes.Text := Trim('*/*');
83- RO.HttpOpenRequestParams.Flags := INTERNET_FLAG_NO_CACHE_WRITE or INTERNET_FLAG_NO_COOKIES or INTERNET_FLAG_PRAGMA_NOCACHE;// 0;
94+ RO.HttpOpenRequestParams.Flags := INTERNET_FLAG_NO_CACHE_WRITE {or INTERNET_FLAG_NO_COOKIES} or INTERNET_FLAG_PRAGMA_NOCACHE;// 0;
8495 RO.HttpOpenRequestParams.Context := AHandle;
8596 RO.HttpOpenRequestParams.AutoDetectHTTPS := True;
8697 RO.HttpOpenRequestParams.IgnoreInvalidCertificates := False;
@@ -98,8 +109,7 @@
98109 RE.Content := TStringStream.Create('');
99110 try
100111 Request(RO, RE);
101- TStringStream(RE.Content).SaveToFile('d:\GetBaseCookie.txt');
102- RegExMatch(RE.Headers,'(JSESSIONID=.*);',1,0,True,[preUnGreedy],Result);
112+ TStringStream(RE.Content).SaveToFile('d:\CiCo_GetInitialCookies.txt');
103113 finally
104114 RE.Content.Free;
105115 RO.HttpSendRequestParams.Headers.Free;
@@ -109,7 +119,7 @@
109119 end;
110120 end;
111121
112-procedure SelectDirection(AHandle: THandle; AProducao: Boolean; AIn: Boolean; AVerificationCookie: String; ABaseCookie: String);
122+procedure SelectDirection(AHandle: THandle; AProducao: Boolean; AIn: Boolean);
113123 var
114124 RO: TRequestOptions;
115125 RE: TResponse;
@@ -159,13 +169,13 @@
159169 RO.HttpOpenRequestParams.ReceiveTimeout := 30000;
160170 RO.HttpOpenRequestParams.AcceptTypes := TStringList.Create;
161171 RO.HttpOpenRequestParams.AcceptTypes.Text := Trim('*/*');
162- RO.HttpOpenRequestParams.Flags := INTERNET_FLAG_NO_CACHE_WRITE or INTERNET_FLAG_NO_COOKIES or INTERNET_FLAG_PRAGMA_NOCACHE;
172+ RO.HttpOpenRequestParams.Flags := INTERNET_FLAG_NO_CACHE_WRITE {or INTERNET_FLAG_NO_COOKIES} or INTERNET_FLAG_PRAGMA_NOCACHE;
163173 RO.HttpOpenRequestParams.Context := AHandle;
164174 RO.HttpOpenRequestParams.AutoDetectHTTPS := True;
165175 RO.HttpOpenRequestParams.IgnoreInvalidCertificates := False;
166176 RO.HttpOpenRequestParams.Headers := TStringList.Create;
167177 RO.HttpOpenRequestParams.Headers.Add('Content-Type: application/x-www-form-urlencoded');
168- RO.HttpOpenRequestParams.Headers.Add('Cookie: ' + AVerificationCookie + '; ' + ABaseCookie + '; ROUTEID=.1');
178+// RO.HttpOpenRequestParams.Headers.Add('Cookie: ' + AVerificationCookie + '; ' + ABaseCookie + '; ROUTEID=.1');
169179 RO.HttpSendRequestParams.IgnoreInvalidCertificateCA := True;
170180
171181 RE.Content := TStringStream.Create('');
@@ -180,7 +190,7 @@
180190 end;
181191 end;
182192
183-function OpenCheckInCheckOutPage(AHandle: THandle; AProducao: Boolean; AVerificationCookie: String; ABaseCookie: String; AIdBotao: String): TCheckInChecOutInfo;
193+function OpenCheckInCheckOutPage(AHandle: THandle; AProducao: Boolean; AIdBotao: String): TCheckInChecOutInfo;
184194 var
185195 RO: TRequestOptions;
186196 RE: TResponse;
@@ -224,19 +234,19 @@
224234 RO.HttpOpenRequestParams.ReceiveTimeout := 30000;
225235 RO.HttpOpenRequestParams.AcceptTypes := TStringList.Create;
226236 RO.HttpOpenRequestParams.AcceptTypes.Text := Trim('*/*');
227- RO.HttpOpenRequestParams.Flags := INTERNET_FLAG_NO_CACHE_WRITE or INTERNET_FLAG_NO_COOKIES or INTERNET_FLAG_PRAGMA_NOCACHE;
237+ RO.HttpOpenRequestParams.Flags := INTERNET_FLAG_NO_CACHE_WRITE {or INTERNET_FLAG_NO_COOKIES} or INTERNET_FLAG_PRAGMA_NOCACHE;
228238 RO.HttpOpenRequestParams.Context := AHandle;
229239 RO.HttpOpenRequestParams.AutoDetectHTTPS := True;
230240 RO.HttpOpenRequestParams.IgnoreInvalidCertificates := False;
231241 RO.HttpOpenRequestParams.Headers := TStringList.Create;
232242 RO.HttpOpenRequestParams.Headers.Add('Content-Type: application/x-www-form-urlencoded');
233- RO.HttpOpenRequestParams.Headers.Add('Cookie: ' + AVerificationCookie + '; ' + ABaseCookie + '; ROUTEID=.1');
243+// RO.HttpOpenRequestParams.Headers.Add('Cookie: ' + AVerificationCookie + '; ' + ABaseCookie + '; ROUTEID=.1');
234244 RO.HttpSendRequestParams.IgnoreInvalidCertificateCA := True;
235245
236246 RE.Content := TStringStream.Create('');
237247 try
238248 Request(RO, RE);
239- TStringStream(RE.Content).SaveToFile('d:\OpenCheckInCheckOutPage.txt');
249+ TStringStream(RE.Content).SaveToFile('d:\CiCo_OpenCheckInCheckOutPage.txt');
240250
241251 // Realiza um parser na resposta buscando várias informações. Se não
242252 // houver movimentação no dia significa que o usuário não fez checkin
@@ -267,7 +277,9 @@
267277 end;
268278 end;
269279
270-function GetAdditionalInfo(AHandle: THandle; AProducao: Boolean; ABaseCookie, ACPF, APassword: String; AMatricula: String): TAdditionalInfo;
280+//: Efetivamente executa o login no sistema de controle de frequência. A função
281+//: retornará informações adicionais que podem ser usadas por outras subrotinas
282+function ExecuteLogin(AHandle: THandle; AProducao: Boolean; ACPF, APassword: String; AMatricula: String): TAdditionalInfo;
271283 var
272284 RO: TRequestOptions;
273285 RE: TResponse;
@@ -321,13 +333,12 @@
321333 RO.HttpOpenRequestParams.ReceiveTimeout := 30000;
322334 RO.HttpOpenRequestParams.AcceptTypes := TStringList.Create;
323335 RO.HttpOpenRequestParams.AcceptTypes.Text := Trim('*/*');
324- RO.HttpOpenRequestParams.Flags := INTERNET_FLAG_NO_CACHE_WRITE or INTERNET_FLAG_NO_COOKIES or INTERNET_FLAG_PRAGMA_NOCACHE;// 0;
336+ RO.HttpOpenRequestParams.Flags := INTERNET_FLAG_NO_CACHE_WRITE {or INTERNET_FLAG_NO_COOKIES} or INTERNET_FLAG_PRAGMA_NOCACHE;// 0;
325337 RO.HttpOpenRequestParams.Context := AHandle;
326338 RO.HttpOpenRequestParams.AutoDetectHTTPS := True;
327339 RO.HttpOpenRequestParams.IgnoreInvalidCertificates := False;
328340 RO.HttpOpenRequestParams.Headers := TStringList.Create;
329341 RO.HttpOpenRequestParams.Headers.Add('Content-Type: application/x-www-form-urlencoded');
330- RO.HttpOpenRequestParams.Headers.Add('Cookie: ' + ABaseCookie + '; ROUTEID=.1');
331342 RO.HttpSendRequestParams.Headers := nil;
332343 RO.HttpSendRequestParams.Optional := nil;
333344 RO.HttpSendRequestParams.OptionalLength := 0;
@@ -341,9 +352,8 @@
341352 RE.Content := TStringStream.Create('');
342353 try
343354 Request(RO, RE);
344- RegExMatch(RE.Headers,'(ControleFrequenciaVerificationCookie=.*);',1,0,True,[preUnGreedy],Result.VerificationCookie);
345355
346- TStringStream(RE.Content).SaveToFile('d:\GetVerificationCookie.txt');
356+ TStringStream(RE.Content).SaveToFile('d:\CiCo_ExecuteLogin.txt');
347357
348358 HD := coHTMLDocument.Create as IHTMLDocument2;
349359 HD.Write(TStringStream(RE.Content).DataString);
@@ -402,7 +412,7 @@
402412 end;
403413 end;
404414
405-function ConfirmDirection(AHandle: THandle; AProducao: Boolean; AIn: Boolean; AVerificationCookie: String; ABaseCookie: String): Boolean;
415+function ConfirmDirection(AHandle: THandle; AProducao: Boolean; AIn: Boolean): Boolean;
406416 var
407417 RO: TRequestOptions;
408418 RE: TResponse;
@@ -453,12 +463,11 @@
453463 RO.HttpOpenRequestParams.ReceiveTimeout := 30000;
454464 RO.HttpOpenRequestParams.AcceptTypes := TStringList.Create;
455465 RO.HttpOpenRequestParams.AcceptTypes.Text := Trim('*/*');
456- RO.HttpOpenRequestParams.Flags := INTERNET_FLAG_NO_CACHE_WRITE or INTERNET_FLAG_NO_COOKIES or INTERNET_FLAG_PRAGMA_NOCACHE;
466+ RO.HttpOpenRequestParams.Flags := INTERNET_FLAG_NO_CACHE_WRITE {or INTERNET_FLAG_NO_COOKIES} or INTERNET_FLAG_PRAGMA_NOCACHE;
457467 RO.HttpOpenRequestParams.Context := AHandle;
458468 RO.HttpOpenRequestParams.AutoDetectHTTPS := True;
459469 RO.HttpOpenRequestParams.Headers := TStringList.Create;
460470 RO.HttpOpenRequestParams.Headers.Add('Content-Type: application/x-www-form-urlencoded');
461- RO.HttpOpenRequestParams.Headers.Add('Cookie: ' + AVerificationCookie + '; ' + ABaseCookie + '; ROUTEID=.1');
462471 RO.HttpSendRequestParams.IgnoreInvalidCertificateCA := True;
463472
464473 RE.Content := TStringStream.Create('');
@@ -493,18 +502,17 @@
493502
494503 function CurrentStatus(AHandle: THandle; AProducao: Boolean; ACPF: String; APassaword: String; AMatricula: String): TCheckInChecOutInfo;
495504 var
496- BaseCookie: String;
497505 AdditionalInfo: TAdditionalInfo;
498506 begin
499507 try
500- // Fase 1: Obter o cookie-base
501- BaseCookie := GetBaseCookie(AHandle,AProducao);
508+ // Fase 1: Obter os Cookies iniciais
509+ GetInitialCookies(AHandle,AProducao);
502510
503- // Fase 2: Realizar o login e obter o cookie de verificação
504- AdditionalInfo := GetAdditionalInfo(AHandle,AProducao,BaseCookie,ACPF,APassaword,AMatricula);
511+ // Fase 2: Realizar o login e obter informações adicionais
512+ AdditionalInfo := ExecuteLogin(AHandle,AProducao,ACPF,APassaword,AMatricula);
505513
506514 // Fase 3: Abrir a página de registro de entrada / saída
507- Result := OpenCheckInCheckOutPage(AHandle,AProducao,AdditionalInfo.VerificationCookie,BaseCookie,AdditionalInfo.IdBotaoRegistroEntradaSaida);
515+ Result := OpenCheckInCheckOutPage(AHandle,AProducao,AdditionalInfo.IdBotaoRegistroEntradaSaida);
508516 except
509517 on E: Exception do
510518 raise ECurrentStatus.Create(E.Message);
@@ -513,24 +521,23 @@
513521
514522 function CheckIn(AHandle: THandle; AProducao: Boolean; ACPF: String; APassword: String; AMatricula: String): Boolean;
515523 var
516- BaseCookie: String;
517524 AdditionalInfo: TAdditionalInfo;
518525 begin
519526 try
520- // Fase 1: Obter o cookie-base
521- BaseCookie := GetBaseCookie(AHandle,AProducao);
527+ // Fase 1: Obter os Cookies iniciais
528+ GetInitialCookies(AHandle,AProducao);
522529
523- // Fase 2: Realizar o login e obter o cookie de verificação
524- AdditionalInfo := GetAdditionalInfo(AHandle,AProducao,BaseCookie,ACPF,APassword,AMatricula);
530+ // Fase 2: Realizar o login e obter informações adicionais
531+ AdditionalInfo := ExecuteLogin(AHandle,AProducao,ACPF,APassword,AMatricula);
525532
526533 // Fase 3: Abrir a página de registro de entrada / saída
527- OpenCheckInCheckOutPage(AHandle,AProducao,AdditionalInfo.VerificationCookie,BaseCookie,AdditionalInfo.IdBotaoRegistroEntradaSaida);
534+ OpenCheckInCheckOutPage(AHandle,AProducao,AdditionalInfo.IdBotaoRegistroEntradaSaida);
528535
529536 // Fase 4: Seleciona "ENTRADA"
530- SelectDirection(AHandle,AProducao,True,AdditionalInfo.VerificationCookie,BaseCookie);
537+ SelectDirection(AHandle,AProducao,True);
531538
532539 // Fase 5: Confirma a entrada
533- Result := ConfirmDirection(AHandle,AProducao,True,AdditionalInfo.VerificationCookie,BaseCookie);
540+ Result := ConfirmDirection(AHandle,AProducao,True);
534541 except
535542 on E: Exception do
536543 raise ECheckIn.Create(E.Message);
@@ -539,24 +546,23 @@
539546
540547 function CheckOut(AHandle: THandle; AProducao: Boolean; ACPF: String; APassword: String; AMatricula: String): Boolean;
541548 var
542- BaseCookie: String;
543549 AdditionalInfo: TAdditionalInfo;
544550 begin
545551 try
546- // Fase 1: Obter o cookie-base
547- BaseCookie := GetBaseCookie(AHandle,AProducao);
552+ // Fase 1: Obter os Cookies iniciais
553+ GetInitialCookies(AHandle,AProducao);
548554
549- // Fase 2: Realizar o login e obter o cookie de verificação
550- AdditionalInfo := GetAdditionalInfo(AHandle,AProducao,BaseCookie,ACPF,APassword,AMatricula);
555+ // Fase 2: Realizar o login e obter informações adicionais
556+ AdditionalInfo := ExecuteLogin(AHandle,AProducao,ACPF,APassword,AMatricula);
551557
552558 // Fase 3: Abrir a página de registro de entrada / saída
553- OpenCheckInCheckOutPage(AHandle,AProducao,AdditionalInfo.VerificationCookie,BaseCookie,AdditionalInfo.IdBotaoRegistroEntradaSaida);
559+ OpenCheckInCheckOutPage(AHandle,AProducao,AdditionalInfo.IdBotaoRegistroEntradaSaida);
554560
555561 // Fase 4: Seleciona "SAÍDA"
556- SelectDirection(AHandle,AProducao,False,AdditionalInfo.VerificationCookie,BaseCookie);
562+ SelectDirection(AHandle,AProducao,False);
557563
558564 // Fase 5: Confirma a saída
559- Result := ConfirmDirection(AHandle,AProducao,False,AdditionalInfo.VerificationCookie,BaseCookie);
565+ Result := ConfirmDirection(AHandle,AProducao,False);
560566 except
561567 on E: Exception do
562568 raise ECheckOut.Create(E.Message);
旧リポジトリブラウザで表示