Package io.fathom.cloud.server

Source Code of io.fathom.cloud.server.FathomCloudGuiceModule

package io.fathom.cloud.server;

import io.fathom.cloud.blobs.BlobStoreFactory;
import io.fathom.cloud.blobs.replicated.ReplicatedBlobStore;
import io.fathom.cloud.keyczar.KeyczarFactory;
import io.fathom.cloud.keyczar.ZookeeperKeyczarFactory;
import io.fathom.cloud.mq.MessageQueueService;
import io.fathom.cloud.mq.MessageQueueServiceImpl;
import io.fathom.cloud.server.auth.AuthProvider;
import io.fathom.cloud.server.auth.SharedKeystore;
import io.fathom.cloud.server.auth.SharedSecretTokenService;
import io.fathom.cloud.server.auth.TokenService;
import io.fathom.cloud.server.auth.WebAuthProvider;
import io.fathom.cloud.ssh.SshContext;
import io.fathom.cloud.ssh.jsch.SshContextImpl;
import io.fathom.cloud.state.StateStore;
import io.fathom.cloud.state.ZookeeperStateStore;
import io.fathom.cloud.state.zookeeper.KeyczarSharedKeystore;
import io.fathom.cloud.zookeeper.ExternalZookeeper;
import io.fathom.cloud.zookeeper.ZookeeperClient;
import io.fathom.cloud.zookeeper.ZookeeperCluster;
import io.fathom.cloud.zookeeper.ZookeeperClusterClientProvider;

import java.io.File;
import java.io.IOException;
import java.io.StringReader;
import java.security.KeyPair;

import org.bouncycastle.openssl.PEMReader;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.fathomdb.Configuration;
import com.fathomdb.crypto.DirectoryEncryptionStore;
import com.fathomdb.crypto.EncryptionStore;
import com.fathomdb.crypto.bouncycastle.BouncyCastleLoader;
import com.fathomdb.io.IoUtils;
import com.fathomdb.server.http.JettyWebServerBuilder;
import com.fathomdb.server.http.WebServerBuilder;
import com.google.inject.AbstractModule;
import com.google.inject.Scopes;
import com.google.inject.name.Names;

public class FathomCloudGuiceModule extends AbstractModule {
    private static final Logger log = LoggerFactory.getLogger(FathomCloudGuiceModule.class);

    final Configuration configuration;

    public FathomCloudGuiceModule(Configuration configuration) {
        this.configuration = configuration;
    }

    @Override
    protected void configure() {
        EncryptionStore encryptionStore = new DirectoryEncryptionStore(configuration.lookupFile("ssl.path",
                "/var/fathomcloud/keystore/"));
        bind(EncryptionStore.class).toInstance(encryptionStore);

        bind(MessageQueueService.class).to(MessageQueueServiceImpl.class);

        bind(AuthProvider.class).to(WebAuthProvider.class);

        bind(WebServerBuilder.class).to(JettyWebServerBuilder.class);

        bind(Configuration.class).to(ClusterConfiguration.class);

        bind(Configuration.class).annotatedWith(Names.named("instance")).toInstance(configuration);

        // InMemoryStateStore stateStore = new InMemoryStateStore();
        // bind(StateStore.class).toInstance(stateStore);

        if (configuration.find("zookeeper.embedded.basedir") != null) {
            throw new UnsupportedOperationException();
            // bind(ZookeeperCluster.class).to(EmbeddedZookeeper.class).asEagerSingleton();
        } else {
            bind(ZookeeperCluster.class).to(ExternalZookeeper.class).asEagerSingleton();
        }
        bind(ZookeeperClient.class).toProvider(ZookeeperClusterClientProvider.class).in(Scopes.SINGLETON);

        bind(StateStore.class).to(ZookeeperStateStore.class);

        SshContext sshContext;
        {
            String currentUser = System.getProperty("user.name");
            String sshUsername = configuration.lookup("ssh.user", currentUser);

            File keyFile = configuration.lookupFile("ssh.key", "~/.ssh/id_rsa");

            sshContext = new SshContextImpl(sshUsername, keyFile);
        }
        bind(SshContext.class).toInstance(sshContext);

        bind(BlobStoreFactory.class).to(ReplicatedBlobStore.Factory.class).in(Scopes.SINGLETON);

        bind(KeyczarFactory.class).to(ZookeeperKeyczarFactory.class).asEagerSingleton();

        bind(SharedKeystore.class).to(KeyczarSharedKeystore.class).asEagerSingleton();

        bind(TokenService.class).to(SharedSecretTokenService.class).asEagerSingleton();
    }

    private KeyPair deserializeSshKey(String keyData) throws IOException {
        PEMReader r = new PEMReader(new StringReader(keyData), null, BouncyCastleLoader.getName());
        try {
            return (KeyPair) r.readObject();
        } finally {
            IoUtils.safeClose(r);
        }
    }

}
TOP

Related Classes of io.fathom.cloud.server.FathomCloudGuiceModule

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.