diff --git a/assets/release_notes.md b/assets/release_notes.md index 421f14bb..2e6b291a 100644 --- a/assets/release_notes.md +++ b/assets/release_notes.md @@ -2,7 +2,7 @@ --- - Fixes URL for reporting issues on GitHub - +- Fix for uploading files against server with self-signed certificates ### 0.20.1 - October 2025 --- diff --git a/lib/api.dart b/lib/api.dart index 7ea44aca..a2a48f9d 100644 --- a/lib/api.dart +++ b/lib/api.dart @@ -4,6 +4,7 @@ import "dart:io"; import "package:flutter/foundation.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:one_context/one_context.dart"; @@ -983,12 +984,23 @@ class InvenTreeAPI { String method = "POST", Map? fields, }) async { - var _url = makeApiUrl(url); + bool strictHttps = await InvenTreeSettingsManager().getBool( + INV_STRICT_HTTPS, + false, + ); - var request = http.MultipartRequest(method, Uri.parse(_url)); + // Create an IOClient wrapper for sending the MultipartRequest + final ioClient = IOClient(createClient(url, strictHttps: strictHttps)); - request.headers.addAll(defaultHeaders()); + final uri = Uri.parse(makeApiUrl(url)); + final request = http.MultipartRequest(method, uri); + // Default headers + defaultHeaders().forEach((key, value) { + request.headers[key] = value; + }); + + // Optional fields if (fields != null) { fields.forEach((String key, dynamic value) { if (value == null) { @@ -999,20 +1011,24 @@ class InvenTreeAPI { }); } + // Add file to upload var _file = await http.MultipartFile.fromPath(name, f.path); - request.files.add(_file); + // Construct a response object to return APIResponse response = APIResponse(url: url, method: method); String jsondata = ""; try { - var httpResponse = await request.send().timeout(Duration(seconds: 120)); + var streamedResponse = await ioClient + .send(request) + .timeout(Duration(seconds: 120)); + final httpResponse = await http.Response.fromStream(streamedResponse); response.statusCode = httpResponse.statusCode; - jsondata = await httpResponse.stream.bytesToString(); + jsondata = httpResponse.body; response.data = json.decode(jsondata);