mirror of
https://github.com/lifegpc/eh_downloader_flutter.git
synced 2026-06-14 09:54:17 +08:00
Add more logging
Use better way to serialize user permissions
This commit is contained in:
@@ -5,7 +5,7 @@ part 'token.g.dart';
|
||||
|
||||
@JsonSerializable()
|
||||
class Token {
|
||||
const Token ({
|
||||
const Token({
|
||||
required this.id,
|
||||
required this.uid,
|
||||
required this.token,
|
||||
@@ -39,7 +39,9 @@ class TokenWithUserInfo {
|
||||
final String name;
|
||||
@JsonKey(name: 'is_admin')
|
||||
final bool isAdmin;
|
||||
final UserPermission permissions;
|
||||
factory TokenWithUserInfo.fromJson(Map<String, dynamic> json) => _$TokenWithUserInfoFromJson(json);
|
||||
@JsonKey(fromJson: UserPermissions.fromJson, toJson: UserPermissions.toJson2)
|
||||
final UserPermissions permissions;
|
||||
factory TokenWithUserInfo.fromJson(Map<String, dynamic> json) =>
|
||||
_$TokenWithUserInfoFromJson(json);
|
||||
Map<String, dynamic> toJson() => _$TokenWithUserInfoToJson(this);
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@ TokenWithUserInfo _$TokenWithUserInfoFromJson(Map<String, dynamic> json) =>
|
||||
token: Token.fromJson(json['token'] as Map<String, dynamic>),
|
||||
name: json['name'] as String,
|
||||
isAdmin: json['is_admin'] as bool,
|
||||
permissions: $enumDecode(_$UserPermissionEnumMap, json['permissions']),
|
||||
permissions: UserPermissions.fromJson(json['permissions'] as int),
|
||||
);
|
||||
|
||||
Map<String, dynamic> _$TokenWithUserInfoToJson(TokenWithUserInfo instance) =>
|
||||
@@ -37,12 +37,5 @@ Map<String, dynamic> _$TokenWithUserInfoToJson(TokenWithUserInfo instance) =>
|
||||
'token': instance.token,
|
||||
'name': instance.name,
|
||||
'is_admin': instance.isAdmin,
|
||||
'permissions': _$UserPermissionEnumMap[instance.permissions]!,
|
||||
'permissions': UserPermissions.toJson2(instance.permissions),
|
||||
};
|
||||
|
||||
const _$UserPermissionEnumMap = {
|
||||
UserPermission.none: 0,
|
||||
UserPermission.readGallery: 1,
|
||||
UserPermission.editGallery: 2,
|
||||
UserPermission.all: 3,
|
||||
};
|
||||
|
||||
@@ -1,16 +1,35 @@
|
||||
import 'package:enum_flag/enum_flag.dart';
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
part 'user.g.dart';
|
||||
|
||||
@JsonEnum(valueField: 'code')
|
||||
enum UserPermission {
|
||||
none(0),
|
||||
readGallery(1),
|
||||
editGallery(2),
|
||||
all(3);
|
||||
enum UserPermission with EnumFlag {
|
||||
readGallery,
|
||||
editGallery,
|
||||
}
|
||||
|
||||
const UserPermission(this.code);
|
||||
const userPermissionAll = 3;
|
||||
|
||||
class UserPermissions {
|
||||
const UserPermissions(this.code);
|
||||
final int code;
|
||||
bool has(UserPermission permission) => code.hasFlag(permission);
|
||||
int toJson() => code;
|
||||
static int toJson2(UserPermissions code) {
|
||||
return code.code;
|
||||
}
|
||||
|
||||
static fromJson(int code) {
|
||||
return UserPermissions(code);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
if (code & userPermissionAll != 0) return "all";
|
||||
final set = code.getFlags(UserPermission.values).toSet();
|
||||
if (set.isEmpty) return "none";
|
||||
return set.map((e) => e.name).join("|");
|
||||
}
|
||||
}
|
||||
|
||||
@JsonSerializable()
|
||||
@@ -25,7 +44,8 @@ class BUser {
|
||||
final String username;
|
||||
@JsonKey(name: 'is_admin')
|
||||
final bool isAdmin;
|
||||
final UserPermission permissions;
|
||||
@JsonKey(fromJson: UserPermissions.fromJson, toJson: UserPermissions.toJson2)
|
||||
final UserPermissions permissions;
|
||||
factory BUser.fromJson(Map<String, dynamic> json) => _$BUserFromJson(json);
|
||||
Map<String, dynamic> toJson() => _$BUserToJson(this);
|
||||
}
|
||||
|
||||
@@ -10,19 +10,12 @@ BUser _$BUserFromJson(Map<String, dynamic> json) => BUser(
|
||||
id: json['id'] as int,
|
||||
username: json['username'] as String,
|
||||
isAdmin: json['is_admin'] as bool,
|
||||
permissions: $enumDecode(_$UserPermissionEnumMap, json['permissions']),
|
||||
permissions: UserPermissions.fromJson(json['permissions'] as int),
|
||||
);
|
||||
|
||||
Map<String, dynamic> _$BUserToJson(BUser instance) => <String, dynamic>{
|
||||
'id': instance.id,
|
||||
'username': instance.username,
|
||||
'is_admin': instance.isAdmin,
|
||||
'permissions': _$UserPermissionEnumMap[instance.permissions]!,
|
||||
'permissions': UserPermissions.toJson2(instance.permissions),
|
||||
};
|
||||
|
||||
const _$UserPermissionEnumMap = {
|
||||
UserPermission.none: 0,
|
||||
UserPermission.readGallery: 1,
|
||||
UserPermission.editGallery: 2,
|
||||
UserPermission.all: 3,
|
||||
};
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
import 'package:logging/logging.dart';
|
||||
import 'api/status.dart';
|
||||
import 'api/user.dart';
|
||||
import 'globals.dart';
|
||||
|
||||
final _log = Logger("AuthInfo");
|
||||
|
||||
class AuthInfo {
|
||||
AuthInfo();
|
||||
BUser? _user;
|
||||
@@ -20,8 +23,14 @@ class AuthInfo {
|
||||
final re = await api.getUser();
|
||||
if (re.ok) {
|
||||
_user = re.data!;
|
||||
final u = _user!;
|
||||
_log.info(
|
||||
"Logged in as ${u.username} (${u.id}). isAdmin: ${u.isAdmin}. permissions: ${u.permissions}");
|
||||
} else if (re.status == 401) {
|
||||
_user = null;
|
||||
} else {
|
||||
_user = null;
|
||||
throw re.unwrapErr();
|
||||
}
|
||||
_checked = true;
|
||||
await getServerStatus();
|
||||
|
||||
@@ -127,7 +127,8 @@ class _MainApp extends State<MainApp> {
|
||||
}
|
||||
|
||||
void changeThemeMode(ThemeMode mode) {
|
||||
prefs.setInt("themeMode", mode.index);
|
||||
prefs.setInt("themeMode", mode.index).then(
|
||||
(value) => {if (!value) _log.warning("Failed to save themeMode.")});
|
||||
setState(() {
|
||||
_themeMode = mode;
|
||||
});
|
||||
|
||||
@@ -217,6 +217,14 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.1.0+1"
|
||||
enum_flag:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: enum_flag
|
||||
sha256: "1d3e32120855818209c8d17a0b5a0dffd633a6b6f5f6025e8c9a085b40c78c53"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.0.2"
|
||||
fake_async:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
||||
@@ -12,6 +12,7 @@ dependencies:
|
||||
cryptography_flutter: ^2.3.0
|
||||
dio: ^5.3.2
|
||||
dio_cookie_manager: ^3.1.0+1
|
||||
enum_flag: ^1.0.2
|
||||
file: ^6.1.4
|
||||
flutter:
|
||||
sdk: flutter
|
||||
|
||||
Reference in New Issue
Block a user