KUnifiedPush

webpush-notify.cpp
1/*
2 SPDX-FileCopyrightText: 2025 Volker Krause <vkrause@kde.org>
3 SPDX-License-Identifier: LGPL-2.0-or-later
4*/
5
6#include "kunifiedpush_version.h"
7
8#include "../notifier/notifier.h"
9
10#include <QCoreApplication>
11#include <QCommandLineOption>
12#include <QCommandLineParser>
13#include <QFile>
14#include <QNetworkAccessManager>
15#include <QNetworkReply>
16#include <QNetworkRequest>
17#include <QStandardPaths>
18
19using namespace Qt::Literals;
20
21int main(int argc, char **argv)
22{
23 QCoreApplication::setApplicationName(u"WebPush Notifier"_s);
27 QCoreApplication app(argc, argv);
28
29 QCommandLineOption endpointOpt(u"endpoint"_s, u"Push endpoint URL"_s, u"url"_s);
30 QCommandLineOption uaPublicKeyOpt(u"user-agent-public-key"_s, u"User agent public key, Base64 URL encoded"_s, u"key"_s);
31 QCommandLineOption authSecrectOpt(u"auth-secret"_s, u"User agent auth secrect, Base64 URL encoded"_s, u"secret"_s);
32 QCommandLineOption vapidPublicKeyOpt(u"vapid-public-key"_s, u"VAPID public key, Base64 URL encoded"_s, u"key"_s);
33 QCommandLineOption vapidPrivateKeyOpt(u"vapid-private-key"_s, u"VAPID private key, Base64 URL encoded"_s, u"key"_s);
34 QCommandLineOption ttlOpt(u"ttl"_s, u"Time-to-live of the push message, in seconds"_s, u"seconds"_s);
35 QCommandLineOption urgencyOpt(u"urgency"_s, u"Urgency of the message [very-low, low, normal, high]"_s, u"urgency"_s);
36
37 QCommandLineParser parser;
38 parser.addOptions({ endpointOpt, uaPublicKeyOpt, authSecrectOpt, vapidPublicKeyOpt, vapidPrivateKeyOpt, ttlOpt, urgencyOpt });
39 parser.addHelpOption();
40 parser.addVersionOption();
41 parser.process(app);
42
47
49 notifier.setEndpoint(QUrl(parser.value(endpointOpt)));
50 notifier.setUserAgentPublicKey(QByteArray::fromBase64(parser.value(uaPublicKeyOpt).toUtf8(), QByteArray::Base64UrlEncoding));
51 notifier.setAuthSecret(QByteArray::fromBase64(parser.value(authSecrectOpt).toUtf8(), QByteArray::Base64UrlEncoding));
52 notifier.setVapidPublicKey(QByteArray::fromBase64(parser.value(vapidPublicKeyOpt).toUtf8(), QByteArray::Base64UrlEncoding));
53 notifier.setVapidPrivateKey(QByteArray::fromBase64(parser.value(vapidPrivateKeyOpt).toUtf8(), QByteArray::Base64UrlEncoding));
54 if (parser.isSet(ttlOpt)) {
55 notifier.setTtl(std::chrono::seconds(std::min(parser.value(ttlOpt).toInt(), 5)));
56 }
57 if (const auto urgency = parser.value(urgencyOpt); !urgency.isEmpty()) {
58 if (urgency == "very-low"_L1) {
59 notifier.setUrgency(KUnifiedPush::Urgency::VeryLow);
60 } else if (urgency == "low"_L1) {
61 notifier.setUrgency(KUnifiedPush::Urgency::Low);
62 } else if (urgency == "high"_L1) {
63 notifier.setUrgency(KUnifiedPush::Urgency::High);
64 }
65 }
66
67 QFile msg;
68 msg.open(stdin, QFile::ReadOnly);
69 notifier.submit(msg.readAll(), &nam);
70 QObject::connect(&notifier, &KUnifiedPush::Notifier::finished, &app, [](QNetworkReply *reply) {
71 // TODO should Notifier parse results?
72 qDebug() << reply->errorString() << reply->readAll();
74 });
75
77}
Push notification submission job.
Definition notifier.h:23
PHONON_EXPORT Notifier * notifier()
QByteArray fromBase64(const QByteArray &base64, Base64Options options)
QCommandLineOption addHelpOption()
bool addOptions(const QList< QCommandLineOption > &options)
QCommandLineOption addVersionOption()
bool isSet(const QCommandLineOption &option) const const
void process(const QCoreApplication &app)
QString value(const QCommandLineOption &option) const const
void setApplicationName(const QString &application)
void setApplicationVersion(const QString &version)
void setOrganizationDomain(const QString &orgDomain)
void setOrganizationName(const QString &orgName)
bool open(FILE *fh, OpenMode mode, FileHandleFlags handleFlags)
QString errorString() const const
QByteArray readAll()
void enableStrictTransportSecurityStore(bool enabled, const QString &storeDir)
void setRedirectPolicy(QNetworkRequest::RedirectPolicy policy)
void setStrictTransportSecurityEnabled(bool enabled)
QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)
QString writableLocation(StandardLocation type)
QString fromLatin1(QByteArrayView str)
bool isEmpty() const const
int toInt(bool *ok, int base) const const
QByteArray toUtf8() const const
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.