diff --git a/server.py b/server.py index 69731c3..d2057e5 100644 --- a/server.py +++ b/server.py @@ -97,17 +97,26 @@ def gitea_api(method, path, data=None, raw=False): def gitea_upload(url, file_data, filename): """Upload file to Gitea (Composer registry or release asset).""" - headers = {'Authorization': f'token {GITEA_TOKEN}'} - req = urllib.request.Request(url, data=file_data, headers=headers, method='PUT') + boundary = '----FormBoundary' + os.urandom(8).hex() + body = ( + f'--{boundary}\r\n' + f'Content-Disposition: form-data; name="package"; filename="{filename}"\r\n' + f'Content-Type: application/zip\r\n\r\n' + ).encode() + file_data + f'\r\n--{boundary}--\r\n'.encode() + headers = { + 'Authorization': f'token {GITEA_TOKEN}', + 'Content-Type': f'multipart/form-data; boundary={boundary}' + } + req = urllib.request.Request(url, data=body, headers=headers, method='PUT') try: resp = urllib.request.urlopen(req, context=SSL_CTX, timeout=60) return {'status': 'ok', 'code': resp.getcode()} except urllib.error.HTTPError as e: code = e.code - body = e.read().decode()[:200] + msg = e.read().decode()[:200] if code == 409: return {'status': 'exists', 'code': 409, 'message': 'already exists'} - return {'status': 'error', 'code': code, 'message': body} + return {'status': 'error', 'code': code, 'message': msg} # --- Build logic (from Gitea, no local files) ---