This commit is contained in:
2026-03-08 22:49:39 +01:00
parent 5d29d6f3b6
commit c752553d2e
14 changed files with 255 additions and 52 deletions

View File

@@ -25,6 +25,7 @@
#define COMMAND_CHOOSE_DIR 19
#define COMMAND_FILE_OPEN 20
#define COMMAND_FILE_SAVE 21
#define COMMAND_SET_OU_TOKEN 22
class Command
{

View File

@@ -202,3 +202,9 @@ rkt_js_result_t *rkt_webview_file_save(rktwebview_t w, const char *title, const
rkt_webview_init();
return handler->rktFileSave(w, title, base_dir, permitted_exts);
}
void rkt_webview_set_ou_token(rktwebview_t wv, const char *token)
{
rkt_webview_init();
handler->rktSetOUToken(wv, token);
}

View File

@@ -57,6 +57,7 @@ RKTWEBVIEW_QT_EXPORT int rkt_webview_create(rktwebview_t parent, event_cb_t js_e
RKTWEBVIEW_QT_EXPORT void rkt_webview_close(rktwebview_t wv);
RKTWEBVIEW_QT_EXPORT bool rkt_webview_valid(rktwebview_t wv);
RKTWEBVIEW_QT_EXPORT result_t rkt_webview_set_title(rktwebview_t wv, const char *title);
RKTWEBVIEW_QT_EXPORT void rkt_webview_set_ou_token(rktwebview_t wv, const char *token);
RKTWEBVIEW_QT_EXPORT result_t rkt_webview_set_url(rktwebview_t wv, const char *url);

View File

@@ -65,6 +65,20 @@ void Rktwebview_qt::processCommand(Command *cmd)
cmd->done = true;
}
break;
case COMMAND_SET_OU_TOKEN: {
doEvents();
int wv = cmd->args[0].toInt();
QString ou_token = cmd->args[1].toString();
if (_views.contains(wv)) {
WebviewWindow *w= _views[wv];
w->setOUToken(ou_token);
cmd->result = true;
} else {
cmd->result = false;
}
cmd->done = true;
}
break;
case COMMAND_SET_URL: {
doEvents();
int wv = cmd->args[0].toInt();
@@ -371,6 +385,18 @@ void Rktwebview_qt::rktWebViewClose(int wv)
while(!c.done) { doEvents(); }
}
void Rktwebview_qt::rktSetOUToken(rktwebview_t wv, const char *ou_token)
{
Command c(COMMAND_SET_OU_TOKEN);
c.args.push_back(wv);
QString ou_tok(ou_token);
c.args.push_back(ou_tok);
postCommand(&c);
while(!c.done) { doEvents(); }
}
result_t Rktwebview_qt::rktSetUrl(rktwebview_t wv, const char *url)
{
Command c(COMMAND_SET_URL);

View File

@@ -66,6 +66,7 @@ public:
public:
int rktWebViewCreate(int parent, event_cb_t js_evt_cb);
void rktWebViewClose(int wv);
void rktSetOUToken(rktwebview_t wv, const char *ou_token);
void rktQuit();
result_t rktOpenDevtools(rktwebview_t wv);
@@ -109,7 +110,8 @@ public:
public:
Rktwebview_qt(Rktwebview_qt **handler);
};
};
#endif // RKTWEBVIEW_QT_H

View File

@@ -37,6 +37,25 @@ WebviewWindow::WebviewWindow(WebviewWindow *parent)
}
void WebviewWindow::handleCertificate(const QWebEngineCertificateError &certificateError)
{
QList<QSslCertificate> chain = certificateError.certificateChain();
int i;
for(i = 0; i < chain.size(); i++) {
const QSslCertificate &cert = chain[i];
if (cert.isSelfSigned()) {
QStringList l = cert.issuerInfo(QSslCertificate::OrganizationalUnitName);
if (!l.empty()) {
QString ou = l[0];
if (ou != "" && ou == _ou_token) {
QWebEngineCertificateError &e = const_cast<QWebEngineCertificateError &>(certificateError);
e.acceptCertificate();
}
}
}
}
}
void WebviewWindow::processJsEvents()
{
QWebEnginePage *p = _view->page();
@@ -101,6 +120,11 @@ int WebviewWindow::resizeCount()
return _resized;
}
void WebviewWindow::setOUToken(const QString &token)
{
_ou_token = token;
}
void WebviewWindow::addView(WebViewQt *v, Rktwebview_qt *c)
{
_container = c;
@@ -143,6 +167,7 @@ void WebviewWindow::addView(WebViewQt *v, Rktwebview_qt *c)
connect(page, &QWebEnginePage::loadStarted, this, [this]() {
_container->onPageLoad(_view->id());
});
connect(page, &QWebEnginePage::certificateError, this, &WebviewWindow::handleCertificate);
}
WebViewQt *WebviewWindow::view()

View File

@@ -3,6 +3,7 @@
#include <QMainWindow>
#include <QTimer>
#include <QWebEngineCertificateError>
class WebViewQt;
class Rktwebview_qt;
@@ -30,6 +31,11 @@ private:
int _moved;
int _resized;
QString _ou_token;
private slots:
void handleCertificate(const QWebEngineCertificateError &certificateError);
public slots:
void processJsEvents();
@@ -42,6 +48,8 @@ public:
int moveCount();
int resizeCount();
void setOUToken(const QString &token);
public:
void addView(WebViewQt *v, Rktwebview_qt *c);
WebViewQt *view();