Procházet zdrojové kódy

modularize purchase and split them into files.

tags/v0.5
patrick před 5 roky
rodič
revize
3a9ad7bac1
7 změnil soubory, kde provedl 203 přidání a 185 odebrání
  1. +10
    -2
      checksum.go
  2. +2
    -2
      checksum_test.go
  3. +6
    -4
      config.go
  4. +148
    -0
      db.go
  5. +7
    -176
      main.go
  6. +1
    -1
      main_test.go
  7. +29
    -0
      purchase.go

+ 10
- 2
checksum.go Zobrazit soubor

s += form["orderAmount"][0] s += form["orderAmount"][0]
s += form["orderCurrency"][0] s += form["orderCurrency"][0]
s += form["customerId"][0] s += form["customerId"][0]
s += md5key
s += Config.LeanWork.MD5Key
} }
return md5str(s) return md5str(s)
} }
return r == sign 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 := "" s := ""
if _, ok := form["version"]; ok { if _, ok := form["version"]; ok {
s += "sign_type=" + form["sign_type"][0] + "|" s += "sign_type=" + form["sign_type"][0] + "|"

+ 2
- 2
checksum_test.go Zobrazit soubor

var s = "123" var s = "123"
var h = md5.New() var h = md5.New()
fmt.Printf("md5=%x\n", h.Sum([]byte(s))) 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 { func buildForm() url.Values {
expected := "06bcbd40cf6b914ef8ea6596730571ba" expected := "06bcbd40cf6b914ef8ea6596730571ba"
expectedkey := "492815086935204" expectedkey := "492815086935204"
assert := assert.New(t) 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) result := md5LeanworkForm(form)
assert.Equal(expected, result, "expected signature should be equal") assert.Equal(expected, result, "expected signature should be equal")
} }

+ 6
- 4
config.go Zobrazit soubor

var Config AppConfig var Config AppConfig


func readConfig() error { func readConfig() error {
log.Println("Read configration for production ")
return readConfigFile("config.json") return readConfigFile("config.json")
} }


func readConfigForTest() error {
log.Println("Read configration for Test ")
return readConfigFile("config.test.json")
}

func readConfigFile(file string) error { func readConfigFile(file string) error {


log.Printf("Read configration from %s", file) log.Printf("Read configration from %s", file)
fmt.Println(string(j)) fmt.Println(string(j))
return err return err
} }

func readConfigForTest() error {
return readConfigFile("config.test.json")
}

+ 148
- 0
db.go Zobrazit soubor

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)
}

+ 7
- 176
main.go Zobrazit soubor

package main package main


import ( import (
"database/sql"
"fmt"
"html/template"
"log" "log"
"net/http" "net/http"


_ "github.com/go-sql-driver/mysql" _ "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() { func main() {
readConfig() readConfig()
return

log.Println("Server started on: http://localhost:8080") log.Println("Server started on: http://localhost:8080")
http.HandleFunc("/", StartPay) http.HandleFunc("/", StartPay)

//http.HandleFunc("/", Index) //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) http.ListenAndServe(":8080", nil)
} }

+ 1
- 1
main_test.go Zobrazit soubor



func TestMain(m *testing.M) { func TestMain(m *testing.M) {
// call flag.Parse() here if TestMain uses flags // call flag.Parse() here if TestMain uses flags
readConfigForTest()
readConfigForTest() //setup config for test cases
os.Exit(m.Run()) os.Exit(m.Run())
} }

+ 29
- 0
purchase.go Zobrazit soubor

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)

}

Načítá se…
Zrušit
Uložit