diff options
Diffstat (limited to 'hexfool.go')
| -rw-r--r-- | hexfool.go | 196 |
1 files changed, 175 insertions, 21 deletions
@@ -1,17 +1,45 @@ package main -import "database/sql" -import _ "github.com/go-sql-driver/mysql" +import ( + "database/sql" + _ "github.com/go-sql-driver/mysql" + "golang.org/x/crypto/bcrypt" -import "golang.org/x/crypto/bcrypt" - -import "net/http" -import "strings" -import "os/exec" + "net/http" + "strings" + "os/exec" + "encoding/json" + _ "strconv" + "fmt" + "io" + "time" +) var db *sql.DB var err error +type UserIdent struct { + Name string + Token string + Action string + level int + experience int + //Token []byte + //lastact int +} + +type Area struct { + coord_x int + coord_y int + coord_z int + created string + player string + terrtype int + wealth int +} + +type Map []Area + func signupPage(res http.ResponseWriter, req *http.Request) { if req.Method != "POST" { http.ServeFile(res, req, "html/signup.html") @@ -34,15 +62,15 @@ func signupPage(res http.ResponseWriter, req *http.Request) { panic(err) return } - newuuid, uiderr := exec.Command("uuidgen").Output() - if uiderr != nil{ - http.Error(res, "Server Error creating UUID. Unable to create account! You Fool...", 500) - Log("ERROR 500 - Creating UUID failed") - panic(uiderr) - return - } + //newuuid, uiderr := exec.Command("uuidgen").Output() + //if uiderr != nil{ + // http.Error(res, "Server Error creating UUID. Unable to create account! You Fool...", 500) + // Log("ERROR 500 - Creating UUID failed") + // panic(uiderr) + // return + //} - _, err = db.Exec("INSERT INTO players(username, password, email) VALUES(?, ?, ?)", username, hashedPassword, email) + _, err = db.Exec("INSERT INTO players(username, password, email,level,experience) VALUES(?, ?, ?, ?, ?)", username, hashedPassword, email, 1, 0) if err != nil { http.Error(res, "Server Error Inserting User. Unable to create account! You Fool...", 500) Log("ERROR adding user"+username) @@ -51,7 +79,7 @@ func signupPage(res http.ResponseWriter, req *http.Request) { return } res.Write([]byte("User Created Successfully!")) - Log("Successfully Created User"+username+string(newuuid)) + Log("Successfully Created User"+username+" email:"+email) //fmt.Println("Successfully Created User",username,newuuid) return case err != nil: @@ -75,13 +103,15 @@ func loginPage(res http.ResponseWriter, req *http.Request) { var databaseUsername string var databasePassword string + var databaseLevel int + var databaseExp int // var databaseUUID string - err := db.QueryRow("SELECT username, password FROM players WHERE username=?", username).Scan(&databaseUsername, &databasePassword) + err := db.QueryRow("SELECT username, password, level, experience FROM players WHERE username=?", username).Scan(&databaseUsername, &databasePassword, &databaseLevel, &databaseExp) if err != nil { http.Redirect(res, req, "/login", 301) - Log("Failed Login atempt by "+username) + Log("Failed Login atempt by "+username+" ;"+err.Error()) //fmt.Println("Failed Login atempt by",username) return } @@ -102,11 +132,34 @@ func loginPage(res http.ResponseWriter, req *http.Request) { panic(uiderr) return } - + type userAction struct { + Name string + Token string + Action string + } + useract := userAction{ + Name: username, + Token: token, + Action: "nil", + } + jout, err := json.Marshal(useract) + if err != nil { + Log("Error:"+ err.Error()) + } + //jout := map[string]string { + // "Name":username, + // "Token":token, + //} + //fmt.Println(databaseLevel,databaseExp) keynam := username + "_token" - setRed(keynam,token,300) + setRed(keynam,token,600) + keynam = username + "_lvl" + setRed(keynam,databaseLevel,0) + keynam = username + "_xp" + setRed(keynam,databaseExp,0) - res.Write([]byte("Hello "+ databaseUsername + "! Your token is "+ string(tok))) + res.Write([]byte(string(jout)+" \n\n Have a RESTful party at /game")) + //res.Write([]byte("Hello "+ databaseUsername + "! Your token is "+ string(tok))) Log("Successful Login by "+username) //fmt.Println("Successful Login by",username) } @@ -120,7 +173,107 @@ func homePage(res http.ResponseWriter, req *http.Request) { http.ServeFile(res, req, "html/index.html") } +func gamePage(res http.ResponseWriter, req *http.Request) { + if req.Method != "POST" { + res.Write([]byte("Access Denied")) + Log("Attempted Access to Game") + //http.ServeFile(res, req, "html/login.html") + return + } + + //make byte array + out := make([]byte,1024) + // + bodyLen, err := req.Body.Read(out) + if err != io.EOF { + fmt.Println(err.Error()) + res.Write([]byte("{error:" + err.Error() + "}")) + return + } + + var k UserIdent + err = json.Unmarshal(out[:bodyLen],&k) + if err != nil { + res.Write([]byte("{error:" + err.Error() + "}")) + return + } + //fmt.Println(k.Name, k.Token) + if !checkLegit(k) { + Log(k.Name +" token Missing") + return + } //else{ + // fmt.Println("Nice") + //} + //somemap := false + var mymap Map + for { + mymap = getSQLMap(k.Name) + if mymap == nil { + //so := getNewArea(0,0,k.Name) + //fmt.Println("New:",so) + if !addSQLMap(getNewArea(0,0,0,k.Name)) { + return + } + } + break + } + fmt.Println("MyMap:",mymap) + testEngine() +} + +func getSQLMap(nam string) Map { + var rmap Map + results,err := db.Query("SELECT coord_x, coord_y, coord_z, created, player, terrtype, wealth FROM maps WHERE player=?",nam) + if err != nil { + panic(err.Error()) + } + i := 0 + for results.Next(){ + i++ + var tf Area + err = results.Scan(&tf.coord_x, &tf.coord_y, &tf.coord_z, &tf.created, &tf.player, &tf.terrtype, &tf.wealth) + if err != nil { + panic(err.Error()) + } + rmap=append(rmap,tf) + } + if i==0 { + Log(nam + " Has Empty Map.") + return nil + } + return rmap +} + +func addSQLMap(newar Area) bool { + _, err = db.Exec("INSERT INTO maps(coord_x, coord_y, player, terrtype, wealth) VALUES(?, ?, ?, ?, ?)", newar.coord_x, newar.coord_y, newar.player, newar.terrtype, newar.wealth) + if err != nil { + Log("ERROR adding area for user "+newar.player) + panic(err) + return false + } + return true +} + +func checkLegit(usr UserIdent) bool{ + namet := usr.Name+"_token" + + if usr.Token == getRed(namet) { + return true + } + return false + //fmt.Println(getRed(namet)) +} + func main() { + //var tstart time + + tstart := time.Now() + fmt.Println("Hexfool startet at", tstart) + + defer fmt.Println("Goodbye! Uptime", (time.Now().Second()-tstart.Second())) + //defer(tend := time.Now()-tstart) + + db, err = sql.Open("mysql", "hexmaster:waSIdocHneTdUobeRoarscH@tcp(192.168.0.16)/hexmaster") if err != nil { panic(err.Error()) @@ -134,6 +287,7 @@ func main() { http.HandleFunc("/signup", signupPage) http.HandleFunc("/login", loginPage) + http.HandleFunc("/game", gamePage) http.HandleFunc("/", homePage) http.ListenAndServe(":8088", nil) } |
