Delphi-PRAXiS
Seite 5 von 7   « Erste     345 67      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   CookieCrumbler 1.5.10 - Stable! (https://www.delphipraxis.net/134923-cookiecrumbler-1-5-10-stable.html)

Andreas L. 21. Jun 2009 10:45

Re: CookieCrumbler 1.2.6
 
Zitat:

Zitat von toms
Zitat:

Zitat von Andreas L.
Zitat:

---------------------------
CookieCrumbler
---------------------------
Ungültiges Argument zum Codieren des Datums.
---------------------------
OK
---------------------------
Welche der oben aufgelisteten Programme hast du denn installiert?

IE, Chrome. Fehler kommt immer noch bei der neusten Version.

Welche Windows-Version hast du? Evtl. eine englische Ausgabe? Kann mir das nicht erklären. Der einzige Punkt an dem ich ein Datum auslese ist beim Laden der Cookies. Kannst du evtl. mal die Datei %LOCAL_APPDATA%\Google\Chrome\UserData\Default\Coo kies mit einem SQLite-Editor öffnen und mir die Spalten creation_utc, last_access_utc und expires_utc per PN schicken? Alternativ die komplette Cookie-Datei. Danke :-D

Zitat:

Zitat von xZise
Ehm ...
A simple Delphi wrapper for Sqlite 3
Und wenn mir deinen Code oben angucke benutzt du ihn ebenfalls :P

Ja, genau den.
Zitat:

Zitat von xZise
Weil dieses "GetTable" mich irgendwie ankotzt, da man kein Objekt zurückgeben sollte.

Wie machst du es denn in deinen Projekten?

Zitat:

Zitat von xZise
Es waren 4 "gefährliche"... Also Durchschnittlich 3 Sekunden pro Cookie! Dürfte man denn in die Unit gucken?

Du hast insgesamt nur 4 Cookies? :shock:

CookieCrumblerApp.pas
Ich lege alle Cookies in einer, naja, universellen Cookie-Liste ab. Beim speichern kopiere ich mir die Cookies wieder in die spezielle "Format-Cookie-List" und speichere.
Delphi-Quellcode:
procedure TCookieCrumblerApp.SaveCookies;
var
  iCookie, iFile: Integer;
  MozillaCookies: TBcMozillaCookies;
  FirefoxCookies: TBcFirefoxCookies;
  FlashCookies: TBcFlashSharedObjectsCookies;
  ChromeCookies: TBcChromeCookies;
  IECookies: TBcIECookies;
  IEDHTMLCookies: TBcIEDHTMLBehaviorsCookies;
  MozillaDOM: TBcMozillaDOMStorageCookies;
  //SafariCookies: TBcSafariCookies;
  TempCookies: TBcMultiCookieHolder;
begin
  MozillaCookies := TBcMozillaCookies.Create(nil);
  FirefoxCookies := TBcFirefoxCookies.Create(nil);
  FlashCookies := TBcFlashSharedObjectsCookies.Create(nil);
  ChromeCookies := TBcChromeCookies.Create(nil);
  IECookies := TBcIECookies.Create(nil);
  IEDHTMLCookies := TBcIEDHTMLBehaviorsCookies.Create(nil);
  MozillaDOM := TBcMozillaDOMStorageCookies.Create(nil);
  //SafariCookies := TBcSafariCookies.Create(nil);
  TempCookies := TBcMultiCookieHolder.Create(nil);

  for iFile := 0 to Files.Count -1 do
  begin
    TempCookies.Clear;

    if FDebugMode then
    begin
      Log.Add(DateTimeToStr(now) + #9 + 'Save' + #9 + IntToStr(Integer(Files[iFile].Format)) + #9 + Files[iFile].FileName + '(start)' + #9 + IntToStr(iFile + 1) + '/' + IntToStr(Files.Count));
      Log.SaveToFile(IncludeTrailingPathDelimiter(GetShellFolder(CSIDL_DESKTOP)) + 'CookieCrumbler.log');
    end;

    for iCookie := 0 to Cookies.Count -1 do
    begin
      if StrToInt(Cookies[iCookie].Source) = iFile then
        TempCookies[TempCookies.Add].Assign(Cookies[iCookie]);
    end;

    case Files[iFile].Format of
      cfFirefox: begin
        FirefoxCookies.Clear;
        for iCookie := 0 to TempCookies.Count -1 do
          FirefoxCookies[FirefoxCookies.Add].Assign(TempCookies[iCookie]);
        FirefoxCookies.SaveToFile(Files[iFile].FileName);
      end;
      cfFlash: begin
        FlashCookies.Clear;
        for iCookie := 0 to TempCookies.Count -1 do
          FlashCookies[FlashCookies.Add].Assign(TempCookies[iCookie]);
        FlashCookies.SaveToDirectory(Files[iFile].FileName);
      end;
      cfChrome: begin
        ChromeCookies.Clear;
        for iCookie := 0 to TempCookies.Count -1 do
          ChromeCookies[ChromeCookies.Add].Assign(TempCookies[iCookie]);
        ChromeCookies.SaveToFile(Files[iFile].FileName);
      end;
      cfIE: begin
        IECookies.Clear;
        for iCookie := 0 to TempCookies.Count -1 do
          IECookies[IECookies.Add].Assign(TempCookies[iCookie]);
        IECookies.SaveToDirectory(Files[iFile].FileName, True);
      end;
      cfIEDHTML: begin
        IEDHTMLCookies.Clear;
        for iCookie := 0 to TempCookies.Count -1 do
          IEDHTMLCookies[IEDHTMLCookies.Add].Assign(TempCookies[iCookie]);
        IEDHTMLCookies.SaveToDirectory(Files[iFile].FileName);
      end;
      cfMozilla: begin
        MozillaCookies.Clear;
        for iCookie := 0 to TempCookies.Count -1 do
          MozillaCookies[MozillaCookies.Add].Assign(TempCookies[iCookie]);
        MozillaCookies.SaveToFile(Files[iFile].FileName);
      end;
      cfMozillaDOM: begin
        MozillaDOM.Clear;
        for iCookie := 0 to TempCookies.Count -1 do
          MozillaDOM[MozillaDOM.Add].Assign(TempCookies[iCookie]);
        MozillaDOM.SaveToFile(Files[iFile].FileName);
      end;
      {cfSafari: begin
        SafariCookies.Clear;
        for iCookie := 0 to TempCookies.Count -1 do
          SafariCookies[SafariCookies.Add].Assign(TempCookies[iCookie]);
        SafariCookies.SaveToFile(Files[iFile].FileName);
      end; }
    end;

    if FDebugMode then
    begin
      Log.Add(DateTimeToStr(now) + #9 + 'Save' + #9 + IntToStr(Integer(Files[iFile].Format)) + #9 + Files[iFile].FileName + '(end)' + #9 + IntToStr(iFile + 1) + '/' + IntToStr(Files.Count));
      Log.SaveToFile(IncludeTrailingPathDelimiter(GetShellFolder(CSIDL_DESKTOP)) + 'CookieCrumbler.log');
    end;

  end;
  TempCookies.Free;
  MozillaCookies.Free;
  FirefoxCookies.Free;
  FlashCookies.Free;
  ChromeCookies.Free;
  IECookies.Free;
  IEDHTMLCookies.Free;
  MozillaDOM.Free;
  //SafariCookies.Free;
end;
BCCookies.pas
Delphi-Quellcode:
type
  ...
  TBcFirefoxCookies = class(TBcHTTPCookies)
  protected
    procedure SetCookie(Index: Integer; Value: TBcFirefoxCookie);
    function GetCookie(Index: Integer):TBcFirefoxCookie;
    function PrimaryKeyIsUnique(Value: Int64; ExceptItem: Integer):Boolean;
  public
    function Add:Integer;
    procedure LoadFromFile(FileName: String);
    procedure SaveToFile(FileName: String);
    property Cookies[Index: Integer]: TBcFirefoxCookie read GetCookie write SetCookie; default;
  end;

  ...

  {$WARNINGS OFF}
  TBcCookie = class(TPersistent)
  private
    FName: String;
    FContent: String;
    FDomain: String;
    FPath: String;
    FExpires: TDateTimeEx;
    FSecure: LongBool;
    FWholeDomain: LongBool;
    FLastAccessed: TDateTimeEx;
    FCreated: TDateTimeEx;
    FFlags: Int64;
    FData: String;
    FFileName: String;
    FOwner: String;
  protected
    procedure SetLastAccessed(Value: TDateTimeEx);
    procedure SetCreated(Value: TDateTimeEx);
    procedure SetExpires(Value: TDateTimeEx);
    property Secure: LongBool read FSecure write FSecure;
    property WholeDomain: LongBool read FWholeDomain write FWholeDomain;
    property LastAccessed: TDateTimeEx read FLastAccessed write SetLastAccessed;
    property Created: TDateTimeEx read FCreated write SetCreated;
    property Flags: Int64 read FFlags write FFlags;
    property Name: String read FName write FName;
    property Content: String read FContent write FContent;
    property Domain: String read FDomain write FDomain;
    property Path: String read FPath write FPath;
    property Expires: TDateTimeEx read FExpires write SetExpires;
    property Data: String read FData write FData;
    property FileName: String read FFileName write FFileName;
    property Owner: String read FOwner write FOwner;
  public
    constructor Create;
    destructor Destroy;
    procedure Assign(Source: TBcCookie);
    procedure AssignTo(Dest: TBcCookie);
  end;
  {$WARNINGS ON} 

  TBcHTTPCookie = class(TBcCookie)
  public
    function IsBroken:Boolean;
    function IsExpired:Boolean;
  published
    property Name;
    property Content;
    property Domain;
    property Path;
    property Expires;
  end;

  TBcMozillaCookie = class(TBcHTTPCookie)
  published
    property Secure;
    property WholeDomain;
  end;

  TBcFirefoxCookie = class(TBcMozillaCookie)
  published
    property LastAccessed;
    property Created;
  end;

  ...

{ TBcFirefoxCookies }
procedure TBcFirefoxCookies.SetCookie(Index: Integer; Value: TBcFirefoxCookie);
begin
  FCookies[Index] := Value;
end;

function TBcFirefoxCookies.GetCookie(Index: Integer):TBcFirefoxCookie;
begin
  Result := FCookies[Index] as TBcFirefoxCookie;
end;

function TBcFirefoxCookies.Add:Integer;
var
  NewCookie: TBcFirefoxCookie;
begin
  NewCookie := TBcFirefoxCookie.Create;
  Result := FCookies.Add(NewCookie);
end;

function TBcFirefoxCookies.PrimaryKeyIsUnique(Value: Int64; ExceptItem: Integer):Boolean;
var
  iCookie: Integer;
begin
  Result := True;
  for iCookie := 0 to Count -1 do
  begin
    if (iCookie <> ExceptItem) and (Cookies[iCookie].Created.AsPRTime = Value) then
    begin
      Result := False;
      Break;
    end;
  end;
end;

procedure TBcFirefoxCookies.LoadFromFile(FileName: string);
var
  db: TSQLiteDatabase;
  table: TSQLIteTable;
begin
  Clear;
  db := TSQLiteDatabase.Create(FileName);
  try
    if db.TableExists('moz_cookies') then
    begin
      table := db.GetTable('SELECT id, name, value, host, path, expiry, isSecure, isHTTPOnly, lastAccessed FROM moz_cookies');
      try
        while not table.EOF do
        begin
          with Cookies[Add] do
          begin
            Name := table.FieldAsString(table.FieldIndex['name']);
            Content := table.FieldAsString(table.FieldIndex['value']);
            Domain := table.FieldAsString(table.FieldIndex['host']);
            Path := table.FieldAsString(table.FieldIndex['path']);
            Expires.AsUnixTime(StrToInt64(table.FieldAsString(table.FieldIndex['expiry'])));
            Secure := LongBool(StrToIntDef(table.FieldAsString(table.FieldIndex['isSecure']), 0));
            WholeDomain := LongBool(StrToIntDef(table.FieldAsString(table.FieldIndex['isHTTPOnly']), 0));
            LastAccessed.AsPRTime(StrToInt64(table.FieldAsString(table.FieldIndex['lastAccessed'])));
            Created.AsPRTime(StrToInt64(table.FieldAsString(table.FieldIndex['id'])));
          end;
          table.Next;
        end;
      finally
        table.Free;
      end;
    end;
  finally
    db.Free;
  end;
end;

procedure TBcFirefoxCookies.SaveToFile(FileName: string);
var
  db: TSQLiteDatabase;
  iCookie: Integer;
  ExpiresStr: String;
  LastAccessedStr: String;
  IsUnique: Boolean;
begin
  db := TSQLiteDatabase.Create(FileName);
  try
    if db.TableExists('moz_cookies') then
      db.ExecSQL('DROP TABLE moz_cookies');
    db.ExecSQL('CREATE TABLE moz_cookies (id INTEGER, name TEXT, value TEXT, host TEXT, path TEXT, expiry INTEGER, lastAccessed INTEGER, isSecure INTEGER, isHTTPOnly INTEGER, PRIMARY KEY(id))');
    for iCookie := 0 to Count -1 do
    begin

      //sicherstellen das der Primärschlüssel nur einmal vorkommt
      IsUnique := PrimaryKeyIsUnique(Cookies[iCookie].Created.AsPRTime, iCookie);
      while not IsUnique do
      begin
        Cookies[iCookie].Created.AsPRTime(Cookies[iCookie].Created.AsPRTime + 1000000);
        IsUnique := PrimaryKeyIsUnique(Cookies[iCookie].Created.AsPRTime, iCookie);
      end;

      //sicherstellen das alle anderen Integer-Werte ungleich dem Primärschlüssel sind
      LastAccessedStr := IntToStr(Cookies[iCookie].LastAccessed.AsPRTime);
      if Cookies[iCookie].Created.AsPRTime = Cookies[iCookie].LastAccessed.AsPRTime then
        LastAccessedStr := IntToStr(Cookies[iCookie].LastAccessed.AsPRTime + 1000000);

      ExpiresStr := IntToStr(Cookies[iCookie].Expires.AsUnixTime);
      if Cookies[iCookie].Created.AsPRTime = Cookies[iCookie].Expires.AsUnixTime then
        ExpiresStr := IntToStr(Cookies[iCookie].Expires.AsUnixTime + 1000000);

      db.ExecSQL('INSERT INTO moz_cookies (id, name, value, host, path, expiry, lastAccessed, isSecure, isHTTPOnly)' +
                 ' VALUES ("' + IntToStr(Cookies[iCookie].Created.AsPRTime) + '", "' +
                 EscapeSQLStatement(Cookies[iCookie].Name) + '", "' +
                 EscapeSQLStatement(Cookies[iCookie].Content) + '", "' +
                 EscapeSQLStatement(Cookies[iCookie].Domain) + '", "' +
                 EscapeSQLStatement(Cookies[iCookie].Path) + '", "' +
                 ExpiresStr + '", "' +
                 LastAccessedStr + '", "' +
                 IntToStr(LongBoolToInt(Cookies[iCookie].Secure)) + '", "' +
                 IntToStr(LongBoolToInt(Cookies[iCookie].WholeDomain)) + '")');
    end;
  finally
    db.Free;
  end;
end;

xZise 21. Jun 2009 11:54

Re: CookieCrumbler 1.2.6
 
Zitat:

Zitat von Andreas L.
Zitat:

Zitat von xZise
Weil dieses "GetTable" mich irgendwie ankotzt, da man kein Objekt zurückgeben sollte.

Wie machst du es denn in deinen Projekten?

Ehm andersherum ;) Ich würde, wenn ich die Unit entwickelt hätte, zum einem die Tabelle in der Liste übergeben und vorher erstellt. Und zum anderen hätte ich extra ein "QuerySQL" ausgeführt.

Zitat:

Zitat von Andreas L.
Zitat:

Zitat von xZise
Es waren 4 "gefährliche"... Also Durchschnittlich 3 Sekunden pro Cookie! Dürfte man denn in die Unit gucken?

Du hast insgesamt nur 4 Cookies? :shock:

Ehm Mist :P Verlesen. Wie viele insgesamt es waren kann ich nicht sagen. Ich guck gleich mal nach, nur frage ich mich, wie ich sie zählen soll :)

Für die Performance könnte ein BeginTransaction/Commit hilfreich sein. Und warum machst du kein Delta Abgleich?

MfG
xZise

Andreas L. 21. Jun 2009 12:04

Re: CookieCrumbler 1.2.6
 
Zitat:

Zitat von xZise
Ehm Mist :P Verlesen. Wie viele insgesamt es waren kann ich nicht sagen. Ich guck gleich mal nach, nur frage ich mich, wie ich sie zählen soll :)

