Selaa lähdekoodia

PIP-0041: Fix bug in PayToKey GUI integration

Herman Schoenfeld 4 vuotta sitten
vanhempi
commit
3a6634bf0e
3 muutettua tiedostoa jossa 25 lisäystä ja 14 poistoa
  1. 19 11
      src/core/UEPasa.pas
  2. 2 2
      src/core/URPC.pas
  3. 4 1
      src/gui-classic/UFRMOperation.pas

+ 19 - 11
src/core/UEPasa.pas

@@ -79,11 +79,10 @@ type
 
 
   TEPasa = record
-    strict private
-      var
-        FAccount, FAccountChecksum: TNullable<UInt32>;
-        FAccountName, FPayload, FPassword, FExtendedChecksum: String;
-        FPayloadType: TPayloadType;
+    strict private var
+      FAccount, FAccountChecksum: TNullable<UInt32>;
+      FAccountName, FPayload, FPassword, FExtendedChecksum: String;
+      FPayloadType: TPayloadType;
 
       function GetAccount: TNullable<UInt32>; inline;
       procedure SetAccount(const AValue: TNullable<UInt32>); inline;
@@ -116,11 +115,13 @@ type
       property IsAddressedByNumber: boolean read GetIsAddressedByNumber;
       property IsAddressedByName: boolean read GetIsAddressedByName;
       property IsPayToKey: boolean read GetIsPayToKey;
-      property IsStandard: boolean read GetIsStandard;
+      property IsClassicPASA: boolean read GetIsStandard;
       property HasPayload: boolean read GetHasPayload;
       class property Empty : TEPasa read GetEmptyValue;
 
       function GetRawPayloadBytes(): TArray<Byte>; inline;
+
+      function ToClassicPASAString(): String; overload;
       function ToString(): String; overload;
       function ToString(AOmitExtendedChecksum: Boolean): String; overload;
 
@@ -146,7 +147,7 @@ type
       // note: regex syntax escapes following chars [\^$.|?*+(){}
       // note: epasa syntax escapes following chars: :\"[]()<>(){}
       // note: c-sharp syntax verbatim strings escape: " as ""
-      IntegerPattern = '(0|[1-9]\d+)';
+      IntegerPattern = '(0|[1-9]\d*)';
       AccountNamePattern = '(?P<AccountName>' + TPascal64Encoding.StringPattern + ')';
       AccountChecksumPattern = '(?:(?P<ChecksumDelim>-)(?P<Checksum>\d{2}))?';
       AccountNumberPattern = '(?P<AccountNumber>' + IntegerPattern + ')' + AccountChecksumPattern;
@@ -363,6 +364,16 @@ begin
   raise EPascalCoinException.CreateRes(@SUnknownPayloadEncoding);
 end;
 
+function TEPasa.ToClassicPASAString : String;
+begin
+  Result := ToString(True);
+end;
+
+function TEPasa.ToString: String;
+begin
+  Result := ToString(False);
+end;
+
 function TEPasa.ToString(AOmitExtendedChecksum: Boolean): String;
 var
   LPayloadContent: String;
@@ -405,10 +416,7 @@ begin
   end;
 end;
 
-function TEPasa.ToString: String;
-begin
-  Result := ToString(False);
-end;
+
 
 class function TEPasa.TryParse(const AEPasaText: String; out AEPasa: TEPasa): Boolean;
 var

+ 2 - 2
src/core/URPC.pas

@@ -376,7 +376,7 @@ var
 begin
   LParamValue := AInputParams.AsString(AParamName,'');
   Result := CaptureEPASA(AInputParams, AParamName, ANode, LEPasa, AResolvedAccount, LKey, LPurchase, AErrorParam);
-  if Result AND (NOT LEPasa.IsStandard) then begin
+  if Result AND (NOT LEPasa.IsClassicPASA) then begin
       AErrorParam := Format('"%s" is not valid Account Number for Param "%s"',[LParamValue,AParamName]);
       Exit(False);
   end;
@@ -415,7 +415,7 @@ end;
 class function TPascalCoinJSONComp.OverridePayloadParams(const AInputParams : TPCJSONObject; const AEPASA : TEPasa) : Boolean;
 begin
    // none, dest, sender, aes, payload, pwd
-   if (NOT AEPASA.IsStandard) AND (AInputParams.HasValue('payload') OR AInputParams.HasValue('payload_method') OR AInputParams.HasValue('pwd')) then
+   if (NOT AEPASA.IsClassicPASA) AND (AInputParams.HasValue('payload') OR AInputParams.HasValue('payload_method') OR AInputParams.HasValue('pwd')) then
      Exit(False);
 
    if AEPASA.PayloadType.HasTrait(ptPublic) then begin

+ 4 - 1
src/gui-classic/UFRMOperation.pas

@@ -480,7 +480,10 @@ begin
   if (Not (Sender is TEdit)) then exit;
   eb := TEdit(Sender);
   If TEPasa.TryParse(eb.Text,LEPasa) then begin
-    eb.Text := LEPasa.ToString();
+    if LEPasa.IsClassicPASA then
+      eb.Text := LEPasa.ToClassicPASAString()
+    else
+      eb.Text := LEPasa.ToString();
   end else begin
     eb.Text := '';
   end;