]> git.saurik.com Git - apt.git/commitdiff
webserver: implement ~user access to ~user/public_html/
authorDavid Kalnischkies <kalnischkies@gmail.com>
Wed, 16 Oct 2013 14:46:55 +0000 (16:46 +0200)
committerDavid Kalnischkies <kalnischkies@gmail.com>
Sat, 30 Nov 2013 11:38:26 +0000 (12:38 +0100)
pretty much useless for the testcases, but handy to test the webserver
itself in 'real world' environments

Git-Dch: Ignore

test/interactive-helper/aptwebserver.cc

index 6c5634de615c26b45bd495efa4103d77adeb42c7..4ea1794bb3d6f9505d4a03dfcb95446223c5ab80 100644 (file)
@@ -198,7 +198,17 @@ void sendRedirect(int const client, int const httpcode, std::string const &uri,/
    addDataHeaders(headers, response);
    std::string location("Location: ");
    if (strncmp(uri.c_str(), "http://", 7) != 0)
-      location.append("http://").append(LookupTag(request, "Host")).append("/").append(uri);
+   {
+      location.append("http://").append(LookupTag(request, "Host")).append("/");
+      if (strncmp("/home/", uri.c_str(), strlen("/home/")) == 0 && uri.find("/public_html/") != std::string::npos)
+      {
+        std::string homeuri = SubstVar(uri, "/home/", "~");
+        homeuri = SubstVar(homeuri, "/public_html/", "/");
+        location.append(homeuri);
+      }
+      else
+        location.append(uri);
+   }
    else
       location.append(uri);
    headers.push_back(location);
@@ -381,6 +391,20 @@ bool parseFirstLine(int const client, std::string const &request,  /*{{{*/
    filename.erase(0, 1);
    if (filename.empty() == true)
       filename = ".";
+   // support ~user/ uris to refer to /home/user/public_html/ as a kind-of special directory
+   else if (filename[0] == '~')
+   {
+      // /home/user is actually not entirely correct, but good enough for now
+      size_t dashpos = filename.find('/');
+      if (dashpos != std::string::npos)
+      {
+        std::string home = filename.substr(1, filename.find('/') - 1);
+        std::string pubhtml = filename.substr(filename.find('/') + 1);
+        filename = "/home/" + home + "/public_html/" + pubhtml;
+      }
+      else
+        filename = "/home/" + filename.substr(1) + "/public_html/";
+   }
    return true;
 }
                                                                        /*}}}*/