Georg Spar
3 years ago
10 changed files with 317 additions and 5 deletions
Binary file not shown.
@ -0,0 +1,67 @@ |
|||||||
|
package main |
||||||
|
|
||||||
|
import ( |
||||||
|
"flag" |
||||||
|
"fmt" |
||||||
|
"io" |
||||||
|
"log" |
||||||
|
"net" |
||||||
|
"os" |
||||||
|
"os/signal" |
||||||
|
"strconv" |
||||||
|
) |
||||||
|
|
||||||
|
var addrP *net.TCPAddr |
||||||
|
var err error |
||||||
|
var exp int |
||||||
|
|
||||||
|
// var localipport *net.TCPAddr
|
||||||
|
|
||||||
|
func main() { |
||||||
|
addrFlag := flag.String("address", "10.1.179.88:9099", "Enter address including Port to listen to") |
||||||
|
expPortFlag := flag.Int("exposed", 80, "Enter port to expose") |
||||||
|
flag.Parse() |
||||||
|
|
||||||
|
if len(*addrFlag) != 0 { |
||||||
|
addrP, err = net.ResolveTCPAddr("tcp", *addrFlag) |
||||||
|
if err != nil { |
||||||
|
log.Fatalln("Invalid address:", *addrFlag) |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
if (*expPortFlag) != 0 { |
||||||
|
exp = *expPortFlag |
||||||
|
} |
||||||
|
|
||||||
|
createConn(addrP, exp) |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
func createConn(addr *net.TCPAddr, export int) { |
||||||
|
defer log.Println("-> Closeing...") |
||||||
|
signals := make(chan os.Signal, 1) |
||||||
|
stop := make(chan bool) |
||||||
|
signal.Notify(signals, os.Interrupt) |
||||||
|
go func() { |
||||||
|
for _ = range signals { |
||||||
|
fmt.Println("\nReceived an interrupt, stopping...") |
||||||
|
stop <- true |
||||||
|
} |
||||||
|
}() |
||||||
|
|
||||||
|
inconn, err := net.DialTCP("tcp", nil, addr) |
||||||
|
if err != nil { |
||||||
|
log.Fatalln("-> Connection: ", err) |
||||||
|
} |
||||||
|
log.Println("-> Connection to ", addr) |
||||||
|
expconn, err := net.Dial("tcp", "localhost:"+strconv.Itoa(export)) |
||||||
|
if err != nil { |
||||||
|
log.Fatalln("-> local forward Connection: ", err) |
||||||
|
} |
||||||
|
log.Println("-> Connection to local Port", export) |
||||||
|
go func() { io.Copy(inconn, expconn) }() |
||||||
|
go func() { io.Copy(expconn, inconn) }() |
||||||
|
|
||||||
|
<-stop |
||||||
|
} |
@ -0,0 +1,120 @@ |
|||||||
|
package database |
||||||
|
|
||||||
|
import ( |
||||||
|
"database/sql" |
||||||
|
"fmt" |
||||||
|
"spargcom/gocart/domain" |
||||||
|
"time" |
||||||
|
|
||||||
|
_ "github.com/go-sql-driver/mysql" |
||||||
|
) |
||||||
|
|
||||||
|
var ( |
||||||
|
dbConnection = "gocuser:123456@tcp(10.1.1.6:3300)/gocart" |
||||||
|
dbType = "mysql" |
||||||
|
) |
||||||
|
|
||||||
|
func CreatePackage(pk domain.Package) (resPk domain.Package, err error) { |
||||||
|
conn, err := sql.Open(dbType, dbConnection) |
||||||
|
if err != nil { |
||||||
|
fmt.Println("Error while connecting DB: ", err) |
||||||
|
} |
||||||
|
fmt.Println("Verbindung hergestellt") |
||||||
|
fmt.Println("Name = ", pk.Name) |
||||||
|
defer conn.Close() |
||||||
|
|
||||||
|
res, err := conn.Exec("INSERT INTO package VALUES(?,?,?,?,?)", pk.Id, pk.Name, pk.Amount, pk.Price, pk.IsActive) |
||||||
|
if err != nil { |
||||||
|
fmt.Println("Error while executing insert statement", err) |
||||||
|
} |
||||||
|
lastId, err := res.LastInsertId() |
||||||
|
pk.Id = uint(lastId) |
||||||
|
resPk = pk |
||||||
|
|
||||||
|
return resPk, err |
||||||
|
} |
||||||
|
|
||||||
|
func CreateUser(us domain.User) (resUs domain.User, err error) { |
||||||
|
conn, err := sql.Open(dbType, dbConnection) |
||||||
|
if err != nil { |
||||||
|
fmt.Println("Error while connecting DB: ", err) |
||||||
|
} |
||||||
|
fmt.Println("Verbindung hergestellt") |
||||||
|
defer conn.Close() |
||||||
|
stmt, err := conn.Prepare("INSERT INTO `user` (`id`, `username`, `full_name`, `email`, `group_id`, `is_active`, `is_admin`, `password`) VALUES(?,?,?,?,?,?,?,?)") |
||||||
|
res, err := stmt.Exec(us.Id, us.Username, us.FullName, us.Email, us.GroupId, us.IsActive, us.IsAdmin, us.Password) |
||||||
|
if err != nil { |
||||||
|
fmt.Println("Error while executing insert statement", err) |
||||||
|
} |
||||||
|
lastId, err := res.LastInsertId() |
||||||
|
us.Id = uint(lastId) |
||||||
|
resUs = us |
||||||
|
|
||||||
|
return resUs, err |
||||||
|
} |
||||||
|
|
||||||
|
func CreateGroup(grp domain.Group) (resGrp domain.Group, err error) { |
||||||
|
conn, err := sql.Open(dbType, dbConnection) |
||||||
|
if err != nil { |
||||||
|
fmt.Println("Error while connecting DB: ", err) |
||||||
|
} |
||||||
|
fmt.Println("Verbindung hergestellt") |
||||||
|
defer conn.Close() |
||||||
|
stmt, err := conn.Prepare("INSERT INTO `group` (`id`, `name`, `booked_package`, `billing_address`, `auth_token`, `is_active`, `billing_user`) VALUES(?,?,?,?,?,?,?)") |
||||||
|
res, err := stmt.Exec(grp.Id, grp.Name, grp.BookedPackage, grp.BillingAddress, grp.AuthToken, grp.IsActive, grp.BillingUser) |
||||||
|
if err != nil { |
||||||
|
fmt.Println("Error while executing insert statement", err) |
||||||
|
} |
||||||
|
lastId, err := res.LastInsertId() |
||||||
|
grp.Id = uint(lastId) |
||||||
|
resGrp = grp |
||||||
|
|
||||||
|
return resGrp, err |
||||||
|
} |
||||||
|
|
||||||
|
func CreateAccount(us domain.User) (resAcc domain.Account, err error) { |
||||||
|
|
||||||
|
var acc domain.Account |
||||||
|
fmt.Println("User ID:", us.Id) |
||||||
|
fmt.Println("Group ID:", us.GroupId) |
||||||
|
conn, err := sql.Open(dbType, dbConnection) |
||||||
|
if err != nil { |
||||||
|
fmt.Println("Error while connecting DB: ", err) |
||||||
|
} |
||||||
|
fmt.Println("Verbindung hergestellt") |
||||||
|
defer conn.Close() |
||||||
|
stmt, err := conn.Prepare("INSERT INTO `account` (`id`, `group_id`, `created`, `is_active`) VALUES(?,?,?,?)") |
||||||
|
|
||||||
|
res, err := stmt.Exec(acc.Id, us.GroupId, time.Now(), acc.IsActive) |
||||||
|
if err != nil { |
||||||
|
fmt.Println("Error while executing insert statement", err) |
||||||
|
} |
||||||
|
lastId, err := res.LastInsertId() |
||||||
|
acc.Id = uint(lastId) |
||||||
|
resAcc = acc |
||||||
|
fmt.Println("Created") |
||||||
|
return resAcc, err |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
func CreateTunnel(tun domain.Tunnel) (resTun domain.Tunnel, err error) { |
||||||
|
fmt.Println("Adding tunnel to database...") |
||||||
|
conn, err := sql.Open(dbType, dbConnection) |
||||||
|
if err != nil { |
||||||
|
fmt.Println("Error while connecting DB: ", err) |
||||||
|
|
||||||
|
} |
||||||
|
fmt.Println("Verbindung hergestellt") |
||||||
|
defer conn.Close() |
||||||
|
stmt, err := conn.Prepare("INSERT INTO `tunnels` (`id`, `name`, `port`, `is_active`, `created`, `routed_name`, `routed_port`, `account_id`) VALUES(?,?,?,?,?,?,?,?)") |
||||||
|
|
||||||
|
res, err := stmt.Exec(tun.Id, tun.Name, tun.Port, tun.IsActive, time.Now(), tun.RoutedName, tun.RoutedPort, tun.AccountId) |
||||||
|
if err != nil { |
||||||
|
fmt.Println("Error while executing insert statement", err) |
||||||
|
} |
||||||
|
lastId, err := res.LastInsertId() |
||||||
|
tun.Id = uint64(lastId) |
||||||
|
resTun = tun |
||||||
|
fmt.Println("Created") |
||||||
|
return resTun, err |
||||||
|
} |
@ -0,0 +1,5 @@ |
|||||||
|
module database.go |
||||||
|
|
||||||
|
go 1.16 |
||||||
|
|
||||||
|
require github.com/go-sql-driver/mysql v1.6.0 |
@ -0,0 +1,2 @@ |
|||||||
|
github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= |
||||||
|
github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= |
@ -0,0 +1,48 @@ |
|||||||
|
package domain |
||||||
|
|
||||||
|
type Package struct { |
||||||
|
Id uint `json:"id"` |
||||||
|
Name string `json:"name"` |
||||||
|
Amount int `json:"amount"` |
||||||
|
Price float32 `json:"price"` |
||||||
|
IsActive bool `json:"isActive"` |
||||||
|
} |
||||||
|
|
||||||
|
type Group struct { |
||||||
|
Id uint `json:"id"` |
||||||
|
Name string `json:"name"` |
||||||
|
BookedPackage int `json:"bookedPackage"` |
||||||
|
BillingAddress string `json:"billingAddress"` |
||||||
|
AuthToken string `json:"authToken"` |
||||||
|
IsActive bool `json:"isActive"` |
||||||
|
BillingUser int `json:"billingUser"` |
||||||
|
} |
||||||
|
|
||||||
|
type User struct { |
||||||
|
Id uint `json:"id"` |
||||||
|
Password string `json:"password"` |
||||||
|
IsAdmin bool `json:"isAdmin"` |
||||||
|
Username string `json:"username"` |
||||||
|
FullName string `json:"fullName"` |
||||||
|
Email string `json:"email"` |
||||||
|
GroupId int `json:"groupId"` |
||||||
|
IsActive bool `json:"isActive"` |
||||||
|
} |
||||||
|
|
||||||
|
type Account struct { |
||||||
|
Id uint `json:"id"` |
||||||
|
GroupId int `json:"groupId"` |
||||||
|
Created string `json:"createDate"` |
||||||
|
IsActive bool `json:"isActive"` |
||||||
|
} |
||||||
|
|
||||||
|
type Tunnel struct { |
||||||
|
Id uint64 `json:"id"` |
||||||
|
Name string `json:"name"` |
||||||
|
Port int `json:"port"` |
||||||
|
IsActive bool `json:"isActive"` |
||||||
|
Created string `json:"created"` |
||||||
|
RoutedName string `json:"routedName"` |
||||||
|
RoutedPort int `json:"routedPort"` |
||||||
|
AccountId uint `json:"accountId"` |
||||||
|
} |
Loading…
Reference in new issue