Statistikfunktion steht schon auf meiner Todoliste ;-)

Zitat:

Zitat von xZise
Für die Performance könnte ein BeginTransaction/Commit hilfreich sein. Und warum machst du kein Delta Abgleich?

Wie mache ich denn einen Commit und was ist ein Delta-Abgleich?

toms 21. Jun 2009 13:31

Re: CookieCrumbler 1.2.6
 
Zitat:

Zitat von Andreas L
Welche Windows-Version hast du? Evtl. eine englische Ausgabe? Kann mir das nicht erklären.

Vista 32bit, engl. Für so was verwende ich madexcept, damit ich schnell die Fehlerstelle im Code finde.

SaFu 21. Jun 2009 13:42

Re: CookieCrumbler 1.2.6
 
Liste der Anhänge anzeigen (Anzahl: 1)
Schönes Programm,

Habe aber einen Fehler gefunden.

Nach dem ich das update ausgelöst hatte.

Und es will sich nicht mehr beenden es ist hängen geblieben

Gruss Sascha

Andreas L. 21. Jun 2009 14:19

Re: CookieCrumbler 1.2.6
 
Zitat:

Zitat von toms
Für so was verwende ich madexcept, damit ich schnell die Fehlerstelle im Code finde.

Schau ich mir mal an. Danke für den Tipp :thumb:

