Skip to content

Commit

Permalink
Merge pull request #103 from muzzammilshahid/named-constructor
Browse files Browse the repository at this point in the history
Add named construtors in messages
  • Loading branch information
muzzammilshahid authored Jun 15, 2024
2 parents e7942f8 + 363e1ed commit 11dcbe3
Show file tree
Hide file tree
Showing 38 changed files with 317 additions and 204 deletions.
28 changes: 11 additions & 17 deletions lib/src/acceptor.dart
Original file line number Diff line number Diff line change
Expand Up @@ -79,9 +79,7 @@ class Acceptor {
Response response = _authenticator.authenticate(request);
_state = stateWelcomeSent;

Welcome welcome = Welcome(
WelcomeFields(_sessionID, routerRoles, response.authID, response.authRole, method, authExtra: {}),
);
Welcome welcome = Welcome(_sessionID, routerRoles, response.authID, response.authRole, method, authExtra: {});
_sessionDetails = SessionDetails(_sessionID, msg.realm, welcome.authID, welcome.authRole);

return welcome;
Expand All @@ -99,7 +97,7 @@ class Acceptor {
String challenge = generateCryptoSignChallenge();
_state = stateChallengeSent;

return Challenge(ChallengeFields(method, {"challenge": challenge}));
return Challenge(method, {"challenge": challenge});

case wampcra:
WAMPCRARequest request = WAMPCRARequest(msg.realm, msg.authID, msg.authExtra);
Expand All @@ -115,12 +113,12 @@ class Acceptor {
_state = stateChallengeSent;
_challenge = challenge;

return Challenge(ChallengeFields(method, {"challenge": challenge}));
return Challenge(method, {"challenge": challenge});

case ticket:
_state = stateChallengeSent;

return Challenge(ChallengeFields(method, {}));
return Challenge(method, {});

default:
throw ProtocolError("unknown auth method '$method'");
Expand All @@ -135,13 +133,12 @@ class Acceptor {
var isVerified = verifyCryptoSignSignature(msg.signature, Base16Encoder.instance.decode(_publicKey));
if (!isVerified) {
_state = stateAborted;
return Abort(AbortFields({}, errAuthenticationFailed));
return Abort({}, errAuthenticationFailed);
}
_state = stateWelcomeSent;

Welcome welcome = Welcome(
WelcomeFields(_sessionID, routerRoles, _response.authID, _response.authRole, cryptosign, authExtra: {}),
);
Welcome welcome =
Welcome(_sessionID, routerRoles, _response.authID, _response.authRole, cryptosign, authExtra: {});
_sessionDetails = SessionDetails(welcome.sessionID, _hello.realm, welcome.authID, welcome.authRole);

return welcome;
Expand All @@ -150,13 +147,12 @@ class Acceptor {
var isVerified = verifyWampCRASignature(msg.signature, _challenge, Uint8List.fromList(_secret.codeUnits));
if (!isVerified) {
_state = stateAborted;
return Abort(AbortFields({}, errAuthenticationFailed));
return Abort({}, errAuthenticationFailed);
}
_state = stateWelcomeSent;

Welcome welcome = Welcome(
WelcomeFields(_sessionID, routerRoles, _response.authID, _response.authRole, wampcra, authExtra: {}),
);
Welcome welcome =
Welcome(_sessionID, routerRoles, _response.authID, _response.authRole, wampcra, authExtra: {});
_sessionDetails = SessionDetails(welcome.sessionID, _hello.realm, welcome.authID, welcome.authRole);

return welcome;
Expand All @@ -166,9 +162,7 @@ class Acceptor {
Response response = _authenticator.authenticate(request);
_state = stateWelcomeSent;

Welcome welcome = Welcome(
WelcomeFields(_sessionID, routerRoles, response.authID, response.authRole, ticket, authExtra: {}),
);
Welcome welcome = Welcome(_sessionID, routerRoles, response.authID, response.authRole, ticket, authExtra: {});
_sessionDetails = SessionDetails(welcome.sessionID, _hello.realm, welcome.authID, welcome.authRole);

return welcome;
Expand Down
2 changes: 1 addition & 1 deletion lib/src/auth/cryptosign.dart
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ class CryptoSignAuthenticator extends IClientAuthenticator {
var challengeHex = challenge.extra["challenge"];
var signed = signCryptoSignChallenge(challengeHex, getPrivateKey());

return Authenticate(AuthenticateFields(signed + challengeHex, {}));
return Authenticate(signed + challengeHex, {});
}
}

Expand Down
2 changes: 1 addition & 1 deletion lib/src/auth/ticket.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,6 @@ class TicketAuthenticator extends IClientAuthenticator {

@override
Authenticate authenticate(Challenge challenge) {
return Authenticate(AuthenticateFields(_ticket, {}));
return Authenticate(_ticket, {});
}
}
2 changes: 1 addition & 1 deletion lib/src/auth/wampcra.dart
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ class WAMPCRAAuthenticator extends IClientAuthenticator {
@override
Authenticate authenticate(Challenge challenge) {
String signed = signWampCRAChallenge(challenge.extra["challenge"], utf8.encode(_secret));
return Authenticate(AuthenticateFields(signed, {}));
return Authenticate(signed, {});
}
}

Expand Down
8 changes: 4 additions & 4 deletions lib/src/broker.dart
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ class Broker {

_subscriptionsBySession.putIfAbsent(sessionID, () => {})[subscription.id] = subscription;

Subscribed subscribed = Subscribed(SubscribedFields(message.requestID, subscription.id));
Subscribed subscribed = Subscribed(message.requestID, subscription.id);
return MessageWithRecipient(subscribed, sessionID);
} else if (message is UnSubscribe) {
if (!_subscriptionsBySession.containsKey(sessionID)) {
Expand All @@ -82,7 +82,7 @@ class Broker {

_subscriptionsBySession[sessionID]?.remove(message.subscriptionID);

UnSubscribed unSubscribed = UnSubscribed(UnSubscribedFields(message.requestID));
UnSubscribed unSubscribed = UnSubscribed(message.requestID);
return MessageWithRecipient(unSubscribed, sessionID);
} else {
throw Exception("message type not supported");
Expand All @@ -99,14 +99,14 @@ class Broker {

var subscription = _subscriptionsByTopic[message.uri];
if (subscription != null) {
var event = Event(EventFields(subscription.id, publicationId, args: message.args, kwargs: message.kwargs));
var event = Event(subscription.id, publicationId, args: message.args, kwargs: message.kwargs);
result.event = event;
result.recipients!.addAll(subscription.subscribers.keys);
}

var ack = message.options["acknowledge"] ?? false;
if (ack) {
var published = Published(PublishedFields(message.requestID, publicationId));
var published = Published(message.requestID, publicationId);
result.ack = MessageWithRecipient(published, sessionId);
}

Expand Down
23 changes: 10 additions & 13 deletions lib/src/dealer.dart
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ class Dealer {
if (message is Call) {
var registration = _registrationsByProcedure[message.uri];
if (registration == null) {
var error = Error(ErrorFields(Register.id, message.requestID, errNoSuchProcedure));
var error = Error(Register.id, message.requestID, errNoSuchProcedure);
return MessageWithRecipient(error, sessionID);
}

Expand All @@ -81,13 +81,11 @@ class Dealer {
);

var invocation = Invocation(
InvocationFields(
requestID,
registration.id,
args: message.args,
kwargs: message.kwargs,
details: receiveProgress ? {optionReceiveProgress: receiveProgress} : {},
),
requestID,
registration.id,
args: message.args,
kwargs: message.kwargs,
details: receiveProgress ? {optionReceiveProgress: receiveProgress} : {},
);
return MessageWithRecipient(invocation, calleeID);
} else if (message is Yield) {
Expand All @@ -108,8 +106,7 @@ class Dealer {
} else {
_pendingCalls.remove(message.requestID);
}
var result =
Result(ResultFields(invocation.requestID, args: message.args, kwargs: message.kwargs, details: details));
var result = Result(invocation.requestID, args: message.args, kwargs: message.kwargs, details: details);
return MessageWithRecipient(result, invocation.callerID);
} else if (message is Register) {
if (!_registrationsBySession.containsKey(sessionID)) {
Expand All @@ -123,11 +120,11 @@ class Dealer {
_registrationsBySession.putIfAbsent(sessionID, () => {})[registrations.id] = registrations;
} else {
// TODO: implement shared registrations.
var error = Error(ErrorFields(Register.id, message.requestID, errProcedureAlreadyExists));
var error = Error(Register.id, message.requestID, errProcedureAlreadyExists);
return MessageWithRecipient(error, sessionID);
}

var registered = Registered(RegisteredFields(message.requestID, registrations.id));
var registered = Registered(message.requestID, registrations.id);
return MessageWithRecipient(registered, sessionID);
} else if (message is UnRegister) {
var registrations = _registrationsBySession[sessionID];
Expand All @@ -147,7 +144,7 @@ class Dealer {
}
_registrationsBySession[sessionID] = registrations;

var unRegistered = UnRegistered(UnRegisteredFields(message.requestID));
var unRegistered = UnRegistered(message.requestID);
return MessageWithRecipient(unRegistered, sessionID);
} else {
throw Exception("message type not supported");
Expand Down
12 changes: 5 additions & 7 deletions lib/src/joiner.dart
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,11 @@ class Joiner {

Object sendHello() {
final hello = Hello(
HelloFields(
_realm,
clientRoles,
_authenticator.authID,
[_authenticator.authMethod],
authExtra: _authenticator.authExtra,
),
_realm,
clientRoles,
_authenticator.authID,
[_authenticator.authMethod],
authExtra: _authenticator.authExtra,
);

_state = stateHelloSent;
Expand Down
10 changes: 7 additions & 3 deletions lib/src/messages/abort.dart
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,11 @@ class AbortFields implements IAbortFields {
}

class Abort implements Message {
Abort(this._abortFields);
Abort(Map<String, dynamic> details, String reason) {
_abortFields = AbortFields(details, reason);
}

Abort.withFields(this._abortFields);

static const int id = 3;

Expand All @@ -38,7 +42,7 @@ class Abort implements Message {
},
);

final IAbortFields _abortFields;
late IAbortFields _abortFields;

Map<String, dynamic> get details => _abortFields.details;

Expand All @@ -47,7 +51,7 @@ class Abort implements Message {
static Abort parse(final List<dynamic> message) {
var fields = validateMessage(message, id, text, _validationSpec);

return Abort(AbortFields(fields.details!, fields.reason!));
return Abort(fields.details!, fields.reason!);
}

@override
Expand Down
10 changes: 7 additions & 3 deletions lib/src/messages/authenticate.dart
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,11 @@ class AuthenticateFields implements IAuthenticateFields {
}

class Authenticate implements Message {
Authenticate(this._authenticateFields);
Authenticate(String signature, Map<String, dynamic> extra) {
_authenticateFields = AuthenticateFields(signature, extra);
}

Authenticate.withFields(this._authenticateFields);

static const int id = 5;

Expand All @@ -39,7 +43,7 @@ class Authenticate implements Message {
},
);

final IAuthenticateFields _authenticateFields;
late IAuthenticateFields _authenticateFields;

String get signature => _authenticateFields.signature;

Expand All @@ -48,7 +52,7 @@ class Authenticate implements Message {
static Authenticate parse(final List<dynamic> message) {
var fields = validateMessage(message, id, text, _validationSpec);

return Authenticate(AuthenticateFields(fields.signature!, fields.extra!));
return Authenticate(fields.signature!, fields.extra!);
}

@override
Expand Down
12 changes: 7 additions & 5 deletions lib/src/messages/call.dart
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,11 @@ class CallFields implements ICallFields {
}

class Call implements Message {
Call(this._callFields);
Call(int requestID, String uri, {List<dynamic>? args, Map<String, dynamic>? kwargs, Map<String, dynamic>? options}) {
_callFields = CallFields(requestID, uri, args: args, kwargs: kwargs, options: options);
}

Call.withFields(this._callFields);

static const int id = 48;

Expand All @@ -67,7 +71,7 @@ class Call implements Message {
},
);

final ICallFields _callFields;
late ICallFields _callFields;

int get requestID => _callFields.requestID;

Expand All @@ -82,9 +86,7 @@ class Call implements Message {
static Call parse(final List<dynamic> message) {
var fields = validateMessage(message, id, text, _validationSpec);

return Call(
CallFields(fields.requestID!, fields.uri!, args: fields.args, kwargs: fields.kwargs, options: fields.options),
);
return Call(fields.requestID!, fields.uri!, args: fields.args, kwargs: fields.kwargs, options: fields.options);
}

@override
Expand Down
10 changes: 7 additions & 3 deletions lib/src/messages/cancel.dart
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,11 @@ class CancelFields implements ICancelFields {
}

class Cancel implements Message {
Cancel(this._cancelFields);
Cancel(int requestID, {Map<String, dynamic>? options}) {
_cancelFields = CancelFields(requestID, options: options);
}

Cancel.withFields(this._cancelFields);

static const int id = 49;

Expand All @@ -38,7 +42,7 @@ class Cancel implements Message {
},
);

final ICancelFields _cancelFields;
late ICancelFields _cancelFields;

int get requestID => _cancelFields.requestID;

Expand All @@ -47,7 +51,7 @@ class Cancel implements Message {
static Cancel parse(final List<dynamic> message) {
var fields = validateMessage(message, id, text, _validationSpec);

return Cancel(CancelFields(fields.requestID!, options: fields.options));
return Cancel(fields.requestID!, options: fields.options);
}

@override
Expand Down
10 changes: 7 additions & 3 deletions lib/src/messages/challenge.dart
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,11 @@ class ChallengeFields implements IChallengeFields {
}

class Challenge implements Message {
Challenge(this._challengeFields);
Challenge(String authMethod, Map<String, dynamic> extra) {
_challengeFields = ChallengeFields(authMethod, extra);
}

Challenge.withFields(this._challengeFields);

static const int id = 4;

Expand All @@ -39,7 +43,7 @@ class Challenge implements Message {
},
);

final IChallengeFields _challengeFields;
late IChallengeFields _challengeFields;

String get authMethod => _challengeFields.authMethod;

Expand All @@ -48,7 +52,7 @@ class Challenge implements Message {
static Challenge parse(final List<dynamic> message) {
var fields = validateMessage(message, id, text, _validationSpec);

return Challenge(ChallengeFields(fields.authmethod!, fields.extra!));
return Challenge(fields.authmethod!, fields.extra!);
}

@override
Expand Down
Loading

0 comments on commit 11dcbe3

Please sign in to comment.