import json from flask import current_app from lemur import database from lemur.dns_providers.models import DnsProvider def render(args): """ Helper that helps us render the REST Api responses. :param args: :return: """ query = database.session_query(DnsProvider) return database.sort_and_page(query, DnsProvider, args) def get(dns_provider_id): provider = database.get(DnsProvider, dns_provider_id) return provider def get_friendly(dns_provider_id): """ Retrieves a dns provider by its lemur assigned ID. :param dns_provider_id: Lemur assigned ID :rtype : DnsProvider :return: """ dns_provider = get(dns_provider_id) dns_provider_friendly = { "name": dns_provider.name, "description": dns_provider.description, "providerType": dns_provider.provider_type, "options": dns_provider.options, "credentials": dns_provider.credentials, } if dns_provider.provider_type == "route53": dns_provider_friendly["account_id"] = json.loads(dns_provider.credentials).get("account_id") return dns_provider_friendly def delete(dns_provider_id): """ Deletes a DNS provider. :param dns_provider_id: Lemur assigned ID """ database.delete(get(dns_provider_id)) def get_types(): provider_config = current_app.config.get('ACME_DNS_PROVIDER_TYPES') if not provider_config: raise Exception("No DNS Provider configuration specified.") provider_config["total"] = len(provider_config.get("items")) return provider_config def create(data): provider_name = data.get("name") credentials = {} for item in data.get("provider_type", {}).get("requirements", []): credentials[item["name"]] = item["value"] dns_provider = DnsProvider( name=provider_name, description=data.get("description"), provider_type=data.get("provider_type").get("name"), credentials=json.dumps(credentials), ) created = database.create(dns_provider) return created.id