Zitat:

Zitat von fuknersascha
Habe aber einen Fehler gefunden.

Nach dem ich das update ausgelöst hatte.

Und es will sich nicht mehr beenden es ist hängen geblieben

Während CookieCrumbler geöffnet ist, darf natürlich kein Browser laufen. Normalerweise sollte da aber eine Meldung erscheinen. Werde mir was einfallen lassen.

Danke fürs testen :-D

xZise 21. Jun 2009 14:38

Re: CookieCrumbler 1.2.6
 
Zitat:

Zitat von Andreas L.
Zitat:

Zitat von xZise
Ehm Mist :P Verlesen. Wie viele insgesamt es waren kann ich nicht sagen. Ich guck gleich mal nach, nur frage ich mich, wie ich sie zählen soll :)

Statistikfunktion steht schon auf meiner Todoliste ;-)

Zitat:

Zitat von xZise
Für die Performance könnte ein BeginTransaction/Commit hilfreich sein. Und warum machst du kein Delta Abgleich?

Wie mache ich denn einen Commit und was ist ein Delta-Abgleich?

Naja mit Delta-Abgleich meine ich, dass du nur die Änderungen speicherst. Also statt alle Cookies zu löschen und dann neu reinzuschreiben, nur die Cookies löschen, die gelöscht wurden.

