示例#1
0
async def update(
        zone_id: int,
        form: ZoneCreateForm,
        zone_repo: ZoneRepo = Depends(ZoneRepo()),
        dns_server_repo: DnsServerRepo = Depends(DnsServerRepo()),
        http_server_repo: DnsServerRepo = Depends(HttpServerRepo()),
        token: TokenPayload = Depends(ScopedTo("zone:update")),
        includes: List[str] = Query(None),
):
    data = only(dict(form), ["ip", "domain"])

    if "domain" in data:
        data["domain"] = data["domain"].lower()
        existing_domain = zone_repo.first(domain=data["domain"]).results()
        if existing_domain and existing_domain.id != zone_id:
            abort_for_input("domain", "A Zone with that domain already exists")
        zone_repo.clear()

    if form.dns_server_id is not None:
        if form.dns_server_id is 0:
            data["dns_server_id"] = None
        elif dns_server_repo.exists(id=form.dns_server_id):
            dns_server = dns_server_repo.results()
            data["dns_server"] = dns_server

    if form.http_server_id is not None:
        if form.http_server_id is 0:
            data["http_server_id"] = None
        elif http_server_repo.exists(id=form.http_server_id):
            http_server = http_server_repo.results()
            data["http_server"] = http_server

    zone = (zone_repo.loads(includes).get_or_fail(zone_id).update(
        data).includes(includes).data())
    return ZoneResponse(zone=zone)
示例#2
0
async def show(
        zone_id: int,
        zone_repo: ZoneRepo = Depends(ZoneRepo()),
        token: TokenPayload = Depends(ScopedTo("zone:show")),
        includes: List[str] = Query(None),
):
    includes = only(includes, ["dns_server", "dns_records", "http_server"],
                    values=True)

    zone = zone_repo.loads(includes).get_or_fail(zone_id).includes(
        includes).data()
    return ZoneResponse(zone=zone)
示例#3
0
async def index(
        sort_qs: SortQS = Depends(SortQS),
        pagination: PaginationQS = Depends(PaginationQS),
        zone_repo: ZoneRepo = Depends(ZoneRepo()),
        token: TokenPayload = Depends(ScopedTo("zone:list")),
        includes: List[str] = Query(None),
):
    # TODO: bypasses a bunch of scopes, find a way to restrict access via scopes
    includes = only(includes, ["dns_server", "dns_records", "http_server"],
                    values=True)

    pg, items = (zone_repo.loads(includes).strict().sort(sort_qs).paginate(
        pagination).includes(includes).data())
    return ZonesResponse(pagination=pg, zones=items)