| @ -0,0 +1,123 @@ | |||
| ####### Permissions module ########## | |||
| loadmodule "permissions.so" | |||
| modparam("permissions", "db_url", "KAZOO_DB_URL") | |||
| modparam("permissions", "db_mode", KZ_PERMISSIONS_CACHE) | |||
| modparam("permissions", "peer_tag_avp", "$avp(trusted_x_header)") | |||
| modparam("rtimer", "timer", "name=trusted_reload;interval=5;mode=1;") | |||
| modparam("rtimer", "exec", "timer=trusted_reload;route=TRUSTED_RELOAD") | |||
| modparam("rtimer", "exec", "timer=trusted_reload;route=TRUSTED_QUERY") | |||
| modparam("pv", "shvset", "trusted_query=i:1") | |||
| #!trydef TRUSTED_AMQP_FLAGS 4096 | |||
| route[TRUSTED_LOAD] | |||
| { | |||
| if (!t_newtran()) { | |||
| xlog("L_ERROR", "trusted|log|failed to create transaction to query for acl\n"); | |||
| return; | |||
| } | |||
| $shv(trusted_query) = 0; | |||
| $var(amqp_payload_request) = $_s({"Event-Category" : "trusted" , "Event-Name" : "query"}); | |||
| $var(amqp_routing_key) = "trusted.query"; | |||
| xlog("L_DEBUG", "$ci|amqp|publishing to acl => $var(amqp_routing_key) : $var(amqp_payload_request)\n"); | |||
| if(kazoo_async_query("trusted", $var(amqp_routing_key), $var(amqp_payload_request), "KZ_ACL_REPLY", "KZ_ACL_TIMEOUT", "$def(TRUSTED_AMQP_FLAGS)") != 1) { | |||
| xlog("L_WARNING", "$ci|log|failed to send trusted query\n"); | |||
| $shv(trusted_query) = 1; | |||
| } | |||
| } | |||
| failure_route[KZ_ACL_TIMEOUT] | |||
| { | |||
| if($(kzR{kz.json,Event-Name}) == "message_returned" ) { | |||
| xlog("L_WARNING", "$ci|amqp|message was returned by broker $(kzR{kz.json,Error-Code}) $(kzR{kz.json,Error-Reason})\n"); | |||
| } else { | |||
| xlog("L_WARNING", "$ci|end|failed $T_reply_code $T_reply_reason [$T(id_index):$T(id_label)] querying trusted\n"); | |||
| } | |||
| $shv(trusted_query) = 1; | |||
| # this is needed because of async query that creates a transaction | |||
| t_drop(); | |||
| } | |||
| onreply_route[KZ_ACL_REPLY] | |||
| { | |||
| xlog("L_DEBUG", "trusted|query|got reply\n"); | |||
| avp_delete("$avp(TrustedKeys)/g"); | |||
| if(kazoo_json_keys($kzR, "Trusted", "$avp(TrustedKeys)") != 1) { | |||
| xlog("L_WARNING", "trusted|reply|no keys for Trusted\n"); | |||
| # this is needed because of async query that creates a transaction | |||
| t_drop(); | |||
| return; | |||
| } | |||
| sql_query("exec", "delete from address"); | |||
| $var(total) = 0; | |||
| $var(Count) = $cnt($avp(TrustedKeys)); | |||
| $var(Idx) = 0; | |||
| while($var(Idx) < $var(Count)) { | |||
| $var(KeyName) = $(avp(TrustedKeys)[$var(Idx)]); | |||
| $var(Key) = $(var(KeyName){s.replace,.,%}); | |||
| $var(token) = $(kzR{kz.json,Trusted.$var(Key).token}); | |||
| $var(cidr_count) = $(kzR{kz.json.count, Trusted.$var(Key).cidrs}); | |||
| $var(cidr_idx) = 0; | |||
| while($var(cidr_idx) < $var(cidr_count)) { | |||
| $var(cidr) = $(kzR{kz.json,Trusted.$var(Key).cidrs[$var(cidr_idx)]}); | |||
| $var(ip) = $(var(cidr){s.select,0,/}); | |||
| $var(mask) = $(var(cidr){s.select,1,/}); | |||
| $var(sql) = $_s(insert into address(ip_addr, mask, tag) values("$var(ip)", $var(mask), "$var(token)")); | |||
| sql_query("exec", "$var(sql)"); | |||
| $var(cidr_idx) = $var(cidr_idx) + 1; | |||
| $var(total) = $var(total) + 1; | |||
| } | |||
| $var(Idx) = $var(Idx) + 1; | |||
| } | |||
| xlog("L_NOTICE", "trusted|query|loaded $var(total) entries into address table\n"); | |||
| $shv(trusted_reload) = 1; | |||
| # this is needed because of async query that creates a transaction | |||
| t_drop(); | |||
| } | |||
| route[RELOAD_TRUSTED] | |||
| { | |||
| jsonrpc_exec('{"jsonrpc": "2.0", "method": "permissions.addressReload"}'); | |||
| xlog("L_INFO", "trusted|reload|$(jsonrpl(body){kz.json,result})\n"); | |||
| } | |||
| route[TRUSTED_RELOAD] | |||
| { | |||
| if($shv(trusted_reload) == 1) { | |||
| route(RELOAD_TRUSTED); | |||
| }; | |||
| $shv(trusted_reload) = 0; | |||
| } | |||
| route[TRUSTED_QUERY] | |||
| { | |||
| if($shv(trusted_query) == 1) { | |||
| route(TRUSTED_LOAD); | |||
| }; | |||
| } | |||
| route[TRUSTED_BINDINGS] | |||
| { | |||
| #!import_file "trusted-custom-bindings.cfg" | |||
| #!ifndef TRUSTED_CUSTOM_BINDINGS | |||
| $var(payload) = $_s({"name": "trusted-reload", "exchange": "trusted", "type": "topic", "queue": "trusted-reload-MY_HOSTNAME", "routing": "trusted.reload", "federate": 1 }); | |||
| kazoo_subscribe("$var(payload)"); | |||
| #!endif | |||
| } | |||
| event_route[kazoo:consumer-event-trusted-reload] | |||
| { | |||
| xlog("L_NOTICE", "received trusted reload\n"); | |||
| $shv(trusted_query) = 1; | |||
| } | |||