Und das mit Commit machst du so:
Delphi-Quellcode:
db := TSQLiteDatabase.Create;
try
  db.BeginTransaction;
  try
    // Hier die Änderungen übertragen
  finally
    db.Commit;
  end;
finally
  db.Free;
end;
Es ist QUASI das gleiche wie BeginUpdate/EndUpdate, mit dem Unterschied, dass du es hier leider nur einmal ausführen darfst. Imho nicht gerade gut gelöst :P

MfG
xZise

Corpsman 9. Jul 2009 11:14

Re: CookieCrumbler 1.2.6
 
nach dem Update bekomme ich nun immer

Zitat:

---------------------------
CookieCrumbler
---------------------------
Error executing SQL.
Error [1]: SQL error or missing database.
"SELECT domain, key, value, secure, owner FROM webappsstore": no such table: webappsstore.
---------------------------
OK
---------------------------
beim Starten,

Danach klicke ich auf Cookie Editor und er aktualisiert sich doch irgendwie,

das Problem das beim Beenden auftritt wurde ja auch schon erwähnt ...

Andreas L. 9. Jul 2009 12:46

Re: CookieCrumbler 1.2.6
 
Hi Corpsman,

danke fürs testen :thumb:

Sämtliche Fehler sollten in Version 1.3 behoben sein. Bis Sonntag werde ich die neue Version wohl fertig haben. :coder:

Andreas L. 12. Jul 2009 10:59

Re: CookieCrumbler 1.3.7
 
Neue Version im ersten Beitrag :!:

Changelog
Version 1.3.7 - 12.07.2009
[+]Zusammenfassung mit vorher/nachher-Ansicht im Bereinigen-Dialog
[+]Regeln können jetzt direkt im Bereinigen/Einstellungen Dialog bearbeitet werden
[#]Die Bereinigenroutine funktioniert jetzt problemlos, es wird wirklich alles gelöscht was weg muss. Hab das in unzähligen Konstellationen getestet!!!
[#]Speichern sollte jetzt 50 % schneller sein und nicht mehr hängen bleiben
[+]Fortschrittsanzeige beim Speichern
[#]Änderungen können jetzt jederzeit gespeichert werden, man kann außerdem die Änderungen verwerfen (d. h. die Original-Daten laden)
[#]Schönheitsfehler behoben
[#]Updateprogramm vollständig überarbeitet
[+]In der Statusleiste des Cookie-Editors wird die Anzahl der Cookies angezeigt


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:58 Uhr.
Seite 5 von 7   « Erste     345 67      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz