diff --git a/controller/ChatroomProcess.go b/controller/ChatroomProcess.go new file mode 100644 index 0000000..5601ec5 --- /dev/null +++ b/controller/ChatroomProcess.go @@ -0,0 +1,7 @@ +package controller + +import "net/http" + +func ChatroomProcess(w http.ResponseWriter, r *http.Request) { + //跟user/xxx 页面ajax交互 +} diff --git a/controller/gameController.go b/controller/gameController.go new file mode 100644 index 0000000..dc17ae6 --- /dev/null +++ b/controller/gameController.go @@ -0,0 +1,26 @@ +package controller + +import ( + "fmt" + "html/template" + "net/http" +) + +func Game1(w http.ResponseWriter, r *http.Request) { + t, err := template.ParseFiles("./client/templates/huarongdao.html") + if err != nil { + w.WriteHeader(500) + fmt.Fprint(w, err) + return + } + t.Execute(w, nil) +} +func Game2(w http.ResponseWriter, r *http.Request) { + t, err := template.ParseFiles("./client/templates/huarongdao.html") + if err != nil { + w.WriteHeader(500) + fmt.Fprint(w, err) + return + } + t.Execute(w, nil) +} diff --git a/controller/registerHandlers.go b/controller/registerHandlers.go new file mode 100644 index 0000000..f82dc39 --- /dev/null +++ b/controller/registerHandlers.go @@ -0,0 +1,22 @@ +package controller + +import ( + "net/http" +) + +func RegisterHandlers() { + http.HandleFunc("/", Index) + http.HandleFunc("/login", Login) + http.HandleFunc("/loginProcess", LoginProcess) + http.HandleFunc("/regist", Regist) + http.HandleFunc("/registProcess", RegistProcess) + //Todo + http.HandleFunc("/user/", UserProcess) + //todo + http.HandleFunc("/game/game1", Game1) + http.HandleFunc("/game/game2", Game2) + //tODO + http.HandleFunc("/chatroom/", ChatroomProcess) + // http.Handle("../", http.StripPrefix("../", http.FileServer(http.Dir("./client")))) + // http.Handle("../assets/", http.StripPrefix("../assets/", http.FileServer(http.Dir("./client")))) +} diff --git a/controller/rootController.go b/controller/rootController.go new file mode 100644 index 0000000..42a3b85 --- /dev/null +++ b/controller/rootController.go @@ -0,0 +1,20 @@ +package controller + +import ( + "fmt" + "html/template" + "net/http" + "ssevven/model" +) + +func Index(w http.ResponseWriter, r *http.Request) { + t, err := template.ParseFiles("./client/templates/index.html") + if err != nil { + w.WriteHeader(500) + fmt.Fprint(w, err) + return + } + args := make(map[string]interface{}) + args["LoginHref"] = model.Cfg.Domain + "/login" + t.Execute(w, args) +} diff --git a/controller/userController.go b/controller/userController.go new file mode 100644 index 0000000..ef49cda --- /dev/null +++ b/controller/userController.go @@ -0,0 +1,138 @@ +package controller + +import ( + "encoding/json" + "fmt" + "html/template" + "log" + "net/http" + "ssevven/model" + "strconv" + "strings" +) + +//show /login.html +func Login(w http.ResponseWriter, r *http.Request) { + t, err := template.ParseFiles("./client/templates/login.html") + if err != nil { + w.WriteHeader(500) + fmt.Fprint(w, err) + return + } + args := make(map[string]interface{}) + args["Home"] = model.Cfg.Domain + args["RegistAction"] = model.Cfg.Domain + "/regist" + args["LoginAction"] = model.Cfg.Domain + "/loginProcess" + t.Execute(w, args) +} + +//process login request +func LoginProcess(w http.ResponseWriter, r *http.Request) { + r.ParseForm() + fmt.Println() + log.Println("login:", r.PostForm) + user := &model.User{} + user.Username = r.PostForm["username"][0] + user.Password = r.PostForm["password"][0] + u, _ := user.GetUserByUsername() + // log.Println("u=", u) + res := &model.LoginRes{} + if u == nil { + res.Code = 310 //用户名不存在 + res.Msg = "用户名不存在" + } else { + if u.Password == user.Password { + res.Code = 300 + res.Msg = "登陆成功" + res.UserUrl = model.Cfg.Domain + "/user/" + strconv.Itoa(u.Uid) + log.Printf("登录成功=%#v\n", user) + } else { + res.Code = 320 //密码错误 + res.Msg = "密码错误" + } + } + // Set response header + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(&res) + log.Println("res =", res) +} + +//show /regist.html +func Regist(w http.ResponseWriter, r *http.Request) { + t, err := template.ParseFiles("./client/templates/regist.html") + if err != nil { + w.WriteHeader(500) + fmt.Fprint(w, err) + return + } + args := make(map[string]interface{}) + args["Login"] = model.Cfg.Domain + "/login" + args["RegistAction"] = model.Cfg.Domain + "/registProcess" + t.Execute(w, args) +} + +//process regist request +func RegistProcess(w http.ResponseWriter, r *http.Request) { + //如果username在数据库中差找不到,则允许注册 + //否则,返回注册失败 + r.ParseForm() + fmt.Println() + log.Println("regist:", r.PostForm) + user := &model.User{} + user.Username = r.PostForm["username"][0] + user.Password = r.PostForm["password"][0] + u, _ := user.GetUserByUsername() + // log.Println("u=", u) + res := &model.RegistRes{} + + if u != nil { + res.Code = 220 //用户已注册 + res.Msg = "用户名已注册" + } else { + err := user.AddUser() + if err != nil { + log.Println("dml err=", err) + return + } + res.Code = 200 //注册成功 + res.Msg = "注册成功" + log.Printf("注册成功=%#v\n", user) + } + // Set response header + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(&res) + log.Println("res =", res) +} + +//直接访问//Todo +//show /user.html +func UserProcess(w http.ResponseWriter, r *http.Request) { + args := make(map[string]interface{}) + user := &model.User{} + user.Uid, _ = strconv.Atoi(strings.Split(r.URL.Path, "/")[2]) + u, _ := user.GetUserByUid() + if u == nil { + t, err := template.ParseFiles("./client/templates/index.html") + if err != nil { + w.WriteHeader(500) + fmt.Fprint(w, err) + return + } + t.Execute(w, nil) + } else { + t, err := template.ParseFiles("./client/templates/user.html") + if err != nil { + w.WriteHeader(500) + fmt.Fprint(w, err) + return + } + args["GameOneRequest"] = model.GameOne.GameURL + args["GameOneName"] = model.GameOne.GameName + args["GameTwoRequest"] = model.GameTwo.GameURL + args["GameTwoName"] = model.GameTwo.GameName + args["UserImg"] = u.Username + args["UserName"] = u.Username + args["Login"] = model.Cfg.Domain + "/login" + t.Execute(w, args) + } +} diff --git a/model/config.go b/model/config.go new file mode 100644 index 0000000..b1813f0 --- /dev/null +++ b/model/config.go @@ -0,0 +1,34 @@ +package model + +import ( + "bufio" + "encoding/json" + "os" +) + +type Config struct { + AppName string `json:"app_name"` + AppMode string `json:"app_mode"` + AppHost string `json:"app_host"` + AppPort string `json:"app_port"` + HttpProtocol string `json:"http_protocol"` + Domain string `json:"domain"` +} + +var Cfg *Config = nil + +func ParseConfig(path string) (*Config, error) { + file, err := os.Open(path) + if err != nil { + panic(err) //初始化出错,程序直接退出 + } + defer file.Close() + + reader := bufio.NewReader(file) + decoder := json.NewDecoder(reader) + err = decoder.Decode(&Cfg) + if err != nil { + return nil, err + } + return Cfg, nil +} diff --git a/model/errors.go b/model/errors.go new file mode 100644 index 0000000..61a0965 --- /dev/null +++ b/model/errors.go @@ -0,0 +1 @@ +package model diff --git a/model/game.go b/model/game.go new file mode 100644 index 0000000..ca16a8e --- /dev/null +++ b/model/game.go @@ -0,0 +1,19 @@ +package model + +var ( + GameOne = &Game{ + GameName: "数字华容道", + // GameURL: Cfg.Domain + "/game/game1", + GameURL: "http://ssevven.free.idcfengye.com" + "/game/game1", + } + GameTwo = &Game{ + GameName: "数独", + // GameURL: Cfg.Domain + "/game/game1", + GameURL: "http://ssevven.free.idcfengye.com" + "/game/game2", + } +) + +type Game struct { + GameName string + GameURL string +} diff --git a/model/message.go b/model/message.go new file mode 100644 index 0000000..7a0ce0a --- /dev/null +++ b/model/message.go @@ -0,0 +1,11 @@ +package model + +type RegistRes struct { + Code int32 `json:"code"` + Msg string `json:"msg"` +} +type LoginRes struct { + Code int32 `json:"code"` + Msg string `json:"msg"` + UserUrl string `json:"userUrl"` +} diff --git a/model/templates.go b/model/templates.go new file mode 100644 index 0000000..a08b85b --- /dev/null +++ b/model/templates.go @@ -0,0 +1,10 @@ +package model + +import "html/template" + +var Templates *template.Template + +func LoadTemplates() { + Templates = template.New("templates") + template.Must(Templates.ParseGlob("client/templates/*.html")) +} diff --git a/model/user.go b/model/user.go new file mode 100644 index 0000000..7627e92 --- /dev/null +++ b/model/user.go @@ -0,0 +1,106 @@ +package model + +import ( + "fmt" + "ssevven/utils" +) + +type User struct { + Uid int `json:"uid"` + Username string `json:"username"` + Password string `json:"password"` +} + +//添加用户方法1//可以防止Sql注入? +func (user *User) AddUser() error { + //sql 语句 //注册 + sqlStr := "insert into user(username,password) values(?,?)" + //预编译 + inStmt, err := utils.Db.Prepare(sqlStr) + if err != nil { + fmt.Println("预编译处理异常=", err) + return err + } + //执行 + _, err2 := inStmt.Exec(user.Username, user.Password) + if err2 != nil { + fmt.Println("执行出现异常=", err2) + return err2 + } + return nil +} +func (user *User) GetUserByUsername() (*User, error) { + sqlStr := "select uid, username, password from user where username = ?" + //执行 + row := utils.Db.QueryRow(sqlStr, user.Username) + //声明变量 + var ( + uid int + username string + password string + ) + err := row.Scan(&uid, &username, &password) + if err != nil { + fmt.Println("查询出现异常=", err) + return nil, err + } + u := &User{ + Uid: uid, + Username: username, + Password: password, + } + return u, nil +} +func (user *User) GetUserByUid() (*User, error) { + sqlStr := "select uid, username, password from user where uid = ?" + //执行 + row := utils.Db.QueryRow(sqlStr, user.Uid) + //声明变量 + var ( + uid int + username string + password string + ) + err := row.Scan(&uid, &username, &password) + if err != nil { + fmt.Println("查询出现异常=", err) + return nil, err + } + u := &User{ + Uid: uid, + Username: username, + Password: password, + } + return u, nil +} + +//获取所有的数据库用户 +func (user *User) GetUsers() ([]*User, error) { + sqlStr := "select uid, username, password from user" + //执行 + rows, err := utils.Db.Query(sqlStr) + if err != nil { + return nil, err + } + var users []*User + for rows.Next() { + //声明变量 + var ( + uid int + username string + password string + ) + err := rows.Scan(&uid, &username, &password) + if err != nil { + fmt.Println("查询出现异常=", err) + return nil, err + } + u := &User{ + Uid: uid, + Username: username, + Password: password, + } + users = append(users, u) + } + return users, nil +} diff --git a/utils/db.go b/utils/db.go new file mode 100644 index 0000000..8a6e47c --- /dev/null +++ b/utils/db.go @@ -0,0 +1,19 @@ +package utils + +import ( + "database/sql" + + _ "github.com/go-sql-driver/mysql" +) + +var ( + Db *sql.DB + err error +) + +func init() { + Db, err = sql.Open("mysql", "root:SseVven@(localhost:3306)/test") + if err != nil { + panic(err.Error()) + } +}