Make the Dirble API token configurable and use HTTPS
authorLes De Ridder <les@lesderid.net>
Sun, 11 Sep 2016 15:54:25 +0000 (17:54 +0200)
committerLes De Ridder <les@lesderid.net>
Sun, 11 Sep 2016 16:23:42 +0000 (18:23 +0200)
Fixes #140

README.md
contrib/init.debian
contrib/ympd.default
contrib/ympd.service
htdocs/js/mpd.js
src/mpd_client.c
src/mpd_client.h
src/ympd.c

index 08ef76d..da55299 100644 (file)
--- a/README.md
+++ b/README.md
@@ -28,12 +28,13 @@ Run flags
 ```
 Usage: ./ympd [OPTION]...
 
- -h, --host <host>          connect to mpd at host [localhost]
- -p, --port <port>          connect to mpd at port [6600]
- -w, --webport [ip:]<port>  listen interface/port for webserver [8080]
- -u, --user <username>      drop priviliges to user after socket bind
- -V, --version              get version
- --help                     this help
+ -h, --host <host>             connect to mpd at host [localhost]
+ -p, --port <port>             connect to mpd at port [6600]
+ -w, --webport [ip:]<port>     listen interface/port for webserver [8080]
+ -d, --dirbletoken <apitoken>  Dirble API token
+ -u, --user <username>         drop priviliges to user after socket bind
+ -V, --version                 get version
+ --help                        this help
 ```
 
 SSL Support
index 5c10bdf..31c00d3 100755 (executable)
@@ -24,6 +24,7 @@ YMPD_USER=nobody
 MPD_HOST=localhost
 MPD_PORT=6600
 WEB_PORT=8080
+DIRBLE_API_TOKEN=2e223c9909593b94fc6577361a
 
 
 # Exit if the package is not installed
@@ -35,7 +36,7 @@ WEB_PORT=8080
 # Load the VERBOSE setting and other rcS variables
 [ -f /etc/default/rcS ] && . /etc/default/rcS
 
