Implement token-based login method and update localization for token prompts

This commit is contained in:
RaffaelW 2026-01-28 23:15:20 +01:00
parent 8f18e328e0
commit 2aa745cf69
3 changed files with 188 additions and 69 deletions

View file

@ -2,32 +2,31 @@ import "dart:async";
import "dart:convert";
import "dart:io";
import "package:cached_network_image/cached_network_image.dart";
import "package:flutter/foundation.dart";
import "package:flutter/material.dart";
import "package:flutter_cache_manager/flutter_cache_manager.dart";
import "package:flutter_tabler_icons/flutter_tabler_icons.dart";
import "package:http/http.dart" as http;
import "package:http/io_client.dart";
import "package:intl/intl.dart";
import "package:inventree/main.dart";
import "package:inventree/widget/progress.dart";
import "package:one_context/one_context.dart";
import "package:open_filex/open_filex.dart";
import "package:cached_network_image/cached_network_image.dart";
import "package:flutter/material.dart";
import "package:flutter_tabler_icons/flutter_tabler_icons.dart";
import "package:flutter_cache_manager/flutter_cache_manager.dart";
import "package:path_provider/path_provider.dart";
import "package:inventree/api_form.dart";
import "package:inventree/app_colors.dart";
import "package:inventree/preferences.dart";
import "package:inventree/l10.dart";
import "package:inventree/helpers.dart";
import "package:inventree/inventree/model.dart";
import "package:inventree/inventree/notification.dart";
import "package:inventree/inventree/status_codes.dart";
import "package:inventree/inventree/sentry.dart";
import "package:inventree/inventree/status_codes.dart";
import "package:inventree/l10.dart";
import "package:inventree/main.dart";
import "package:inventree/preferences.dart";
import "package:inventree/user_profile.dart";
import "package:inventree/widget/dialogs.dart";
import "package:inventree/widget/progress.dart";
import "package:inventree/widget/snacks.dart";
import "package:one_context/one_context.dart";
import "package:open_filex/open_filex.dart";
import "package:path_provider/path_provider.dart";
/*
* Class representing an API response from the server
@ -163,6 +162,7 @@ class InvenTreeFileService extends FileService {
*
* InvenTree implements token-based authentication, which is
* initialised using a username:password combination.
* Alternatively, an existing token provided by the user can be used for authentication.
*/
/*
@ -540,6 +540,35 @@ class InvenTreeAPI {
}
}
Future<APIResponse> checkToken(UserProfile userProfile, String token) async {
debug("Checking token @ ${_URL_ME}");
userProfile.token = token;
profile = userProfile;
await UserProfileDBManager().updateProfile(userProfile);
final response = await get(_URL_ME);
if (!response.successful()) {
switch (response.statusCode) {
case 401:
case 403:
showServerError(
apiUrl,
L10().serverAuthenticationError,
L10().invalidToken,
);
default:
showStatusCodeError(apiUrl, response.statusCode);
}
debug("Request failed: STATUS ${response.statusCode}");
}
return response;
}
/*
* Fetch a token from the server,
* with a temporary authentication header