chore+fix+feat: Apply dart fixes after upgrade to flutter 3.10, add permission checks, make most api calls work again

This commit is contained in:
Anton Stubenbord
2023-05-12 00:16:30 +02:00
parent c8ff261fc7
commit 39342eecf1
114 changed files with 546 additions and 685 deletions

View File

@@ -1,7 +1,5 @@
import 'package:json_annotation/json_annotation.dart';
import 'package:paperless_api/src/models/models.dart';
import 'package:paperless_api/src/models/query_parameters/date_range_queries/absolute_date_range_query.dart';
import 'package:paperless_api/src/models/query_parameters/date_range_queries/relative_date_range_query.dart';
class DateRangeQueryJsonConverter
extends JsonConverter<DateRangeQuery, Map<String, dynamic>> {

View File

@@ -1,4 +1,3 @@
import 'dart:developer';
import 'package:json_annotation/json_annotation.dart';

View File

@@ -1,9 +1,10 @@
// ignore_for_file: unused_field
import 'package:equatable/equatable.dart';
import 'package:json_annotation/json_annotation.dart';
import 'package:paperless_api/paperless_api.dart';
import 'package:paperless_api/src/constants.dart';
import 'package:paperless_api/src/converters/local_date_time_json_converter.dart';
import 'package:paperless_api/src/models/query_parameters/tags_query/tags_query.dart';
part 'filter_rule_model.g.dart';

View File

@@ -11,7 +11,7 @@ class GroupModel with _$GroupModel {
const factory GroupModel({
@HiveField(0) required int id,
@HiveField(1) required String name,
@HiveField(2) required List<UserPermissions> permissions,
@HiveField(2) required List<String> permissions,
}) = _GroupModel;
factory GroupModel.fromJson(Map<String, dynamic> json) => _$GroupModelFromJson(json);

View File

@@ -25,7 +25,7 @@ mixin _$GroupModel {
@HiveField(1)
String get name => throw _privateConstructorUsedError;
@HiveField(2)
List<UserPermissions> get permissions => throw _privateConstructorUsedError;
List<String> get permissions => throw _privateConstructorUsedError;
Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
@JsonKey(ignore: true)
@@ -42,7 +42,7 @@ abstract class $GroupModelCopyWith<$Res> {
$Res call(
{@HiveField(0) int id,
@HiveField(1) String name,
@HiveField(2) List<UserPermissions> permissions});
@HiveField(2) List<String> permissions});
}
/// @nodoc
@@ -74,7 +74,7 @@ class _$GroupModelCopyWithImpl<$Res, $Val extends GroupModel>
permissions: null == permissions
? _value.permissions
: permissions // ignore: cast_nullable_to_non_nullable
as List<UserPermissions>,
as List<String>,
) as $Val);
}
}
@@ -90,7 +90,7 @@ abstract class _$$_GroupModelCopyWith<$Res>
$Res call(
{@HiveField(0) int id,
@HiveField(1) String name,
@HiveField(2) List<UserPermissions> permissions});
@HiveField(2) List<String> permissions});
}
/// @nodoc
@@ -120,7 +120,7 @@ class __$$_GroupModelCopyWithImpl<$Res>
permissions: null == permissions
? _value._permissions
: permissions // ignore: cast_nullable_to_non_nullable
as List<UserPermissions>,
as List<String>,
));
}
}
@@ -131,7 +131,7 @@ class _$_GroupModel implements _GroupModel {
const _$_GroupModel(
{@HiveField(0) required this.id,
@HiveField(1) required this.name,
@HiveField(2) required final List<UserPermissions> permissions})
@HiveField(2) required final List<String> permissions})
: _permissions = permissions;
factory _$_GroupModel.fromJson(Map<String, dynamic> json) =>
@@ -143,10 +143,10 @@ class _$_GroupModel implements _GroupModel {
@override
@HiveField(1)
final String name;
final List<UserPermissions> _permissions;
final List<String> _permissions;
@override
@HiveField(2)
List<UserPermissions> get permissions {
List<String> get permissions {
if (_permissions is EqualUnmodifiableListView) return _permissions;
// ignore: implicit_dynamic_type
return EqualUnmodifiableListView(_permissions);
@@ -189,10 +189,9 @@ class _$_GroupModel implements _GroupModel {
abstract class _GroupModel implements GroupModel {
const factory _GroupModel(
{@HiveField(0) required final int id,
@HiveField(1) required final String name,
@HiveField(2) required final List<UserPermissions> permissions}) =
_$_GroupModel;
{@HiveField(0) required final int id,
@HiveField(1) required final String name,
@HiveField(2) required final List<String> permissions}) = _$_GroupModel;
factory _GroupModel.fromJson(Map<String, dynamic> json) =
_$_GroupModel.fromJson;
@@ -205,7 +204,7 @@ abstract class _GroupModel implements GroupModel {
String get name;
@override
@HiveField(2)
List<UserPermissions> get permissions;
List<String> get permissions;
@override
@JsonKey(ignore: true)
_$$_GroupModelCopyWith<_$_GroupModel> get copyWith =>

View File

@@ -1,7 +1,5 @@
import 'dart:developer';
import 'dart:ui';
import 'package:flutter/foundation.dart';
import 'package:json_annotation/json_annotation.dart';
import 'package:paperless_api/src/converters/hex_color_json_converter.dart';
import 'package:paperless_api/src/models/labels/label_model.dart';
@@ -24,7 +22,7 @@ class Tag extends Label {
final bool isInboxTag;
Tag({
const Tag({
super.id,
required super.name,
super.documentCount,

View File

@@ -53,6 +53,5 @@ enum ErrorCode {
requestTimedOut,
unsupportedFileFormat,
missingClientCertificate,
acknowledgeTasksError,
notAuthorized;
acknowledgeTasksError;
}

View File

@@ -1,117 +1,30 @@
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:hive/hive.dart';
import 'package:paperless_api/config/hive/hive_type_ids.dart';
part 'user_permissions.g.dart';
@HiveType(typeId: PaperlessApiHiveTypeIds.userPermissions)
@JsonEnum(valueField: "value")
enum UserPermissions {
@HiveField(0)
addCorrespondent("add_correspondent"),
@HiveField(1)
addDocument("add_document"),
@HiveField(2)
addDocumenttype("add_documenttype"),
@HiveField(3)
addGroup("add_group"),
@HiveField(4)
addMailaccount("add_mailaccount"),
@HiveField(5)
addMailrule("add_mailrule"),
@HiveField(6)
addNote("add_note"),
@HiveField(7)
addPaperlesstask("add_paperlesstask"),
@HiveField(8)
addSavedview("add_savedview"),
@HiveField(9)
addStoragepath("add_storagepath"),
@HiveField(10)
addTag("add_tag"),
@HiveField(11)
addUisettings("add_uisettings"),
@HiveField(12)
addUser("add_user"),
@HiveField(13)
changeCorrespondent("change_correspondent"),
@HiveField(14)
changeDocument("change_document"),
@HiveField(15)
changeDocumenttype("change_documenttype"),
@HiveField(16)
changeGroup("change_group"),
@HiveField(17)
changeMailaccount("change_mailaccount"),
@HiveField(18)
changeMailrule("change_mailrule"),
@HiveField(19)
changeNote("change_note"),
@HiveField(20)
changePaperlesstask("change_paperlesstask"),
@HiveField(21)
changeSavedview("change_savedview"),
@HiveField(22)
changeStoragepath("change_storagepath"),
@HiveField(23)
changeTag("change_tag"),
@HiveField(24)
changeUisettings("change_uisettings"),
@HiveField(25)
changeUser("change_user"),
@HiveField(26)
deleteCorrespondent("delete_correspondent"),
@HiveField(27)
deleteDocument("delete_document"),
@HiveField(28)
deleteDocumenttype("delete_documenttype"),
@HiveField(29)
deleteGroup("delete_group"),
@HiveField(30)
deleteMailaccount("delete_mailaccount"),
@HiveField(31)
deleteMailrule("delete_mailrule"),
@HiveField(32)
deleteNote("delete_note"),
@HiveField(33)
deletePaperlesstask("delete_paperlesstask"),
@HiveField(34)
deleteSavedview("delete_savedview"),
@HiveField(35)
deleteStoragepath("delete_storagepath"),
@HiveField(36)
deleteTag("delete_tag"),
@HiveField(37)
deleteUisettings("delete_uisettings"),
@HiveField(38)
deleteUser("delete_user"),
@HiveField(39)
viewCorrespondent("view_correspondent"),
@HiveField(40)
viewDocument("view_document"),
@HiveField(41)
viewDocumenttype("view_documenttype"),
@HiveField(42)
viewGroup("view_group"),
@HiveField(43)
viewMailaccount("view_mailaccount"),
@HiveField(44)
viewMailrule("view_mailrule"),
@HiveField(45)
viewNote("view_note"),
@HiveField(46)
viewPaperlesstask("view_paperlesstask"),
@HiveField(47)
viewSavedview("view_savedview"),
@HiveField(48)
viewStoragepath("view_storagepath"),
@HiveField(49)
viewTag("view_tag"),
@HiveField(50)
viewUisettings("view_uisettings"),
@HiveField(51)
viewUser("view_user");
const UserPermissions(this.value);
enum PermissionAction {
add("add"),
change("change"),
delete("delete"),
view("view");
final String value;
const PermissionAction(this.value);
}
enum PermissionTarget {
correspondent("correspondent"),
document("document"),
documentType("documenttype"),
group("group"),
mailAccount("mailaccount"),
mailrule("mailrule"),
note("note"),
paperlesstask("paperlesstask"),
savedView("savedview"),
storagePath("storagepath"),
tag("tag"),
uiSettings("uisettings"),
user("user"),
logentry("logentry"),
permission("permission");
final String value;
const PermissionTarget(this.value);
}

View File

@@ -1,5 +1,4 @@
import 'package:hive/hive.dart';
import 'package:paperless_api/config/hive/hive_type_ids.dart';
import 'package:paperless_api/src/models/query_parameters/date_range_queries/date_range_query_field.dart';
import 'date_range_query.dart';

View File

@@ -1,4 +1,3 @@
import 'package:equatable/equatable.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:hive/hive.dart';
import 'package:paperless_api/config/hive/hive_type_ids.dart';

View File

@@ -16,17 +16,33 @@ class UserModel with _$UserModel {
@JsonSerializable(fieldRename: FieldRename.snake)
@HiveType(typeId: PaperlessApiHiveTypeIds.userModelv3)
const factory UserModel.v3({
@HiveField(0) required int id,
@HiveField(1) required String username,
@HiveField(2) required String email,
@HiveField(3) String? firstName,
@HiveField(4) String? lastName,
@HiveField(5) DateTime? dateJoined,
@HiveField(6) @Default(true) bool isStaff,
@HiveField(7) @Default(true) bool isActive,
@HiveField(8) @Default(true) bool isSuperuser,
@HiveField(9) @Default([]) List<int> groups,
@HiveField(10) @Default(UserPermissions.values) List<UserPermissions> userPermissions,
@HiveField(0)
required int id,
@HiveField(1)
required String username,
@HiveField(2)
required String email,
@HiveField(3)
String? firstName,
@HiveField(4)
String? lastName,
@HiveField(5)
DateTime? dateJoined,
@HiveField(6)
@Default(true)
bool isStaff,
@HiveField(7)
@Default(true)
bool isActive,
@HiveField(8)
@Default(true)
bool isSuperuser,
@HiveField(9)
@Default([])
List<int> groups,
@HiveField(10)
@Default([])
List<String> userPermissions,
@HiveField(11)
@Default(InheritedPermissions.values)
List<InheritedPermissions> inheritedPermissions,
@@ -55,13 +71,14 @@ class UserModel with _$UserModel {
},
);
bool hasPermission(UserPermissions permission) {
bool hasPermission(PermissionAction action, PermissionTarget target) {
return map(
v3: (value) {
if (value.isSuperuser) {
return true;
}
return value.userPermissions.contains(permission);
final permissionIdentifier = "${action.value}_${target.value}";
return value.userPermissions.contains(permissionIdentifier);
},
v2: (value) {
// In previous versions, all users have all permissions.

View File

@@ -46,7 +46,7 @@ mixin _$UserModel {
@HiveField(7) bool isActive,
@HiveField(8) bool isSuperuser,
@HiveField(9) List<int> groups,
@HiveField(10) List<UserPermissions> userPermissions,
@HiveField(10) List<String> userPermissions,
@HiveField(11) List<InheritedPermissions> inheritedPermissions)
v3,
required TResult Function(@HiveField(0) @JsonKey(name: "user_id") int id,
@@ -67,7 +67,7 @@ mixin _$UserModel {
@HiveField(7) bool isActive,
@HiveField(8) bool isSuperuser,
@HiveField(9) List<int> groups,
@HiveField(10) List<UserPermissions> userPermissions,
@HiveField(10) List<String> userPermissions,
@HiveField(11) List<InheritedPermissions> inheritedPermissions)?
v3,
TResult? Function(@HiveField(0) @JsonKey(name: "user_id") int id,
@@ -88,7 +88,7 @@ mixin _$UserModel {
@HiveField(7) bool isActive,
@HiveField(8) bool isSuperuser,
@HiveField(9) List<int> groups,
@HiveField(10) List<UserPermissions> userPermissions,
@HiveField(10) List<String> userPermissions,
@HiveField(11) List<InheritedPermissions> inheritedPermissions)?
v3,
TResult Function(@HiveField(0) @JsonKey(name: "user_id") int id,
@@ -178,7 +178,7 @@ abstract class _$$UserModelV3CopyWith<$Res>
@HiveField(7) bool isActive,
@HiveField(8) bool isSuperuser,
@HiveField(9) List<int> groups,
@HiveField(10) List<UserPermissions> userPermissions,
@HiveField(10) List<String> userPermissions,
@HiveField(11) List<InheritedPermissions> inheritedPermissions});
}
@@ -250,7 +250,7 @@ class __$$UserModelV3CopyWithImpl<$Res>
userPermissions: null == userPermissions
? _value._userPermissions
: userPermissions // ignore: cast_nullable_to_non_nullable
as List<UserPermissions>,
as List<String>,
inheritedPermissions: null == inheritedPermissions
? _value._inheritedPermissions
: inheritedPermissions // ignore: cast_nullable_to_non_nullable
@@ -275,8 +275,7 @@ class _$UserModelV3 extends UserModelV3 {
@HiveField(7) this.isActive = true,
@HiveField(8) this.isSuperuser = true,
@HiveField(9) final List<int> groups = const [],
@HiveField(10) final List<UserPermissions> userPermissions =
UserPermissions.values,
@HiveField(10) final List<String> userPermissions = const [],
@HiveField(11) final List<InheritedPermissions> inheritedPermissions =
InheritedPermissions.values,
final String? $type})
@@ -329,11 +328,11 @@ class _$UserModelV3 extends UserModelV3 {
return EqualUnmodifiableListView(_groups);
}
final List<UserPermissions> _userPermissions;
final List<String> _userPermissions;
@override
@JsonKey()
@HiveField(10)
List<UserPermissions> get userPermissions {
List<String> get userPermissions {
if (_userPermissions is EqualUnmodifiableListView) return _userPermissions;
// ignore: implicit_dynamic_type
return EqualUnmodifiableListView(_userPermissions);
@@ -422,7 +421,7 @@ class _$UserModelV3 extends UserModelV3 {
@HiveField(7) bool isActive,
@HiveField(8) bool isSuperuser,
@HiveField(9) List<int> groups,
@HiveField(10) List<UserPermissions> userPermissions,
@HiveField(10) List<String> userPermissions,
@HiveField(11) List<InheritedPermissions> inheritedPermissions)
v3,
required TResult Function(@HiveField(0) @JsonKey(name: "user_id") int id,
@@ -447,7 +446,7 @@ class _$UserModelV3 extends UserModelV3 {
@HiveField(7) bool isActive,
@HiveField(8) bool isSuperuser,
@HiveField(9) List<int> groups,
@HiveField(10) List<UserPermissions> userPermissions,
@HiveField(10) List<String> userPermissions,
@HiveField(11) List<InheritedPermissions> inheritedPermissions)?
v3,
TResult? Function(@HiveField(0) @JsonKey(name: "user_id") int id,
@@ -483,7 +482,7 @@ class _$UserModelV3 extends UserModelV3 {
@HiveField(7) bool isActive,
@HiveField(8) bool isSuperuser,
@HiveField(9) List<int> groups,
@HiveField(10) List<UserPermissions> userPermissions,
@HiveField(10) List<String> userPermissions,
@HiveField(11) List<InheritedPermissions> inheritedPermissions)?
v3,
TResult Function(@HiveField(0) @JsonKey(name: "user_id") int id,
@@ -560,7 +559,7 @@ abstract class UserModelV3 extends UserModel {
@HiveField(9)
final List<int> groups,
@HiveField(10)
final List<UserPermissions> userPermissions,
final List<String> userPermissions,
@HiveField(11)
final List<InheritedPermissions> inheritedPermissions}) =
_$UserModelV3;
@@ -592,7 +591,7 @@ abstract class UserModelV3 extends UserModel {
@HiveField(9)
List<int> get groups;
@HiveField(10)
List<UserPermissions> get userPermissions;
List<String> get userPermissions;
@HiveField(11)
List<InheritedPermissions> get inheritedPermissions;
@override
@@ -718,7 +717,7 @@ class _$UserModelV2 extends UserModelV2 {
@HiveField(7) bool isActive,
@HiveField(8) bool isSuperuser,
@HiveField(9) List<int> groups,
@HiveField(10) List<UserPermissions> userPermissions,
@HiveField(10) List<String> userPermissions,
@HiveField(11) List<InheritedPermissions> inheritedPermissions)
v3,
required TResult Function(@HiveField(0) @JsonKey(name: "user_id") int id,
@@ -742,7 +741,7 @@ class _$UserModelV2 extends UserModelV2 {
@HiveField(7) bool isActive,
@HiveField(8) bool isSuperuser,
@HiveField(9) List<int> groups,
@HiveField(10) List<UserPermissions> userPermissions,
@HiveField(10) List<String> userPermissions,
@HiveField(11) List<InheritedPermissions> inheritedPermissions)?
v3,
TResult? Function(@HiveField(0) @JsonKey(name: "user_id") int id,
@@ -766,7 +765,7 @@ class _$UserModelV2 extends UserModelV2 {
@HiveField(7) bool isActive,
@HiveField(8) bool isSuperuser,
@HiveField(9) List<int> groups,
@HiveField(10) List<UserPermissions> userPermissions,
@HiveField(10) List<String> userPermissions,
@HiveField(11) List<InheritedPermissions> inheritedPermissions)?
v3,
TResult Function(@HiveField(0) @JsonKey(name: "user_id") int id,

View File

@@ -154,10 +154,10 @@ class PaperlessDocumentsApiImpl implements PaperlessDocumentsApi {
@override
Future<int> findNextAsn() async {
final DocumentFilter asnQueryFilter = DocumentFilter(
const DocumentFilter asnQueryFilter = DocumentFilter(
sortField: SortField.archiveSerialNumber,
sortOrder: SortOrder.descending,
asnQuery: const IdQueryParameter.anyAssigned(),
asnQuery: IdQueryParameter.anyAssigned(),
page: 1,
pageSize: 1,
);

View File

@@ -2,7 +2,6 @@ import 'dart:developer';
import 'package:dio/dio.dart';
import 'package:paperless_api/paperless_api.dart';
import 'package:paperless_api/src/request_utils.dart';
class PaperlessTasksApiImpl implements PaperlessTasksApi {
final Dio _client;