MCPcopy Create free account
hub / github.com/PolyMC/PolyMC / parseMojangResponse

Function parseMojangResponse

launcher/minecraft/auth/Parsers.cpp:455–491  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

453}
454
455bool parseMojangResponse(QByteArray & data, Katabasis::Token &output) {
456 QJsonParseError jsonError;
457 qDebug() << "Parsing Mojang response...";
458#ifndef NDEBUG
459 qDebug() << data;
460#endif
461 QJsonDocument doc = QJsonDocument::fromJson(data, &jsonError);
462 if(jsonError.error) {
463 qWarning() << "Failed to parse response from api.minecraftservices.com/launcher/login as JSON: " << jsonError.errorString();
464 return false;
465 }
466
467 auto obj = doc.object();
468 double expires_in = 0;
469 if(!getNumber(obj.value("expires_in"), expires_in)) {
470 qWarning() << "expires_in is not a valid number";
471 return false;
472 }
473 auto currentTime = QDateTime::currentDateTimeUtc();
474 output.issueInstant = currentTime;
475 output.notAfter = currentTime.addSecs(expires_in);
476
477 QString username;
478 if(!getString(obj.value("username"), username)) {
479 qWarning() << "username is not valid";
480 return false;
481 }
482
483 // TODO: it's a JWT... validate it?
484 if(!getString(obj.value("access_token"), output.token)) {
485 qWarning() << "access_token is not valid";
486 return false;
487 }
488 output.validity = Katabasis::Validity::Certain;
489 qDebug() << "Mojang response is valid.";
490 return true;
491}
492
493}

Callers 1

onRequestDoneMethod · 0.85

Calls 4

fromJsonFunction · 0.85
getNumberFunction · 0.85
getStringFunction · 0.85
objectMethod · 0.80

Tested by

no test coverage detected