From 7cce4a11f4aea13cfc61287d8c22506a94b71ed6 Mon Sep 17 00:00:00 2001 From: arnaucode Date: Thu, 6 Jul 2017 22:32:07 +0200 Subject: [PATCH] added ipFilter, implemented select item by user (adding scores) --> not finished yet --- README.md | 9 +++++++++ ipFilter.go | 30 ++++++++++++++++++++++++++++++ mongodb.go | 27 +++++++++++++++++++++++++++ mongodbModels.go | 1 + serverConfig.go | 6 ++++-- serverConfig.json | 6 +++++- serverRoutes.go | 43 +++++++++++++++++++++++++++++++++++++++++++ tests.sh | 10 ++++++++++ 8 files changed, 129 insertions(+), 3 deletions(-) create mode 100644 ipFilter.go diff --git a/README.md b/README.md index cb36d01..fb98d04 100644 --- a/README.md +++ b/README.md @@ -36,3 +36,12 @@ GET /r/{userid}/{nrec} {userid}: is the userid {nrec}: number of recommendations requested ``` + + - Select Item + +``` +POST /selectItem +{ + userid: "user1", + itemid: "item1" +} diff --git a/ipFilter.go b/ipFilter.go new file mode 100644 index 0000000..67b513a --- /dev/null +++ b/ipFilter.go @@ -0,0 +1,30 @@ +package main + +import ( + "errors" + "fmt" + "net/http" + "strings" +) + +func ipFilter(w http.ResponseWriter, r *http.Request) { + var err error + fmt.Println(r.RemoteAddr) + reqIP := strings.Split(r.RemoteAddr, ":")[0] + for _, ip := range serverConfig.BlockedIPs { + if reqIP == ip { + err = errors.New("ip not allowed to post images") + } + } + + for _, ip := range serverConfig.AllowedIPs { + if reqIP != ip { + err = errors.New("ip not allowed to post images") + } + } + //return err + if err != nil { + fmt.Fprintln(w, err.Error()) + return + } +} diff --git a/mongodb.go b/mongodb.go index a6db390..e27f2ca 100644 --- a/mongodb.go +++ b/mongodb.go @@ -110,6 +110,33 @@ func getUserById(id string) (UserModel, error) { return result, err } } +func getItemById(id string) (ItemModel, error) { + result := ItemModel{} + err := itemCollection.Find(bson.M{"id": id}).One(&result) + if err != nil { + //user not exist + return result, err + } else { + //user exist + return result, err + } +} +func updateItem(item ItemModel) (ItemModel, error) { + err := itemCollection.Update(bson.M{"id": item.ID}, item) + if err != nil { + //log.Fatal(err) + return item, err + } + return item, err +} +func updateUser(user UserModel) (UserModel, error) { + err := userCollection.Update(bson.M{"id": user.ID}, user) + if err != nil { + return user, err + } + return user, err +} + func getAllItems() ([]ItemModel, error) { result := []ItemModel{} iter := itemCollection.Find(nil).Limit(100).Iter() diff --git a/mongodbModels.go b/mongodbModels.go index 3b4a974..d6e6931 100644 --- a/mongodbModels.go +++ b/mongodbModels.go @@ -9,6 +9,7 @@ type ItemModel struct { ID string TRecommended int TActed int + TScored int //times acted from recommendation } var scores []float64 diff --git a/serverConfig.go b/serverConfig.go index f93cbc5..3411e09 100644 --- a/serverConfig.go +++ b/serverConfig.go @@ -20,8 +20,10 @@ type Route struct { //server config type ServerConfig struct { - ServerIP string `json:"serverIP"` - ServerPort string `json:"serverPort"` + ServerIP string `json:"serverIP"` + ServerPort string `json:"serverPort"` + AllowedIPs []string `json:"allowedIPs"` + BlockedIPs []string `json:"blockedIPs"` } var serverConfig ServerConfig diff --git a/serverConfig.json b/serverConfig.json index 252b474..9c1a44c 100644 --- a/serverConfig.json +++ b/serverConfig.json @@ -1,4 +1,8 @@ { "serverIP": "127.0.0.1", - "serverPort": "3056" + "serverPort": "3056", + "allowedIPs": [ + "127.0.0.1" + ], + "blockedIPs": [] } diff --git a/serverRoutes.go b/serverRoutes.go index 22da524..5757da4 100644 --- a/serverRoutes.go +++ b/serverRoutes.go @@ -30,6 +30,12 @@ var routes = Routes{ "/user", NewUser, }, + Route{ + "SelectItem", + "GET", + "/selectItem/{userid}/{itemid}", + SelectItem, + }, } //ROUTES @@ -39,6 +45,7 @@ func Index(w http.ResponseWriter, r *http.Request) { } func NewUser(w http.ResponseWriter, r *http.Request) { + ipFilter(w, r) decoder := json.NewDecoder(r.Body) var newUser UserModel err := decoder.Decode(&newUser) @@ -51,6 +58,7 @@ func NewUser(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "new user added: ", newUser.ID) } func Recommendations(w http.ResponseWriter, r *http.Request) { + ipFilter(w, r) vars := mux.Vars(r) userid := vars["userid"] nrec, err := strconv.Atoi(vars["nrec"]) @@ -61,3 +69,38 @@ func Recommendations(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "recommendations") } +func SelectItem(w http.ResponseWriter, r *http.Request) { + ipFilter(w, r) + vars := mux.Vars(r) + userid := vars["userid"] + itemid := vars["itemid"] + //find item + item, err := getItemById(itemid) + if err != nil { + fmt.Fprintln(w, "item "+itemid+" not found") + } + + //increase TActed in item + item.TActed = item.TActed + 1 + + //save item + item, err = updateItem(item) + check(err) + fmt.Println(item) + + //find user + user, err := getUserById(userid) + if err != nil { + fmt.Fprintln(w, "user "+userid+" not found") + } + + //add item to []Actions of user + user.Actions = append(user.Actions, itemid) + + //save user + user, err = updateUser(user) + check(err) + fmt.Println(user) + + fmt.Fprintln(w, "user: "+userid+", selects item: "+itemid) +} diff --git a/tests.sh b/tests.sh index 3b72959..cd56b8f 100644 --- a/tests.sh +++ b/tests.sh @@ -10,6 +10,16 @@ http http://127.0.0.1:3056/user id="user2" age=32 echo "------------------" echo "[Getting recommendations for user]" +echo http http://127.0.0.1:3056/user1/3 +http http://127.0.0.1:3056/r/user1/3 + + +echo "[selecting item by user]" +echo http http://127.0.0.1:3056/selectItem/user1/item1 +http http://127.0.0.1:3056/selectItem/user1/item1 + + +echo "[Getting recommendations for user]" echo http http://127.0.0.1:3056/user1/3 http http://127.0.0.1:3056/r/user1/3