Strip scheme out of Host for cors_section

Value returned by `couch_httpd_vhost:host/1` might not contain scheme.
The cors section is named after vhost name (i.e. without scheme).
For example:

    [cors:partner.com]
    methods =
    headers =
    exposed_headers =
    origins = http://restricted.dev:8000

The origin in origins has to be given with scheme included.

COUCHDB-2945


Project: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/commit/84195467
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/tree/84195467
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/diff/84195467

Branch: refs/heads/split_out_httpd_stack
Commit: 8419546777985d3aa52479f2f687c237da71aa93
Parents: cfbd7f7
Author: ILYA Khlopotov <iil...@ca.ibm.com>
Authored: Tue Feb 16 15:23:37 2016 -0800
Committer: ILYA Khlopotov <iil...@ca.ibm.com>
Committed: Tue Mar 1 08:35:09 2016 -0800

----------------------------------------------------------------------
 src/couch_httpd_cors.erl | 29 ++++++++---------------------
 1 file changed, 8 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/blob/84195467/src/couch_httpd_cors.erl
----------------------------------------------------------------------
diff --git a/src/couch_httpd_cors.erl b/src/couch_httpd_cors.erl
index 401ad2e..8c47c7a 100644
--- a/src/couch_httpd_cors.erl
+++ b/src/couch_httpd_cors.erl
@@ -320,30 +320,17 @@ cors_config(Host, Key, Default) ->
     config:get(cors_section(Host), Key,
                      config:get("cors", Key, Default)).
 
-cors_section(Host0) ->
-    {Host, _Port} = split_host_port(Host0),
+cors_section(HostValue) ->
+    HostPort = maybe_strip_scheme(HostValue),
+    Host = hd(string:tokens(HostPort, ":")),
     "cors:" ++ Host.
 
-split_host_port(HostAsString) ->
-    % split at semicolon ":"
-    Split = string:rchr(HostAsString, $:),
-    split_host_port(HostAsString, Split).
-
-split_host_port(HostAsString, 0) ->
-    % no semicolon
-    {HostAsString, '*'};
-split_host_port(HostAsString, N) ->
-    HostPart = string:substr(HostAsString, 1, N-1),
-    % parse out port
-    % is there a nicer way?
-    case (catch erlang:list_to_integer(string:substr(HostAsString,
-                    N+1, length(HostAsString)))) of
-    {'EXIT', _} ->
-        {HostAsString, '*'};
-    Port ->
-        {HostPart, Port}
-    end.
 
+maybe_strip_scheme(Host) ->
+    case string:str(Host, "://") of
+        0 -> Host;
+        N -> string:substr(Host, N + 3)
+    end.
 
 is_cors_enabled(Config) ->
     case get(disable_couch_httpd_cors) of

Reply via email to