-
This commit is contained in:
@@ -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
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user