2121
2222import com .google .gson .Gson ;
2323import com .google .gson .reflect .TypeToken ;
24- import com .sk89q .worldedit .util .net .HttpRequest ;
2524
2625import java .io .IOException ;
2726import java .net .URI ;
2827import java .net .URL ;
28+ import java .net .http .HttpClient ;
29+ import java .net .http .HttpRequest ;
30+ import java .net .http .HttpResponse ;
2931import java .util .Map ;
3032import java .util .concurrent .Callable ;
3133
@@ -49,47 +51,49 @@ private PasteTask(String content, PasteMetadata metadata) {
4951
5052 @ Override
5153 public URL call () throws IOException , InterruptedException {
52- URL initialUrl = HttpRequest .url ("https://paste.enginehub.org/signed_paste" );
53-
54- HttpRequest requestBuilder = HttpRequest .get (initialUrl );
55-
56- requestBuilder .header ("x-paste-meta-from" , "EngineHub" );
57- if (metadata .name != null ) {
58- requestBuilder .header ("x-paste-meta-name" , metadata .name );
59- }
60- if (metadata .author != null ) {
61- requestBuilder .header ("x-paste-meta-author" , metadata .author );
54+ try (HttpClient client = HttpClient .newHttpClient ()) {
55+ HttpRequest .Builder signRequestBuilder = HttpRequest .newBuilder ()
56+ .uri (URI .create ("https://paste.enginehub.org/signed_paste_v2" ))
57+ .header ("x-paste-meta-from" , "EngineHub" );
58+
59+ if (metadata .name != null ) {
60+ signRequestBuilder = signRequestBuilder .header ("x-paste-meta-name" , metadata .name );
61+ }
62+ if (metadata .author != null ) {
63+ signRequestBuilder = signRequestBuilder .header ("x-paste-meta-author" , metadata .author );
64+ }
65+ if (metadata .extension != null ) {
66+ signRequestBuilder = signRequestBuilder .header ("x-paste-meta-extension" , metadata .extension );
67+ }
68+
69+ SignedPasteResponse response = GSON .fromJson (
70+ client .send (signRequestBuilder .build (), HttpResponse .BodyHandlers .ofString ()).body (),
71+ TypeToken .get (SignedPasteResponse .class ).getType ()
72+ );
73+
74+ HttpRequest .Builder uploadRequestBuilder = HttpRequest .newBuilder ()
75+ .uri (URI .create (response .uploadUrl ))
76+ .method ("PUT" , HttpRequest .BodyPublishers .ofString (content ));
77+
78+ for (Map .Entry <String , String > entry : response .headers .entrySet ()) {
79+ uploadRequestBuilder = uploadRequestBuilder .header (entry .getKey (), entry .getValue ());
80+ }
81+
82+ // If this succeeds, it will not return any data aside from a 204 status.
83+ HttpResponse <String > uploadResponse = client .send (uploadRequestBuilder .build (), HttpResponse .BodyHandlers .ofString ());
84+
85+ if (uploadResponse .statusCode () != 200 && uploadResponse .statusCode () != 204 ) {
86+ throw new IOException ("Failed to upload paste: " + uploadResponse .statusCode ());
87+ }
88+
89+ return URI .create (response .viewUrl ).toURL ();
6290 }
63- if (metadata .extension != null ) {
64- requestBuilder .header ("x-paste-meta-extension" , metadata .extension );
65- }
66-
67- SignedPasteResponse response = GSON .fromJson (requestBuilder
68- .execute ()
69- .expectResponseCode (200 )
70- .returnContent ()
71- .asString ("UTF-8" ), TypeToken .get (SignedPasteResponse .class ).getType ());
72-
73- HttpRequest .Form form = HttpRequest .Form .create ();
74- for (Map .Entry <String , String > entry : response .uploadFields .entrySet ()) {
75- form .add (entry .getKey (), entry .getValue ());
76- }
77- form .add ("file" , content );
78-
79- URL url = HttpRequest .url (response .uploadUrl );
80- // If this succeeds, it will not return any data aside from a 204 status.
81- HttpRequest .post (url )
82- .bodyMultipartForm (form )
83- .execute ()
84- .expectResponseCode (200 , 204 );
85-
86- return URI .create (response .viewUrl ).toURL ();
8791 }
8892 }
8993
9094 private static final class SignedPasteResponse {
9195 String viewUrl ;
9296 String uploadUrl ;
93- Map <String , String > uploadFields ;
97+ Map <String , String > headers ;
9498 }
9599}
0 commit comments