Split rabbit_access_control up.
This commit is contained in:
		
							parent
							
								
									a32f1193ea
								
							
						
					
					
						commit
						b8cc1a3c55
					
				| 
						 | 
				
			
			@ -241,7 +241,7 @@ handle_call({get_channel, Name}, _From, State = #state{tables = Tables}) ->
 | 
			
		|||
 | 
			
		||||
handle_call({get_overview, Username}, _From, State = #state{tables = Tables}) ->
 | 
			
		||||
    VHosts = case Username of
 | 
			
		||||
                 all -> rabbit_access_control:list_vhosts();
 | 
			
		||||
                 all -> rabbit_vhost:list();
 | 
			
		||||
                 _   -> rabbit_mgmt_util:vhosts(Username)
 | 
			
		||||
             end,
 | 
			
		||||
    Qs0 = [rabbit_mgmt_format:queue(Q) || V <- VHosts,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -85,7 +85,7 @@ is_authorized(ReqData, Context, Fun) ->
 | 
			
		|||
vhost(ReqData) ->
 | 
			
		||||
    case id(vhost, ReqData) of
 | 
			
		||||
        none  -> none;
 | 
			
		||||
        VHost -> case rabbit_access_control:vhost_exists(VHost) of
 | 
			
		||||
        VHost -> case rabbit_vhost:exists(VHost) of
 | 
			
		||||
                     true  -> VHost;
 | 
			
		||||
                     false -> not_found
 | 
			
		||||
                 end
 | 
			
		||||
| 
						 | 
				
			
			@ -275,8 +275,7 @@ amqp_request(VHost, ReqData, Context, Method) ->
 | 
			
		|||
 | 
			
		||||
all_or_one_vhost(ReqData, Fun) ->
 | 
			
		||||
    case rabbit_mgmt_util:vhost(ReqData) of
 | 
			
		||||
        none      -> lists:append(
 | 
			
		||||
                       [Fun(V) || V <- rabbit_access_control:list_vhosts()]);
 | 
			
		||||
        none      -> lists:append([Fun(V) || V <- rabbit_vhost:list()]);
 | 
			
		||||
        not_found -> vhost_not_found;
 | 
			
		||||
        VHost     -> Fun(VHost)
 | 
			
		||||
    end.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -186,7 +186,7 @@ add_vhost(VHost) ->
 | 
			
		|||
    rabbit_mgmt_wm_vhost:put_vhost(VHostName).
 | 
			
		||||
 | 
			
		||||
add_permission(Permission) ->
 | 
			
		||||
    rabbit_access_control:set_permissions(pget(user,      Permission),
 | 
			
		||||
    rabbit_auth_backend_internal:set_permissions(pget(user,      Permission),
 | 
			
		||||
                                          pget(vhost,     Permission),
 | 
			
		||||
                                          pget(configure, Permission),
 | 
			
		||||
                                          pget(write,     Permission),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -58,7 +58,7 @@ accept_content(ReqData, Context) ->
 | 
			
		|||
            rabbit_mgmt_util:with_decode(
 | 
			
		||||
              [configure, write, read], ReqData, Context,
 | 
			
		||||
              fun([Conf, Write, Read]) ->
 | 
			
		||||
                      rabbit_access_control:set_permissions(
 | 
			
		||||
                      rabbit_auth_backend_internal:set_permissions(
 | 
			
		||||
                        User, VHost, Conf, Write, Read),
 | 
			
		||||
                      {true, ReqData, Context}
 | 
			
		||||
              end)
 | 
			
		||||
| 
						 | 
				
			
			@ -67,7 +67,7 @@ accept_content(ReqData, Context) ->
 | 
			
		|||
delete_resource(ReqData, Context) ->
 | 
			
		||||
    User = rabbit_mgmt_util:id(user, ReqData),
 | 
			
		||||
    VHost = rabbit_mgmt_util:id(vhost, ReqData),
 | 
			
		||||
    rabbit_access_control:clear_permissions(User, VHost),
 | 
			
		||||
    rabbit_auth_backend_internal:clear_permissions(User, VHost),
 | 
			
		||||
    {true, ReqData, Context}.
 | 
			
		||||
 | 
			
		||||
is_authorized(ReqData, Context) ->
 | 
			
		||||
| 
						 | 
				
			
			@ -77,14 +77,15 @@ is_authorized(ReqData, Context) ->
 | 
			
		|||
 | 
			
		||||
perms(ReqData) ->
 | 
			
		||||
    User = rabbit_mgmt_util:id(user, ReqData),
 | 
			
		||||
    case rabbit_access_control:lookup_user(User) of
 | 
			
		||||
    case rabbit_auth_backend_internal:lookup_user(User) of
 | 
			
		||||
        {ok, _} ->
 | 
			
		||||
            case rabbit_mgmt_util:vhost(ReqData) of
 | 
			
		||||
                not_found ->
 | 
			
		||||
                    not_found;
 | 
			
		||||
                VHost ->
 | 
			
		||||
                    Perms = rabbit_access_control:list_user_vhost_permissions(
 | 
			
		||||
                              User, VHost),
 | 
			
		||||
                    Perms =
 | 
			
		||||
                        rabbit_auth_backend_internal:list_user_vhost_permissions(
 | 
			
		||||
                          User, VHost),
 | 
			
		||||
                    case Perms of
 | 
			
		||||
                        [{Configure, Write, Read}] ->
 | 
			
		||||
                            {User, VHost, Configure, Write, Read};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -39,4 +39,4 @@ is_authorized(ReqData, Context) ->
 | 
			
		|||
 | 
			
		||||
permissions() ->
 | 
			
		||||
    [rabbit_mgmt_format:permissions(P) ||
 | 
			
		||||
        P <- rabbit_access_control:list_permissions()].
 | 
			
		||||
        P <- rabbit_auth_backend_internal:list_permissions()].
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,7 +29,7 @@ content_types_provided(ReqData, Context) ->
 | 
			
		|||
 | 
			
		||||
to_json(ReqData, Context) ->
 | 
			
		||||
    User = rabbit_mgmt_util:id(user, ReqData),
 | 
			
		||||
    Perms = rabbit_access_control:list_user_permissions(User),
 | 
			
		||||
    Perms = rabbit_auth_backend_internal:list_user_permissions(User),
 | 
			
		||||
    rabbit_mgmt_util:reply_list(
 | 
			
		||||
      [rabbit_mgmt_format:permissions({User, VHost,
 | 
			
		||||
                                       Conf, Write, Read}) ||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,7 +29,7 @@ content_types_provided(ReqData, Context) ->
 | 
			
		|||
 | 
			
		||||
to_json(ReqData, Context) ->
 | 
			
		||||
    VHost = rabbit_mgmt_util:id(vhost, ReqData),
 | 
			
		||||
    Perms = rabbit_access_control:list_vhost_permissions(VHost),
 | 
			
		||||
    Perms = rabbit_auth_backend_internal:list_vhost_permissions(VHost),
 | 
			
		||||
    rabbit_mgmt_util:reply_list(
 | 
			
		||||
      [rabbit_mgmt_format:permissions({User, VHost,
 | 
			
		||||
                                       Conf, Write, Read}) ||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -57,7 +57,7 @@ accept_content(ReqData, Context) ->
 | 
			
		|||
 | 
			
		||||
delete_resource(ReqData, Context) ->
 | 
			
		||||
    User = rabbit_mgmt_util:id(user, ReqData),
 | 
			
		||||
    rabbit_access_control:delete_user(User),
 | 
			
		||||
    rabbit_auth_backend_internal:delete_user(User),
 | 
			
		||||
    {true, ReqData, Context}.
 | 
			
		||||
 | 
			
		||||
is_authorized(ReqData, Context) ->
 | 
			
		||||
| 
						 | 
				
			
			@ -66,35 +66,35 @@ is_authorized(ReqData, Context) ->
 | 
			
		|||
%%--------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
user(ReqData) ->
 | 
			
		||||
    rabbit_access_control:lookup_user(rabbit_mgmt_util:id(user, ReqData)).
 | 
			
		||||
    rabbit_auth_backend_internal:lookup_user(rabbit_mgmt_util:id(user, ReqData)).
 | 
			
		||||
 | 
			
		||||
put_user(User) ->
 | 
			
		||||
    case {proplists:is_defined(password, User),
 | 
			
		||||
          proplists:is_defined(password_hash, User)} of
 | 
			
		||||
        {true, _} ->
 | 
			
		||||
            Pass = proplists:get_value(password, User),
 | 
			
		||||
            put_user(User, Pass, fun rabbit_access_control:change_password/2);
 | 
			
		||||
            put_user(User, Pass, fun rabbit_auth_backend_internal:change_password/2);
 | 
			
		||||
        {_, true} ->
 | 
			
		||||
            Hash = base64:decode(proplists:get_value(password_hash, User)),
 | 
			
		||||
            put_user(User, Hash,
 | 
			
		||||
                     fun rabbit_access_control:change_password_hash/2);
 | 
			
		||||
                     fun rabbit_auth_backend_internal:change_password_hash/2);
 | 
			
		||||
        _ ->
 | 
			
		||||
            put_user(User, <<>>,
 | 
			
		||||
                     fun rabbit_access_control:change_password_hash/2)
 | 
			
		||||
                     fun rabbit_auth_backend_internal:change_password_hash/2)
 | 
			
		||||
    end.
 | 
			
		||||
 | 
			
		||||
put_user(User, PWArg, PWFun) ->
 | 
			
		||||
    Username = proplists:get_value(name, User),
 | 
			
		||||
    IsAdmin = proplists:get_value(administrator, User),
 | 
			
		||||
    case rabbit_access_control:lookup_user(Username) of
 | 
			
		||||
    case rabbit_auth_backend_internal:lookup_user(Username) of
 | 
			
		||||
        {error, not_found} ->
 | 
			
		||||
            rabbit_access_control:add_user(
 | 
			
		||||
            rabbit_auth_backend_internal:add_user(
 | 
			
		||||
              Username, rabbit_guid:binstring_guid("tmp_"));
 | 
			
		||||
        _ ->
 | 
			
		||||
            ok
 | 
			
		||||
    end,
 | 
			
		||||
    PWFun(Username, PWArg),
 | 
			
		||||
    case rabbit_mgmt_util:parse_bool(IsAdmin) of
 | 
			
		||||
        true  -> rabbit_access_control:set_admin(Username);
 | 
			
		||||
        false -> rabbit_access_control:clear_admin(Username)
 | 
			
		||||
        true  -> rabbit_auth_backend_internal:set_admin(Username);
 | 
			
		||||
        false -> rabbit_auth_backend_internal:clear_admin(Username)
 | 
			
		||||
    end.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -38,6 +38,6 @@ is_authorized(ReqData, Context) ->
 | 
			
		|||
 | 
			
		||||
users() ->
 | 
			
		||||
    [begin
 | 
			
		||||
         {ok, User} = rabbit_access_control:lookup_user(U),
 | 
			
		||||
         {ok, User} = rabbit_auth_backend_internal:lookup_user(U),
 | 
			
		||||
         rabbit_mgmt_format:internal_user(User)
 | 
			
		||||
     end || {U, _} <- rabbit_access_control:list_users()].
 | 
			
		||||
     end || {U, _} <- rabbit_auth_backend_internal:list_users()].
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -36,7 +36,7 @@ allowed_methods(ReqData, Context) ->
 | 
			
		|||
    {['HEAD', 'GET', 'PUT', 'DELETE'], ReqData, Context}.
 | 
			
		||||
 | 
			
		||||
resource_exists(ReqData, Context) ->
 | 
			
		||||
    {rabbit_access_control:vhost_exists(id(ReqData)), ReqData, Context}.
 | 
			
		||||
    {rabbit_vhost:exists(id(ReqData)), ReqData, Context}.
 | 
			
		||||
 | 
			
		||||
to_json(ReqData, Context) ->
 | 
			
		||||
    VHost = [{name, id(ReqData)}],
 | 
			
		||||
| 
						 | 
				
			
			@ -48,7 +48,7 @@ accept_content(ReqData, Context) ->
 | 
			
		|||
 | 
			
		||||
delete_resource(ReqData, Context) ->
 | 
			
		||||
    VHost = id(ReqData),
 | 
			
		||||
    rabbit_access_control:delete_vhost(VHost),
 | 
			
		||||
    rabbit_vhost:delete(VHost),
 | 
			
		||||
    {true, ReqData, Context}.
 | 
			
		||||
 | 
			
		||||
is_authorized(ReqData, Context) ->
 | 
			
		||||
| 
						 | 
				
			
			@ -60,7 +60,7 @@ id(ReqData) ->
 | 
			
		|||
    rabbit_mgmt_util:id(vhost, ReqData).
 | 
			
		||||
 | 
			
		||||
put_vhost(VHost) ->
 | 
			
		||||
    case rabbit_access_control:vhost_exists(VHost) of
 | 
			
		||||
    case rabbit_vhost:exists(VHost) of
 | 
			
		||||
        true  -> ok;
 | 
			
		||||
        false -> rabbit_access_control:add_vhost(VHost)
 | 
			
		||||
        false -> rabbit_vhost:add(VHost)
 | 
			
		||||
    end.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -38,7 +38,7 @@ is_authorized(ReqData, Context) ->
 | 
			
		|||
%%--------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
vhosts() ->
 | 
			
		||||
    format(rabbit_access_control:list_vhosts()).
 | 
			
		||||
    format(rabbit_vhost:list()).
 | 
			
		||||
 | 
			
		||||
format(Vs) ->
 | 
			
		||||
    [[{name, N}] || N <- Vs].
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue