summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars-Dominik Braun <lars@6xq.net>2012-04-14 16:49:51 +0200
committerLars-Dominik Braun <lars@6xq.net>2012-04-14 16:49:51 +0200
commit35763dea799c96361e288a10eab0fbd16c36e880 (patch)
treeeeedf6a184106a8da119f1c59f110aac6d9a8329
parented6d013054f589f2999926b02f4ac6dc76c7fe91 (diff)
downloadpianobar-35763dea799c96361e288a10eab0fbd16c36e880.tar.gz
pianobar-35763dea799c96361e288a10eab0fbd16c36e880.tar.bz2
pianobar-35763dea799c96361e288a10eab0fbd16c36e880.zip
Add force_tls setting
Use TLS for all actions when requested. Closes #234
-rw-r--r--contrib/pianobar.15
-rw-r--r--src/settings.c3
-rw-r--r--src/settings.h1
-rw-r--r--src/ui.c7
4 files changed, 13 insertions, 3 deletions
diff --git a/contrib/pianobar.1 b/contrib/pianobar.1
index da87270..4c76e2f 100644
--- a/contrib/pianobar.1
+++ b/contrib/pianobar.1
@@ -195,6 +195,11 @@ usually the value above). See section
.B REMOTE CONTROL
.TP
+.B force_tls = {0,1}
+Use TLS for all actions (not just sending login credentials). Use if you are on
+an untrusted network or to get around GeoIP restrictions.
+
+.TP
.B format_list_song = %i) %a - %t%r
Available format characters:
diff --git a/src/settings.c b/src/settings.c
index 54edba9..51c2400 100644
--- a/src/settings.c
+++ b/src/settings.c
@@ -121,6 +121,7 @@ void BarSettingsRead (BarSettings_t *settings) {
#endif
#endif
settings->autoselect = true;
+ settings->forceTls = false;
settings->history = 5;
settings->volume = 0;
settings->sortOrder = BAR_SORT_NAME_AZ;
@@ -245,6 +246,8 @@ void BarSettingsRead (BarSettings_t *settings) {
settings->fifo = strdup (val);
} else if (streq ("autoselect", key)) {
settings->autoselect = atoi (val);
+ } else if (streq ("force_tls", key)) {
+ settings->forceTls = atoi (val);
} else if (streq ("tls_fingerprint", key)) {
/* expects 40 byte hex-encoded sha1 */
if (strlen (val) == 40) {
diff --git a/src/settings.h b/src/settings.h
index 4c4205e..ce3732b 100644
--- a/src/settings.h
+++ b/src/settings.h
@@ -81,6 +81,7 @@ typedef struct {
typedef struct {
bool autoselect;
+ bool forceTls;
unsigned int history;
int volume;
BarStationSorting_t sortOrder;
diff --git a/src/ui.c b/src/ui.c
index 104ee04..4162dce 100644
--- a/src/ui.c
+++ b/src/ui.c
@@ -134,14 +134,15 @@ void BarUiMsg (const BarSettings_t *settings, const BarUiMsg_t type,
/* fetch http resource (post request)
* @param waitress handle
* @param piano request (initialized by PianoRequest())
+ * @param ignore libpiano TLS hint and use it always
*/
static WaitressReturn_t BarPianoHttpRequest (WaitressHandle_t *waith,
- PianoRequest_t *req) {
+ PianoRequest_t *req, bool forceTls) {
waith->extraHeaders = "Content-Type: text/xml\r\n";
waith->postData = req->postData;
waith->method = WAITRESS_METHOD_POST;
waith->url.path = req->urlPath;
- waith->url.tls = req->secure;
+ waith->url.tls = req->secure || forceTls;
return WaitressFetchBuf (waith, &req->responseData);
}
@@ -172,7 +173,7 @@ int BarUiPianoCall (BarApp_t * const app, PianoRequestType_t type,
return 0;
}
- *wRet = BarPianoHttpRequest (&app->waith, &req);
+ *wRet = BarPianoHttpRequest (&app->waith, &req, app->settings.forceTls);
if (*wRet != WAITRESS_RET_OK) {
BarUiMsg (&app->settings, MSG_NONE, "Network error: %s\n", WaitressErrorToStr (*wRet));
if (req.responseData != NULL) {