summaryrefslogtreecommitdiff
path: root/src/setup/src/setup_httpd.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/setup/src/setup_httpd.erl')
-rw-r--r--src/setup/src/setup_httpd.erl186
1 files changed, 0 insertions, 186 deletions
diff --git a/src/setup/src/setup_httpd.erl b/src/setup/src/setup_httpd.erl
deleted file mode 100644
index 418a72845..000000000
--- a/src/setup/src/setup_httpd.erl
+++ /dev/null
@@ -1,186 +0,0 @@
-% Licensed under the Apache License, Version 2.0 (the "License"); you may not
-% use this file except in compliance with the License. You may obtain a copy of
-% the License at
-%
-% http://www.apache.org/licenses/LICENSE-2.0
-%
-% Unless required by applicable law or agreed to in writing, software
-% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-% License for the specific language governing permissions and limitations under
-% the License.
-
--module(setup_httpd).
--include_lib("couch/include/couch_db.hrl").
-
--export([handle_setup_req/1]).
-
-handle_setup_req(#httpd{method = 'POST'} = Req) ->
- ok = chttpd:verify_is_server_admin(Req),
- couch_httpd:validate_ctype(Req, "application/json"),
- Setup = get_body(Req),
- couch_log:notice("Setup: ~p~n", [remove_sensitive(Setup)]),
- Action = binary_to_list(couch_util:get_value(<<"action">>, Setup, <<"missing">>)),
- case handle_action(Action, Setup) of
- ok ->
- chttpd:send_json(Req, 201, {[{ok, true}]});
- {error, Message} ->
- couch_httpd:send_error(Req, 400, <<"bad_request">>, Message)
- end;
-handle_setup_req(#httpd{method = 'GET'} = Req) ->
- ok = chttpd:verify_is_server_admin(Req),
- Dbs = chttpd:qs_json_value(Req, "ensure_dbs_exist", setup:cluster_system_dbs()),
- couch_log:notice("Dbs: ~p~n", [Dbs]),
- SingleNodeConfig = config:get_boolean("couchdb", "single_node", false),
- case SingleNodeConfig of
- true ->
- chttpd:send_json(Req, 200, {[{state, single_node_enabled}]});
- _ ->
- case config:get_integer("cluster", "n", 3) of
- 1 ->
- case setup:is_single_node_enabled(Dbs) of
- false ->
- chttpd:send_json(Req, 200, {[{state, single_node_disabled}]});
- true ->
- chttpd:send_json(Req, 200, {[{state, single_node_enabled}]})
- end;
- _ ->
- case setup:is_cluster_enabled() of
- false ->
- chttpd:send_json(Req, 200, {[{state, cluster_disabled}]});
- true ->
- case setup:has_cluster_system_dbs(Dbs) of
- false ->
- chttpd:send_json(Req, 200, {[{state, cluster_enabled}]});
- true ->
- chttpd:send_json(Req, 200, {[{state, cluster_finished}]})
- end
- end
- end
- end;
-handle_setup_req(#httpd{} = Req) ->
- chttpd:send_method_not_allowed(Req, "GET,POST").
-
-get_options(Options, Setup) ->
- ExtractValues = fun({Tag, Option}, OptionsAcc) ->
- case couch_util:get_value(Option, Setup) of
- undefined -> OptionsAcc;
- Value -> [{Tag, Value} | OptionsAcc]
- end
- end,
- lists:foldl(ExtractValues, [], Options).
-
-handle_action("enable_cluster", Setup) ->
- Options = get_options(
- [
- {username, <<"username">>},
- {password, <<"password">>},
- {password_hash, <<"password_hash">>},
- {bind_address, <<"bind_address">>},
- {port, <<"port">>},
- {remote_node, <<"remote_node">>},
- {remote_current_user, <<"remote_current_user">>},
- {remote_current_password, <<"remote_current_password">>},
- {node_count, <<"node_count">>}
- ],
- Setup
- ),
- case setup:enable_cluster(Options) of
- {error, cluster_enabled} ->
- {error, <<"Cluster is already enabled">>};
- _ ->
- ok
- end;
-handle_action("finish_cluster", Setup) ->
- couch_log:notice("finish_cluster: ~p~n", [remove_sensitive(Setup)]),
-
- Options = get_options(
- [
- {ensure_dbs_exist, <<"ensure_dbs_exist">>}
- ],
- Setup
- ),
- case setup:finish_cluster(Options) of
- {error, cluster_finished} ->
- {error, <<"Cluster is already finished">>};
- Else ->
- couch_log:notice("finish_cluster: ~p~n", [Else]),
- ok
- end;
-handle_action("enable_single_node", Setup) ->
- couch_log:notice("enable_single_node: ~p~n", [remove_sensitive(Setup)]),
-
- Options = get_options(
- [
- {ensure_dbs_exist, <<"ensure_dbs_exist">>},
- {username, <<"username">>},
- {password, <<"password">>},
- {password_hash, <<"password_hash">>},
- {bind_address, <<"bind_address">>},
- {port, <<"port">>}
- ],
- Setup
- ),
- case setup:enable_single_node(Options) of
- {error, cluster_finished} ->
- {error, <<"Cluster is already finished">>};
- Else ->
- couch_log:notice("Else: ~p~n", [Else]),
- ok
- end;
-handle_action("add_node", Setup) ->
- couch_log:notice("add_node: ~p~n", [remove_sensitive(Setup)]),
-
- Options = get_options(
- [
- {username, <<"username">>},
- {password, <<"password">>},
- {host, <<"host">>},
- {port, <<"port">>},
- {name, <<"name">>}
- ],
- Setup
- ),
- case setup:add_node(Options) of
- {error, cluster_not_enabled} ->
- {error, <<"Cluster is not enabled.">>};
- {error, {conn_failed, {error, econnrefused}}} ->
- {error, <<"Add node failed. Invalid Host and/or Port.">>};
- {error, wrong_credentials} ->
- {error, <<"Add node failed. Invalid admin credentials,">>};
- {error, Message} ->
- {error, Message};
- _ ->
- ok
- end;
-handle_action("remove_node", Setup) ->
- couch_log:notice("remove_node: ~p~n", [remove_sensitive(Setup)]);
-handle_action("receive_cookie", Setup) ->
- couch_log:notice("receive_cookie: ~p~n", [remove_sensitive(Setup)]),
- Options = get_options(
- [
- {cookie, <<"cookie">>}
- ],
- Setup
- ),
- case setup:receive_cookie(Options) of
- {error, Error} ->
- {error, Error};
- _ ->
- ok
- end;
-handle_action(_, _) ->
- couch_log:notice("invalid_action: ~n", []),
- {error, <<"Invalid Action'">>}.
-
-get_body(Req) ->
- case catch couch_httpd:json_body_obj(Req) of
- {Body} ->
- Body;
- Else ->
- couch_log:notice("Body Fail: ~p~n", [Else]),
- couch_httpd:send_error(Req, 400, <<"bad_request">>, <<"Missing JSON body'">>)
- end.
-
-remove_sensitive(KVList) ->
- lists:keyreplace(<<"password">>, 1, KVList, {<<"password">>, <<"****">>}).