Github user mike-jumper commented on a diff in the pull request:

    
https://github.com/apache/incubator-guacamole-client/pull/182#discussion_r141254109
  
    --- Diff: 
extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerAuthenticationProviderModule.java
 ---
    @@ -0,0 +1,116 @@
    +/*
    + * Licensed to the Apache Software Foundation (ASF) under one
    + * or more contributor license agreements.  See the NOTICE file
    + * distributed with this work for additional information
    + * regarding copyright ownership.  The ASF licenses this file
    + * to you 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 org.apache.guacamole.auth.sqlserver;
    +
    +import com.google.inject.Binder;
    +import com.google.inject.Module;
    +import com.google.inject.name.Names;
    +import java.util.Properties;
    +import org.apache.guacamole.GuacamoleException;
    +import org.mybatis.guice.datasource.helper.JdbcHelper;
    +
    +/**
    + * Guice module which configures SQLServer-specific injections.
    + */
    +public class SQLServerAuthenticationProviderModule implements Module {
    +
    +    /**
    +     * MyBatis-specific configuration properties.
    +     */
    +    private final Properties myBatisProperties = new Properties();
    +
    +    /**
    +     * SQLServer-specific driver configuration properties.
    +     */
    +    private final Properties driverProperties = new Properties();
    +
    +    /**
    +     * Which SQL Server driver should be used.
    +     */
    +    private SQLServerDriver sqlServerDriver;
    +
    +    /**
    +     * Creates a new SQLServer authentication provider module that 
configures
    +     * driver and MyBatis properties using the given environment.
    +     *
    +     * @param environment
    +     *     The environment to use when configuring MyBatis and the 
underlying
    +     *     JDBC driver.
    +     *
    +     * @throws GuacamoleException
    +     *     If a required property is missing, or an error occurs while 
parsing
    +     *     a property.
    +     */
    +    public SQLServerAuthenticationProviderModule(SQLServerEnvironment 
environment)
    +            throws GuacamoleException {
    +
    +        // Set the SQLServer-specific properties for MyBatis.
    +        myBatisProperties.setProperty("mybatis.environment.id", 
"guacamole");
    +        myBatisProperties.setProperty("JDBC.host", 
environment.getSQLServerHostname());
    +        myBatisProperties.setProperty("JDBC.port", 
String.valueOf(environment.getSQLServerPort()));
    +        myBatisProperties.setProperty("JDBC.schema", 
environment.getSQLServerDatabase());
    +        myBatisProperties.setProperty("JDBC.username", 
environment.getSQLServerUsername());
    +        myBatisProperties.setProperty("JDBC.password", 
environment.getSQLServerPassword());
    +        myBatisProperties.setProperty("JDBC.autoCommit", "false");
    +        myBatisProperties.setProperty("mybatis.pooled.pingEnabled", 
"true");
    +        myBatisProperties.setProperty("mybatis.pooled.pingQuery", "SELECT 
1");
    +
    +        // Use UTF-8 in database
    +        driverProperties.setProperty("characterEncoding", "UTF-8");
    +
    +        // Capture which driver to use for the connection.
    +        this.sqlServerDriver = environment.getSQLServerDriver();
    +
    +    }
    +
    +    @Override
    +    public void configure(Binder binder) {
    +
    +        // Bind SQLServer-specific properties with the configured driver.
    +        switch(sqlServerDriver) {
    +            case JTDS:
    +                JdbcHelper.SQL_Server_jTDS.configure(binder);
    +                break;
    +
    +            case DATA_DIRECT:
    +                JdbcHelper.SQL_Server_DataDirect.configure(binder);
    +                break;
    +
    +            case MICROSOFT_LEGACY:
    +                JdbcHelper.SQL_Server_MS_Driver.configure(binder);
    +                break;
    +
    +            case MICROSOFT_2005:
    +            default:
    --- End diff --
    
    Since the `default` case will only match if we add a new SQL Server driver 
type without actually implementing that type, silently failing over to the 2005 
driver is dangerous behavior. I would recommend either:
    
    1. Bailing out with a hard and unmistakable 
[`UnsupportedOperationException`](https://docs.oracle.com/javase/7/docs/api/java/lang/UnsupportedOperationException.html).
    2. Documenting for humans and compilers that this condition is expected to 
be impossible through an `assert(false)`.
    
    Example of the above:
    
    
https://github.com/apache/incubator-guacamole-client/blob/1c0ee41d0ecd5bc4a3550804b74b73b901e074c2/guacamole/src/main/java/org/apache/guacamole/tunnel/TunnelRequestService.java#L184-L186


---

Reply via email to