Forráskód Böngészése

AMBARI-11875 Yarn config tab doesn't load with Oracle 12. (atkach)

Andrii Tkach 10 éve
szülő
commit
de59d01c3f

+ 3 - 2
ambari-web/app/utils/configs/database.js

@@ -17,6 +17,7 @@
  */
 
 var validators = require('utils/validator');
+var stringUtils = require('utils/string_utils');
 /**
  * Helper methods to process database values and properties
  * @module utils/configs/database
@@ -53,7 +54,7 @@ module.exports = {
     mssql: 'jdbc:sqlserver://{0};databaseName={1}',
     postgres: 'jdbc:postgresql://{0}:5432/{1}',
     derby: 'jdbc:derby:{0}/{1}',
-    oracle: 'jdbc:oracle:thin:@//{0}:1521/{1}'
+    oracle: 'jdbc:oracle:thin:@(?:\/?\/?){0}:1521(\:|\/){1}'
   },
 
   /**
@@ -180,7 +181,7 @@ module.exports = {
 
     result.location = this.getDBLocationFromJDBC(jdbcUrl);
     if (!jdbcUrl.endsWith('{1}')) {
-      dbName = jdbcUrl.replace(this.DB_JDBC_PATTERNS[result.dbType].format(result.location,''), '');
+      dbName = jdbcUrl.replace(new RegExp(this.DB_JDBC_PATTERNS[result.dbType].format(stringUtils.escapeRegExp(result.location),'')), '');
       if (dbName) {
         result.databaseName = dbName.split(/[;|?]/)[0];
       }

+ 10 - 0
ambari-web/app/utils/string_utils.js

@@ -214,5 +214,15 @@ module.exports = {
   htmlEntities: function (string) {
     if (typeof string !== 'string') return "";
     return $("<div/>").text(string).html();
+  },
+
+  /**
+   * Escaping user input to be treated as a literal string within a regular expression
+   * get from https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions
+   * @param {string} str
+   * @returns {*}
+   */
+  escapeRegExp: function (str) {
+    return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
   }
 };

+ 12 - 0
ambari-web/test/utils/configs/database_test.js

@@ -46,6 +46,10 @@ describe('Database Utils', function() {
         jdbcUrl: 'jdbc:oracle:thin:@//localhost.com:1521/someDb',
         e: 'localhost.com'
       },
+      {
+        jdbcUrl: 'jdbc:oracle:thin:@ec2-52-5-27-33.compute-1.amazonaws.com:1521:ORCL',
+        e: 'ec2-52-5-27-33.compute-1.amazonaws.com'
+      },
       {
         jdbcUrl: 'jdbc:oracle:thin:@//{0}:1521/{1}',
         e: null
@@ -115,6 +119,14 @@ describe('Database Utils', function() {
           databaseName: 'someDb'
         }
       },
+      {
+        jdbcUrl: 'jdbc:oracle:thin:@localhost.com:1521:someDb',
+        e: {
+          dbType: 'oracle',
+          location: 'localhost.com',
+          databaseName: 'someDb'
+        }
+      },
       {
         jdbcUrl: 'jdbc:oracle:thin:@//{0}:1521/{1}',
         e: {