Orchestration / payments v2 #554
@@ -1,24 +1,24 @@
|
|||||||
import 'package:json_annotation/json_annotation.dart';
|
import 'package:json_annotation/json_annotation.dart';
|
||||||
|
|
||||||
import 'package:pshared/models/verification/purpose.dart';
|
|
||||||
import 'package:pshared/api/requests/tokens/session_identifier.dart';
|
import 'package:pshared/api/requests/tokens/session_identifier.dart';
|
||||||
|
import 'package:pshared/data/dto/verification/purpose.dart';
|
||||||
|
|
||||||
part 'login.g.dart';
|
part 'login.g.dart';
|
||||||
|
|
||||||
|
|
||||||
@JsonSerializable(explicitToJson: true)
|
@JsonSerializable(explicitToJson: true)
|
||||||
class LoginVerificationRequest {
|
class LoginVerificationRequest {
|
||||||
final VerificationPurpose purpose;
|
final VerificationPurposeDTO purpose;
|
||||||
final String? target;
|
final String? target;
|
||||||
final String idempotencyKey;
|
final String idempotencyKey;
|
||||||
|
|
||||||
const LoginVerificationRequest({
|
const LoginVerificationRequest({
|
||||||
this.purpose = VerificationPurpose.login,
|
this.purpose = VerificationPurposeDTO.login,
|
||||||
this.target,
|
this.target,
|
||||||
required this.idempotencyKey,
|
required this.idempotencyKey,
|
||||||
});
|
});
|
||||||
|
|
||||||
factory LoginVerificationRequest.fromJson(Map<String, dynamic> json) => _$LoginVerificationRequestFromJson(json);
|
factory LoginVerificationRequest.fromJson(Map<String, dynamic> json) =>
|
||||||
|
_$LoginVerificationRequestFromJson(json);
|
||||||
Map<String, dynamic> toJson() => _$LoginVerificationRequestToJson(this);
|
Map<String, dynamic> toJson() => _$LoginVerificationRequestToJson(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -28,14 +28,15 @@ class LoginCodeVerifyicationRequest extends LoginVerificationRequest {
|
|||||||
final SessionIdentifierDTO sessionIdentifier;
|
final SessionIdentifierDTO sessionIdentifier;
|
||||||
|
|
||||||
const LoginCodeVerifyicationRequest({
|
const LoginCodeVerifyicationRequest({
|
||||||
super.purpose = VerificationPurpose.login,
|
super.purpose = VerificationPurposeDTO.login,
|
||||||
super.target,
|
super.target,
|
||||||
required super.idempotencyKey,
|
required super.idempotencyKey,
|
||||||
required this.code,
|
required this.code,
|
||||||
required this.sessionIdentifier,
|
required this.sessionIdentifier,
|
||||||
});
|
});
|
||||||
|
|
||||||
factory LoginCodeVerifyicationRequest.fromJson(Map<String, dynamic> json) => _$LoginCodeVerifyicationRequestFromJson(json);
|
factory LoginCodeVerifyicationRequest.fromJson(Map<String, dynamic> json) =>
|
||||||
|
_$LoginCodeVerifyicationRequestFromJson(json);
|
||||||
@override
|
@override
|
||||||
Map<String, dynamic> toJson() => _$LoginCodeVerifyicationRequestToJson(this);
|
Map<String, dynamic> toJson() => _$LoginCodeVerifyicationRequestToJson(this);
|
||||||
}
|
}
|
||||||
|
|||||||
18
frontend/pshared/lib/data/dto/verification/purpose.dart
Normal file
18
frontend/pshared/lib/data/dto/verification/purpose.dart
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
import 'package:json_annotation/json_annotation.dart';
|
||||||
|
|
||||||
|
enum VerificationPurposeDTO {
|
||||||
|
@JsonValue('login')
|
||||||
|
login,
|
||||||
|
|
||||||
|
@JsonValue('payout')
|
||||||
|
payout,
|
||||||
|
|
||||||
|
@JsonValue('account_activation')
|
||||||
|
accountActivation,
|
||||||
|
|
||||||
|
@JsonValue('email_change')
|
||||||
|
emailChange,
|
||||||
|
|
||||||
|
@JsonValue('password_reset')
|
||||||
|
passwordReset,
|
||||||
|
}
|
||||||
36
frontend/pshared/lib/data/mapper/verification/purpose.dart
Normal file
36
frontend/pshared/lib/data/mapper/verification/purpose.dart
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
import 'package:pshared/data/dto/verification/purpose.dart';
|
||||||
|
import 'package:pshared/models/verification/purpose.dart';
|
||||||
|
|
||||||
|
extension VerificationPurposeDTOMapper on VerificationPurposeDTO {
|
||||||
|
VerificationPurpose toDomain() {
|
||||||
|
switch (this) {
|
||||||
|
case VerificationPurposeDTO.login:
|
||||||
|
return VerificationPurpose.login;
|
||||||
|
case VerificationPurposeDTO.payout:
|
||||||
|
return VerificationPurpose.payout;
|
||||||
|
case VerificationPurposeDTO.accountActivation:
|
||||||
|
return VerificationPurpose.accountActivation;
|
||||||
|
case VerificationPurposeDTO.emailChange:
|
||||||
|
return VerificationPurpose.emailChange;
|
||||||
|
case VerificationPurposeDTO.passwordReset:
|
||||||
|
return VerificationPurpose.passwordReset;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension VerificationPurposeMapper on VerificationPurpose {
|
||||||
|
VerificationPurposeDTO toDTO() {
|
||||||
|
switch (this) {
|
||||||
|
case VerificationPurpose.login:
|
||||||
|
return VerificationPurposeDTO.login;
|
||||||
|
case VerificationPurpose.payout:
|
||||||
|
return VerificationPurposeDTO.payout;
|
||||||
|
case VerificationPurpose.accountActivation:
|
||||||
|
return VerificationPurposeDTO.accountActivation;
|
||||||
|
case VerificationPurpose.emailChange:
|
||||||
|
return VerificationPurposeDTO.emailChange;
|
||||||
|
case VerificationPurpose.passwordReset:
|
||||||
|
return VerificationPurposeDTO.passwordReset;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,17 +1,8 @@
|
|||||||
import 'package:json_annotation/json_annotation.dart';
|
|
||||||
|
|
||||||
|
|
||||||
/// Targets for confirmation codes.
|
/// Targets for confirmation codes.
|
||||||
@JsonEnum(alwaysCreate: true)
|
|
||||||
enum VerificationPurpose {
|
enum VerificationPurpose {
|
||||||
@JsonValue('login')
|
|
||||||
login,
|
login,
|
||||||
@JsonValue('payout')
|
|
||||||
payout,
|
payout,
|
||||||
@JsonValue('account_activation')
|
|
||||||
accountActivation,
|
accountActivation,
|
||||||
@JsonValue('email_change')
|
|
||||||
emailChange,
|
emailChange,
|
||||||
@JsonValue('password_reset')
|
|
||||||
passwordReset,
|
passwordReset,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import 'package:pshared/api/responses/login.dart';
|
|||||||
import 'package:pshared/api/responses/verification/response.dart';
|
import 'package:pshared/api/responses/verification/response.dart';
|
||||||
import 'package:pshared/data/mapper/account/account.dart';
|
import 'package:pshared/data/mapper/account/account.dart';
|
||||||
import 'package:pshared/data/mapper/session_identifier.dart';
|
import 'package:pshared/data/mapper/session_identifier.dart';
|
||||||
|
import 'package:pshared/data/mapper/verification/purpose.dart';
|
||||||
import 'package:pshared/models/account/account.dart';
|
import 'package:pshared/models/account/account.dart';
|
||||||
import 'package:pshared/models/auth/pending_login.dart';
|
import 'package:pshared/models/auth/pending_login.dart';
|
||||||
import 'package:pshared/models/verification/purpose.dart';
|
import 'package:pshared/models/verification/purpose.dart';
|
||||||
@@ -16,12 +17,14 @@ import 'package:pshared/service/authorization/storage.dart';
|
|||||||
import 'package:pshared/service/services.dart';
|
import 'package:pshared/service/services.dart';
|
||||||
import 'package:pshared/utils/http/requests.dart';
|
import 'package:pshared/utils/http/requests.dart';
|
||||||
|
|
||||||
|
|
||||||
class VerificationService {
|
class VerificationService {
|
||||||
static final _logger = Logger('service.verification');
|
static final _logger = Logger('service.verification');
|
||||||
static const String _objectType = Services.verification;
|
static const String _objectType = Services.verification;
|
||||||
|
|
||||||
static Future<VerificationResponse> requestLoginCode(PendingLogin pending, {String? target}) async {
|
static Future<VerificationResponse> requestLoginCode(
|
||||||
|
PendingLogin pending, {
|
||||||
|
String? target,
|
||||||
|
}) async {
|
||||||
_logger.fine('Requesting login confirmation code');
|
_logger.fine('Requesting login confirmation code');
|
||||||
final response = await getPOSTResponse(
|
final response = await getPOSTResponse(
|
||||||
_objectType,
|
_objectType,
|
||||||
@@ -35,7 +38,10 @@ class VerificationService {
|
|||||||
return VerificationResponse.fromJson(response);
|
return VerificationResponse.fromJson(response);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Future<VerificationResponse> resendLoginCode(PendingLogin pending, {String? target}) async {
|
static Future<VerificationResponse> resendLoginCode(
|
||||||
|
PendingLogin pending, {
|
||||||
|
String? target,
|
||||||
|
}) async {
|
||||||
_logger.fine('Resending login confirmation code');
|
_logger.fine('Resending login confirmation code');
|
||||||
final response = await getPOSTResponse(
|
final response = await getPOSTResponse(
|
||||||
_objectType,
|
_objectType,
|
||||||
@@ -82,7 +88,7 @@ class VerificationService {
|
|||||||
_objectType,
|
_objectType,
|
||||||
'',
|
'',
|
||||||
LoginVerificationRequest(
|
LoginVerificationRequest(
|
||||||
purpose: VerificationPurpose.payout,
|
purpose: VerificationPurpose.payout.toDTO(),
|
||||||
target: target,
|
target: target,
|
||||||
idempotencyKey: idempotencyKey ?? Uuid().v4(),
|
idempotencyKey: idempotencyKey ?? Uuid().v4(),
|
||||||
).toJson(),
|
).toJson(),
|
||||||
@@ -99,7 +105,7 @@ class VerificationService {
|
|||||||
_objectType,
|
_objectType,
|
||||||
'/resend',
|
'/resend',
|
||||||
LoginVerificationRequest(
|
LoginVerificationRequest(
|
||||||
purpose: VerificationPurpose.payout,
|
purpose: VerificationPurpose.payout.toDTO(),
|
||||||
target: target,
|
target: target,
|
||||||
idempotencyKey: idempotencyKey,
|
idempotencyKey: idempotencyKey,
|
||||||
).toJson(),
|
).toJson(),
|
||||||
@@ -117,7 +123,7 @@ class VerificationService {
|
|||||||
_objectType,
|
_objectType,
|
||||||
'/verify',
|
'/verify',
|
||||||
LoginCodeVerifyicationRequest(
|
LoginCodeVerifyicationRequest(
|
||||||
purpose: VerificationPurpose.payout,
|
purpose: VerificationPurpose.payout.toDTO(),
|
||||||
target: target,
|
target: target,
|
||||||
idempotencyKey: idempotencyKey,
|
idempotencyKey: idempotencyKey,
|
||||||
code: code,
|
code: code,
|
||||||
|
|||||||
Reference in New Issue
Block a user