Skip to content

Commit c54ef60

Browse files
committed
bug: fix bson doc filter
1 parent 3e548e6 commit c54ef60

File tree

2 files changed

+39
-5
lines changed

2 files changed

+39
-5
lines changed

src/makeline-service/main.go

+32-2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"log"
55
"net/http"
66
"os"
7+
"strconv"
78

89
"github.com/gin-contrib/cors"
910
"github.com/gin-gonic/gin"
@@ -101,7 +102,14 @@ func getOrder(c *gin.Context) {
101102
return
102103
}
103104

104-
order, err := client.repo.GetOrder(c.Param("id"))
105+
id, err := sanitizeOrderId(c.Param("id"))
106+
if err != nil {
107+
log.Printf("Failed to sanitize order id: %s", err)
108+
c.AbortWithStatus(http.StatusBadRequest)
109+
return
110+
}
111+
112+
order, err := client.repo.GetOrder(id)
105113
if err != nil {
106114
log.Printf("Failed to get order from database: %s", err)
107115
c.AbortWithStatus(http.StatusInternalServerError)
@@ -128,7 +136,15 @@ func updateOrder(c *gin.Context) {
128136
return
129137
}
130138

131-
err := client.repo.UpdateOrder(order)
139+
// check if the order id is valid
140+
_, err := sanitizeOrderId(order.OrderID)
141+
if err != nil {
142+
log.Printf("Failed to sanitize order id: %s", err)
143+
c.AbortWithStatus(http.StatusBadRequest)
144+
return
145+
}
146+
147+
err = client.repo.UpdateOrder(order)
132148
if err != nil {
133149
log.Printf("Failed to update order status: %s", err)
134150
c.AbortWithStatus(http.StatusInternalServerError)
@@ -175,3 +191,17 @@ func initDatabase(apiType string) (*OrderService, error) {
175191
return NewOrderService(mongoRepo), nil
176192
}
177193
}
194+
195+
func sanitizeOrderId(id string) (string, error) {
196+
// sanitize the id to prevent NoSQL injection
197+
var sanitizedId string
198+
// ensure id is a valid orderId that can be converted to int
199+
_, err := strconv.Atoi(id)
200+
if err != nil {
201+
log.Printf("Invalid order id: %s", err)
202+
return sanitizedId, err
203+
} else {
204+
sanitizedId = id
205+
}
206+
return sanitizedId, nil
207+
}

src/makeline-service/mongodb.go

+7-3
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,10 @@ func (r *MongoDBOrderRepo) GetPendingOrders() ([]Order, error) {
8686
func (r *MongoDBOrderRepo) GetOrder(id string) (Order, error) {
8787
var ctx = context.TODO()
8888

89-
singleResult := r.db.FindOne(ctx, bson.M{"orderid": id})
89+
filter := bson.D{{Key: "orderid", Value: bson.D{{Key: "$eq", Value: id}}}}
90+
91+
singleResult := r.db.FindOne(ctx, filter)
92+
9093
var order Order
9194
err := singleResult.Decode(&order)
9295
if err != nil {
@@ -123,12 +126,13 @@ func (r *MongoDBOrderRepo) InsertOrders(orders []Order) error {
123126
func (r *MongoDBOrderRepo) UpdateOrder(order Order) error {
124127
var ctx = context.TODO()
125128

126-
log.Printf("Updating order: %v", order)
129+
filter := bson.D{{Key: "orderid", Value: bson.D{{Key: "$eq", Value: order.OrderID}}}}
127130

128131
// Update the order
132+
log.Printf("Updating order: %v", order)
129133
updateResult, err := r.db.UpdateMany(
130134
ctx,
131-
bson.M{"orderid": order.OrderID},
135+
filter,
132136
bson.D{
133137
{Key: "$set", Value: bson.D{{Key: "status", Value: order.Status}}},
134138
},

0 commit comments

Comments
 (0)