diff --git a/lib/src/front-token.dart b/lib/src/front-token.dart index 084da16..499e41f 100644 --- a/lib/src/front-token.dart +++ b/lib/src/front-token.dart @@ -31,7 +31,7 @@ class FrontToken { static Map _parseFrontToken(fronTokenDecoded) { var base64Decoded = base64Decode(fronTokenDecoded); - String decodedString = new String.fromCharCodes(base64Decoded); + String decodedString = utf8.decode(base64Decoded); var result = jsonDecode(decodedString); return result; } diff --git a/pubspec.lock b/pubspec.lock index 321882c..d7513b7 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -196,34 +196,34 @@ packages: dependency: transitive description: name: js - sha256: c1b2e9b5ea78c45e1a0788d29606ba27dc5f71f019f32ca5140f61ef071838cf + sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 url: "https://pub.dev" source: hosted - version: "0.7.1" + version: "0.6.7" leak_tracker: dependency: transitive description: name: leak_tracker - sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + sha256: "78eb209deea09858f5269f5a5b02be4049535f568c07b275096836f01ea323fa" url: "https://pub.dev" source: hosted - version: "10.0.4" + version: "10.0.0" leak_tracker_flutter_testing: dependency: transitive description: name: leak_tracker_flutter_testing - sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + sha256: b46c5e37c19120a8a01918cfaf293547f47269f7cb4b0058f21531c2465d6ef0 url: "https://pub.dev" source: hosted - version: "3.0.3" + version: "2.0.1" leak_tracker_testing: dependency: transitive description: name: leak_tracker_testing - sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + sha256: a597f72a664dbd293f3bfc51f9ba69816f84dcd403cdac7066cb3f6003f3ab47 url: "https://pub.dev" source: hosted - version: "3.0.1" + version: "2.0.1" logger: dependency: transitive description: @@ -260,10 +260,10 @@ packages: dependency: transitive description: name: meta - sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" + sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04 url: "https://pub.dev" source: hosted - version: "1.12.0" + version: "1.11.0" mime: dependency: transitive description: @@ -513,26 +513,26 @@ packages: dependency: "direct dev" description: name: test - sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073" + sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f url: "https://pub.dev" source: hosted - version: "1.25.2" + version: "1.24.9" test_api: dependency: transitive description: name: test_api - sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" url: "https://pub.dev" source: hosted - version: "0.7.0" + version: "0.6.1" test_core: dependency: transitive description: name: test_core - sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4" + sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a url: "https://pub.dev" source: hosted - version: "0.6.0" + version: "0.5.9" typed_data: dependency: transitive description: @@ -553,10 +553,10 @@ packages: dependency: transitive description: name: vm_service - sha256: e7d5ecd604e499358c5fe35ee828c0298a320d54455e791e9dcf73486bc8d9f0 + sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 url: "https://pub.dev" source: hosted - version: "14.1.0" + version: "13.0.0" watcher: dependency: transitive description: diff --git a/test/accesstoken_http_test.dart b/test/accesstoken_http_test.dart index b3930c6..d8be239 100644 --- a/test/accesstoken_http_test.dart +++ b/test/accesstoken_http_test.dart @@ -65,6 +65,23 @@ void main() { } }); + test("should convert utf-8 access token payload to utf-16", () async { + await SuperTokensTestUtils.startST(validity: 3); + SuperTokens.init(apiDomain: apiBasePath); + Request req = SuperTokensTestUtils.getLoginRequestUtf8Encoded(); + StreamedResponse streamedResp; + streamedResp = await http.send(req); + var resp = await Response.fromStream(streamedResp); + if (resp.statusCode != 200) { + fail("login failed"); + } + + var payload = await SuperTokens.getAccessTokenPayloadSecurely(); + assert(payload.length == 1); + assert(payload["name"] == "öäü-áàâ"); + assert(payload["name"] == "\u00f6\u00e4\u00fc\u002d\u00e1\u00e0\u00e2"); + }); + test("should be able to refresh a session started w/ CDI 2.18", () async { await SuperTokensTestUtils.startST(validity: 3); SuperTokens.init(apiDomain: apiBasePath); diff --git a/test/test-utils.dart b/test/test-utils.dart index 61c227d..41751b5 100644 --- a/test/test-utils.dart +++ b/test/test-utils.dart @@ -68,6 +68,18 @@ class SuperTokensTestUtils { return request; } + static http.Request getLoginRequestUtf8Encoded() { + var loginAPIURL = "$baseUrl/login"; + var request = http.Request('POST', Uri.parse(loginAPIURL)); + request.headers['Content-Type'] = "application/json; charset=utf-8"; + var body = {"userId": "supertokens-flutter-tests", "payload": { + "name": "\xc3\xb6\xc3\xa4\xc3\xbc\x2d\xc3\xa1\xc3\xa0\xc3\xa2" // UTF-8 encoded öäü-áàâ + }}; + var jsonBody = jsonEncode(body); + request.body = jsonBody; + return request; + } + static http.Request getLogin218Request() { var loginAPIURL = "$baseUrl/login-2.18"; var request = http.Request('POST', Uri.parse(loginAPIURL)); diff --git a/testHelpers/server/index.js b/testHelpers/server/index.js index ea5f103..1baca20 100644 --- a/testHelpers/server/index.js +++ b/testHelpers/server/index.js @@ -211,12 +211,15 @@ app.use(middleware()); app.post("/login", async (req, res) => { let userId = req.body.userId; - + let accessTokenPayload = req.body.payload !== undefined ? req.body.payload : {}; let session; + if (multitenancySupported) { - session = await Session.createNewSession(req, res, "public", accountLinkingSupported ? SuperTokens.convertToRecipeUserId(userId) : userId); + session = await Session.createNewSession(req, res, "public", + accountLinkingSupported ? SuperTokens.convertToRecipeUserId(userId) : userId, + accessTokenPayload); } else { - session = await Session.createNewSession(req, res, userId); + session = await Session.createNewSession(req, res, userId, accessTokenPayload); } res.send(session.getUserId());