@@ -257,41 +257,87 @@ func McAccountHandler(w http.ResponseWriter, r *http.Request) {
257
257
}
258
258
259
259
if r .Method == "POST" {
260
- // Get Minecraft username
261
- username := r .URL .Query ().Get ("username" )
262
- if username == "" {
263
- core .JsonError (w , "Invalid username 1." )
264
- return
265
- }
266
-
267
- // Get uuid
268
- req , _ := http .NewRequest ("GET" , "https://api.mojang.com/users/profiles/minecraft/" + username , bytes .NewReader ([]byte {}))
269
- req .Header .Set ("User-Agent" , "Meteor Server" )
270
-
271
- client := http.Client {}
272
- res , err := client .Do (req )
273
- if err != nil {
274
- core .JsonError (w , "Invalid username 2." )
275
- return
276
- }
277
-
278
- body , _ := ioutil .ReadAll (res .Body )
279
- var user mcUser
280
- _ = json .Unmarshal (body , & user )
281
-
282
- _ = res .Body .Close ()
283
-
284
- id , err := uuid .Parse (user .Id )
285
- if err != nil {
286
- core .JsonError (w , "Invalid username 3. " + err .Error ())
287
- return
288
- }
289
-
290
- // Add Minecraft account
291
- err = account .AddMcAccount (id )
292
- if err != nil {
293
- core .JsonError (w , err .Error ())
294
- return
260
+ code := r .URL .Query ().Get ("code" )
261
+
262
+ if code != "" {
263
+ res , err := http .Get ("mcauth:8080/retrieve/" + code )
264
+ if err != nil {
265
+ core .JsonError (w , "Failed to retrieve code's UUID" )
266
+ return
267
+ }
268
+
269
+ //goland:noinspection GoUnhandledErrorResult
270
+ defer res .Body .Close ()
271
+
272
+ if res .StatusCode != http .StatusOK {
273
+ var data struct { Error string }
274
+
275
+ err := json .NewDecoder (res .Body ).Decode (& data )
276
+ if err != nil {
277
+ core .JsonError (w , "Failed to parse code's UUID Error" )
278
+ return
279
+ }
280
+
281
+ core .JsonError (w , data .Error )
282
+ return
283
+ }
284
+
285
+ var data struct { Uuid string }
286
+
287
+ err = json .NewDecoder (res .Body ).Decode (& data )
288
+ if err != nil {
289
+ core .JsonError (w , "Failed to parse code's UUID" )
290
+ return
291
+ }
292
+
293
+ id , err := uuid .Parse (data .Uuid )
294
+ if err != nil {
295
+ core .JsonError (w , "Invalid UUID" )
296
+ return
297
+ }
298
+
299
+ err = account .AddMcAccount (id )
300
+ if err != nil {
301
+ core .JsonError (w , err .Error ())
302
+ return
303
+ }
304
+ } else {
305
+ // Get Minecraft username
306
+ username := r .URL .Query ().Get ("username" )
307
+ if username == "" {
308
+ core .JsonError (w , "Invalid username 1." )
309
+ return
310
+ }
311
+
312
+ // Get uuid
313
+ req , _ := http .NewRequest ("GET" , "https://api.mojang.com/users/profiles/minecraft/" + username , bytes .NewReader ([]byte {}))
314
+ req .Header .Set ("User-Agent" , "Meteor Server" )
315
+
316
+ client := http.Client {}
317
+ res , err := client .Do (req )
318
+ if err != nil {
319
+ core .JsonError (w , "Invalid username 2." )
320
+ return
321
+ }
322
+
323
+ body , _ := ioutil .ReadAll (res .Body )
324
+ var user mcUser
325
+ _ = json .Unmarshal (body , & user )
326
+
327
+ _ = res .Body .Close ()
328
+
329
+ id , err := uuid .Parse (user .Id )
330
+ if err != nil {
331
+ core .JsonError (w , "Invalid username 3. " + err .Error ())
332
+ return
333
+ }
334
+
335
+ // Add Minecraft account
336
+ err = account .AddMcAccount (id )
337
+ if err != nil {
338
+ core .JsonError (w , err .Error ())
339
+ return
340
+ }
295
341
}
296
342
297
343
UpdateCapes ()
0 commit comments