44 lines
975 B
Go
44 lines
975 B
Go
package database
|
|
|
|
import (
|
|
"antrian-operasi/internal/config"
|
|
"database/sql"
|
|
"fmt"
|
|
)
|
|
|
|
func (s *service) openMySQLConnection(config config.DatabaseConfig) (*sql.DB, error) {
|
|
// Build connection string with security parameters
|
|
connStr := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?parseTime=true&timeout=%s&readTimeout=%s&writeTimeout=%s",
|
|
config.Username,
|
|
config.Password,
|
|
config.Host,
|
|
config.Port,
|
|
config.Database,
|
|
config.Timeout,
|
|
config.ReadTimeout,
|
|
config.WriteTimeout,
|
|
)
|
|
|
|
// Add SSL configuration if required
|
|
if config.RequireSSL {
|
|
connStr += "&tls=true"
|
|
if config.SSLRootCert != "" {
|
|
connStr += "&ssl-ca=" + config.SSLRootCert
|
|
}
|
|
if config.SSLCert != "" {
|
|
connStr += "&ssl-cert=" + config.SSLCert
|
|
}
|
|
if config.SSLKey != "" {
|
|
connStr += "&ssl-key=" + config.SSLKey
|
|
}
|
|
}
|
|
|
|
// Open connection
|
|
db, err := sql.Open("mysql", connStr)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to open MySQL connection: %w", err)
|
|
}
|
|
|
|
return db, nil
|
|
}
|