Procházet zdrojové kódy

chore(authz api): update swagger json

Signed-off-by: zhanghongtong <rory-z@outlook.com>
zhanghongtong před 4 roky
rodič
revize
c6ed72df3e

+ 404 - 53
apps/emqx_authz/src/emqx_authz_api_schema.erl

@@ -41,7 +41,15 @@ definitions() ->
                  ]
     },
     Sources = #{
-        oneOf => [ minirest:ref(<<"redis">>)
+        oneOf => [ minirest:ref(<<"http">>)
+                 , minirest:ref(<<"mongo_single">>)
+                 , minirest:ref(<<"mongo_rs">>)
+                 , minirest:ref(<<"mongo_sharded">>)
+                 , minirest:ref(<<"mysql">>)
+                 , minirest:ref(<<"pgsql">>)
+                 , minirest:ref(<<"redis_single">>)
+                 , minirest:ref(<<"redis_sentinel">>)
+                 , minirest:ref(<<"redis_cluster">>)
                  , minirest:ref(<<"file">>)
                  ]
     },
@@ -56,9 +64,309 @@ definitions() ->
          verify => #{type => boolean, example => false}
       }
     },
-    Redis = #{
+    HTTP = #{
         type => object,
-        required => [type, enable, config, cmd],
+        required => [ type
+                    , enable
+                    , method
+                    , headers
+                    , request_timeout
+                    , connect_timeout
+                    , max_retries
+                    , retry_interval
+                    , pool_type
+                    , pool_size
+                    , enable_pipelining
+                    , ssl
+                    ],
+        properties => #{
+            type => #{
+                type => string,
+                enum => [<<"http">>],
+                example => <<"http">>
+            },
+            enable => #{
+                type => boolean,
+                example => true
+            },
+            url => #{
+                type => string,
+                example => <<"https://emqx.com">>
+            },
+            method => #{
+                type => string,
+                enum => [<<"get">>, <<"post">>, <<"put">>],
+                example => <<"get">>
+            },
+            headers => #{type => object},
+            body => #{type => object},
+            connect_timeout => #{type => integer},
+            max_retries => #{type => integer},
+            retry_interval => #{type => integer},
+            pool_type => #{
+                type => string,
+                enum => [<<"random">>, <<"hash">>],
+                example => <<"random">>
+            },
+            pool_size => #{type => integer},
+            enable_pipelining => #{type => boolean},
+            ssl => minirest:ref(<<"ssl">>)
+        }
+    },
+    MongoSingle= #{
+        type => object,
+        required => [ type
+                    , enable
+                    , collection
+                    , find
+                    , mongo_type
+                    , server
+                    , pool_size
+                    , username
+                    , password
+                    , auth_source
+                    , database
+                    , topology
+                    , ssl
+                    ],
+        properties => #{
+            type => #{
+                type => string,
+                enum => [<<"mongo">>],
+                example => <<"mongo">>
+            },
+            enable => #{
+                type => boolean,
+                example => true
+            },
+            collection => #{type => string},
+            find => #{type => object},
+            mongo_type => #{type => string,
+                            enum => [<<"single">>],
+                            example => <<"single">>},
+            server => #{type => string, example => <<"127.0.0.1:27017">>},
+            pool_size => #{type => integer},
+            username => #{type => string},
+            password => #{type => string},
+            auth_source => #{type => string},
+            database => #{type => string},
+            topology => #{type => object,
+                          properties => #{
+                            pool_size => #{type => integer},
+                            max_overflow => #{type => integer},
+                            overflow_ttl => #{type => integer},
+                            overflow_check_period => #{type => integer},
+                            local_threshold_ms => #{type => integer},
+                            connect_timeout_ms => #{type => integer},
+                            socket_timeout_ms => #{type => integer},
+                            server_selection_timeout_ms => #{type => integer},
+                            wait_queue_timeout_ms => #{type => integer},
+                            heartbeat_frequency_ms => #{type => integer},
+                            min_heartbeat_frequency_ms => #{type => integer}
+                          }
+                         },
+            ssl => minirest:ref(<<"ssl">>)
+        }
+    },
+    MongoRs= #{
+        type => object,
+        required => [ type
+                    , enable
+                    , collection
+                    , find
+                    , mongo_type
+                    , servers
+                    , replica_set_name
+                    , pool_size
+                    , username
+                    , password
+                    , auth_source
+                    , database
+                    , topology
+                    , ssl
+                    ],
+        properties => #{
+            type => #{
+                type => string,
+                enum => [<<"mongo">>],
+                example => <<"mongo">>
+            },
+            enable => #{
+                type => boolean,
+                example => true
+            },
+            collection => #{type => string},
+            find => #{type => object},
+            mongo_type => #{type => string,
+                            enum => [<<"rs">>],
+                            example => <<"rs">>},
+            servers => #{type => array,
+                         items => #{type => string,example => <<"127.0.0.1:27017">>}},
+            replica_set_name => #{type => string},
+            pool_size => #{type => integer},
+            username => #{type => string},
+            password => #{type => string},
+            auth_source => #{type => string},
+            database => #{type => string},
+            topology => #{type => object,
+                          properties => #{
+                            pool_size => #{type => integer},
+                            max_overflow => #{type => integer},
+                            overflow_ttl => #{type => integer},
+                            overflow_check_period => #{type => integer},
+                            local_threshold_ms => #{type => integer},
+                            connect_timeout_ms => #{type => integer},
+                            socket_timeout_ms => #{type => integer},
+                            server_selection_timeout_ms => #{type => integer},
+                            wait_queue_timeout_ms => #{type => integer},
+                            heartbeat_frequency_ms => #{type => integer},
+                            min_heartbeat_frequency_ms => #{type => integer}
+                          }
+                         },
+            ssl => minirest:ref(<<"ssl">>)
+        }
+    },
+    MongoSharded = #{
+        type => object,
+        required => [ type
+                    , enable
+                    , collection
+                    , find
+                    , mongo_type
+                    , servers
+                    , pool_size
+                    , username
+                    , password
+                    , auth_source
+                    , database
+                    , topology
+                    , ssl
+                    ],
+        properties => #{
+            type => #{
+                type => string,
+                enum => [<<"mongo">>],
+                example => <<"mongo">>
+            },
+            enable => #{
+                type => boolean,
+                example => true
+            },
+            collection => #{type => string},
+            find => #{type => object},
+            mongo_type => #{type => string,
+                            enum => [<<"sharded">>],
+                            example => <<"sharded">>},
+            servers => #{type => array,
+                         items => #{type => string,example => <<"127.0.0.1:27017">>}},
+            pool_size => #{type => integer},
+            username => #{type => string},
+            password => #{type => string},
+            auth_source => #{type => string},
+            database => #{type => string},
+            topology => #{type => object,
+                          properties => #{
+                            pool_size => #{type => integer},
+                            max_overflow => #{type => integer},
+                            overflow_ttl => #{type => integer},
+                            overflow_check_period => #{type => integer},
+                            local_threshold_ms => #{type => integer},
+                            connect_timeout_ms => #{type => integer},
+                            socket_timeout_ms => #{type => integer},
+                            server_selection_timeout_ms => #{type => integer},
+                            wait_queue_timeout_ms => #{type => integer},
+                            heartbeat_frequency_ms => #{type => integer},
+                            min_heartbeat_frequency_ms => #{type => integer}
+                          }
+                         },
+            ssl => minirest:ref(<<"ssl">>)
+        }
+    },
+    Mysql = #{
+        type => object,
+        required => [ type
+                    , enable
+                    , sql
+                    , server
+                    , database
+                    , pool_size
+                    , username
+                    , password
+                    , auto_reconnect
+                    , ssl
+                    ],
+        properties => #{
+            type => #{
+                type => string,
+                enum => [<<"mysql">>],
+                example => <<"mysql">>
+            },
+            enable => #{
+                type => boolean,
+                example => true
+            },
+            sql => #{type => string},
+            server => #{type => string,
+                        example => <<"127.0.0.1:3306">>
+                       },
+            database => #{type => string},
+            pool_size => #{type => integer},
+            username => #{type => string},
+            password => #{type => string},
+            auto_reconnect => #{type => boolean,
+                                example => true
+                               },
+            ssl => minirest:ref(<<"ssl">>)
+        }
+    },
+    Pgsql = #{
+        type => object,
+        required => [ type
+                    , enable
+                    , sql
+                    , server
+                    , database
+                    , pool_size
+                    , username
+                    , password
+                    , auto_reconnect
+                    , ssl
+                    ],
+        properties => #{
+            type => #{
+                type => string,
+                enum => [<<"pgsql">>],
+                example => <<"pgsql">>
+            },
+            enable => #{
+                type => boolean,
+                example => true
+            },
+            sql => #{type => string},
+            server => #{type => string,
+                        example => <<"127.0.0.1:5432">>
+                       },
+            database => #{type => string},
+            pool_size => #{type => integer},
+            username => #{type => string},
+            password => #{type => string},
+            auto_reconnect => #{type => boolean,
+                                example => true
+                               },
+            ssl => minirest:ref(<<"ssl">>)
+        }
+    },
+    RedisSingle = #{
+        type => object,
+        required => [ type
+                    , enable
+                    , cmd
+                    , server
+                    , redis_type
+                    , pool_size
+                    , auto_reconnect
+                    , ssl
+                    ],
         properties => #{
             type => #{
                 type => string,
@@ -69,59 +377,94 @@ definitions() ->
                 type => boolean,
                 example => true
             },
-            config => #{
-                oneOf => [ #{type => object,
-                             required => [server, redis_type, pool_size, auto_reconnect],
-                             properties => #{
-                                server => #{type => string, example => <<"127.0.0.1:3306">>},
-                                redis_type => #{type => string,
-                                                enum => [<<"single">>],
-                                                example => <<"single">>},
-                                pool_size => #{type => integer},
-                                auto_reconnect => #{type => boolean, example => true},
-                                password => #{type => string},
-                                database => #{type => integer},
-                                ssl => minirest:ref(<<"ssl">>)
-                             }
-                            }
-                         , #{type => object,
-                             required => [servers, redis_type, sentinel, pool_size, auto_reconnect],
-                             properties => #{
-                                servers => #{type => array,
-                                             items => #{type => string,example => <<"127.0.0.1:3306">>}},
-                                redis_type => #{type => string,
-                                                enum => [<<"sentinel">>],
-                                                example => <<"sentinel">>},
-                                sentinel => #{type => string},
-                                pool_size => #{type => integer},
-                                auto_reconnect => #{type => boolean, example => true},
-                                password => #{type => string},
-                                database => #{type => integer},
-                                ssl => minirest:ref(<<"ssl">>)
-                             }
-                            }
-                         , #{type => object,
-                             required => [servers, redis_type, pool_size, auto_reconnect],
-                             properties => #{
-                                servers => #{type => array,
-                                             items => #{type => string, example => <<"127.0.0.1:3306">>}},
-                                redis_type => #{type => string,
-                                                enum => [<<"cluster">>],
-                                                example => <<"cluster">>},
-                                pool_size => #{type => integer},
-                                auto_reconnect => #{type => boolean, example => true},
-                                password => #{type => string},
-                                database => #{type => integer},
-                                ssl => minirest:ref(<<"ssl">>)
-                             }
-                            }
-                         ],
-                type => object
+            cmd => #{
+                type => string,
+                example => <<"HGETALL mqtt_authz">>
+            },
+            server => #{type => string, example => <<"127.0.0.1:3306">>},
+            redis_type => #{type => string,
+                            enum => [<<"single">>],
+                            example => <<"single">>},
+            pool_size => #{type => integer},
+            auto_reconnect => #{type => boolean, example => true},
+            password => #{type => string},
+            database => #{type => integer},
+            ssl => minirest:ref(<<"ssl">>)
+        }
+    },
+    RedisSentinel= #{
+        type => object,
+        required => [ type
+                    , enable
+                    , cmd
+                    , servers
+                    , redis_type
+                    , sentinel
+                    , pool_size
+                    , auto_reconnect
+                    , ssl
+                    ],
+        properties => #{
+            type => #{
+                type => string,
+                enum => [<<"redis">>],
+                example => <<"redis">>
+            },
+            enable => #{
+                type => boolean,
+                example => true
             },
             cmd => #{
                 type => string,
                 example => <<"HGETALL mqtt_authz">>
