Skip to content

Commit f52adf4

Browse files
committed
B64url: No padding
1 parent 235a6c8 commit f52adf4

File tree

5 files changed

+36
-5
lines changed

5 files changed

+36
-5
lines changed

aas_test_engines/data_types.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -407,3 +407,7 @@ class DataTypeDefXsd(Enum):
407407
DataTypeDefXsd.base64Binary: is_base64_binary,
408408
DataTypeDefXsd.hexBinary: is_hex_binary,
409409
}
410+
411+
412+
def base64_urlsafe(s: str) -> str:
413+
return base64.urlsafe_b64encode(s.encode()).decode().strip("=")

aas_test_engines/reflect.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from dataclasses import is_dataclass, fields
1414
import re
1515
import inspect
16-
import base64
16+
from aas_test_engines.data_types import base64_urlsafe
1717

1818

1919
def abstract(cls):
@@ -88,7 +88,7 @@ def __eq__(self, other: "StringFormattedValue") -> bool:
8888

8989
def __str__(self) -> str:
9090
if self.base64:
91-
return base64.urlsafe_b64encode(self.raw_value.encode()).decode()
91+
return base64_urlsafe(self.raw_value)
9292
else:
9393
return self.raw_value
9494

aas_test_engines/test_cases/v3_0/interfaces/aas.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
ApiTestSuite,
1010
invoke,
1111
PagedResult,
12-
Base64String,
1312
PaginationTests,
1413
)
1514
from aas_test_engines.test_cases.v3_0.model import (

aas_test_engines/test_cases/v3_0/interfaces/shared.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
import base64
2020
import json
2121
import requests
22-
from fences.core.util import ConfusionMatrix
22+
from aas_test_engines.data_types import base64_urlsafe
2323

2424
# Util
2525

@@ -136,7 +136,8 @@ class AssetId:
136136
value: str
137137

138138
def __str__(self):
139-
return base64.b64encode(json.dumps({"name": self.name, "value": self.value}).encode()).decode()
139+
data = {"name": self.name, "value": self.value}
140+
return base64_urlsafe(json.dumps(data))
140141

141142

142143
class ApiTestSuite:

test/test_data_types.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
from unittest import TestCase
2+
from aas_test_engines import data_types
3+
from base64 import urlsafe_b64decode
4+
5+
6+
def b64urlsafe_decode(s: str) -> str:
7+
# Append missing padding
8+
padding = 4 - len(s) % 4
9+
if padding != 4:
10+
s += "=" * padding
11+
return urlsafe_b64decode(s).decode()
12+
13+
14+
class Base64UrlTest(TestCase):
15+
16+
def test_all(self):
17+
for value in [
18+
"",
19+
" ",
20+
"=",
21+
"ab",
22+
"abc",
23+
"#" * 80,
24+
]:
25+
encoded = data_types.base64_urlsafe(value)
26+
self.assertNotIn("=", encoded)
27+
self.assertEqual(b64urlsafe_decode(encoded), value)

0 commit comments

Comments
 (0)