mirror of
https://github.com/Palakis/obs-websocket.git
synced 2024-08-30 18:12:16 +00:00
Config: Add command line parameters to override port and password
This commit is contained in:
@ -36,6 +36,8 @@ Here is a list of available web clients: (compatible with tablets and other touc
|
|||||||
|
|
||||||
It is **highly recommended** to protect obs-websocket with a password against unauthorized control. To do this, open the "Websocket server settings" dialog under OBS' "Tools" menu. In the settings dialogs, you can enable or disable authentication and set a password for it.
|
It is **highly recommended** to protect obs-websocket with a password against unauthorized control. To do this, open the "Websocket server settings" dialog under OBS' "Tools" menu. In the settings dialogs, you can enable or disable authentication and set a password for it.
|
||||||
|
|
||||||
|
(Psst. You can use `--websocket_port` and `--websocket_password` on the command line to override the configured values.)
|
||||||
|
|
||||||
### Possible use cases
|
### Possible use cases
|
||||||
|
|
||||||
- Remote control OBS from a phone or tablet on the same local network
|
- Remote control OBS from a phone or tablet on the same local network
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#include <QTime>
|
|
||||||
#include <obs-frontend-api.h>
|
#include <obs-frontend-api.h>
|
||||||
|
|
||||||
#include "Config.h"
|
#include "Config.h"
|
||||||
|
#include "utils/Utils.h"
|
||||||
|
|
||||||
#include "plugin-macros.generated.h"
|
#include "plugin-macros.generated.h"
|
||||||
|
|
||||||
@ -14,7 +14,19 @@
|
|||||||
#define PARAM_AUTHREQUIRED "AuthRequred"
|
#define PARAM_AUTHREQUIRED "AuthRequred"
|
||||||
#define PARAM_PASSWORD "ServerPassword"
|
#define PARAM_PASSWORD "ServerPassword"
|
||||||
|
|
||||||
|
#define CMDLINE_WEBSOCKET_PORT "websocket_port"
|
||||||
|
#define CMDLINE_WEBSOCKET_PASSWORD "websocket_password"
|
||||||
|
|
||||||
|
std::vector<std::string> GetCmdlineArgs()
|
||||||
|
{
|
||||||
|
struct obs_cmdline_args args = obs_get_cmdline_args();
|
||||||
|
std::vector<std::string> ret(args.argv + 1, args.argv + args.argc);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
Config::Config() :
|
Config::Config() :
|
||||||
|
PortOverridden(false),
|
||||||
|
PasswordOverridden(false),
|
||||||
ServerEnabled(true),
|
ServerEnabled(true),
|
||||||
ServerPort(4444),
|
ServerPort(4444),
|
||||||
DebugEnabled(false),
|
DebugEnabled(false),
|
||||||
@ -22,8 +34,6 @@ Config::Config() :
|
|||||||
AuthRequired(true),
|
AuthRequired(true),
|
||||||
ServerPassword("")
|
ServerPassword("")
|
||||||
{
|
{
|
||||||
qsrand(QTime::currentTime().msec());
|
|
||||||
|
|
||||||
SetDefaultsToGlobalStore();
|
SetDefaultsToGlobalStore();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -31,32 +41,59 @@ void Config::Load()
|
|||||||
{
|
{
|
||||||
config_t* obsConfig = GetConfigStore();
|
config_t* obsConfig = GetConfigStore();
|
||||||
if (!obsConfig) {
|
if (!obsConfig) {
|
||||||
blog(LOG_ERROR, "Unable to fetch OBS config!");
|
blog(LOG_ERROR, "[Config::Load] Unable to fetch OBS config!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ServerEnabled = config_get_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_ENABLED);
|
ServerEnabled = config_get_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_ENABLED);
|
||||||
ServerPort = config_get_uint(obsConfig, CONFIG_SECTION_NAME, PARAM_PORT);
|
|
||||||
DebugEnabled = config_get_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_DEBUG);
|
DebugEnabled = config_get_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_DEBUG);
|
||||||
AlertsEnabled = config_get_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_ALERTS);
|
AlertsEnabled = config_get_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_ALERTS);
|
||||||
|
|
||||||
|
QString portArgument = Utils::Platform::GetCommandLineArgument(CMDLINE_WEBSOCKET_PORT);
|
||||||
|
if (portArgument != "") {
|
||||||
|
bool ok;
|
||||||
|
uint16_t serverPort = portArgument.toUShort(&ok);
|
||||||
|
if (ok) {
|
||||||
|
blog(LOG_INFO, "[Config::Load] Overriding websocket port with: %d", serverPort);
|
||||||
|
PortOverridden = true;
|
||||||
|
ServerPort = serverPort;
|
||||||
|
} else {
|
||||||
|
ServerPort = config_get_uint(obsConfig, CONFIG_SECTION_NAME, PARAM_PORT);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ServerPort = config_get_uint(obsConfig, CONFIG_SECTION_NAME, PARAM_PORT);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString passwordArgument = Utils::Platform::GetCommandLineArgument(CMDLINE_WEBSOCKET_PASSWORD);
|
||||||
|
if (passwordArgument != "") {
|
||||||
|
blog(LOG_INFO, "[Config::Load] Overriding websocket password");
|
||||||
|
PasswordOverridden = true;
|
||||||
|
AuthRequired = true;
|
||||||
|
ServerPassword = passwordArgument;
|
||||||
|
} else {
|
||||||
AuthRequired = config_get_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_AUTHREQUIRED);
|
AuthRequired = config_get_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_AUTHREQUIRED);
|
||||||
ServerPassword = config_get_string(obsConfig, CONFIG_SECTION_NAME, PARAM_PASSWORD);
|
ServerPassword = config_get_string(obsConfig, CONFIG_SECTION_NAME, PARAM_PASSWORD);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Config::Save()
|
void Config::Save()
|
||||||
{
|
{
|
||||||
config_t* obsConfig = GetConfigStore();
|
config_t* obsConfig = GetConfigStore();
|
||||||
if (!obsConfig) {
|
if (!obsConfig) {
|
||||||
blog(LOG_ERROR, "Unable to fetch OBS config!");
|
blog(LOG_ERROR, "[Config::Save] Unable to fetch OBS config!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
config_set_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_ENABLED, ServerEnabled);
|
config_set_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_ENABLED, ServerEnabled);
|
||||||
|
if (!PortOverridden) {
|
||||||
config_set_uint(obsConfig, CONFIG_SECTION_NAME, PARAM_PORT, ServerPort);
|
config_set_uint(obsConfig, CONFIG_SECTION_NAME, PARAM_PORT, ServerPort);
|
||||||
|
}
|
||||||
config_set_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_DEBUG, DebugEnabled);
|
config_set_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_DEBUG, DebugEnabled);
|
||||||
config_set_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_ALERTS, AlertsEnabled);
|
config_set_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_ALERTS, AlertsEnabled);
|
||||||
|
if (!PasswordOverridden) {
|
||||||
config_set_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_AUTHREQUIRED, AuthRequired);
|
config_set_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_AUTHREQUIRED, AuthRequired);
|
||||||
config_set_string(obsConfig, CONFIG_SECTION_NAME, PARAM_PASSWORD, QT_TO_UTF8(ServerPassword));
|
config_set_string(obsConfig, CONFIG_SECTION_NAME, PARAM_PASSWORD, QT_TO_UTF8(ServerPassword));
|
||||||
|
}
|
||||||
|
|
||||||
config_save(obsConfig);
|
config_save(obsConfig);
|
||||||
}
|
}
|
||||||
@ -65,7 +102,7 @@ void Config::SetDefaultsToGlobalStore()
|
|||||||
{
|
{
|
||||||
config_t* obsConfig = GetConfigStore();
|
config_t* obsConfig = GetConfigStore();
|
||||||
if (!obsConfig) {
|
if (!obsConfig) {
|
||||||
blog(LOG_ERROR, "Unable to fetch OBS config!");
|
blog(LOG_ERROR, "[Config::SetDefaultsToGlobalStore] Unable to fetch OBS config!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,6 +11,9 @@ class Config {
|
|||||||
void SetDefaultsToGlobalStore();
|
void SetDefaultsToGlobalStore();
|
||||||
config_t* GetConfigStore();
|
config_t* GetConfigStore();
|
||||||
|
|
||||||
|
bool PortOverridden;
|
||||||
|
bool PasswordOverridden;
|
||||||
|
|
||||||
bool ServerEnabled;
|
bool ServerEnabled;
|
||||||
uint16_t ServerPort;
|
uint16_t ServerPort;
|
||||||
bool DebugEnabled;
|
bool DebugEnabled;
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
#include <thread>
|
#include <thread>
|
||||||
#include <QtConcurrent>
|
#include <QtConcurrent>
|
||||||
#include <QDateTime>
|
#include <QDateTime>
|
||||||
|
#include <QTime>
|
||||||
|
|
||||||
#include "WebSocketServer.h"
|
#include "WebSocketServer.h"
|
||||||
#include "obs-websocket.h"
|
#include "obs-websocket.h"
|
||||||
@ -14,6 +15,9 @@
|
|||||||
WebSocketServer::WebSocketServer() :
|
WebSocketServer::WebSocketServer() :
|
||||||
_sessions()
|
_sessions()
|
||||||
{
|
{
|
||||||
|
// Randomize the random number generator
|
||||||
|
qsrand(QTime::currentTime().msec());
|
||||||
|
|
||||||
_server.get_alog().clear_channels(websocketpp::log::alevel::all);
|
_server.get_alog().clear_channels(websocketpp::log::alevel::all);
|
||||||
_server.get_elog().clear_channels(websocketpp::log::elevel::all);
|
_server.get_elog().clear_channels(websocketpp::log::elevel::all);
|
||||||
_server.init_asio();
|
_server.init_asio();
|
||||||
|
@ -52,6 +52,15 @@ void SettingsDialog::showEvent(QShowEvent *event)
|
|||||||
ui->serverPasswordLineEdit->setEnabled(conf->AuthRequired);
|
ui->serverPasswordLineEdit->setEnabled(conf->AuthRequired);
|
||||||
ui->serverPortSpinBox->setValue(conf->ServerPort);
|
ui->serverPortSpinBox->setValue(conf->ServerPort);
|
||||||
|
|
||||||
|
if (conf->PortOverridden) {
|
||||||
|
ui->serverPortSpinBox->setEnabled(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (conf->PasswordOverridden) {
|
||||||
|
ui->enableAuthenticationCheckBox->setEnabled(false);
|
||||||
|
ui->serverPasswordLineEdit->setEnabled(false);
|
||||||
|
}
|
||||||
|
|
||||||
FillSessionTable();
|
FillSessionTable();
|
||||||
|
|
||||||
sessionTableTimer->start(1000);
|
sessionTableTimer->start(1000);
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#include <QCoreApplication>
|
||||||
|
#include <QCommandLineParser>
|
||||||
#include <QNetworkInterface>
|
#include <QNetworkInterface>
|
||||||
#include <QHostAddress>
|
#include <QHostAddress>
|
||||||
|
|
||||||
@ -5,6 +7,8 @@
|
|||||||
|
|
||||||
#include "../plugin-macros.generated.h"
|
#include "../plugin-macros.generated.h"
|
||||||
|
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
std::string Utils::Platform::GetLocalAddress()
|
std::string Utils::Platform::GetLocalAddress()
|
||||||
{
|
{
|
||||||
std::vector<QString> validAddresses;
|
std::vector<QString> validAddresses;
|
||||||
@ -38,3 +42,16 @@ std::string Utils::Platform::GetLocalAddress()
|
|||||||
|
|
||||||
return "0.0.0.0";
|
return "0.0.0.0";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString Utils::Platform::GetCommandLineArgument(QString arg)
|
||||||
|
{
|
||||||
|
QCommandLineParser parser;
|
||||||
|
QCommandLineOption cmdlineOption(arg, arg, arg, "");
|
||||||
|
parser.addOption(cmdlineOption);
|
||||||
|
parser.parse(QCoreApplication::arguments());
|
||||||
|
|
||||||
|
if (!parser.isSet(cmdlineOption))
|
||||||
|
return "";
|
||||||
|
|
||||||
|
return parser.value(cmdlineOption);
|
||||||
|
}
|
@ -22,5 +22,6 @@ namespace Utils {
|
|||||||
|
|
||||||
namespace Platform {
|
namespace Platform {
|
||||||
std::string GetLocalAddress();
|
std::string GetLocalAddress();
|
||||||
|
QString GetCommandLineArgument(QString arg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user