-            }
+            },
+            servers => #{type => array,
+                         items => #{type => string,example => <<"127.0.0.1:3306">>}},
+            redis_type => #{type => string,
+                            enum => [<<"sentinel">>],
+                            example => <<"sentinel">>},
+            sentinel => #{type => string},
+            pool_size => #{type => integer},
+            auto_reconnect => #{type => boolean, example => true},
+            password => #{type => string},
+            database => #{type => integer},
+            ssl => minirest:ref(<<"ssl">>)
+        }
+    },
+    RedisCluster= #{
+        type => object,
+        required => [ type
+                    , enable
+                    , cmd
+                    , servers
+                    , redis_type
+                    , pool_size
+                    , auto_reconnect
+                    , ssl],
+        properties => #{
+            type => #{
+                type => string,
+                enum => [<<"redis">>],
+                example => <<"redis">>
+            },
+            enable => #{
+                type => boolean,
+                example => true
+            },
+            cmd => #{
+                type => string,
+                example => <<"HGETALL mqtt_authz">>
+            },
+            servers => #{type => array,
+                         items => #{type => string, example => <<"127.0.0.1:3306">>}},
+            redis_type => #{type => string,
+                            enum => [<<"cluster">>],
+                            example => <<"cluster">>},
+            pool_size => #{type => integer},
+            auto_reconnect => #{type => boolean, example => true},
+            password => #{type => string},
+            database => #{type => integer},
+            ssl => minirest:ref(<<"ssl">>)
         }
     },
     File = #{
