123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- #include "OAuthLogin.hpp"
- #include <widgets/OBSBasic.hpp>
- #ifdef BROWSER_AVAILABLE
- #include <browser-panel.hpp>
- #endif
- #include <ui-config.h>
- #include "moc_OAuthLogin.cpp"
- #ifdef BROWSER_AVAILABLE
- extern QCef *cef;
- extern QCefCookieManager *panel_cookies;
- #endif
- OAuthLogin::OAuthLogin(QWidget *parent, const std::string &url, bool token) : QDialog(parent), get_token(token)
- {
- #ifdef BROWSER_AVAILABLE
- if (!cef) {
- return;
- }
- setWindowTitle("Auth");
- setMinimumSize(400, 400);
- resize(700, 700);
- Qt::WindowFlags flags = windowFlags();
- Qt::WindowFlags helpFlag = Qt::WindowContextHelpButtonHint;
- setWindowFlags(flags & (~helpFlag));
- OBSBasic::InitBrowserPanelSafeBlock();
- cefWidget = cef->create_widget(this, url, panel_cookies);
- if (!cefWidget) {
- fail = true;
- return;
- }
- connect(cefWidget, &QCefWidget::titleChanged, this, &OAuthLogin::setWindowTitle);
- connect(cefWidget, &QCefWidget::urlChanged, this, &OAuthLogin::urlChanged);
- QPushButton *close = new QPushButton(QTStr("Cancel"));
- connect(close, &QAbstractButton::clicked, this, &QDialog::reject);
- QHBoxLayout *bottomLayout = new QHBoxLayout();
- bottomLayout->addStretch();
- bottomLayout->addWidget(close);
- bottomLayout->addStretch();
- QVBoxLayout *topLayout = new QVBoxLayout(this);
- topLayout->addWidget(cefWidget);
- topLayout->addLayout(bottomLayout);
- #else
- UNUSED_PARAMETER(url);
- #endif
- }
- OAuthLogin::~OAuthLogin() {}
- int OAuthLogin::exec()
- {
- #ifdef BROWSER_AVAILABLE
- if (cefWidget) {
- return QDialog::exec();
- }
- #endif
- return QDialog::Rejected;
- }
- void OAuthLogin::reject()
- {
- #ifdef BROWSER_AVAILABLE
- if (cefWidget) {
- cefWidget->closeBrowser();
- }
- #endif
- QDialog::reject();
- }
- void OAuthLogin::accept()
- {
- #ifdef BROWSER_AVAILABLE
- if (cefWidget) {
- cefWidget->closeBrowser();
- }
- #endif
- QDialog::accept();
- }
- void OAuthLogin::urlChanged(const QString &url)
- {
- std::string uri = get_token ? "access_token=" : "code=";
- int code_idx = url.indexOf(uri.c_str());
- if (code_idx == -1)
- return;
- if (!url.startsWith(OAUTH_BASE_URL))
- return;
- code_idx += (int)uri.size();
- int next_idx = url.indexOf("&", code_idx);
- if (next_idx != -1)
- code = url.mid(code_idx, next_idx - code_idx);
- else
- code = url.right(url.size() - code_idx);
- accept();
- }
|