diff --git a/checksum.go b/checksum.go index 874827c..f4512b8 100644 --- a/checksum.go +++ b/checksum.go @@ -23,7 +23,7 @@ func md5LeanworkForm(form url.Values) string { s += form["orderAmount"][0] s += form["orderCurrency"][0] s += form["customerId"][0] - s += md5key + s += Config.LeanWork.MD5Key } return md5str(s) } @@ -34,7 +34,15 @@ func isLeanworkFormValid(form url.Values) bool { return r == sign } -func md5RpnForm(form url.Values) string { +func md4RpnFormP2P(form url.Values) string { + return md5RpnForm(form, Config.Rpn.MD5P2P) +} + +func md5RpnFormFAT(form url.Values) string { + return md5RpnForm(form, Config.Rpn.MD5FAT) +} + +func md5RpnForm(form url.Values, md5key string) string { s := "" if _, ok := form["version"]; ok { s += "sign_type=" + form["sign_type"][0] + "|" diff --git a/checksum_test.go b/checksum_test.go index d106639..1ec557d 100644 --- a/checksum_test.go +++ b/checksum_test.go @@ -13,7 +13,7 @@ func TestMD5Sum(t *testing.T) { var s = "123" var h = md5.New() fmt.Printf("md5=%x\n", h.Sum([]byte(s))) - t.Errorf("something is wrong %d ", 1) + //t.Errorf("something is wrong %d ", 1) } func buildForm() url.Values { @@ -65,7 +65,7 @@ func TestMd5Form(t *testing.T) { expected := "06bcbd40cf6b914ef8ea6596730571ba" expectedkey := "492815086935204" assert := assert.New(t) - assert.Equal(expectedkey, md5key, "md5key should be 492815086935204") + assert.Equal(expectedkey, Config.LeanWork.MD5Key, "md5key should be 492815086935204") result := md5LeanworkForm(form) assert.Equal(expected, result, "expected signature should be equal") } diff --git a/config.go b/config.go index b59ddb0..f65e852 100644 --- a/config.go +++ b/config.go @@ -22,9 +22,15 @@ type AppConfig struct { var Config AppConfig func readConfig() error { + log.Println("Read configration for production ") return readConfigFile("config.json") } +func readConfigForTest() error { + log.Println("Read configration for Test ") + return readConfigFile("config.test.json") +} + func readConfigFile(file string) error { log.Printf("Read configration from %s", file) @@ -47,7 +53,3 @@ func readConfigFile(file string) error { fmt.Println(string(j)) return err } - -func readConfigForTest() error { - return readConfigFile("config.test.json") -} diff --git a/db.go b/db.go new file mode 100644 index 0000000..a5f44d8 --- /dev/null +++ b/db.go @@ -0,0 +1,148 @@ +package main + +import ( + "database/sql" + "log" + "net/http" + "text/template" +) + +type Employee struct { + Id int + Name string + City string +} + +func dbConn() (db *sql.DB) { + dbDriver := "mysql" + dbUser := "sp" + dbPass := "sp" + dbName := "goblog" + db, err := sql.Open(dbDriver, dbUser+":"+dbPass+"@/"+dbName) + if err != nil { + panic(err.Error()) + } + return db +} + +var tmpl = template.Must(template.ParseGlob("form/*")) + +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) +} diff --git a/main.go b/main.go index 35043a3..0debf35 100644 --- a/main.go +++ b/main.go @@ -1,192 +1,23 @@ package main import ( - "database/sql" - "fmt" - "html/template" "log" "net/http" _ "github.com/go-sql-driver/mysql" ) -type Employee struct { - Id int - Name string - City string -} - -var md5key = "492815086935204" //for test only - -func dbConn() (db *sql.DB) { - dbDriver := "mysql" - dbUser := "sp" - dbPass := "sp" - dbName := "goblog" - db, err := sql.Open(dbDriver, dbUser+":"+dbPass+"@/"+dbName) - if err != nil { - panic(err.Error()) - } - return db -} - -var tmpl = template.Must(template.ParseGlob("form/*")) - -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) -} - -func StartPay(w http.ResponseWriter, r *http.Request) { - if r.Method != "POST" { - fmt.Fprintf(w, "fuck") - return - } - r.ParseForm() - - if !isLeanworkFormValid(r.Form) { - fmt.Fprintf(w, "invalid request") - return - } - - for key, value := range r.Form { - fmt.Printf("%s= %s\n", key, value) - fmt.Fprintf(w, "%s= %s\n", key, value) - } - sign := md5LeanworkForm(r.Form) - - fmt.Printf("my md5=%s, valid = %t", sign, isLeanworkFormValid(r.Form)) - fmt.Fprintf(w, "my md5=%s", sign) - -} - func main() { readConfig() - return - log.Println("Server started on: http://localhost:8080") 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("/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) } diff --git a/main_test.go b/main_test.go index b57d7f2..d52e0a5 100644 --- a/main_test.go +++ b/main_test.go @@ -7,6 +7,6 @@ import ( func TestMain(m *testing.M) { // call flag.Parse() here if TestMain uses flags - readConfigForTest() + readConfigForTest() //setup config for test cases os.Exit(m.Run()) } diff --git a/purchase.go b/purchase.go new file mode 100644 index 0000000..dc16379 --- /dev/null +++ b/purchase.go @@ -0,0 +1,29 @@ +package main + +import ( + "fmt" + "net/http" +) + +func StartPay(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + fmt.Fprintf(w, "fuck") + return + } + r.ParseForm() + + if !isLeanworkFormValid(r.Form) { + fmt.Fprintf(w, "invalid request") + return + } + + for key, value := range r.Form { + fmt.Printf("%s= %s\n", key, value) + fmt.Fprintf(w, "%s= %s\n", key, value) + } + sign := md5LeanworkForm(r.Form) + + fmt.Printf("my md5=%s, valid = %t", sign, isLeanworkFormValid(r.Form)) + fmt.Fprintf(w, "my md5=%s", sign) + +}