コード例 #1
0
 async def delete_zone(self, nodeId):
     zone_name = validate_node_id(nodeId, "DNS_ZONE")[0]
     zone_info = await self.get_zone(zone_name)
     if zone_info is None:
         raise Exception("This zone doesn't exists.")
     r = await self.delete(f"/api/v1/servers/localhost/zones/{zone_name}")
     return 200 <= r.status < 300
コード例 #2
0
 async def update_zone(self, nodeId, soa):
     zone_name = validate_node_id(nodeId, "DNS_ZONE")[0]
     zone_info = await self.get_zone(zone_name)
     if zone_info is None:
         raise Exception("This zone doesn't exists.")
     await self.update_soa(zone_name, soa)
     return await self.get_zone(zone_name)
コード例 #3
0
 async def delete_middleware(self, nodeId):
     (name,) = validate_node_id(nodeId, "TRAEFIK_MW")
     middleware = await self.http_api.get_middleware(name)
     if middleware["provider"] != "redis":
         raise PMException("You can't delete this middleware")
     redis_name = name.split("@")[0] if "@" in name else name
     await self.delete_pattern(f"{self.root}/http/middlewares/{redis_name}/*")
     await asyncio.sleep(1)
コード例 #4
0
 async def delete_service(self, nodeId):
     protocol, name = validate_node_id(nodeId, "TRAEFIK_SERVICE")
     service = await self.http_api.get_service(protocol, name)
     if service["provider"] != "redis":
         raise PMException("You can't delete this service")
     redis_name = name.split("@")[0] if "@" in name else name
     await self.delete_pattern(f"{self.root}/{protocol}/services/{redis_name}/*")
     await asyncio.sleep(1)
コード例 #5
0
    async def enable_rule(self, nodeId, enabled):
        zone, name, type = validate_node_id(nodeId, "DNS_RULE")
        rule = await self.get_rule(zone, name, type)
        if rule is None:
            raise Exception("Rule not found")

        for record in rule["records"]:
            record["enabled"] = enabled
        return await self.rule_replace(zone, name, type, rule["ttl"],
                                       rule["records"])
コード例 #6
0
    async def delete_router(self, nodeId):
        protocol, name = validate_node_id(nodeId, "TRAEFIK_ROUTER")
        router = await self.http_api.get_router(protocol, name)
        if router["provider"] != "redis":
            raise PMException("You can't delete this router")

        redis_name = name.split("@")[0]
        await self.delete_pattern(f"{self.root}/{protocol}/routers/{redis_name}/*")

        await asyncio.sleep(1)
コード例 #7
0
ファイル: powerdns.py プロジェクト: yeswehack/pwn-machine
    async def update_rule(self, nodeId, ttl, records):
        zone, name, type = validate_node_id(nodeId, "DNS_RULE")

        if type == "LUA":
            record = records[0]
            escaped_content = escape_lua(record["content"])
            formated = f'A "{escaped_content}"'
            records = [{"content": formated, "enabled": record["enabled"]}]
            type = "LUA"
        return await self.rule_replace(zone, name, type, ttl, records)
コード例 #8
0
ファイル: traefik.py プロジェクト: ealvar3z/pwn-machine
    async def update_middleware(self, nodeId, type_name, patch):
        (name, ) = validate_node_id(nodeId, "TRAEFIK_MW")
        middleware = await self.http_api.get_middleware(name)
        if middleware["provider"] != "redis":
            raise PMException("You can't edit this middleware")

        prefix = f"{self.root}/http/middlewares/{middleware['name'].split('@')[0]}/{type_name}"

        for key, option in patch.items():
            await self.delete_pattern(f"{prefix}/{key}/*")
            await self.create_from_object({key: option}, prefix)
        await asyncio.sleep(1)
コード例 #9
0
    async def check_rule(self, nodeId):
        zone, name, type = validate_node_id(nodeId, "DNS_RULE")
        local_rule = await self.get_rule(zone, name, type)
        local_records = sorted(
            [r["content"] for r in local_rule["records"] if not r["disabled"]])

        results = [{"name": "Local", "records": local_records}]
        for resolver_name, resolver_ip in PROPAGATION_RESOLVERS.items():
            results.append({
                "name": f"{resolver_name} ({resolver_ip})",
                "records": resolve_rule(name, type, resolver_ip)
            })
        return results
コード例 #10
0
    async def update_rule(self, nodeId, ttl, records):
        from app.dns.rules import escape_lua
        zone, name, type = validate_node_id(nodeId, "DNS_RULE")

        if type == "LUA":
            old_rule = await self.get_rule(zone, name, type)
            real_type = old_rule["records"][0]["content"].split(" ")[0]
            record = records[0]
            escaped_content = escape_lua(record["content"])
            formated = f'{real_type} "{escaped_content}"'
            records = [{"content": formated, "enabled": record["enabled"]}]
            type = "LUA"
        return await self.rule_replace(zone, name, type, ttl, records)
コード例 #11
0
ファイル: traefik.py プロジェクト: ealvar3z/pwn-machine
    async def update_router(self, nodeId, patch):
        protocol, name = validate_node_id(nodeId, "TRAEFIK_ROUTER")
        router = await self.http_api.get_router(protocol, name)
        if router["provider"] != "redis":
            raise PMException("You can't edit this router")

        prefix = (
            f"{self.root}/{router['protocol']}/routers/{router['name'].split('@')[0]}"
        )

        for key, option in patch.items():
            await self.delete_pattern(f"{prefix}/{key}/*")
            await self.create_from_object({key: option}, prefix)
        await asyncio.sleep(1)
コード例 #12
0
 async def delete_rule(self, nodeId):
     zone, name, type = validate_node_id(nodeId, "DNS_RULE")
     rrset = {"name": name, "type": type, "changetype": "DELETE"}
     r = await self.patch(f"/api/v1/servers/localhost/zones/{zone}",
                          {"rrsets": [rrset]})
     return 200 <= r.status < 300