2018-11-07 10:10:51 +00:00
|
|
|
package services
|
|
|
|
|
|
|
|
import (
|
|
|
|
"database/sql"
|
2018-11-07 19:13:26 +00:00
|
|
|
"errors"
|
2018-11-07 10:10:51 +00:00
|
|
|
"fmt"
|
|
|
|
"os"
|
|
|
|
|
|
|
|
"github.com/astaxie/beego/orm"
|
2018-11-07 19:13:26 +00:00
|
|
|
jwt "github.com/dgrijalva/jwt-go"
|
2018-11-07 10:10:51 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
var dbs map[string]*sql.DB
|
|
|
|
|
|
|
|
// InitCompanyService Init companydb service and open system db connection
|
|
|
|
func InitCompanyService() {
|
|
|
|
fmt.Println("Hello from init") // test if init gets called from each orm
|
|
|
|
dbs := make(map[string]*sql.DB)
|
|
|
|
|
|
|
|
orm.RegisterDataBase("default", "postgres", "host=127.0.0.1 port=5435 user=postgres password=postgre sslmode=disable")
|
|
|
|
|
|
|
|
systemDB, err := sql.Open("postgres", "host=127.0.0.1 port=5435 user=postgres password=postgre dbname=company5 sslmode=disable")
|
|
|
|
if err != nil {
|
|
|
|
fmt.Println("Fatal: could not connect to db, exiting... Error:", err)
|
|
|
|
os.Exit(1)
|
|
|
|
}
|
|
|
|
dbs["system"] = systemDB
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetDatabase Get orm and user information
|
2018-11-07 19:13:26 +00:00
|
|
|
func GetDatabase(tokenString string) (jwt.MapClaims, *sql.DB, error) {
|
2018-11-07 10:10:51 +00:00
|
|
|
// validate token
|
2018-11-07 19:13:26 +00:00
|
|
|
valid, token := Validate(tokenString)
|
|
|
|
if !valid {
|
|
|
|
return nil, nil, errors.New("Token is invalid")
|
|
|
|
}
|
|
|
|
|
|
|
|
tokenMap := token.Claims.(jwt.MapClaims)
|
|
|
|
companyName := tokenMap["companyName"].(string)
|
|
|
|
|
|
|
|
if dbs[companyName] != nil {
|
|
|
|
fmt.Println("DB Already open")
|
|
|
|
return tokenMap, dbs[companyName], nil
|
|
|
|
}
|
|
|
|
|
|
|
|
conStr := fmt.Sprintf("host=127.0.0.1 port=5435 user=postgres password=postgre dbname=%s sslmode=disable", tokenMap["companyName"])
|
|
|
|
fmt.Println(conStr)
|
|
|
|
db, err := sql.Open("postgres", conStr)
|
|
|
|
if err != nil {
|
|
|
|
return nil, nil, err
|
|
|
|
}
|
|
|
|
|
2018-11-07 10:10:51 +00:00
|
|
|
// return db with orm or error
|
2018-11-07 19:13:26 +00:00
|
|
|
return tokenMap, db, nil
|
2018-11-07 10:10:51 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// CreateDatabase Create a database by copying the template
|
|
|
|
func CreateDatabase(token string) {
|
|
|
|
/*
|
|
|
|
db, err = sql.Open("postgres", "host=127.0.0.1 port=5435 user=postgres password=postgre dbname=company5 sslmode=disable")
|
|
|
|
if err != nil {
|
|
|
|
log.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
or, err := orm.NewOrmWithDB("postgres", "temp", db)
|
|
|
|
*/
|
|
|
|
}
|
|
|
|
|
|
|
|
// DeleteDatabase Delete an entire database, this is very very dangerous :-)
|
|
|
|
func DeleteDatabase(token string) {
|
|
|
|
/*
|
|
|
|
db.Close()
|
|
|
|
fmt.Println("Closed company5")
|
|
|
|
//}
|
|
|
|
|
|
|
|
res, err := o.Raw("DROP DATABASE company5;").Exec()
|
|
|
|
if err == nil {
|
|
|
|
num, _ := res.RowsAffected()
|
|
|
|
fmt.Println("mysql row affected number: ", num)
|
|
|
|
}
|
|
|
|
*/
|
|
|
|
}
|