Skip to content

Commit d7396d4

Browse files
committed
Modify /api/account/mcAccount to accept mcauth codes
1 parent d74efb2 commit d7396d4

File tree

1 file changed

+81
-35
lines changed

1 file changed

+81
-35
lines changed

pkg/web/api/account.go

Lines changed: 81 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)