This commit is contained in:
2023-08-30 14:44:58 +08:00
parent 8c655b0fd5
commit 6884beaf3d
14 changed files with 327 additions and 33 deletions

View File

@@ -19,4 +19,18 @@ class ApiResult<T> {
final String? error;
Map<String, dynamic> toJson(Object? Function(T) toJsonT) =>
_$ApiResultToJson(this, toJsonT);
T unwrap() {
if (ok) {
return data!;
} else {
return throw error!;
}
}
(int, String) unwrapErr() {
if (ok) {
return throw 'unwrap_err called on ok ApiResult';
} else {
return (status, error!);
}
}
}

View File

@@ -30,10 +30,11 @@ abstract class _EHApi {
factory _EHApi(Dio dio, {required String baseUrl}) = __EHApi;
@PUT('/user')
@MultiPart()
Future<ApiResult<int>> createUser(
@Query("name") String name, @Query("password") String password,
{@Query("is_admin") bool? isAdmin,
@Query("permissions") int? permissions});
@Part(name: "name") String name, @Part(name: "password") String password,
{@Part(name: "is_admin") bool? isAdmin,
@Part(name: "permissions") int? permissions});
@GET('/user')
Future<ApiResult<BUser>> getUser(
{@Query("id") int? id, @Query("username") String? username});
@@ -42,19 +43,21 @@ abstract class _EHApi {
Future<ApiResult<ServerStatus>> getStatus();
@PUT('/token')
@MultiPart()
// ignore: unused_element
Future<ApiResult<Token>> _createToken(
{@Query("username") required String username,
@Query("password") required String password,
@Query("t") required int t,
{@Part(name: "username") required String username,
@Part(name: "password") required String password,
@Part(name: "t") required int t,
// ignore: unused_element
@Query("set_cookie") bool? setCookie,
@Part(name: "set_cookie") bool? setCookie,
// ignore: unused_element
@Query("http_only") bool? httpOnly,
@Part(name: "http_only") bool? httpOnly,
// ignore: unused_element
@Query("secure") bool? secure});
@Part(name: "secure") bool? secure});
@DELETE('/token')
Future<ApiResult<bool>> deleteToken({@Query("token") String? token});
@MultiPart()
Future<ApiResult<bool>> deleteToken({@Part(name: "token") String? token});
@GET('/token')
Future<ApiResult<TokenWithUserInfo>> getToken(
{@Query("token") String? token});

View File

@@ -26,20 +26,36 @@ class __EHApi implements _EHApi {
int? permissions,
}) async {
const _extra = <String, dynamic>{};
final queryParameters = <String, dynamic>{
r'name': name,
r'password': password,
r'is_admin': isAdmin,
r'permissions': permissions,
};
final queryParameters = <String, dynamic>{};
queryParameters.removeWhere((k, v) => v == null);
final _headers = <String, dynamic>{};
final Map<String, dynamic>? _data = null;
final _data = FormData();
_data.fields.add(MapEntry(
'name',
name,
));
_data.fields.add(MapEntry(
'password',
password,
));
if (isAdmin != null) {
_data.fields.add(MapEntry(
'is_admin',
isAdmin.toString(),
));
}
if (permissions != null) {
_data.fields.add(MapEntry(
'permissions',
permissions.toString(),
));
}
final _result = await _dio
.fetch<Map<String, dynamic>>(_setStreamType<ApiResult<int>>(Options(
method: 'PUT',
headers: _headers,
extra: _extra,
contentType: 'multipart/form-data',
)
.compose(
_dio.options,
@@ -136,22 +152,46 @@ class __EHApi implements _EHApi {
bool? secure,
}) async {
const _extra = <String, dynamic>{};
final queryParameters = <String, dynamic>{
r'username': username,
r'password': password,
r't': t,
r'set_cookie': setCookie,
r'http_only': httpOnly,
r'secure': secure,
};
final queryParameters = <String, dynamic>{};
queryParameters.removeWhere((k, v) => v == null);
final _headers = <String, dynamic>{};
final Map<String, dynamic>? _data = null;
final _data = FormData();
_data.fields.add(MapEntry(
'username',
username,
));
_data.fields.add(MapEntry(
'password',
password,
));
_data.fields.add(MapEntry(
't',
t.toString(),
));
if (setCookie != null) {
_data.fields.add(MapEntry(
'set_cookie',
setCookie.toString(),
));
}
if (httpOnly != null) {
_data.fields.add(MapEntry(
'http_only',
httpOnly.toString(),
));
}
if (secure != null) {
_data.fields.add(MapEntry(
'secure',
secure.toString(),
));
}
final _result = await _dio
.fetch<Map<String, dynamic>>(_setStreamType<ApiResult<Token>>(Options(
method: 'PUT',
headers: _headers,
extra: _extra,
contentType: 'multipart/form-data',
)
.compose(
_dio.options,
@@ -174,15 +214,22 @@ class __EHApi implements _EHApi {
@override
Future<ApiResult<bool>> deleteToken({String? token}) async {
const _extra = <String, dynamic>{};
final queryParameters = <String, dynamic>{r'token': token};
final queryParameters = <String, dynamic>{};
queryParameters.removeWhere((k, v) => v == null);
final _headers = <String, dynamic>{};
final Map<String, dynamic>? _data = null;
final _data = FormData();
if (token != null) {
_data.fields.add(MapEntry(
'token',
token,
));
}
final _result = await _dio
.fetch<Map<String, dynamic>>(_setStreamType<ApiResult<bool>>(Options(
method: 'DELETE',
headers: _headers,
extra: _extra,
contentType: 'multipart/form-data',
)
.compose(
_dio.options,