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

mssql: encrypt password in database

Marcus Efraimsson 7 éve
szülő
commit
8f6626e805

+ 21 - 10
pkg/tsdb/mssql/mssql.go

@@ -38,27 +38,38 @@ func NewMssqlQueryEndpoint(datasource *models.DataSource) (tsdb.TsdbQueryEndpoin
 		MacroEngine: NewMssqlMacroEngine(),
 	}
 
+	cnnstr := generateConnectionString(datasource)
+	endpoint.log.Debug("getEngine", "connection", cnnstr)
+
+	if err := endpoint.sqlEngine.InitEngine("mssql", datasource, cnnstr); err != nil {
+		return nil, err
+	}
+
+	return endpoint, nil
+}
+
+func generateConnectionString(datasource *models.DataSource) string {
+	password := ""
+	for key, value := range datasource.SecureJsonData.Decrypt() {
+		if key == "password" {
+			password = value
+			break
+		}
+	}
+
 	hostParts := strings.Split(datasource.Url, ":")
 	if len(hostParts) < 2 {
 		hostParts = append(hostParts, "1433")
 	}
 
 	server, port := hostParts[0], hostParts[1]
-	endpoint.log.Debug("cnnstr", "hostParts len", len(hostParts))
-	cnnstr := fmt.Sprintf("server=%s;port=%s;database=%s;user id=%s;password=%s;",
+	return fmt.Sprintf("server=%s;port=%s;database=%s;user id=%s;password=%s;",
 		server,
 		port,
 		datasource.Database,
 		datasource.User,
-		datasource.Password,
+		password,
 	)
-	endpoint.log.Debug("getEngine", "connection", cnnstr)
-
-	if err := endpoint.sqlEngine.InitEngine("mssql", datasource, cnnstr); err != nil {
-		return nil, err
-	}
-
-	return endpoint, nil
 }
 
 // Query is the main function for the MssqlQueryEndpoint

+ 7 - 2
public/app/plugins/datasource/mssql/partials/config.html

@@ -17,9 +17,14 @@
 			<span class="gf-form-label width-7">User</span>
 			<input type="text" class="gf-form-input" ng-model='ctrl.current.user' placeholder="user"></input>
 		</div>
-		<div class="gf-form max-width-15">
+		<div class="gf-form max-width-15" ng-if="!ctrl.current.secureJsonFields.password">
+			<span class="gf-form-label width-7">Password</span>
+			<input type="password" class="gf-form-input" ng-model='ctrl.current.secureJsonData.password' placeholder="password"></input>
+		</div>
+		<div class="gf-form max-width-19" ng-if="ctrl.current.secureJsonFields.password">
 			<span class="gf-form-label width-7">Password</span>
-			<input type="password" class="gf-form-input" ng-model='ctrl.current.password' placeholder="password"></input>
+			<input type="text" class="gf-form-input" disabled="disabled" value="configured">
+			<a class="btn btn-secondary gf-form-btn" href="#" ng-click="ctrl.current.secureJsonFields.password = false">reset</a>
 		</div>
 	</div>
 </div>