-DAEMON_OPT="--user $YMPD_USER --webport $WEB_PORT --host $MPD_HOST --port $MPD_PORT"
+DAEMON_OPT="--user $YMPD_USER --webport $WEB_PORT --host $MPD_HOST --port $MPD_PORT --dirbletoken $DIRBLE_API_TOKEN"
 
 do_start()
 {
index c7bbcda..c74b860 100644 (file)
@@ -2,3 +2,4 @@ MPD_HOST=localhost
 MPD_PORT=6600
 WEB_PORT=8080
 YMPD_USER=nobody
+DIRBLE_API_TOKEN=2e223c9909593b94fc6577361a
index 2289550..7516818 100644 (file)
@@ -7,8 +7,9 @@ Environment=MPD_HOST=localhost
 Environment=MPD_PORT=6600
 Environment=WEB_PORT=8080
 Environment=YMPD_USER=nobody
+Environment=DIRBLE_API_TOKEN=2e223c9909593b94fc6577361a
 EnvironmentFile=/etc/default/ympd
-ExecStart=/usr/bin/ympd --user $YMPD_USER --webport $WEB_PORT --host $MPD_HOST --port $MPD_PORT
+ExecStart=/usr/bin/ympd --user $YMPD_USER --webport $WEB_PORT --host $MPD_HOST --port $MPD_PORT --dirbletoken $DIRBLE_API_TOKEN
 Type=simple
 
 [Install]
index 6000b79..6e57d26 100644 (file)
@@ -1,6 +1,6 @@
 /* ympd
    (c) 2013-2014 Andrew Karpow <andy@ndyk.de>
-   This project's homepage is: http://www.ympd.org
+   This project's homepage is: https://www.ympd.org
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -29,6 +29,8 @@ var dirble_selected_cat = "";
 var dirble_catid = "";
 var dirble_page = 1;
 var isTouch = Modernizr.touch ? 1 : 0;
+var dirble_api_token = "";
+var dirble_stations = false;
 
 var app = $.sammy(function() {
 
@@ -127,7 +129,13 @@ var app = $.sammy(function() {
         dirble_catid = this.params['splat'][0];
         dirble_page = this.params['splat'][1];
 
-        dirble_load_stations();
+        dirble_stations = true;
+
+        if(dirble_api_token) {
+            dirble_load_stations();
+        } else {
+            getDirbleApiToken();
+        }
     });
 
 
@@ -144,7 +152,13 @@ var app = $.sammy(function() {
         $('#panel-heading').text("Dirble");
         $('#dirble').addClass('active');
 
-        dirble_load_categories();
+        dirble_stations = false;
+
+        if(dirble_api_token) {
+            dirble_load_categories();
+        } else {
+            getDirbleApiToken();
+        }
     });
 
     this.get("/", function(context) {
@@ -493,6 +507,15 @@ function webSocketConnect() {
                     if(obj.data.passwort_set)
                         $('#mpd_password_set').removeClass('hide');
                     break;
+                case "dirbleapitoken":
+                    dirble_api_token = obj.data;
+                    
+                    if(dirble_stations) {
+                        dirble_load_stations();
+                    } else {
+                        dirble_load_categories();
+                    }
+                    break;
                 case "error":
                     $('.top-right').notify({
                         message:{text: obj.data},
@@ -652,6 +675,10 @@ function getHost() {
     $('#mpd_pw_con').keypress(onEnter);
 }
 
+function getDirbleApiToken() {
+    socket.send('MPD_API_GET_DIRBLEAPITOKEN');
+}
+
 $('#search').submit(function () {
     app.setLocation("#/search/"+$('#search > div > input').val());
     $('#wait').modal('show');
@@ -784,7 +811,7 @@ function dirble_load_categories() {
 
     dirble_page = 1;
 
-    $.getJSON( "http://api.dirble.com/v2/categories?token=2e223c9909593b94fc6577361a", function( data ) {
+    $.getJSON( "https://api.dirble.com/v2/categories?token=" + dirble_api_token, function( data ) {
 
         $('#dirble_loading').addClass('hide');
 
@@ -832,7 +859,7 @@ function dirble_load_categories() {
 
 function dirble_load_stations() {
 
-    $.getJSON( "http://api.dirble.com/v2/category/"+dirble_catid+"/stations?page="+dirble_page+"&per_page=20&token=2e223c9909593b94fc6577361a", function( data ) {
+    $.getJSON( "https://api.dirble.com/v2/category/"+dirble_catid+"/stations?page="+dirble_page+"&per_page=20&token=" + dirble_api_token, function( data ) {
 
         $('#dirble_loading').addClass('hide');
         if (data.length == 20) $('#next').removeClass('hide');
@@ -859,7 +886,7 @@ function dirble_load_stations() {
             click: function() {
                 var _this = $(this);
 
-                $.getJSON( "http://api.dirble.com/v2/station/"+$(this).attr("radioid")+"?token=2e223c9909593b94fc6577361a", function( data ) {
+                $.getJSON( "https://api.dirble.com/v2/station/"+$(this).attr("radioid")+"?token=" + dirble_api_token, function( data ) {
 
                     socket.send("MPD_API_ADD_TRACK," + data.streams[0].stream);
                     $('.top-right').notify({
@@ -877,7 +904,7 @@ function dirble_load_stations() {
                 "<span class=\"glyphicon glyphicon-play\"></span></a>").find('a').click(function(e) {
                     e.stopPropagation();
 
-                    $.getJSON( "http://api.dirble.com/v2/station/"+_this.attr("radioid")+"?token=2e223c9909593b94fc6577361a", function( data ) {
+                    $.getJSON( "https://api.dirble.com/v2/station/"+_this.attr("radioid")+"?token=" + dirble_api_token, function( data ) {
 
                         socket.send("MPD_API_ADD_PLAY_TRACK," + data.streams[0].stream);
                         $('.top-right').notify({
@@ -898,7 +925,7 @@ function dirble_load_stations() {
             click: function() {
                 var _this = $(this);
 
-                $.getJSON( "http://api.dirble.com/v2/station/"+$(this).attr("radioid")+"?token=2e223c9909593b94fc6577361a", function( data ) {
+                $.getJSON( "https://api.dirble.com/v2/station/"+$(this).attr("radioid")+"?token=" + dirble_api_token, function( data ) {
 
                     socket.send("MPD_API_ADD_TRACK," + data.streams[0].stream);
                     $('.top-right').notify({
@@ -916,7 +943,7 @@ function dirble_load_stations() {
                 "<span class=\"glyphicon glyphicon-play\"></span></a>").find('a').click(function(e) {
                     e.stopPropagation();
 
-                    $.getJSON( "http://api.dirble.com/v2/station/"+_this.attr("radioid")+"?token=2e223c9909593b94fc6577361a", function( data ) {
+                    $.getJSON( "https://api.dirble.com/v2/station/"+_this.attr("radioid")+"?token=" + dirble_api_token, function( data ) {
 
                         socket.send("MPD_API_ADD_PLAY_TRACK," + data.streams[0].stream);
                         $('.top-right').notify({
index 7271984..6894fd5 100644 (file)
@@ -63,7 +63,8 @@ int callback_mpd(struct mg_connection *c)
         return MG_TRUE;
 
     if(mpd.conn_state != MPD_CONNECTED && cmd_id != MPD_API_SET_MPDHOST &&
-        cmd_id != MPD_API_GET_MPDHOST && cmd_id != MPD_API_SET_MPDPASS)
+        cmd_id != MPD_API_GET_MPDHOST && cmd_id != MPD_API_SET_MPDPASS &&
+        cmd_id != MPD_API_GET_DIRBLEAPITOKEN)
         return MG_TRUE;
 
     switch(cmd_id)
@@ -256,6 +257,10 @@ out_host_change:
                 "{\"host\" : \"%s\", \"port\": \"%d\", \"passwort_set\": %s}"
                 "}", mpd.host, mpd.port, mpd.password ? "true" : "false");
             break;
+        case MPD_API_GET_DIRBLEAPITOKEN:
+            n = snprintf(mpd.buf, MAX_SIZE, "{\"type\":\"dirbleapitoken\", \""
+                "data\": \"%s\"}", dirble_api_token);
+            break;
         case MPD_API_SET_MPDPASS:
             p_charbuf = strdup(c->content);
             if(strcmp(strtok(p_charbuf, ","), "MPD_API_SET_MPDPASS"))
index dd78af9..0e11c5a 100644 (file)
@@ -40,6 +40,7 @@
     X(MPD_API_GET_QUEUE) \
     X(MPD_API_GET_BROWSE) \
     X(MPD_API_GET_MPDHOST) \
+    X(MPD_API_GET_DIRBLEAPITOKEN) \
     X(MPD_API_ADD_TRACK) \
     X(MPD_API_ADD_PLAY_TRACK) \
     X(MPD_API_ADD_PLAYLIST) \
@@ -94,6 +95,8 @@ struct t_mpd {
     unsigned queue_version;
 } mpd;
 
+char dirble_api_token[28];
+
 struct t_mpd_client_session {
     int song_id;
     unsigned queue_version;
index afa25c6..caa02f7 100644 (file)
@@ -80,10 +80,13 @@ int main(int argc, char **argv)
     mpd.port = 6600;
     strcpy(mpd.host, "127.0.0.1");
 
+    strcpy(dirble_api_token, "2e223c9909593b94fc6577361a");
+
     static struct option long_options[] = {
         {"host",         required_argument, 0, 'h'},
         {"port",         required_argument, 0, 'p'},
         {"webport",      required_argument, 0, 'w'},
+        {"dirbletoken",  required_argument, 0, 'd'},
         {"user",         required_argument, 0, 'u'},
         {"version",      no_argument,       0, 'v'},
         {"help",         no_argument,       0,  0 },
@@ -102,6 +105,9 @@ int main(int argc, char **argv)
             case 'w':
                 webport = strdup(optarg);
                 break;
+            case 'd':
+                strncpy(dirble_api_token, optarg, sizeof(dirble_api_token));
+                break;
             case 'u':
                 run_as_user = strdup(optarg);
                 break;
@@ -118,6 +124,7 @@ int main(int argc, char **argv)
                         " -p, --port <port>\t\tconnect to mpd at port [6600]\n"
                         " -w, --webport [ip:]<port>\tlisten interface/port for webserver [8080]\n"
                         " -u, --user <username>\t\tdrop priviliges to user after socket bind\n"
+                        " -d, --dirbletoken <apitoken>\tDirble API token\n"
                         " -V, --version\t\t\tget version\n"
                         " --help\t\t\t\tthis help\n"
                         , argv[0]);