mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-01-16 23:12:05 -08:00
* merge clangify and cmakify into format.sh update desktop lint workflow to 22.04 print cmake-format version as well um, rename things? add extra examples to format.sh --help add option to not run clang-format fix version display in .ci/lint_cpp.sh fix relative paths in format.sh fix formatting dirs * run ./format.sh --cmake --branch "" * revert formatting of cmake comments
215 lines
6.8 KiB
C++
215 lines
6.8 KiB
C++
#include "smtpclient.h"
|
|
|
|
#include "settingscache.h"
|
|
#include "smtp/qxtsmtp.h"
|
|
|
|
#include <QSslSocket>
|
|
#include <QTcpSocket>
|
|
|
|
SmtpClient::SmtpClient(QObject *parent) : QObject(parent)
|
|
{
|
|
smtp = new QxtSmtp(this);
|
|
|
|
connect(smtp, SIGNAL(authenticated()), this, SLOT(authenticated()));
|
|
connect(smtp, SIGNAL(authenticationFailed(const QByteArray &)), this,
|
|
SLOT(authenticationFailed(const QByteArray &)));
|
|
connect(smtp, SIGNAL(connected()), this, SLOT(connected()));
|
|
connect(smtp, SIGNAL(connectionFailed(const QByteArray &)), this, SLOT(connectionFailed(const QByteArray &)));
|
|
connect(smtp, SIGNAL(disconnected()), this, SLOT(disconnected()));
|
|
connect(smtp, SIGNAL(encrypted()), this, SLOT(encrypted()));
|
|
connect(smtp, SIGNAL(encryptionFailed(const QByteArray &)), this, SLOT(encryptionFailed(const QByteArray &)));
|
|
connect(smtp, SIGNAL(finished()), this, SLOT(finished()));
|
|
connect(smtp, SIGNAL(mailFailed(int, int, const QByteArray &)), this,
|
|
SLOT(mailFailed(int, int, const QByteArray &)));
|
|
connect(smtp, SIGNAL(mailSent(int)), this, SLOT(mailSent(int)));
|
|
connect(smtp, SIGNAL(recipientRejected(int, const QString &, const QByteArray &)), this,
|
|
SLOT(recipientRejected(int, const QString &, const QByteArray &)));
|
|
connect(smtp, SIGNAL(senderRejected(int, const QString &, const QByteArray &)), this,
|
|
SLOT(senderRejected(int, const QString &, const QByteArray &)));
|
|
}
|
|
|
|
SmtpClient::~SmtpClient()
|
|
{
|
|
if (smtp) {
|
|
delete smtp;
|
|
smtp = 0;
|
|
}
|
|
}
|
|
|
|
bool SmtpClient::enqueueActivationTokenMail(const QString &nickname, const QString &recipient, const QString &token)
|
|
{
|
|
QString email = settingsCache->value("smtp/email", "").toString();
|
|
QString name = settingsCache->value("smtp/name", "").toString();
|
|
QString subject = settingsCache->value("smtp/subject", "").toString();
|
|
QString body = settingsCache->value("smtp/body", "").toString();
|
|
|
|
if (email.isEmpty()) {
|
|
qDebug() << "[MAIL] Missing sender email in configuration";
|
|
return false;
|
|
}
|
|
|
|
if (subject.isEmpty()) {
|
|
qDebug() << "[MAIL] Missing subject field in configuration";
|
|
return false;
|
|
}
|
|
|
|
if (body.isEmpty()) {
|
|
qDebug() << "[MAIL] Missing body field in configuration";
|
|
return false;
|
|
}
|
|
|
|
if (recipient.isEmpty()) {
|
|
qDebug() << "[MAIL] Missing recipient field for user " << nickname;
|
|
return false;
|
|
}
|
|
|
|
if (token.isEmpty()) {
|
|
qDebug() << "[MAIL] Missing token field for user " << nickname;
|
|
return false;
|
|
}
|
|
|
|
QxtMailMessage message;
|
|
message.setSender(name + " <" + email + ">");
|
|
message.addRecipient(recipient);
|
|
message.setSubject(subject);
|
|
message.setBody(body.replace("%username", nickname).replace("%token", token));
|
|
|
|
int id = smtp->send(message);
|
|
qDebug() << "[MAIL] Enqueued mail to" << recipient << "as" << id;
|
|
return true;
|
|
}
|
|
|
|
bool SmtpClient::enqueueForgotPasswordTokenMail(const QString &nickname, const QString &recipient, const QString &token)
|
|
{
|
|
QString email = settingsCache->value("smtp/email", "").toString();
|
|
QString name = settingsCache->value("smtp/name", "").toString();
|
|
QString subject = settingsCache->value("forgotpassword/subject", "").toString();
|
|
QString body = settingsCache->value("forgotpassword/body", "").toString();
|
|
|
|
if (email.isEmpty()) {
|
|
qDebug() << "[MAIL] Missing sender email in configuration";
|
|
return false;
|
|
}
|
|
|
|
if (subject.isEmpty()) {
|
|
qDebug() << "[MAIL] Missing subject field in configuration";
|
|
return false;
|
|
}
|
|
|
|
if (body.isEmpty()) {
|
|
qDebug() << "[MAIL] Missing body field in configuration";
|
|
return false;
|
|
}
|
|
|
|
if (recipient.isEmpty()) {
|
|
qDebug() << "[MAIL] Missing recipient field for user " << nickname;
|
|
return false;
|
|
}
|
|
|
|
if (token.isEmpty()) {
|
|
qDebug() << "[MAIL] Missing token field for user " << nickname;
|
|
return false;
|
|
}
|
|
|
|
QxtMailMessage message;
|
|
message.setSender(name + " <" + email + ">");
|
|
message.addRecipient(recipient);
|
|
message.setSubject(subject);
|
|
message.setBody(body.replace("%username", nickname).replace("%token", token));
|
|
|
|
int id = smtp->send(message);
|
|
qDebug() << "[MAIL] Enqueued mail to" << recipient << "as" << id;
|
|
return true;
|
|
}
|
|
|
|
void SmtpClient::sendAllEmails()
|
|
{
|
|
// still connected from the previous round
|
|
if (smtp->socket()->state() == QAbstractSocket::ConnectedState)
|
|
return;
|
|
|
|
if (smtp->pendingMessages() == 0)
|
|
return;
|
|
|
|
QString connectionType = settingsCache->value("smtp/connection", "tcp").toString();
|
|
QString host = settingsCache->value("smtp/host", "localhost").toString();
|
|
int port = settingsCache->value("smtp/port", 25).toInt();
|
|
QByteArray username = settingsCache->value("smtp/username", "").toByteArray();
|
|
QByteArray password = settingsCache->value("smtp/password", "").toByteArray();
|
|
bool acceptAllCerts = settingsCache->value("smtp/acceptallcerts", false).toBool();
|
|
|
|
smtp->setUsername(username);
|
|
smtp->setPassword(password);
|
|
|
|
// Connect
|
|
if (connectionType == "ssl") {
|
|
if (acceptAllCerts)
|
|
smtp->sslSocket()->setPeerVerifyMode(QSslSocket::QueryPeer);
|
|
smtp->connectToSecureHost(host, port);
|
|
} else {
|
|
smtp->connectToHost(host, port);
|
|
}
|
|
}
|
|
|
|
void SmtpClient::authenticated()
|
|
{
|
|
qDebug() << "[MAIL] authenticated";
|
|
}
|
|
|
|
void SmtpClient::authenticationFailed(const QByteArray &msg)
|
|
{
|
|
qDebug() << "[MAIL] authenticationFailed" << QString(msg);
|
|
}
|
|
|
|
void SmtpClient::connected()
|
|
{
|
|
qDebug() << "[MAIL] connected";
|
|
}
|
|
|
|
void SmtpClient::connectionFailed(const QByteArray &msg)
|
|
{
|
|
qDebug() << "[MAIL] connectionFailed" << QString(msg);
|
|
}
|
|
|
|
void SmtpClient::disconnected()
|
|
{
|
|
qDebug() << "[MAIL] disconnected";
|
|
}
|
|
|
|
void SmtpClient::encrypted()
|
|
{
|
|
qDebug() << "[MAIL] encrypted";
|
|
}
|
|
|
|
void SmtpClient::encryptionFailed(const QByteArray &msg)
|
|
{
|
|
qDebug() << "[MAIL] encryptionFailed" << QString(msg);
|
|
qDebug() << "[MAIL] Try enabling the \"acceptallcerts\" option in servatrice.ini";
|
|
}
|
|
|
|
void SmtpClient::finished()
|
|
{
|
|
qDebug() << "[MAIL] finished";
|
|
smtp->disconnectFromHost();
|
|
}
|
|
|
|
void SmtpClient::mailFailed(int mailID, int errorCode, const QByteArray &msg)
|
|
{
|
|
qDebug() << "[MAIL] mailFailed id=" << mailID << " errorCode=" << errorCode << "msg=" << QString(msg);
|
|
}
|
|
|
|
void SmtpClient::mailSent(int mailID)
|
|
{
|
|
qDebug() << "[MAIL] mailSent" << mailID;
|
|
}
|
|
|
|
void SmtpClient::recipientRejected(int mailID, const QString &address, const QByteArray &msg)
|
|
{
|
|
qDebug() << "[MAIL] recipientRejected id=" << mailID << " address=" << address << "msg=" << QString(msg);
|
|
}
|
|
|
|
void SmtpClient::senderRejected(int mailID, const QString &address, const QByteArray &msg)
|
|
{
|
|
qDebug() << "[MAIL] senderRejected id=" << mailID << " address=" << address << "msg=" << QString(msg);
|
|
}
|