KUnifiedPush

notifier.cpp
1/*
2 SPDX-FileCopyrightText: 2025 Volker Krause <vkrause@kde.org>
3 SPDX-License-Identifier: LGPL-2.0-or-later
4*/
5
6#include "notifier.h"
7
8#include "contentencryptor_p.h"
9#include "vapid_p.h"
10
11#include <QNetworkAccessManager>
12#include <QNetworkReply>
13#include <QNetworkRequest>
14
15using namespace KUnifiedPush;
16
17Notifier::Notifier(QObject *parent)
18 : QObject(parent)
19{
20}
21
22Notifier::~Notifier() = default;
23
25{
26 assert(nam);
27
28 QNetworkRequest req(m_endpoint);
29 req.setRawHeader("TTL", QByteArray::number(m_ttl.count()));
30 if (m_urgency != DefaultUrgency) {
31 req.setRawHeader("Urgency", urgencyValue(m_urgency));
32 }
33
34 QByteArray content;
35 if (!m_userAgentPublicKey.isEmpty() && !m_authSecret.isEmpty()) {
36 ContentEncryptor encryptor(m_userAgentPublicKey, m_authSecret);
37 content = encryptor.encrypt(msg);
38 req.setRawHeader("Content-Encoding", "aes128gcm");
39 } else {
40 content = msg;
41 }
42
43 if (!m_vapidPublicKey.isEmpty() && !m_vapidPrivateKey.isEmpty()) {
44 Vapid vapid(m_vapidPublicKey, m_vapidPrivateKey);
45 vapid.setContact(m_contact);
46 req.setRawHeader("Authorization", vapid.authorization(m_endpoint));
47 }
48
49 // prevent ntfy from turning encrypted content into attachments
50 // (attachments aren't enabled by default in ntfy)
51 req.setRawHeader("x-unifiedpush", "1");
52
53#if 0
54 for (const auto &hdr : req.rawHeaderList()) {
55 qDebug() << hdr << req.rawHeader(hdr);
56 }
57#endif
58
59 auto reply = nam->post(req, content);
60 reply->setParent(this);
61 connect(reply, &QNetworkReply::finished, this, [this, reply]() {
62 reply->deleteLater();
63 Q_EMIT finished(reply);
64 });
65}
66
67#include "moc_notifier.cpp"
void submit(const QByteArray &msg, QNetworkAccessManager *nam)
Submit push message with content msg.
Definition notifier.cpp:24
Client-side integration with UnifiedPush.
Definition connector.h:14
QByteArray number(double n, char format, int precision)
QNetworkReply * post(const QNetworkRequest &request, QHttpMultiPart *multiPart)
QByteArray rawHeader(const QByteArray &headerName) const const
QList< QByteArray > rawHeaderList() const const
void setRawHeader(const QByteArray &headerName, const QByteArray &headerValue)
Q_EMITQ_EMIT
QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)
void setParent(QObject *parent)
This file is part of the KDE documentation.
Documentation copyright © 1996-2025 The KDE developers.
Generated on Fri Apr 25 2025 12:05:39 by doxygen 1.13.2 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.