Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 20 additions & 20 deletions lib/json_web_signature.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import 'package:crypto/crypto.dart';
class JsonWebSignatureEncoder extends Converter<List<int>,String> {
const JsonWebSignatureEncoder();
@override
String convert(List<int> payload, {Map header, String secret}) {
String convert(List<int> payload, {Map? header, required String secret}) {
//print(jsonEncode(header));
final msg = '${base64Url.encode(jsonEncode(header).codeUnits)}.${base64Url.encode(payload)}';
return "${msg}.${_signMessage(msg, secret)}";
Expand All @@ -29,26 +29,26 @@ class JsonWebSignatureDecoder extends Converter<String,List<int>>{

bool isValid(String input, String secret) {
final parts = input.split('.'),
header = parts[0],
payload = parts[1],
signature = parts[2];
header = parts[0] as List<String>,
payload = parts[1] as List<String>,
signature = parts[2] as List<String>;

return _verifyParts(header, payload, signature, secret);
return _verifyParts(header as String, payload as String, signature as String, secret);
}

bool _verifyParts(String header, String payload, String signature, String secret) {
return signature == _signMessage('${header}.${payload}', secret);
}

@override
List<int> convert(String input, {String secret}) {
List<int> convert(String input, {required String secret}) {
final parts = input.split('.'),
header = parts[0],
payload = parts[1],
signature = parts[2];
header = parts[0] as List<String>,
payload = parts[1] as List<String>,
signature = parts[2] as List<String>;

if (_verifyParts(header, payload, signature, secret)) {
return base64Url.decode(payload);
if (_verifyParts(header as String, payload as String, signature as String, secret)) {
return base64Url.decode(payload as String);
} else {
throw new ArgumentError("Invalid signature");
}
Expand All @@ -60,10 +60,10 @@ class JsonWebSignatureDecoder extends Converter<String,List<int>>{
* JSON Web Signature codec.
*/
class JsonWebSignatureCodec extends Codec<List<int>,String> {
final Map _header;
final String _secret;
final Map? _header;
final String? _secret;

const JsonWebSignatureCodec({Map header, String secret}) :
const JsonWebSignatureCodec({Map? header, String? secret}) :
_header = header,
_secret = secret;

Expand All @@ -74,18 +74,18 @@ class JsonWebSignatureCodec extends Codec<List<int>,String> {
JsonWebSignatureDecoder get decoder => const JsonWebSignatureDecoder();

@override
String encode(List<int> payload, {Map header, String secret}) {
String encode(List<int> payload, {Map? header, String? secret}) {
return encoder.convert(payload, header: (header != null ? header : _header),
secret: (secret != null ? secret : _secret));
secret: (secret != null ? secret : _secret!));
}

@override
List<int> decode(String input, {String secret}) {
return decoder.convert(input, secret: (secret != null ? secret : _secret));
List<int> decode(String input, {String? secret}) {
return decoder.convert(input, secret: (secret != null ? secret : _secret!));
}

bool isValid(String input, {String secret}) {
return decoder.isValid(input, secret != null ? secret : _secret);
bool isValid(String input, {String? secret}) {
return decoder.isValid(input, secret != null ? secret : _secret!);
}
}

Expand Down
24 changes: 12 additions & 12 deletions lib/json_web_token.dart
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ class JsonWebTokenEncoder extends Converter<Map,String> {

const JsonWebTokenEncoder();
@override
String convert(Map payload, {Map header, String secret}) {
String convert(Map? payload, {Map? header, required String secret}) {
return _JWS_ENCODER.convert(jsonEncode(payload).codeUnits, header: header, secret: secret);
}
}
Expand All @@ -26,15 +26,15 @@ class JsonWebTokenEncoder extends Converter<Map,String> {
/**
* JSON Web Signature decoder.
*/
class JsonWebTokenDecoder extends Converter<String,Map> {
class JsonWebTokenDecoder extends Converter<String,Map?> {
static const _JWS_DECODER = const JsonWebSignatureDecoder();

const JsonWebTokenDecoder();

bool isValid(String input, String secret) => _JWS_DECODER.isValid(input, secret);

@override
Map convert(String token, {Map header, String secret}) {
Map? convert(String token, {Map? header, required String secret}) {
// return JSON.decode(new String.fromCharCodes(_JWS_DECODER.convert(token, secret: secret)));
return jsonDecode(new String.fromCharCodes(_JWS_DECODER.convert(token, secret: secret)));
}
Expand All @@ -44,16 +44,16 @@ class JsonWebTokenDecoder extends Converter<String,Map> {
/**
* JSON Web Token codec.
*/
class JsonWebTokenCodec extends Codec<Map,String> {
class JsonWebTokenCodec extends Codec<Map?,String> {
static const _DEFAULT_HEADER = const {
'typ': 'JWT',
'alg': 'HS256'
};

final Map _header;
final String _secret;
final String? _secret;

const JsonWebTokenCodec({Map header, String secret}) :
const JsonWebTokenCodec({Map? header, String? secret}) :
_header = header != null ? header : _DEFAULT_HEADER,
_secret = secret;

Expand All @@ -64,17 +64,17 @@ class JsonWebTokenCodec extends Codec<Map,String> {
JsonWebTokenDecoder get decoder => const JsonWebTokenDecoder();

@override
String encode(Map payload, {Map header, String secret}) {
String encode(Map? payload, {Map? header, String? secret}) {
return encoder.convert(payload, header: (header != null ? header : _header),
secret: (secret != null ? secret : _secret));
secret: (secret != null ? secret : _secret!));
}

@override
Map decode(String input, {String secret}) {
return decoder.convert(input, secret: (secret != null ? secret : _secret));
Map? decode(String input, {String? secret}) {
return decoder.convert(input, secret: (secret != null ? secret : _secret!));
}

bool isValid(String input, {String secret}) {
return decoder.isValid(input, secret != null ? secret : _secret);
bool isValid(String input, {String? secret}) {
return decoder.isValid(input, secret != null ? secret : _secret!);
}
}
8 changes: 4 additions & 4 deletions pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@ description: JSON Web Token implemented as a standard Dart codec.
homepage: https://github.com/bsjung/start_jwt

environment:
sdk: ">=2.0.0-dev.65 <3.0.0"
sdk: '>=2.12.0 <3.0.0'

dependencies:
crypto: ^2.1.4
cryptoutils: ^0.4.0
crypto: ^3.0.1
cryptoutils: ^0.5.0

dev_dependencies:
test: ^1.0.0
test: ^1.17.8