com.cloudbees.sdk.cli.BeesClientFactory Maven / Gradle / Ivy
The newest version!
/*
* Copyright 2010-2013, CloudBees Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.cloudbees.sdk.cli;
import com.cloudbees.api.BeesClientBase;
import com.cloudbees.api.BeesClientConfiguration;
import com.cloudbees.sdk.UserConfiguration;
import com.cloudbees.sdk.utils.Helper;
import com.cloudbees.sdk.utils.PasswordHelper;
import org.kohsuke.args4j.Option;
import javax.inject.Inject;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
/**
* Component that you can inject to your command object to
* build {@link com.cloudbees.sdk.api.BeesAPIClient} from a set of command line options.
*
* @author Kohsuke Kawaguchi
*/
@CommandScope
public class BeesClientFactory implements HasOptions {
@Option(name="--server")
public String server;
/**
* Bees api key.
*/
@Option(name="-k",aliases="--key",usage="CloudBees API Key")
public String key;
/**
* Bees api secret.
*/
@Option(name="-s",aliases="--secret",usage="CloudBees API secret")
public String secret;
@Option(name="--proxyHost",usage="HTTP proxy host to route traffic through")
public String proxyHost;
@Option(name="--proxyPort",usage="HTTP proxy port. Must be specified if --proxyHost is used")
public String proxyPort;
@Option(name="--proxyUser",usage="User name for HTTP proxy if it requires authentication")
public String proxyUser;
@Option(name="--proxyPassword",usage="Password for HTTP proxy. Must be specified if --proxyUser is used")
public String proxyPassword;
@Option(name="-ep",aliases="--endPoint", usage="CloudBes API end point [us | eu]")
public String endPoint;
private Properties properties;
@Inject
UserConfiguration config;
@Inject
Verbose verbose;
public BeesClientBase get() throws IOException {
return get(BeesClientBase.class);
}
public T get(Class clientType) throws IOException {
BeesClientConfiguration beesClientConfiguration = createConfigurations();
try {
T client = clientType.getConstructor(BeesClientConfiguration.class).newInstance(beesClientConfiguration);
client.setVerbose(verbose.isVerbose());
return client;
} catch (InstantiationException e) {
throw (Error)new InstantiationError().initCause(e);
} catch (IllegalAccessException e) {
throw (Error)new IllegalAccessError().initCause(e);
} catch (InvocationTargetException e) {
throw (Error)new InstantiationError().initCause(e);
} catch (NoSuchMethodException e) {
throw (Error)new InstantiationError().initCause(e);
}
}
/**
* Creates a fully populated {@link BeesClientConfiguration} based on the current setting.
*/
public BeesClientConfiguration createConfigurations() throws IOException {
Properties properties = getConfigProperties();
BeesClientConfiguration beesClientConfiguration = new BeesClientConfiguration(getApiUrl());
String token = properties.getProperty("bees.api.oauth_token");
if (token!=null) {
// use OAuth token for authentication
beesClientConfiguration.withOAuthToken(token);
} else {
// fallback to API key and secret
if (key==null) key = properties.getProperty("bees.api.key");
if (secret==null) secret = properties.getProperty("bees.api.secret");
initCredentials();
beesClientConfiguration.withApiKeyAndSecret(key,secret);
}
// Set proxy information
beesClientConfiguration.setProxyHost(properties.getProperty("bees.api.proxy.host", proxyHost));
if (properties.getProperty("bees.api.proxy.port") != null || proxyPort != null)
beesClientConfiguration.setProxyPort(Integer.parseInt(properties.getProperty("bees.api.proxy.port", proxyPort)));
beesClientConfiguration.setProxyUser(properties.getProperty("bees.api.proxy.user", proxyUser));
beesClientConfiguration.setProxyPassword(properties.getProperty("bees.api.proxy.password", proxyPassword));
return beesClientConfiguration;
}
public String getApiUrl() {
String apiUrl;
if (server != null)
apiUrl = server;
else {
if (endPoint != null)
apiUrl = properties.getProperty("bees.api.url." + endPoint);
else {
apiUrl = properties.getProperty("bees.api.url");
if (apiUrl == null)
apiUrl = properties.getProperty("bees.api.url.us");
}
}
return apiUrl;
}
private void initCredentials() throws IOException
{
if (key == null) {
key = Helper.promptFor("Enter your CloudBees API key: ", true);
}
if (secret == null) {
secret = PasswordHelper.prompt("Enter your CloudBees Api secret: ");
}
}
public Properties getConfigProperties() {
if (properties == null) {
// Read SDK config file
Map params = getParameters();
properties = config.load(UserConfiguration.EMAIL_CREDENTIALS, params);
}
return properties;
}
/**
* See {@link UserConfiguration} for parameters vs config properties
*/
public Map getParameters() {
Map params = new HashMap();
add(params, "key", key);
add(params, "secret", secret);
add(params, "server", server);
add(params, "proxy.host", proxyHost);
add(params, "proxy.port", proxyPort);
add(params, "proxy.user", proxyUser);
add(params, "proxy.password", proxyPassword);
add(params, "endPoint", endPoint);
return params;
}
private void add(Map params, String key, String value) {
if (value!=null) params.put(key,value);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy