mirror of
https://github.com/chenx-dust/EZ4Connect.git
synced 2026-09-20 10:23:33 +08:00
112 lines
3.5 KiB
C++
112 lines
3.5 KiB
C++
#include "coreoutputparser.h"
|
||
|
||
CoreOutputEvent CoreOutputParser::parse(const QString &output)
|
||
{
|
||
if (output.contains("SUDO_ASK_PASS"))
|
||
{
|
||
return CoreOutputEvent::AskSudoPassword;
|
||
}
|
||
if (output.contains("Graph check code saved to "))
|
||
{
|
||
return CoreOutputEvent::GraphCaptcha;
|
||
}
|
||
if (output.contains("Please enter the SMS verification code: "))
|
||
{
|
||
return CoreOutputEvent::SmsCodeWithSkipOption;
|
||
}
|
||
if (output.contains("Please enter your SMS code:"))
|
||
{
|
||
return CoreOutputEvent::SmsCode;
|
||
}
|
||
if (output.contains("Please enter your TOTP code:"))
|
||
{
|
||
return CoreOutputEvent::TotpCode;
|
||
}
|
||
if (output.contains("Please enter rand code:"))
|
||
{
|
||
return CoreOutputEvent::RandCode;
|
||
}
|
||
// aTrust RADIUS Access-Challenge:核心在密码认证后输出此提示并等待用户输入短信验证码。
|
||
if (output.contains("Please enter the RADIUS token:"))
|
||
{
|
||
return CoreOutputEvent::RadiusCodeWithSkipOption;
|
||
}
|
||
if (output.contains("Please enter the callback url:"))
|
||
{
|
||
return CoreOutputEvent::SsoCallback;
|
||
}
|
||
if (output.contains("VPN client started"))
|
||
{
|
||
return CoreOutputEvent::ClientStarted;
|
||
}
|
||
if (output.contains("graph check code still required after second login attempt") ||
|
||
output.contains("The characters are incorrect or has expired!"))
|
||
{
|
||
return CoreOutputEvent::CaptchaFailed;
|
||
}
|
||
if (output.contains("Access is denied."))
|
||
{
|
||
return CoreOutputEvent::AccessDenied;
|
||
}
|
||
if (output.contains("listen failed"))
|
||
{
|
||
return CoreOutputEvent::ListenFailed;
|
||
}
|
||
if (output.contains("Invalid username or password!") || output.contains("ticket is empty"))
|
||
{
|
||
return CoreOutputEvent::InvalidCredentials;
|
||
}
|
||
if (output.contains("You are trying brute-force login on this IP address."))
|
||
{
|
||
return CoreOutputEvent::BruteForceBlocked;
|
||
}
|
||
if (output.contains("Login failed") || output.contains("too many login failures"))
|
||
{
|
||
return CoreOutputEvent::LoginFailed;
|
||
}
|
||
if (output.contains("unexpected newline"))
|
||
{
|
||
return CoreOutputEvent::InteractiveError;
|
||
}
|
||
if (output.contains("auth type/login domain combination not found"))
|
||
{
|
||
return CoreOutputEvent::AuthNotAvailable;
|
||
}
|
||
if (output.contains("invalid SID") || output.contains("l3-tunnel tunnel auth failed:"))
|
||
{
|
||
return CoreOutputEvent::AuthExpired;
|
||
}
|
||
if (output.contains("client setup error"))
|
||
{
|
||
return CoreOutputEvent::ClientFailed;
|
||
}
|
||
if (output.contains("panic"))
|
||
{
|
||
return CoreOutputEvent::CorePanic;
|
||
}
|
||
return CoreOutputEvent::None;
|
||
}
|
||
|
||
QString CoreOutputParser::graphCaptchaFile(const QString &output)
|
||
{
|
||
const QString prefix = "Graph check code saved to ";
|
||
const qsizetype markerIndex = output.indexOf(prefix);
|
||
if (markerIndex < 0)
|
||
{
|
||
return {};
|
||
}
|
||
|
||
return output.mid(markerIndex + prefix.size()).trimmed();
|
||
}
|
||
|
||
bool CoreOutputParser::hasInteractivePrompt(const QByteArray &output)
|
||
{
|
||
return output.contains("SUDO_ASK_PASS")
|
||
|| output.contains("Please enter the SMS verification code: ")
|
||
|| output.contains("Please enter your SMS code:")
|
||
|| output.contains("Please enter your TOTP code:")
|
||
|| output.contains("Please enter rand code:")
|
||
|| output.contains("Please enter the RADIUS token:")
|
||
|| output.contains("Please enter the callback url:");
|
||
}
|