| @@ -12,6 +12,6 @@ | |||
| "Driver": "mysql", | |||
| "User" : "sp", | |||
| "Pass" : "sp", | |||
| "Schema": "goblog" | |||
| "Schema": "leanwork_pay" | |||
| } | |||
| } | |||
| @@ -12,6 +12,6 @@ | |||
| "Driver": "mysql", | |||
| "User" : "sp", | |||
| "Pass" : "sp", | |||
| "Schema": "goblog" | |||
| "Schema": "leanwork_pay" | |||
| } | |||
| } | |||
| @@ -2,149 +2,57 @@ package main | |||
| import ( | |||
| "database/sql" | |||
| "fmt" | |||
| "log" | |||
| "net/http" | |||
| "text/template" | |||
| _ "github.com/go-sql-driver/mysql" | |||
| ) | |||
| type Employee struct { | |||
| Id int | |||
| Name string | |||
| City string | |||
| type TransactionDB struct { | |||
| h *sql.DB | |||
| } | |||
| func dbConn() (db *sql.DB) { | |||
| dbDriver := Config.DB.Driver | |||
| dbUser := Config.DB.User | |||
| dbPass := Config.DB.Pass | |||
| dbName := Config.DB.Schema | |||
| db, err := sql.Open(dbDriver, dbUser+":"+dbPass+"@/"+dbName) | |||
| if err != nil { | |||
| panic(err.Error()) | |||
| } | |||
| return db | |||
| } | |||
| var tmpl = template.Must(template.ParseGlob("form/*")) | |||
| var db TransactionDB | |||
| func Index(w http.ResponseWriter, r *http.Request) { | |||
| db := dbConn() | |||
| selDB, err := db.Query("SELECT * FROM Employee ORDER BY id DESC") | |||
| func (m *TransactionDB) conn(c AppConfig) error { | |||
| dbDriver := c.DB.Driver | |||
| dbUser := c.DB.User | |||
| dbPass := c.DB.Pass | |||
| dbName := c.DB.Schema | |||
| h, err := sql.Open(dbDriver, dbUser+":"+dbPass+"@/"+dbName) | |||
| if err != nil { | |||
| panic(err.Error()) | |||
| } | |||
| emp := Employee{} | |||
| res := []Employee{} | |||
| for selDB.Next() { | |||
| var id int | |||
| var name, city string | |||
| err = selDB.Scan(&id, &name, &city) | |||
| if err != nil { | |||
| panic(err.Error()) | |||
| } | |||
| emp.Id = id | |||
| emp.Name = name | |||
| emp.City = city | |||
| res = append(res, emp) | |||
| } | |||
| tmpl.ExecuteTemplate(w, "Index", res) | |||
| defer db.Close() | |||
| } | |||
| func Show(w http.ResponseWriter, r *http.Request) { | |||
| db := dbConn() | |||
| nId := r.URL.Query().Get("id") | |||
| selDB, err := db.Query("SELECT * FROM Employee WHERE id=?", nId) | |||
| if err != nil { | |||
| panic(err.Error()) | |||
| } | |||
| emp := Employee{} | |||
| for selDB.Next() { | |||
| var id int | |||
| var name, city string | |||
| err = selDB.Scan(&id, &name, &city) | |||
| if err != nil { | |||
| panic(err.Error()) | |||
| } | |||
| emp.Id = id | |||
| emp.Name = name | |||
| emp.City = city | |||
| } | |||
| tmpl.ExecuteTemplate(w, "Show", emp) | |||
| defer db.Close() | |||
| m.h = h | |||
| fmt.Printf("%x", h) | |||
| return err | |||
| } | |||
| func New(w http.ResponseWriter, r *http.Request) { | |||
| tmpl.ExecuteTemplate(w, "New", nil) | |||
| func (m *TransactionDB) close() { | |||
| defer m.h.Close() | |||
| } | |||
| func Edit(w http.ResponseWriter, r *http.Request) { | |||
| db := dbConn() | |||
| nId := r.URL.Query().Get("id") | |||
| selDB, err := db.Query("SELECT * FROM Employee WHERE id=?", nId) | |||
| if err != nil { | |||
| panic(err.Error()) | |||
| } | |||
| emp := Employee{} | |||
| for selDB.Next() { | |||
| var id int | |||
| var name, city string | |||
| err = selDB.Scan(&id, &name, &city) | |||
| if err != nil { | |||
| panic(err.Error()) | |||
| } | |||
| emp.Id = id | |||
| emp.Name = name | |||
| emp.City = city | |||
| } | |||
| tmpl.ExecuteTemplate(w, "Edit", emp) | |||
| defer db.Close() | |||
| } | |||
| func Insert(w http.ResponseWriter, r *http.Request) { | |||
| db := dbConn() | |||
| if r.Method == "POST" { | |||
| name := r.FormValue("name") | |||
| city := r.FormValue("city") | |||
| insForm, err := db.Prepare("INSERT INTO Employee(name, city) VALUES(?,?)") | |||
| if err != nil { | |||
| panic(err.Error()) | |||
| } | |||
| insForm.Exec(name, city) | |||
| log.Println("INSERT: Name: " + name + " | City: " + city) | |||
| func (m *TransactionDB) addRequest(r *http.Request) error { | |||
| if err := m.conn(Config); err != nil { | |||
| return err | |||
| } | |||
| defer db.Close() | |||
| http.Redirect(w, r, "/", 301) | |||
| } | |||
| func Update(w http.ResponseWriter, r *http.Request) { | |||
| db := dbConn() | |||
| if r.Method == "POST" { | |||
| name := r.FormValue("name") | |||
| city := r.FormValue("city") | |||
| id := r.FormValue("uid") | |||
| insForm, err := db.Prepare("UPDATE Employee SET name=?, city=? WHERE id=?") | |||
| if err != nil { | |||
| panic(err.Error()) | |||
| } | |||
| insForm.Exec(name, city, id) | |||
| log.Println("UPDATE: Name: " + name + " | City: " + city) | |||
| } | |||
| defer db.Close() | |||
| http.Redirect(w, r, "/", 301) | |||
| } | |||
| r.ParseForm() | |||
| //assuming form has been parsed | |||
| pickupUrl := r.Form["pickupUrl"][0] | |||
| receiveUrl := r.Form["receiveUrl"][0] | |||
| signType := r.Form["signType"][0] | |||
| orderNo := r.Form["orderNo"][0] | |||
| orderAmount := r.Form["orderAmount"][0] | |||
| orderCurrency := r.Form["orderCurrency"][0] | |||
| customerId := r.Form["customerId"][0] | |||
| sign := r.Form["sign"][0] | |||
| valid := isLeanworkFormValid(r.Form) | |||
| ip4 := getClientIPLong(r) | |||
| func Delete(w http.ResponseWriter, r *http.Request) { | |||
| db := dbConn() | |||
| emp := r.URL.Query().Get("id") | |||
| delForm, err := db.Prepare("DELETE FROM Employee WHERE id=?") | |||
| if err != nil { | |||
| panic(err.Error()) | |||
| insForm, err := m.h.Prepare("INSERT INTO request(pickupUrl, receiveUrl, signType, orderNo, orderAmount, orderCurrency, customerId, sign, valid, ip4) VALUES(?,?,?,?,?,?,?,?,?,?)") | |||
| if err == nil { | |||
| insForm.Exec(pickupUrl, receiveUrl, signType, orderNo, orderAmount, orderCurrency, customerId, sign, valid, ip4) | |||
| log.Println("INSERT: customerId: " + customerId + " | orderAmount: " + orderCurrency + " " + orderAmount) | |||
| } | |||
| delForm.Exec(emp) | |||
| log.Println("DELETE") | |||
| defer db.Close() | |||
| http.Redirect(w, r, "/", 301) | |||
| m.close() | |||
| return err | |||
| } | |||
| @@ -0,0 +1,150 @@ | |||
| package main | |||
| import ( | |||
| "database/sql" | |||
| "log" | |||
| "net/http" | |||
| "text/template" | |||
| _ "github.com/go-sql-driver/mysql" | |||
| ) | |||
| type Employee struct { | |||
| Id int | |||
| Name string | |||
| City string | |||
| } | |||
| var tmpl = template.Must(template.ParseGlob("form/*")) | |||
| func dbConn() (db *sql.DB) { | |||
| dbDriver := Config.DB.Driver | |||
| dbUser := Config.DB.User | |||
| dbPass := Config.DB.Pass | |||
| dbName := Config.DB.Schema | |||
| db, err := sql.Open(dbDriver, dbUser+":"+dbPass+"@/"+dbName) | |||
| if err != nil { | |||
| panic(err.Error()) | |||
| } | |||
| return db | |||
| } | |||
| func Index(w http.ResponseWriter, r *http.Request) { | |||
| db := dbConn() | |||
| selDB, err := db.Query("SELECT * FROM Employee ORDER BY id DESC") | |||
| if err != nil { | |||
| panic(err.Error()) | |||
| } | |||
| emp := Employee{} | |||
| res := []Employee{} | |||
| for selDB.Next() { | |||
| var id int | |||
| var name, city string | |||
| err = selDB.Scan(&id, &name, &city) | |||
| if err != nil { | |||
| panic(err.Error()) | |||
| } | |||
| emp.Id = id | |||
| emp.Name = name | |||
| emp.City = city | |||
| res = append(res, emp) | |||
| } | |||
| tmpl.ExecuteTemplate(w, "Index", res) | |||
| defer db.Close() | |||
| } | |||
| func Show(w http.ResponseWriter, r *http.Request) { | |||
| db := dbConn() | |||
| nId := r.URL.Query().Get("id") | |||
| selDB, err := db.Query("SELECT * FROM Employee WHERE id=?", nId) | |||
| if err != nil { | |||
| panic(err.Error()) | |||
| } | |||
| emp := Employee{} | |||
| for selDB.Next() { | |||
| var id int | |||
| var name, city string | |||
| err = selDB.Scan(&id, &name, &city) | |||
| if err != nil { | |||
| panic(err.Error()) | |||
| } | |||
| emp.Id = id | |||
| emp.Name = name | |||
| emp.City = city | |||
| } | |||
| tmpl.ExecuteTemplate(w, "Show", emp) | |||
| defer db.Close() | |||
| } | |||
| func New(w http.ResponseWriter, r *http.Request) { | |||
| tmpl.ExecuteTemplate(w, "New", nil) | |||
| } | |||
| func Edit(w http.ResponseWriter, r *http.Request) { | |||
| db := dbConn() | |||
| nId := r.URL.Query().Get("id") | |||
| selDB, err := db.Query("SELECT * FROM Employee WHERE id=?", nId) | |||
| if err != nil { | |||
| panic(err.Error()) | |||
| } | |||
| emp := Employee{} | |||
| for selDB.Next() { | |||
| var id int | |||
| var name, city string | |||
| err = selDB.Scan(&id, &name, &city) | |||
| if err != nil { | |||
| panic(err.Error()) | |||
| } | |||
| emp.Id = id | |||
| emp.Name = name | |||
| emp.City = city | |||
| } | |||
| tmpl.ExecuteTemplate(w, "Edit", emp) | |||
| defer db.Close() | |||
| } | |||
| func Insert(w http.ResponseWriter, r *http.Request) { | |||
| db := dbConn() | |||
| if r.Method == "POST" { | |||
| name := r.FormValue("name") | |||
| city := r.FormValue("city") | |||
| insForm, err := db.Prepare("INSERT INTO Employee(name, city) VALUES(?,?)") | |||
| if err != nil { | |||
| panic(err.Error()) | |||
| } | |||
| insForm.Exec(name, city) | |||
| log.Println("INSERT: Name: " + name + " | City: " + city) | |||
| } | |||
| defer db.Close() | |||
| http.Redirect(w, r, "/", 301) | |||
| } | |||
| func Update(w http.ResponseWriter, r *http.Request) { | |||
| db := dbConn() | |||
| if r.Method == "POST" { | |||
| name := r.FormValue("name") | |||
| city := r.FormValue("city") | |||
| id := r.FormValue("uid") | |||
| insForm, err := db.Prepare("UPDATE Employee SET name=?, city=? WHERE id=?") | |||
| if err != nil { | |||
| panic(err.Error()) | |||
| } | |||
| insForm.Exec(name, city, id) | |||
| log.Println("UPDATE: Name: " + name + " | City: " + city) | |||
| } | |||
| defer db.Close() | |||
| http.Redirect(w, r, "/", 301) | |||
| } | |||
| func Delete(w http.ResponseWriter, r *http.Request) { | |||
| db := dbConn() | |||
| emp := r.URL.Query().Get("id") | |||
| delForm, err := db.Prepare("DELETE FROM Employee WHERE id=?") | |||
| if err != nil { | |||
| panic(err.Error()) | |||
| } | |||
| delForm.Exec(emp) | |||
| log.Println("DELETE") | |||
| defer db.Close() | |||
| http.Redirect(w, r, "/", 301) | |||
| } | |||
| @@ -0,0 +1,38 @@ | |||
| package main | |||
| import ( | |||
| "bytes" | |||
| "encoding/binary" | |||
| "net" | |||
| "net/http" | |||
| "strconv" | |||
| "strings" | |||
| ) | |||
| func ip2Long(ip string) uint32 { | |||
| var long uint32 | |||
| binary.Read(bytes.NewBuffer(net.ParseIP(ip).To4()), binary.BigEndian, &long) | |||
| return long | |||
| } | |||
| func backtoIP4(ipInt int64) string { | |||
| // need to do two bit shifting and “0xff” masking | |||
| b0 := strconv.FormatInt((ipInt>>24)&0xff, 10) | |||
| b1 := strconv.FormatInt((ipInt>>16)&0xff, 10) | |||
| b2 := strconv.FormatInt((ipInt>>8)&0xff, 10) | |||
| b3 := strconv.FormatInt((ipInt & 0xff), 10) | |||
| return b0 + "." + b1 + "." + b2 + "." + b3 | |||
| } | |||
| func getClientIP(r *http.Request) string { | |||
| //a := r.RemoteAddr // always be 127.0.0.1:300456 port number may vary | |||
| a := r.Header.Get("X-Forwarded-For") | |||
| s := strings.Split(a, ":") | |||
| return s[0] | |||
| } | |||
| func getClientIPLong(r *http.Request) uint32 { | |||
| s := getClientIP(r) | |||
| return ip2Long(s) | |||
| } | |||
| @@ -7,15 +7,15 @@ import ( | |||
| func main() { | |||
| readConfig() | |||
| log.Println("Server started on: http://localhost:8080") | |||
| //http.HandleFunc("/", StartPay) | |||
| http.HandleFunc("/", StartPay) | |||
| http.HandleFunc("/", Index) | |||
| http.HandleFunc("/show", Show) | |||
| http.HandleFunc("/new", New) | |||
| http.HandleFunc("/edit", Edit) | |||
| http.HandleFunc("/insert", Insert) | |||
| http.HandleFunc("/update", Update) | |||
| http.HandleFunc("/delete", Delete) | |||
| // http.HandleFunc("/", Index) | |||
| // http.HandleFunc("/show", Show) | |||
| // http.HandleFunc("/new", New) | |||
| // http.HandleFunc("/edit", Edit) | |||
| // http.HandleFunc("/insert", Insert) | |||
| // http.HandleFunc("/update", Update) | |||
| // http.HandleFunc("/delete", Delete) | |||
| http.ListenAndServe(":8080", nil) | |||
| log.Println("Server started on: http://localhost:8080") | |||
| } | |||
| @@ -11,7 +11,7 @@ func StartPay(w http.ResponseWriter, r *http.Request) { | |||
| return | |||
| } | |||
| r.ParseForm() | |||
| db.addRequest(r) | |||
| if !isLeanworkFormValid(r.Form) { | |||
| fmt.Fprintf(w, "invalid request") | |||
| return | |||