All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.snowflake.client.core.SFSessionProperty Maven / Gradle / Ivy

/*
 * Copyright (c) 2012-2019 Snowflake Computing Inc. All rights reserved.
 */

package net.snowflake.client.core;

import java.security.PrivateKey;
import java.util.regex.Pattern;
import net.snowflake.client.jdbc.ErrorCode;

/**
 * session properties accepted for opening a new session.
 *
 * @author jhuang
 *     

Created on 11/3/15 */ public enum SFSessionProperty { SERVER_URL("serverURL", true, String.class), USER("user", false, String.class), PASSWORD("password", false, String.class), ACCOUNT("account", true, String.class), DATABASE("database", false, String.class, "db"), SCHEMA("schema", false, String.class), PASSCODE_IN_PASSWORD("passcodeInPassword", false, Boolean.class), PASSCODE("passcode", false, String.class), TOKEN("token", false, String.class), ID_TOKEN_PASSWORD("id_token_password", false, String.class), ROLE("role", false, String.class), AUTHENTICATOR("authenticator", false, String.class), OKTA_USERNAME("oktausername", false, String.class), PRIVATE_KEY("privateKey", false, PrivateKey.class), WAREHOUSE("warehouse", false, String.class), LOGIN_TIMEOUT("loginTimeout", false, Integer.class), NETWORK_TIMEOUT("networkTimeout", false, Integer.class), INJECT_SOCKET_TIMEOUT("injectSocketTimeout", false, Integer.class), INJECT_CLIENT_PAUSE("injectClientPause", false, Integer.class), APP_ID("appId", false, String.class), APP_VERSION("appVersion", false, String.class), OCSP_FAIL_OPEN("ocspFailOpen", false, Boolean.class), INSECURE_MODE("insecureMode", false, Boolean.class), QUERY_TIMEOUT("queryTimeout", false, Integer.class), STRINGS_QUOTED("stringsQuotedForColumnDef", false, Boolean.class), APPLICATION("application", false, String.class), TRACING("tracing", false, String.class), DISABLE_SOCKS_PROXY("disableSocksProxy", false, Boolean.class), // connection proxy USE_PROXY("useProxy", false, Boolean.class), PROXY_HOST("proxyHost", false, String.class), PROXY_PORT("proxyPort", false, String.class), PROXY_USER("proxyUser", false, String.class), PROXY_PASSWORD("proxyPassword", false, String.class), NON_PROXY_HOSTS("nonProxyHosts", false, String.class), PROXY_PROTOCOL("proxyProtocol", false, String.class), VALIDATE_DEFAULT_PARAMETERS("validateDefaultParameters", false, Boolean.class), INJECT_WAIT_IN_PUT("inject_wait_in_put", false, Integer.class), PRIVATE_KEY_FILE("private_key_file", false, String.class), PRIVATE_KEY_FILE_PWD("private_key_file_pwd", false, String.class), CLIENT_INFO("snowflakeClientInfo", false, String.class), ALLOW_UNDERSCORES_IN_HOST("allowUnderscoresInHost", false, Boolean.class), // Adds a suffix to the user agent header in the http requests made by the jdbc driver USER_AGENT_SUFFIX("user_agent_suffix", false, String.class), CLIENT_OUT_OF_BAND_TELEMETRY_ENABLED( "CLIENT_OUT_OF_BAND_TELEMETRY_ENABLED", false, Boolean.class), GZIP_DISABLED("gzipDisabled", false, Boolean.class), DISABLE_QUERY_CONTEXT_CACHE("disableQueryContextCache", false, Boolean.class), HTAP_OOB_TELEMETRY_ENABLED("htapOOBTelemetryEnabled", false, Boolean.class), CLIENT_CONFIG_FILE("client_config_file", false, String.class), MAX_HTTP_RETRIES("maxHttpRetries", false, Integer.class), ENABLE_PUT_GET("enablePutGet", false, Boolean.class), PUT_GET_MAX_RETRIES("putGetMaxRetries", false, Integer.class), RETRY_TIMEOUT("retryTimeout", false, Integer.class); // property key in string private String propertyKey; // if required when establishing connection private boolean required; // value type private Class valueType; // alias to property key private String[] aliases; // application name matcher public static Pattern APPLICATION_REGEX = Pattern.compile("^[A-Za-z][A-Za-z0-9\\.\\-_]{1,50}$"); public boolean isRequired() { return required; } public String getPropertyKey() { return propertyKey; } public Class getValueType() { return valueType; } SFSessionProperty(String propertyKey, boolean required, Class valueType, String... aliases) { this.propertyKey = propertyKey; this.required = required; this.valueType = valueType; this.aliases = aliases; } static SFSessionProperty lookupByKey(String propertyKey) { for (SFSessionProperty property : SFSessionProperty.values()) { if (property.propertyKey.equalsIgnoreCase(propertyKey)) { return property; } else { for (String alias : property.aliases) { if (alias.equalsIgnoreCase(propertyKey)) { return property; } } } } return null; } /** * Check if property value is desired class. Convert if possible * * @param property The session property to check * @param propertyValue The property value to check * @return The checked property value * @throws SFException Will be thrown if an invalid property value is passed in */ static Object checkPropertyValue(SFSessionProperty property, Object propertyValue) throws SFException { if (propertyValue == null) { return null; } if (property.getValueType().isAssignableFrom(propertyValue.getClass())) { switch (property) { case APPLICATION: if (APPLICATION_REGEX.matcher((String) propertyValue).find()) { return propertyValue; } else { throw new SFException(ErrorCode.INVALID_PARAMETER_VALUE, propertyValue, property); } default: return propertyValue; } } else { if (property.getValueType() == Boolean.class && propertyValue instanceof String) { return SFLoginInput.getBooleanValue(propertyValue); } else if (property.getValueType() == Integer.class && propertyValue instanceof String) { try { return Integer.valueOf((String) propertyValue); } catch (NumberFormatException e) { throw new SFException( ErrorCode.INVALID_PARAMETER_VALUE, propertyValue.getClass().getName(), property.getValueType().getName()); } } } throw new SFException( ErrorCode.INVALID_PARAMETER_TYPE, propertyValue.getClass().getName(), property.getValueType().getName()); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy