// // { "verb": "getCoincount", "name": fb-name } // { "result": true, "answer" : 6357] } // { "result": false, "answer" : "not a registered user"] } // func validateGetCoinCountRequest(req *jsondata.JSONMap) Request { name, r1 := req.GetString("name") json := "{\"result\": false, \"answer\": \"missing or invalid arguments in getPendingCoinRequests request\"}" if !r1 || len(name) < 6 { return &BadRequest{json} } return datastore.NewGetCoinCount(name) }
func validateGetAchievements(req *jsondata.JSONMap) Request { hash, r1 := req.GetString("hash") json := "{\"result\": false, \"answer\": \"missing or invalid arguments in getAchievements request\"}" if !r1 || len(hash) < 6 { return &BadRequest{json} } return datastore.NewGetAchievementRequest(hash) }
func validateGetLeaderBoard(req *jsondata.JSONMap) Request { hash, r1 := req.GetString("hash") if !r1 || len(hash) < 6 { jsonRes := "{\"result\": false, \"answer\": \"Missing or Invalid data in getLeaderBoard request\"}" return &BadRequest{jsonRes} } return datastore.NewLeaderBoardRequest(hash) }
// unregister: (in) json // { "name": "*****@*****.**", "hash":"123456..." } func validateUnregisterRequest(req *jsondata.JSONMap) Request { name, r1 := req.GetString("name") hash, r2 := req.GetString("hash") s := "{\"result\": false, \"answer\": \"missing or invalid arguments in the request\"}" if !r1 || !r2 || len(name) < 6 || len(hash) < 6 { return &BadRequest{s} } return datastore.NewUnregisterRequest(name, hash) }
// // {"verb": "syncCoinCounts", "hash": <user_hash>, "count": <count>} // func validateSyncCoinCounts(req *jsondata.JSONMap) Request { hash, r1 := req.GetString("hash") count, r2 := req.GetUInt("count") json := "{\"result\": false, \"answer\": \"missing or invalid arguments in syncCoinCount request\"}" if !r1 || !r2 || count <= 0 || len(hash) < 6 { return &BadRequest{json} } return datastore.NewSyncCoinCounts(hash, count) }
// // { "verb": "getPendingCoinRequests", "hash": <user-id>, "limit": <unsigned integer> } // { "result": true, "answer" : [zero-or-more{"name": <name>, "count": <unsigned int>}] } // func validateGetPendingCoinRequests(req *jsondata.JSONMap) Request { hash, r1 := req.GetString("hash") limit, r2 := req.GetUInt("limit") json := "{\"result\": false, \"answer\": \"missing or invalid arguments in getPendingCoinRequests request\"}" if !r1 || !r2 || limit <= 0 || len(hash) < 6 { return &BadRequest{json} } return datastore.NewGetPendingCoinRequests(hash, limit) }
func validateSetAchievement(req *jsondata.JSONMap) Request { hash, r1 := req.GetString("hash") achievement, r2 := req.GetUInt("achievement") json := "{\"result\": false, \"answer\": \"missing or invalid arguments in setAchievement request\"}" if !r1 || !r2 || len(hash) < 6 { return &BadRequest{json} } return datastore.NewSetAchievementRequest(hash, achievement) }
func ValidateRequest(req *jsondata.JSONMap) *Response { err := MissingVerb if cmd, res := req.GetString("verb"); res { err = InvalidVerb if handler := reqHandlers[cmd]; handler != nil { return handler(req) } } panic(err) }
// // { "verb": "getScore", "hash": <user-id> , "game": <game-name>} // { "result": true, "answer" : <score-unsigned-int> } // { "result": false, "answer" : "invalid user" } // func validateGetScore(req *jsondata.JSONMap) Request { hash, r1 := req.GetString("hash") game, r2 := req.GetString("game") json := "{\"result\": false, \"answer\": \"missing or invalid arguments in getScore request\"}" if !r1 || !r2 || len(hash) < 6 || len(game) < 6 { return &BadRequest{json} } return datastore.NewGetScoreRequest(hash, game) }
func validateReceiveMessage(req *jsondata.JSONMap) Request { to, r1 := req.GetString("receiver") // hash of the receiver limit, _ := req.GetUInt("limit") // ignored, at the moment // additionally, we need to record the date and time of this response if !r1 || len(to) < 6 { jsonRes := "{\"result\": false, \"answer\": \"Missing or Invalid data in receiveMessage request\"}" return &BadRequest{jsonRes} } return datastore.NewReceiveMessage(to, limit) }
func parseUpdateParams(req *jsondata.JSONMap) *CheckUpdateRequestParams { uid := getUID(req) verApp, r1 := req.GetString("verApp") verRes, r2 := req.GetString("verRes") if !r1 || !r2 { return nil } portraitX := 0 portraitY := 0 density := 0 size := InvalidScreen portraitX, _ = req.GetUInt("portraitX") portraitY, _ = req.GetUInt("portraitY") if portraitX == 0 || portraitY == 0 { return nil } d, _ := req.GetString("density") density = screenDensity(d) d, _ = req.GetString("screenSize") size = screenSize(d) p := CheckUpdateRequestParams{uid, verApp, verRes, portraitX, portraitY, density, size} return &p }
func validateRequest(httpReq *http.Request, jsonMap *jsondata.JSONMap) Request { var reason string = "missing verb in the request" if cmd, res := jsonMap.GetString("verb"); res { reason = "Invalid or unknown REST-resource and verb combined in the request (" + httpReq.RawURL + " : " + cmd + ")" if handler := reqHandlers[cmd]; handler != nil { if isVerbValidForResource(httpReq.URL.Path, cmd) { return handler(jsonMap) } } } msg := "{\"result\": false, \"answer\": \"" + reason + "\"}" return &BadRequest{msg} }
func validateOfferCoins(req *jsondata.JSONMap) Request { offer, r1 := req.GetUInt("offer") countOnDevice, r2 := req.GetUInt("countOnDevice") requester, r3 := req.GetString("requester") // fb id donor, r4 := req.GetString("donor") // hash // additionally, we need to record the date and time of this response if !r1 || !r2 || !r3 || !r4 || len(donor) < 6 || len(requester) < 6 || offer <= 0 || countOnDevice <= 0 { jsonRes := "{\"result\": false, \"answer\": \"Missing or Invalid data in offerCoins request\"}" return &BadRequest{jsonRes} } return datastore.NewCoinsOffer(requester, donor, offer, countOnDevice) }
func ValidateRegisterRequest(req *jsondata.JSONMap) *Response { name, r1 := req.GetString("name") password, r2 := req.GetString("password") device, r3 := req.GetString("deviceId") if r1 && r2 && r3 { osVer, _ := req.GetString("osVersion") hasher := sha1.New() hasher.Write([]byte(name + password + device)) fmt.Printf("osVer: %v, hash size: %v, hash sum: %v\n", osVer, hasher.Size(), hasher.Sum()) return nil } panic("Ill-formed JSON for register request") }
func validateRequestCoins(req *jsondata.JSONMap) Request { count, r1 := req.GetUInt("count") requester, r2 := req.GetString("requester") // hash donor, r3 := req.GetString("donor") // fb id // additionally, we need to record the date and time of this request if !r1 || !r2 || !r3 || len(requester) < 6 || len(donor) < 6 || count <= 0 { jsonRes := "{\"result\": false, \"answer\": \"Missing or Invalid data in requestCoins request\"}" return &BadRequest{jsonRes} } return datastore.NewCoinsRequest(requester, donor, count) }
func validateSendMessage(req *jsondata.JSONMap) Request { from, r1 := req.GetString("from") // hash value to, r2 := req.GetString("to") // fb id msg, r3 := req.GetString("message") // additionally, we need to record the date and time of this response if !r1 || !r2 || !r3 || to == from || len(from) < 6 || len(to) < 6 || len(msg) == 0 { jsonRes := "{\"result\": false, \"answer\": \"Missing or Invalid data in sendMessage request\"}" return &BadRequest{jsonRes} } return datastore.NewSendMessage(from, to, msg) }
func getUID(req *jsondata.JSONMap) string { if uid, r := req.GetString("uid"); r { return uid } panic("Fatal Error: missing UID in the request") }
func validateRegisterRequest(req *jsondata.JSONMap) Request { name, r1 := req.GetString("name") password, r2 := req.GetString("password") device, r3 := req.GetString("deviceId") profile, r4 := req.GetString("profile") s := "{\"result\": false, \"answer\": \"missing or invalid arguments in the request\"}" if !(r1 && r2 && r3 && r4) { return &BadRequest{s} } if len(name) < 6 /*|| len(password) < 2*/ || len(device) < 6 { return &BadRequest{s} } displayName, _ := req.GetString("displayName") os, _ := req.GetString("os") osVer, _ := req.GetString("osVersion") density, _ := req.GetString("density") portraitX, _ := req.GetUInt("portraitX") portraitY, _ := req.GetUInt("portraitY") screen, _ := req.GetString("screenSize") // TODO: for the moment we have disabled hash generation to avoid JSON issues /*hasher := sha1.New() hasher.Write([]byte(name + password + device)) hash := hasher.Sum()*/ hash := name + "**" + device return datastore.NewUserDevice(name, displayName, password, device, hash, profile, os, osVer, portraitX, portraitY, density, screen) }