Package io.fathom.cloud.dns.backend.selfhosted

Source Code of io.fathom.cloud.dns.backend.selfhosted.SelfHostedDnsBackend$UpdateSelfHosted

package io.fathom.cloud.dns.backend.selfhosted;

import io.fathom.cloud.CloudException;
import io.fathom.cloud.dns.backend.DnsBackendBase;
import io.fathom.cloud.dns.backend.selfhosted.model.ZoneData;
import io.fathom.cloud.dns.model.DnsZone;
import io.fathom.cloud.protobuf.DnsModel.BackendData;
import io.fathom.cloud.protobuf.DnsModel.DnsBackendProviderType;
import io.fathom.cloud.protobuf.DnsModel.DnsSuffixData;
import io.fathom.cloud.server.model.Project;
import io.fathom.cloud.storage.FileBlob;
import io.fathom.cloud.storage.StorageService;
import io.fathom.cloud.tasks.TaskScheduler;

import java.io.IOException;
import java.util.Map;

import javax.inject.Inject;
import javax.inject.Singleton;

import com.google.common.base.Charsets;
import com.google.common.io.ByteSource;
import com.google.gson.Gson;

@Singleton
public class SelfHostedDnsBackend extends DnsBackendBase {
    @Inject
    TaskScheduler taskScheduler;

    @Inject
    StorageService storageService;

    @Inject
    Gson gson;

    @Override
    public void updateDomain(Project project, DnsZone domain) {
        UpdateSelfHosted job = new UpdateSelfHosted(project, domain);

        taskScheduler.execute(job);
    }

    @Override
    public String createZone(Project project, String zone, String topZone, DnsSuffixData suffixData) {
        // No-op?
        return null;
    }

    @Override
    public DnsBackendProviderType getType() {
        return DnsBackendProviderType.SELF_HOSTED;
    }

    public class UpdateSelfHosted extends UpdateDnsDomainBase {

        public UpdateSelfHosted(Project project, DnsZone domain) {
            super(project, domain);
        }

        @Override
        public Void call() throws CloudException, IOException {
            String zoneName = zone.getName();

            ZoneData zoneData = new ZoneData();
            zoneData.records = readFromDatabase(true);

            String path = "services/dns/__default/zones/" + zoneName;
            String bucket = "__services";

            String contents = gson.toJson(zoneData);

            ByteSource bytes = ByteSource.wrap(contents.getBytes(Charsets.UTF_8));

            String contentType = "application/json";
            Map<String, String> userAttributes = null;

            storageService.getFileService().ensureBucket(project, bucket);

            storageService.getFileService().putFile(project, bucket, path, FileBlob.build(bytes), contentType,
                    userAttributes);
            return null;
        }
    }

    public void init(BackendData backendData) {

    }

}
TOP

Related Classes of io.fathom.cloud.dns.backend.selfhosted.SelfHostedDnsBackend$UpdateSelfHosted

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.