Skip to content

Commit

Permalink
Second attempt to implement SMS 2FA for #51
Browse files Browse the repository at this point in the history
  • Loading branch information
Dadoum committed May 30, 2024
1 parent 408bdc0 commit 96c27b9
Showing 1 changed file with 31 additions and 13 deletions.
44 changes: 31 additions & 13 deletions source/server/appleaccount.d
Original file line number Diff line number Diff line change
Expand Up @@ -144,20 +144,38 @@ package class AppleAccount {

// submits the given code to Apple servers
AppleSecondaryActionResponse response = AppleSecondaryActionResponse(AppleLoginError(AppleLoginErrorCode.no2FAAttempt, "2FA has not been completed."));
AppleSecondaryActionResponse delegate(string) submitCode = (string code) {
request.headers["security-code"] = code;
auto codeValidationPlist = Plist.fromXml(request.get(urls["validateCode"]).responseBody().data!string()).dict();
log.traceF!"2FA response: %s"(codeValidationPlist.toXml());
auto resultCode = codeValidationPlist["ec"].uinteger().native();

if (resultCode == 0) {
response = AppleSecondaryActionResponse(ReloginNeeded());
} else {
response = AppleSecondaryActionResponse(AppleLoginError(cast(AppleLoginErrorCode) resultCode, codeValidationPlist["em"].str().native()));
}
AppleSecondaryActionResponse delegate(string) submitCode;
if (urlBagKey == "trustedDeviceSecondaryAuth") {
submitCode = (string code) {
request.headers["security-code"] = code;
auto codeValidationPlist = Plist.fromXml(request.get(urls["validateCode"]).responseBody().data!string()).dict();
log.traceF!"2FA response: %s"(codeValidationPlist.toXml());
auto resultCode = codeValidationPlist["ec"].uinteger().native();

if (resultCode == 0) {
response = AppleSecondaryActionResponse(ReloginNeeded());
} else {
response = AppleSecondaryActionResponse(AppleLoginError(cast(AppleLoginErrorCode) resultCode, codeValidationPlist["em"].str().native()));
}

return response;
};
} else if (urlBagKey == "secondaryAuth") {
submitCode = (string code) {
auto codeValidationPlist = Plist.fromXml(request.post(urls["validateCode"], [ "securityCode": code ]).responseBody().data!string()).dict();
log.traceF!"2FA response: %s"(codeValidationPlist.toXml());
auto resultCode = codeValidationPlist["ec"].uinteger().native();

if (resultCode == 0) {
response = AppleSecondaryActionResponse(ReloginNeeded());
} else {
response = AppleSecondaryActionResponse(AppleLoginError(cast(AppleLoginErrorCode) resultCode, codeValidationPlist["em"].str().native()));
}

return response;
};
}

return response;
};

tfaHandler(sendCode, submitCode);
return response;
Expand Down

0 comments on commit 96c27b9

Please sign in to comment.