Advertisement
Guest User

Untitled

a guest
Jan 15th, 2019
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.68 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "bin-updater/model"
  5.     "fmt"
  6.     "log"
  7.  
  8.     "net"
  9.     "os"
  10.     "strings"
  11.     "time"
  12.  
  13.     "github.com/go-sql-driver/mysql"
  14.     "github.com/jinzhu/gorm"
  15.     _ "github.com/jinzhu/gorm/dialects/mysql"
  16.     "golang.org/x/net/proxy"
  17. )
  18.  
  19. // InitDB starts the DB
  20. func InitDB(config *model.Config) (*gorm.DB, error) {
  21.     log.Println("Connecting to database")
  22.  
  23.     fixieData := strings.Split(config.Socks, "@")
  24.     fixieAddr := fixieData[1]
  25.     authData := strings.Split(fixieData[0], ":")
  26.  
  27.     auth := proxy.Auth{
  28.         User:     authData[0],
  29.         Password: authData[1],
  30.     }
  31.  
  32.     dialer, err := proxy.SOCKS5("tcp", fixieAddr, &auth, proxy.Direct)
  33.    
  34.     if err != nil {
  35.         fmt.Fprintln(os.Stderr, "can't connect to the proxy:", err)
  36.         os.Exit(1)
  37.     }
  38.  
  39.     mysql.RegisterDial("fixieDial", func(addr string) (net.Conn, error) {
  40.         return dialer.Dial("tcp", addr)
  41.     })
  42.  
  43.     conn := fmt.Sprintf("%s:%s@fixieDial(%s:3306)/%s?parseTime=true", config.DBUser, config.DBPassword, config.DBHost, config.DBName)
  44.  
  45.     //conn := fmt.Sprintf("%s:%s@tcp(%s)/%s?parseTime=true", config.DBUser, config.DBPassword, config.DBHost, config.DBName)
  46.  
  47.     fmt.Println("Connection details:", conn)
  48.     var db *gorm.DB
  49.  
  50.     // Ping until connection comes alive.
  51.     var dbError error
  52.     maxAttempts := 5
  53.     fmt.Println("Starting connection attempts.")
  54.     for attempts := 1; attempts <= maxAttempts; attempts++ {
  55.         // dbError = db.DB().Ping()
  56.         db, dbError = gorm.Open("mysql", conn)
  57.         if dbError == nil {
  58.             break
  59.         }
  60.         log.Println(dbError)
  61.         time.Sleep(time.Duration(attempts) * time.Second)
  62.     }
  63.     if dbError != nil {
  64.         // log.Fatal(dbError)
  65.         return nil, dbError
  66.     }
  67.     //db.LogMode(true)
  68.     fmt.Println("Connected to db successfully!")
  69.  
  70.     return db, nil
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement