| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- %%--------------------------------------------------------------------
- %% Copyright (c) 2020-2023 EMQ Technologies Co., Ltd. All Rights Reserved.
- %%
- %% 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(emqx_authz_api_settings).
- -behaviour(minirest_api).
- -include_lib("hocon/include/hoconsc.hrl").
- -import(hoconsc, [mk/1, ref/2]).
- -export([
- api_spec/0,
- paths/0,
- schema/1
- ]).
- -export([settings/2]).
- -define(BAD_REQUEST, 'BAD_REQUEST').
- api_spec() ->
- emqx_dashboard_swagger:spec(?MODULE, #{check_schema => true}).
- paths() ->
- ["/authorization/settings"].
- %%--------------------------------------------------------------------
- %% Schema for each URI
- %%--------------------------------------------------------------------
- schema("/authorization/settings") ->
- #{
- 'operationId' => settings,
- get =>
- #{
- description => ?DESC(authorization_settings_get),
- responses =>
- #{200 => ref_authz_schema()}
- },
- put =>
- #{
- description => ?DESC(authorization_settings_put),
- 'requestBody' => ref_authz_schema(),
- responses =>
- #{
- 200 => ref_authz_schema(),
- 400 => emqx_dashboard_swagger:error_codes([?BAD_REQUEST], <<"Bad Request">>)
- }
- }
- }.
- ref_authz_schema() ->
- emqx_schema:authz_fields().
- settings(get, _Params) ->
- {200, authorization_settings()};
- settings(put, #{
- body := #{
- <<"no_match">> := NoMatch,
- <<"deny_action">> := DenyAction,
- <<"cache">> := Cache
- }
- }) ->
- {ok, _} = emqx_authz_utils:update_config([authorization, no_match], NoMatch),
- {ok, _} = emqx_authz_utils:update_config(
- [authorization, deny_action], DenyAction
- ),
- {ok, _} = emqx_authz_utils:update_config([authorization, cache], Cache),
- {200, authorization_settings()}.
- authorization_settings() ->
- C = maps:remove(<<"sources">>, emqx:get_raw_config([authorization], #{})),
- Schema = emqx_hocon:make_schema(emqx_schema:authz_fields()),
- hocon_tconf:make_serializable(Schema, C, #{}).
|