Actually this could be OK if the intention was to drop the decimal place after dividing by 1000?
Colm. On Thu, Jan 25, 2018 at 2:09 AM, Zeng, Frank <[email protected]> wrote: > Hi Colm, > > So sorry for that, I will fix it. > > Thanks, > Frank > > -----Original Message----- > From: Colm O hEigeartaigh [mailto:[email protected]] > Sent: Wednesday, January 24, 2018 11:35 PM > To: [email protected]; Zeng, Frank <[email protected]> > Subject: Re: directory-kerby git commit: DIRKRB-685 Add MySQL plugin for > new authentication mechanism. > > Hi Frank, > > Just a minor comment: > > + final Date now = new Date(new Date().getTime() / 1000 * 1000); > > Here the time is divided by 1000 and then multiplied again by 1000... > > Colm. > > On Wed, Jan 24, 2018 at 3:03 AM, <[email protected]> wrote: > > > Repository: directory-kerby > > Updated Branches: > > refs/heads/has-project d37016227 -> 9e370a760 > > > > > > DIRKRB-685 Add MySQL plugin for new authentication mechanism. > > > > > > Project: http://git-wip-us.apache.org/repos/asf/directory-kerby/repo > > Commit: http://git-wip-us.apache.org/repos/asf/directory-kerby/ > > commit/9e370a76 > > Tree: > > http://git-wip-us.apache.org/repos/asf/directory-kerby/tree/9e370a76 > > Diff: > > http://git-wip-us.apache.org/repos/asf/directory-kerby/diff/9e370a76 > > > > Branch: refs/heads/has-project > > Commit: 9e370a760bcba6d978c4fc15203f0530094793d7 > > Parents: d370162 > > Author: zenglinx <[email protected]> > > Authored: Wed Jan 24 11:02:53 2018 +0800 > > Committer: zenglinx <[email protected]> > > Committed: Wed Jan 24 11:02:53 2018 +0800 > > > > ---------------------------------------------------------------------- > > .../client/mysql/MySQLHasClientPlugin.java | 68 +++++++++++ > > .../server/mysql/MySQLHasServerPlugin.java | 112 > +++++++++++++++++++ > > ...org.apache.hadoop.has.client.HasClientPlugin | 15 --- > > ...org.apache.hadoop.has.server.HasServerPlugin | 15 --- > > .../org.apache.kerby.has.client.HasClientPlugin | 16 +++ > > .../org.apache.kerby.has.server.HasServerPlugin | 16 +++ > > .../plugins/TestHasClientPluginRegistry.java | 44 ++++++++ > > .../plugins/TestHasServerPluginRegistry.java | 43 +++++++ > > 8 files changed, 299 insertions(+), 30 deletions(-) > > ---------------------------------------------------------------------- > > > > > > http://git-wip-us.apache.org/repos/asf/directory-kerby/ > > blob/9e370a76/has/has-plugins/src/main/java/org/apache/ > > kerby/has/plugins/client/mysql/MySQLHasClientPlugin.java > > ---------------------------------------------------------------------- > > diff --git a/has/has-plugins/src/main/java/org/apache/kerby/has/ > > plugins/client/mysql/MySQLHasClientPlugin.java > > b/has/has-plugins/src/main/ > > java/org/apache/kerby/has/plugins/client/mysql/MySQLHasClientPlugin.ja > > va > > new file mode 100644 > > index 0000000..675f295 > > --- /dev/null > > +++ b/has/has-plugins/src/main/java/org/apache/kerby/has/ > > plugins/client/mysql/MySQLHasClientPlugin.java > > @@ -0,0 +1,68 @@ > > +/** > > + * 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.kerby.has.plugins.client.mysql; > > + > > +import org.apache.kerby.has.client.AbstractHasClientPlugin; > > +import org.apache.kerby.kerberos.kerb.type.base.AuthToken; > > +import org.slf4j.Logger; > > +import org.slf4j.LoggerFactory; > > + > > +import java.util.Date; > > + > > +public class MySQLHasClientPlugin extends AbstractHasClientPlugin { > > + private static final Logger LOG = LoggerFactory.getLogger( > > MySQLHasClientPlugin.class); > > + > > + /** > > + * {@inheritDoc} > > + */ > > + @Override > > + public String getLoginType() { > > + return "MySQL"; > > + } > > + > > + @Override > > + protected void doLogin(AuthToken authToken) { > > + > > + //Get the ak info from env > > + String userName = System.getenv("userName"); > > + String password = System.getenv("password"); > > + > > + String mysqlUrl = System.getenv("mysqlUrl"); > > + String mysqlUser = System.getenv("mysqlUser"); > > + String mysqlPasswd = System.getenv("mysqlPasswd"); > > + > > + LOG.debug("Get the mysql login info successfully."); > > + > > + authToken.setIssuer("has"); > > + authToken.setSubject(userName); > > + > > + final Date now = new Date(new Date().getTime() / 1000 * 1000); > > + authToken.setIssueTime(now); > > + // Set expiration in 60 minutes > > + Date exp = new Date(now.getTime() + 1000 * 60 * 60); > > + authToken.setExpirationTime(exp); > > + > > + authToken.addAttribute("user", userName); > > + authToken.addAttribute("secret", password); > > + authToken.addAttribute("mysqlUrl", mysqlUrl); > > + authToken.addAttribute("mysqlUser", mysqlUser); > > + authToken.addAttribute("mysqlPasswd", mysqlPasswd); > > + > > + authToken.addAttribute("passPhrase", userName + password); > > + } > > +} > > > > http://git-wip-us.apache.org/repos/asf/directory-kerby/ > > blob/9e370a76/has/has-plugins/src/main/java/org/apache/ > > kerby/has/plugins/server/mysql/MySQLHasServerPlugin.java > > ---------------------------------------------------------------------- > > diff --git a/has/has-plugins/src/main/java/org/apache/kerby/has/ > > plugins/server/mysql/MySQLHasServerPlugin.java > > b/has/has-plugins/src/main/ > > java/org/apache/kerby/has/plugins/server/mysql/MySQLHasServerPlugin.ja > > va > > new file mode 100644 > > index 0000000..7c58b21 > > --- /dev/null > > +++ b/has/has-plugins/src/main/java/org/apache/kerby/has/ > > plugins/server/mysql/MySQLHasServerPlugin.java > > @@ -0,0 +1,112 @@ > > +/** > > + * 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.kerby.has.plugins.server.mysql; > > + > > +import org.apache.commons.dbutils.DbUtils; > > +import org.apache.kerby.has.server.AbstractHasServerPlugin; > > +import org.apache.kerby.has.server.HasAuthenException; > > +import org.apache.kerby.kerberos.kerb.type.base.AuthToken; > > +import org.slf4j.Logger; > > +import org.slf4j.LoggerFactory; > > + > > +import java.sql.ResultSet; > > +import java.sql.Connection; > > +import java.sql.SQLException; > > +import java.sql.DriverManager; > > +import java.sql.PreparedStatement; > > + > > +public class MySQLHasServerPlugin extends AbstractHasServerPlugin { > > + private static final Logger LOG = LoggerFactory.getLogger( > > MySQLHasServerPlugin.class); > > + > > + /** > > + * {@inheritDoc} > > + */ > > + @Override > > + public String getLoginType() { > > + return "MySQL"; > > + } > > + > > + /** > > + * {@inheritDoc} > > + */ > > + @Override > > + public void doAuthenticate(AuthToken userToken, AuthToken authToken) > > + throws HasAuthenException { > > + String user = (String) userToken.getAttributes().get("user"); > > + String secret = (String) > > + userToken.getAttributes().get("secret"); > > + > > + String mysqlUrl = (String) userToken.getAttributes().get( > > "mysqlUrl"); > > + mysqlUrl = mysqlUrl.replace("jdbc:mysql:", "jdbc:mysql:thin:"); > > + String mysqlUser = (String) userToken.getAttributes().get( > > "mysqlUser"); > > + String mysqlPasswd = (String) userToken.getAttributes().get( > > "mysqlPasswd"); > > + Connection connection = startConnection(mysqlUrl, mysqlUser, > > mysqlPasswd); > > + > > + ResultSet res = null; > > + PreparedStatement preStm = null; > > + try { > > + String stm = "SELECT COUNT(*) FROM `has_user` WHERE > > + user_name > > = ? AND pass_word = ?"; > > + preStm = connection.prepareStatement(stm); > > + preStm.setString(1, user); > > + preStm.setString(2, secret); > > + res = preStm.executeQuery(); > > + if (res.next() && res.getInt(1) > 0) { > > + LOG.debug("UserName: " + user); > > + } else { > > + LOG.error("Authentication failed."); > > + throw new HasAuthenException("Authentication failed."); > > + } > > + } catch (SQLException e) { > > + LOG.error("Failed."); > > + LOG.error("Error code: " + e.getErrorCode()); > > + LOG.error("Error message: " + e.getMessage()); > > + throw new HasAuthenException("Authentication failed." + > > e.getMessage()); > > + } finally { > > + DbUtils.closeQuietly(preStm); > > + DbUtils.closeQuietly(res); > > + DbUtils.closeQuietly(connection); > > + } > > + > > + authToken.setIssuer(userToken.getIssuer()); > > + authToken.setSubject(user); > > + authToken.setExpirationTime(userToken.getExpiredTime()); > > + > > + authToken.addAttribute("userName", user); > > + authToken.addAttribute("passPhrase", user + secret); > > + } > > + > > + /** > > + * Start the MySQL connection. > > + */ > > + private Connection startConnection(String url, String user, > > + String password) throws > > HasAuthenException { > > + Connection connection; > > + try { > > + Class.forName("org.drizzle.jdbc.DrizzleDriver"); > > + connection = DriverManager.getConnection(url, user, > > password); > > + if (!connection.isClosed()) { > > + LOG.info("Succeeded in connecting to MySQL."); > > + } > > + } catch (ClassNotFoundException e) { > > + throw new HasAuthenException("JDBC Driver Class not > > + found. ", > > e); > > + } catch (SQLException e) { > > + throw new HasAuthenException("Failed to connecting to MySQL. > > ", e); > > + } > > + > > + return connection; > > + } > > +} > > > > http://git-wip-us.apache.org/repos/asf/directory-kerby/ > > blob/9e370a76/has/has-plugins/src/main/resources/META-INF/ > > services/org.apache.hadoop.has.client.HasClientPlugin > > ---------------------------------------------------------------------- > > diff --git a/has/has-plugins/src/main/resources/META-INF/services/ > > org.apache.hadoop.has.client.HasClientPlugin > > b/has/has-plugins/src/main/ > > resources/META-INF/services/org.apache.hadoop.has.client.HasClientPlug > > in > > deleted file mode 100644 > > index 09697dc..0000000 > > --- a/has/has-plugins/src/main/resources/META-INF/services/ > > org.apache.hadoop.has.client.HasClientPlugin > > +++ /dev/null > > @@ -1,15 +0,0 @@ > > -# 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. > > - > > > > http://git-wip-us.apache.org/repos/asf/directory-kerby/ > > blob/9e370a76/has/has-plugins/src/main/resources/META-INF/ > > services/org.apache.hadoop.has.server.HasServerPlugin > > ---------------------------------------------------------------------- > > diff --git a/has/has-plugins/src/main/resources/META-INF/services/ > > org.apache.hadoop.has.server.HasServerPlugin > > b/has/has-plugins/src/main/ > > resources/META-INF/services/org.apache.hadoop.has.server.HasServerPlug > > in > > deleted file mode 100644 > > index 09697dc..0000000 > > --- a/has/has-plugins/src/main/resources/META-INF/services/ > > org.apache.hadoop.has.server.HasServerPlugin > > +++ /dev/null > > @@ -1,15 +0,0 @@ > > -# 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. > > - > > > > http://git-wip-us.apache.org/repos/asf/directory-kerby/ > > blob/9e370a76/has/has-plugins/src/main/resources/META-INF/ > > services/org.apache.kerby.has.client.HasClientPlugin > > ---------------------------------------------------------------------- > > diff --git a/has/has-plugins/src/main/resources/META-INF/services/ > > org.apache.kerby.has.client.HasClientPlugin > > b/has/has-plugins/src/main/ > > resources/META-INF/services/org.apache.kerby.has.client.HasClientPlugi > > n > > new file mode 100644 > > index 0000000..cc3cac3 > > --- /dev/null > > +++ b/has/has-plugins/src/main/resources/META-INF/services/ > > org.apache.kerby.has.client.HasClientPlugin > > @@ -0,0 +1,16 @@ > > +# 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. > > + > > +org.apache.kerby.has.plugins.client.mysql.MySQLHasClientPlugin > > > > http://git-wip-us.apache.org/repos/asf/directory-kerby/ > > blob/9e370a76/has/has-plugins/src/main/resources/META-INF/ > > services/org.apache.kerby.has.server.HasServerPlugin > > ---------------------------------------------------------------------- > > diff --git a/has/has-plugins/src/main/resources/META-INF/services/ > > org.apache.kerby.has.server.HasServerPlugin > > b/has/has-plugins/src/main/ > > resources/META-INF/services/org.apache.kerby.has.server.HasServerPlugi > > n > > new file mode 100644 > > index 0000000..dfb9637 > > --- /dev/null > > +++ b/has/has-plugins/src/main/resources/META-INF/services/ > > org.apache.kerby.has.server.HasServerPlugin > > @@ -0,0 +1,16 @@ > > +# 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. > > + > > +org.apache.kerby.has.plugins.server.mysql.MySQLHasServerPlugin > > > > http://git-wip-us.apache.org/repos/asf/directory-kerby/ > > blob/9e370a76/has/has-plugins/src/test/java/org/apache/kerby/has/plugi > > ns/ > > TestHasClientPluginRegistry.java > > ---------------------------------------------------------------------- > > diff --git > > a/has/has-plugins/src/test/java/org/apache/kerby/has/plugins/ > > TestHasClientPluginRegistry.java b/has/has-plugins/src/test/ > > java/org/apache/kerby/has/plugins/TestHasClientPluginRegistry.java > > new file mode 100644 > > index 0000000..55f0f70 > > --- /dev/null > > +++ b/has/has-plugins/src/test/java/org/apache/kerby/has/plugins/ > > TestHasClientPluginRegistry.java > > @@ -0,0 +1,44 @@ > > +/** > > + * 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.kerby.has.plugins; > > + > > +import org.apache.kerby.has.client.HasClientPluginRegistry; > > +import org.apache.kerby.has.common.HasException; > > +import org.junit.Assert; > > +import org.junit.Test; > > + > > +import java.util.Set; > > + > > +public class TestHasClientPluginRegistry { > > + > > + @Test > > + public void testInit() { > > + Set<String> pluginsNames = HasClientPluginRegistry. > > registeredPlugins(); > > + Assert.assertTrue(pluginsNames.size() > 0); } > > + > > + @Test > > + public void testCreatePlugin() throws HasException { > > + Assert.assertTrue(HasClientPluginRegistry.createPlugin("MySQL") > > + != > > null); > > + Set<String> pluginNames = HasClientPluginRegistry. > > registeredPlugins(); > > + for (String name : pluginNames) { > > + HasClientPluginRegistry.createPlugin(name); > > + } > > + } > > +} > > + > > > > http://git-wip-us.apache.org/repos/asf/directory-kerby/ > > blob/9e370a76/has/has-plugins/src/test/java/org/apache/kerby/has/plugi > > ns/ > > TestHasServerPluginRegistry.java > > ---------------------------------------------------------------------- > > diff --git > > a/has/has-plugins/src/test/java/org/apache/kerby/has/plugins/ > > TestHasServerPluginRegistry.java b/has/has-plugins/src/test/ > > java/org/apache/kerby/has/plugins/TestHasServerPluginRegistry.java > > new file mode 100644 > > index 0000000..d727b12 > > --- /dev/null > > +++ b/has/has-plugins/src/test/java/org/apache/kerby/has/plugins/ > > TestHasServerPluginRegistry.java > > @@ -0,0 +1,43 @@ > > +/** > > + * 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.kerby.has.plugins; > > + > > +import org.apache.kerby.has.common.HasException; > > +import org.apache.kerby.has.server.HasServerPluginRegistry; > > +import org.junit.Assert; > > +import org.junit.Test; > > + > > +import java.util.Set; > > + > > +public class TestHasServerPluginRegistry { > > + > > + @Test > > + public void testInit() { > > + Set<String> pluginsNames = HasServerPluginRegistry. > > registeredPlugins(); > > + Assert.assertTrue(pluginsNames.size() > 0); } > > + > > + @Test > > + public void testCreatePlugin() throws HasException { > > + Assert.assertTrue(HasServerPluginRegistry.createPlugin("MySQL") > > + != > > null); > > + Set<String> pluginNames = HasServerPluginRegistry. > > registeredPlugins(); > > + for (String name : pluginNames) { > > + HasServerPluginRegistry.createPlugin(name); > > + } > > + } > > +} > > > > > > > -- > Colm O hEigeartaigh > > Talend Community Coder > http://coders.talend.com > -- Colm O hEigeartaigh Talend Community Coder http://coders.talend.com