@@ -153,6 +496,14 @@ definitions() ->
     [ #{<<"returned_sources">> => RetruenedSources}
     , #{<<"sources">> => Sources}
     , #{<<"ssl">> => SSL}
-    , #{<<"redis">> => Redis}
+    , #{<<"http">> => HTTP}
+    , #{<<"mongo_single">> => MongoSingle}
+    , #{<<"mongo_rs">> => MongoRs}
+    , #{<<"mongo_sharded">> => MongoSharded}
+    , #{<<"mysql">> => Mysql}
+    , #{<<"pgsql">> => Pgsql}
+    , #{<<"redis_single">> => RedisSingle}
+    , #{<<"redis_sentinel">> => RedisSentinel}
+    , #{<<"redis_cluster">> => RedisCluster}
     , #{<<"file">> => File}
     ].

+ 4 - 3
apps/emqx_authz/src/emqx_authz_schema.erl

@@ -52,6 +52,7 @@ fields(http_get) ->
     , {enable, #{type => boolean(),
                  default => true}}
     , {url, #{type => url()}}
+    , {method,  #{type => get, default => get }}
     , {headers, #{type => map(),
                   default => #{ <<"accept">> => <<"application/json">>
                               , <<"cache-control">> => <<"no-cache">>
@@ -71,7 +72,6 @@ fields(http_get) ->
                                end
                  }
       }
-    , {method,  #{type => get, default => get }}
     , {request_timeout,  #{type => timeout(), default => 30000 }}
     ]  ++ proplists:delete(base_url, emqx_connector_http:fields(config));
 fields(http_post) ->
@@ -79,6 +79,8 @@ fields(http_post) ->
     , {enable, #{type => boolean(),
                  default => true}}
     , {url, #{type => url()}}
+    , {method,  #{type => hoconsc:enum([post, put]),
+                  default => get}}
     , {headers, #{type => map(),
                   default => #{ <<"accept">> => <<"application/json">>
                               , <<"cache-control">> => <<"no-cache">>
@@ -100,8 +102,7 @@ fields(http_post) ->
                                end
                  }
       }
-    , {method,  #{type => hoconsc:enum([post, put]),
-                  default => get}}
+    , {request_timeout,  #{type => timeout(), default => 30000 }}
     , {body, #{type => map(),
                nullable => true
               }