@@ -257,41 +257,87 @@ func McAccountHandler(w http.ResponseWriter, r *http.Request) {
257257 }
258258
259259 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+ }
295341 }
296342
297343 UpdateCapes ()
0 commit comments