added option for htdigest authentication
authorSuperBFG7 <daniel@despite.ch>
Tue, 6 Oct 2015 18:17:28 +0000 (20:17 +0200)
committerSuperBFG7 <daniel@despite.ch>
Tue, 6 Oct 2015 18:17:28 +0000 (20:17 +0200)
README.md
src/ympd.c

index 9561a80..f8ae016 100644 (file)
--- a/README.md
+++ b/README.md
@@ -28,6 +28,8 @@ Run flags
 ```
 Usage: ./ympd [OPTION]...
 
+ -d, --digest <htdigest>    path to htdigest file for authorization
+                            (realm ympd) [no authorization]
  -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]
index afa25c6..15fa1f9 100644 (file)
@@ -38,7 +38,12 @@ void bye()
     force_exit = 1;
 }
 
+char *gpass = NULL;
+
 static int server_callback(struct mg_connection *c, enum mg_event ev) {
+    int result = MG_FALSE;
+    FILE *fp = NULL;
+
     switch(ev) {
         case MG_CLOSE:
             mpd_close_handler(c);
@@ -57,7 +62,15 @@ static int server_callback(struct mg_connection *c, enum mg_event ev) {
                 return callback_http(c);
 #endif
         case MG_AUTH:
-            return MG_TRUE;
+            if ( gpass == NULL )
+                return MG_TRUE;
+            else {
+                if ( (fp = fopen(gpass, "r")) != NULL ) {
+                    result = mg_authorize_digest(c, fp);
+                    fclose(fp);
+                }
+            }
+            return result;
         default:
             return MG_FALSE;
     }
@@ -77,10 +90,12 @@ int main(int argc, char **argv)
     mg_set_option(server, "document_root", SRC_PATH);
 #endif
 
+    mg_set_option(server, "auth_domain", "ympd");
     mpd.port = 6600;
     strcpy(mpd.host, "127.0.0.1");
 
     static struct option long_options[] = {
+        {"digest",       optional_argument, 0, 'd'},
         {"host",         required_argument, 0, 'h'},
         {"port",         required_argument, 0, 'p'},
         {"webport",      required_argument, 0, 'w'},
@@ -90,9 +105,12 @@ int main(int argc, char **argv)
         {0,              0,                 0,  0 }
     };
 
-    while((n = getopt_long(argc, argv, "h:p:w:u:v",
+    while((n = getopt_long(argc, argv, "d:h:p:w:u:v",
                 long_options, &option_index)) != -1) {
         switch (n) {
+            case 'd':
+                gpass = strdup(optarg);
+                break;
             case 'h':
                 strncpy(mpd.host, optarg, sizeof(mpd.host));
                 break;
@@ -114,6 +132,8 @@ int main(int argc, char **argv)
                 break;
             default:
                 fprintf(stderr, "Usage: %s [OPTION]...\n\n"
+                        " -d, --digest <htdigest>\tpath to htdigest file for authorization\n"
+                        "                        \t(realm ympd) [no authorization]\n"
                         " -h, --host <host>\t\tconnect to mpd at host [localhost]\n"
                         " -p, --port <port>\t\tconnect to mpd at port [6600]\n"
                         " -w, --webport [ip:]<port>\tlisten interface/port for webserver [8080]\n"