Skip to content

Commit 336b98e

Browse files
authored
feat(cat-voices): Migrate rbac endpoints to v2 (#3596)
* feat: Migrate RBAC endpoint to v2 * feat: enhance RBAC DTOs and add PEM handling for X509 certificates * chore: disable cspell in x509 certificate test * refactor: Remove Json typedef and move CertificateType
1 parent 67af07f commit 336b98e

33 files changed

+691
-215
lines changed
Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,20 @@
1+
import 'package:json_annotation/json_annotation.dart';
2+
3+
@JsonEnum(valueField: 'value')
4+
enum CertificateType {
5+
pubkey('pubkey'),
6+
x509('x509'),
7+
c509('c509');
8+
9+
final String value;
10+
11+
const CertificateType(this.value);
12+
}
13+
114
/// Holds common constants about the certificates used in user registration.
215
final class RegistrationCertificate {
316
/// The type of the certificate used in the registration.
4-
static const certificateType = 'x509';
17+
static const certificateType = CertificateType.x509;
518

619
const RegistrationCertificate._();
720
}

catalyst_voices/packages/internal/catalyst_voices_models/lib/src/user/account_role.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ enum AccountRole {
5454
return values.firstWhereOrNull((e) => e.registrationOffset == registrationOffset);
5555
}
5656

57-
static AccountRole? maybeFromNumber(int? number) {
57+
static AccountRole? maybeFromNumber(int number) {
5858
for (final value in values) {
5959
if (value.number == number) {
6060
return value;

catalyst_voices/packages/internal/catalyst_voices_repositories/lib/src/api/dio_cat_gateway_service.dart

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import 'package:catalyst_voices_repositories/src/api/models/network.dart';
1111
import 'package:catalyst_voices_repositories/src/api/models/rbac_registration_chain.dart';
1212
import 'package:catalyst_voices_repositories/src/common/content_types.dart';
1313
import 'package:catalyst_voices_repositories/src/common/http_headers.dart';
14-
import 'package:catalyst_voices_repositories/src/common/json.dart';
1514
import 'package:catalyst_voices_repositories/src/dto/config/remote_config.dart';
1615
import 'package:dio/dio.dart';
1716

@@ -86,12 +85,18 @@ abstract interface class CatGatewayService {
8685
String? version,
8786
});
8887

89-
/// Get RBAC registrations
88+
/// Get RBAC registrations V2.
9089
/// This endpoint returns RBAC registrations by provided auth Catalyst Id credentials
9190
/// or by the [lookup] argument if provided.
9291
///
9392
/// [lookup] Stake address or Catalyst ID to get the RBAC registration for.
94-
Future<RbacRegistrationChain> rbacRegistration({String? lookup});
93+
/// [showAllInvalid] If this parameter is set to `true`, then all the invalid registrations are
94+
/// returned. Otherwise, only the invalid registrations after the last valid one
95+
/// are shown. Defaults to `false` if not present.
96+
Future<RbacRegistrationChain> rbacRegistration({
97+
String? lookup,
98+
bool? showAllInvalid,
99+
});
95100

96101
/// Get staked assets.
97102
/// This endpoint returns the total Cardano's staked assets to the corresponded
@@ -144,7 +149,7 @@ final class DioCatGatewayService implements CatGatewayService {
144149
},
145150
body: filter.toJson(),
146151
mapper: (response) {
147-
if (response is Json) {
152+
if (response is Map<String, dynamic>) {
148153
return DocumentIndexList.fromJson(response);
149154
}
150155

@@ -161,12 +166,12 @@ final class DioCatGatewayService implements CatGatewayService {
161166
return _dio.get<dynamic, RemoteConfig>(
162167
'/v1/config/frontend',
163168
mapper: (response) {
164-
if (response is Json) {
169+
if (response is Map<String, dynamic>) {
165170
return RemoteConfig.fromJson(response);
166171
}
167172

168173
if (response is String) {
169-
return RemoteConfig.fromJson(jsonDecode(response) as Json);
174+
return RemoteConfig.fromJson(jsonDecode(response) as Map<String, dynamic>);
170175
}
171176

172177
return const RemoteConfig();
@@ -188,10 +193,16 @@ final class DioCatGatewayService implements CatGatewayService {
188193
}
189194

190195
@override
191-
Future<RbacRegistrationChain> rbacRegistration({String? lookup}) {
192-
return _dio.get<Json, RbacRegistrationChain>(
193-
'/v1/rbac/registration',
194-
queryParameters: {'lookup': ?lookup},
196+
Future<RbacRegistrationChain> rbacRegistration({
197+
String? lookup,
198+
bool? showAllInvalid = false,
199+
}) {
200+
return _dio.get<Map<String, dynamic>, RbacRegistrationChain>(
201+
'/v2/rbac/registration',
202+
queryParameters: {
203+
'lookup': ?lookup,
204+
'show_all_invalid': ?showAllInvalid,
205+
},
195206
mapper: RbacRegistrationChain.fromJson,
196207
);
197208
}
@@ -203,7 +214,7 @@ final class DioCatGatewayService implements CatGatewayService {
203214
String? asat,
204215
String? authorization,
205216
}) {
206-
return _dio.get<Json, FullStakeInfo>(
217+
return _dio.get<Map<String, dynamic>, FullStakeInfo>(
207218
'/v1/cardano/assets/$stakeAddress',
208219
queryParameters: {
209220
'network': ?network?.value,

catalyst_voices/packages/internal/catalyst_voices_repositories/lib/src/api/dio_cat_reviews_service.dart

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import 'package:catalyst_voices_repositories/src/api/dio_client.dart';
33
import 'package:catalyst_voices_repositories/src/api/models/catalyst_id_create.dart';
44
import 'package:catalyst_voices_repositories/src/api/models/catalyst_id_public.dart';
55
import 'package:catalyst_voices_repositories/src/common/http_headers.dart';
6-
import 'package:catalyst_voices_repositories/src/common/json.dart';
76
import 'package:dio/dio.dart';
87

98
/// # Catalyst Reviews API.
@@ -47,7 +46,7 @@ final class DioCatReviewsService implements CatReviewsService {
4746

4847
@override
4948
Future<CatalystIdPublic> getPublicProfile({String? authorization}) {
50-
return _dio.get<Json, CatalystIdPublic>(
49+
return _dio.get<Map<String, dynamic>, CatalystIdPublic>(
5150
'/catalyst-ids/me',
5251
options: Options(
5352
headers: {
@@ -63,7 +62,7 @@ final class DioCatReviewsService implements CatReviewsService {
6362
required CatalystIdCreate body,
6463
String? authorization,
6564
}) {
66-
return _dio.post<Json, CatalystIdPublic>(
65+
return _dio.post<Map<String, dynamic>, CatalystIdPublic>(
6766
'/catalyst-ids/me',
6867
body: body.toJson(),
6968
options: Options(

catalyst_voices/packages/internal/catalyst_voices_repositories/lib/src/api/dio_cat_status_service.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import 'package:catalyst_voices_repositories/src/api/api_services.dart';
22
import 'package:catalyst_voices_repositories/src/api/dio_client.dart';
33
import 'package:catalyst_voices_repositories/src/api/models/components.dart';
4-
import 'package:catalyst_voices_repositories/src/common/json.dart';
54
import 'package:dio/dio.dart';
65

76
abstract interface class CatStatusService {
@@ -34,7 +33,7 @@ final class DioCatStatusService implements CatStatusService {
3433

3534
@override
3635
Future<Components> componentStatuses({String? authorization}) {
37-
return _dio.get<Json, Components>(
36+
return _dio.get<Map<String, dynamic>, Components>(
3837
'/v2/components.json',
3938
mapper: Components.fromJson,
4039
);

catalyst_voices/packages/internal/catalyst_voices_repositories/lib/src/api/models/catalyst_id_create.dart

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import 'package:catalyst_voices_repositories/src/common/json.dart';
21
import 'package:json_annotation/json_annotation.dart';
32

43
part 'catalyst_id_create.g.dart';
@@ -20,7 +19,7 @@ final class CatalystIdCreate {
2019
required this.catalystIdUri,
2120
});
2221

23-
factory CatalystIdCreate.fromJson(Json json) => _$CatalystIdCreateFromJson(json);
22+
factory CatalystIdCreate.fromJson(Map<String, dynamic> json) => _$CatalystIdCreateFromJson(json);
2423

25-
Json toJson() => _$CatalystIdCreateToJson(this);
24+
Map<String, dynamic> toJson() => _$CatalystIdCreateToJson(this);
2625
}

catalyst_voices/packages/internal/catalyst_voices_repositories/lib/src/api/models/catalyst_id_public.dart

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import 'package:catalyst_voices_repositories/src/api/models/catalyst_id_status.dart';
22
import 'package:catalyst_voices_repositories/src/api/models/catalyst_rbac_registration_status.dart';
3-
import 'package:catalyst_voices_repositories/src/common/json.dart';
43
import 'package:json_annotation/json_annotation.dart';
54

65
part 'catalyst_id_public.g.dart';
@@ -37,7 +36,7 @@ final class CatalystIdPublic {
3736
this.rbacRegStatus = CatalystRbacRegistrationStatus.initialized,
3837
});
3938

40-
factory CatalystIdPublic.fromJson(Json json) => _$CatalystIdPublicFromJson(json);
39+
factory CatalystIdPublic.fromJson(Map<String, dynamic> json) => _$CatalystIdPublicFromJson(json);
4140

42-
Json toJson() => _$CatalystIdPublicToJson(this);
41+
Map<String, dynamic> toJson() => _$CatalystIdPublicToJson(this);
4342
}

catalyst_voices/packages/internal/catalyst_voices_repositories/lib/src/api/models/component.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import 'package:catalyst_voices_repositories/src/api/models/component_status.dart';
2-
import 'package:catalyst_voices_repositories/src/common/json.dart';
32
import 'package:json_annotation/json_annotation.dart';
43

54
part 'component.g.dart';
@@ -22,5 +21,5 @@ final class Component {
2221
this.isParent,
2322
});
2423

25-
factory Component.fromJson(Json json) => _$ComponentFromJson(json);
24+
factory Component.fromJson(Map<String, dynamic> json) => _$ComponentFromJson(json);
2625
}

catalyst_voices/packages/internal/catalyst_voices_repositories/lib/src/api/models/components.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import 'package:catalyst_voices_repositories/src/api/models/component.dart';
2-
import 'package:catalyst_voices_repositories/src/common/json.dart';
32
import 'package:json_annotation/json_annotation.dart';
43

54
part 'components.g.dart';
@@ -10,5 +9,5 @@ final class Components {
109

1110
const Components(this.components);
1211

13-
factory Components.fromJson(Json json) => _$ComponentsFromJson(json);
12+
factory Components.fromJson(Map<String, dynamic> json) => _$ComponentsFromJson(json);
1413
}

catalyst_voices/packages/internal/catalyst_voices_repositories/lib/src/api/models/current_page.dart

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import 'package:catalyst_voices_repositories/src/common/json.dart';
21
import 'package:json_annotation/json_annotation.dart';
32

43
part 'current_page.g.dart';
@@ -30,7 +29,7 @@ final class CurrentPage {
3029
required this.remaining,
3130
});
3231

33-
factory CurrentPage.fromJson(Json json) => _$CurrentPageFromJson(json);
32+
factory CurrentPage.fromJson(Map<String, dynamic> json) => _$CurrentPageFromJson(json);
3433

35-
Json toJson() => _$CurrentPageToJson(this);
34+
Map<String, dynamic> toJson() => _$CurrentPageToJson(this);
3635
}

0 commit comments

Comments
 (0)