diff --git a/blog.go b/blog.go index 96353f3..abb6d94 100644 --- a/blog.go +++ b/blog.go @@ -23,7 +23,7 @@ const ( ` ) -func latestBlogsHandle(w http.ResponseWriter, r *http.Request) { +func latestBlogsHandle(w http.ResponseWriter, _ *http.Request) { latest, err := blogApp.LatestBlogs(0) if err != nil { if err == backend.ErrNotFound { diff --git a/internal/cdr/backend.go b/internal/cdr/backend.go index 55729fb..654699a 100644 --- a/internal/cdr/backend.go +++ b/internal/cdr/backend.go @@ -21,7 +21,7 @@ func NewBackend(back *backend.Backend, db *mongo.Database) *CDRBackend { go func() { for range time.Tick(time.Hour) { log.Println("CDR: Deleting expired dice") - res, err := db.Collection("profiles").DeleteMany(context.TODO(), bson.M{"expiration": bson.M{"$lt": time.Now().Unix()}}) + res, err := db.Collection("profiles").DeleteMany(context.Background(), bson.M{"expiration": bson.M{"$lt": time.Now().Unix()}}) if err == mongo.ErrNoDocuments { continue } @@ -47,7 +47,7 @@ func (b CDRBackend) CrashTable() backend.CrashTable { } func (s CDRBackend) AddCrash(cr backend.IndividualCrash) bool { - res := s.db.Collection("versions").FindOne(context.TODO(), bson.M{"version": cr.Version}) + res := s.db.Collection("versions").FindOne(context.Background(), bson.M{"version": cr.Version}) return res.Err() != mongo.ErrNoDocuments } diff --git a/internal/cdr/die.go b/internal/cdr/die.go index d49685b..3c55570 100644 --- a/internal/cdr/die.go +++ b/internal/cdr/die.go @@ -21,9 +21,13 @@ type UploadedDie struct { } func (b CDRBackend) UploadDie(w http.ResponseWriter, r *http.Request) { - hdr, err := b.back.VerifyHeader(w, r, "rooms", false) + hdr, err := b.back.VerifyHeader(w, r, "dice", false) if err != nil { - + return + } + if hdr.Key.AppID != "cdr" { + backend.ReturnError(w, http.StatusUnauthorized, "unauthorized", "Application not authorized") + return } if r.Body == nil { backend.ReturnError(w, http.StatusBadRequest, "bad request", "Application sent a bad request") @@ -52,7 +56,7 @@ func (b CDRBackend) UploadDie(w http.ResponseWriter, r *http.Request) { if toUpload.Die["uuid"] != nil { delete(toUpload.Die, "uuid") } - _, err = b.db.Collection("dice").InsertOne(context.TODO(), toUpload) + _, err = b.db.Collection("dice").InsertOne(context.Background(), toUpload) if err != nil { backend.ReturnError(w, http.StatusInternalServerError, "internal", "Server error") log.Println("error inserting die:", err) @@ -63,7 +67,7 @@ func (b CDRBackend) UploadDie(w http.ResponseWriter, r *http.Request) { } func (b CDRBackend) GetDie(w http.ResponseWriter, r *http.Request) { - res := b.db.Collection("dice").FindOne(context.TODO(), bson.M{"_id": r.PathValue("dieID")}) + res := b.db.Collection("dice").FindOne(context.Background(), bson.M{"_id": r.PathValue("dieID")}) if res.Err() == mongo.ErrNoDocuments { backend.ReturnError(w, 404, "not found", "Die with the given id is not found") return diff --git a/internal/swassistant/main.go b/internal/swassistant/main.go index 5206311..0cc8a47 100644 --- a/internal/swassistant/main.go +++ b/internal/swassistant/main.go @@ -21,7 +21,7 @@ func NewSWBackend(back *backend.Backend, db *mongo.Database) *SWBackend { go func() { for range time.Tick(time.Hour) { log.Println("SWAssistant: Deleting expired profiles") - res, err := db.Collection("profiles").DeleteMany(context.TODO(), bson.M{"expiration": bson.M{"$lt": time.Now().Unix()}}) + res, err := db.Collection("profiles").DeleteMany(context.Background(), bson.M{"expiration": bson.M{"$lt": time.Now().Unix()}}) if err == mongo.ErrNoDocuments { continue } @@ -47,7 +47,7 @@ func (s *SWBackend) CrashTable() backend.CrashTable { } func (s *SWBackend) AddCrash(cr backend.IndividualCrash) bool { - res := s.db.Collection("versions").FindOne(context.TODO(), bson.M{"version": cr.Version}) + res := s.db.Collection("versions").FindOne(context.Background(), bson.M{"version": cr.Version}) return res.Err() != mongo.ErrNoDocuments } diff --git a/internal/swassistant/profile.go b/internal/swassistant/profile.go index 4926328..d97eaf8 100644 --- a/internal/swassistant/profile.go +++ b/internal/swassistant/profile.go @@ -61,7 +61,7 @@ func (s *SWBackend) UploadProfile(w http.ResponseWriter, r *http.Request) { Type: profType, Profile: prof, } - _, err = s.db.Collection("profiles").InsertOne(context.TODO(), toUpload) + _, err = s.db.Collection("profiles").InsertOne(context.Background(), toUpload) if err != nil { backend.ReturnError(w, http.StatusInternalServerError, "internal", "Server error") log.Println("error inserting profile:", err) @@ -72,7 +72,7 @@ func (s *SWBackend) UploadProfile(w http.ResponseWriter, r *http.Request) { } func (s *SWBackend) GetProfile(w http.ResponseWriter, r *http.Request) { - res := s.db.Collection("profiles").FindOne(context.TODO(), bson.M{"_id": r.PathValue("profileID")}) + res := s.db.Collection("profiles").FindOne(context.Background(), bson.M{"_id": r.PathValue("profileID")}) if res.Err() == mongo.ErrNoDocuments { backend.ReturnError(w, 404, "not found", "Profile not found") return diff --git a/internal/swassistant/room.go b/internal/swassistant/room.go index e171ff1..dd0ced1 100644 --- a/internal/swassistant/room.go +++ b/internal/swassistant/room.go @@ -30,7 +30,7 @@ func (s *SWBackend) ListRooms(w http.ResponseWriter, r *http.Request) { backend.ReturnError(w, http.StatusUnauthorized, "unauthorized", "Application not authorized") return } - res, err := s.db.Collection("rooms").Find(context.TODO(), bson.M{"users": hdr.User.Username}, options.Find().SetProjection(bson.M{"_id": 1, "name": 1, "owner": 1})) + res, err := s.db.Collection("rooms").Find(context.Background(), bson.M{"users": hdr.User.Username}, options.Find().SetProjection(bson.M{"_id": 1, "name": 1, "owner": 1})) if err != nil && err != mongo.ErrNoDocuments { log.Println("error getting room list:", err) backend.ReturnError(w, http.StatusInternalServerError, "internal", "Server error") @@ -42,7 +42,7 @@ func (s *SWBackend) ListRooms(w http.ResponseWriter, r *http.Request) { Owner string `json:"owner" bson:"owner"` }, 0) if err == nil { - err = res.All(context.TODO(), &out) + err = res.All(context.Background(), &out) if err != nil { log.Println("error decoding room list:", err) backend.ReturnError(w, http.StatusInternalServerError, "internal", "Server error") @@ -61,40 +61,26 @@ func (s *SWBackend) NewRoom(w http.ResponseWriter, r *http.Request) { backend.ReturnError(w, http.StatusUnauthorized, "unauthorized", "Application not authorized") return } - if req.Method != http.MethodPost || req.Query["name"] == nil || len(req.Query["name"]) != 1 || req.Query["name"][0] == "" { - req.Resp.WriteHeader(http.StatusBadRequest) - return true - } else if req.User == nil { - req.Resp.WriteHeader(http.StatusUnauthorized) - return true + name := r.URL.Query().Get("name") + if name == "" { + backend.ReturnError(w, http.StatusBadRequest, "bad request", "Application sent bad request") + return } //TODO: check room name for unsavory words newRoom := Room{ ID: uuid.NewString(), - Name: req.Query["name"][0], - Owner: req.User.Username, + Name: name, + Owner: hdr.User.Username, Users: []string{}, Profiles: []string{}, } - _, err := s.db.Collection("rooms").InsertOne(context.TODO(), newRoom) + _, err = s.db.Collection("rooms").InsertOne(context.Background(), newRoom) if err != nil { - log.Println("SWAssistant: Error creating room:", err) - req.Resp.WriteHeader(http.StatusInternalServerError) - return true + log.Println("error creating room:", err) + backend.ReturnError(w, http.StatusInternalServerError, "internal", "Server error") + return } - out, err := json.Marshal(map[string]string{"id": newRoom.ID, "name": newRoom.Name}) - if err != nil { - log.Println("SWAssistant: Error encoding new room:", err) - req.Resp.WriteHeader(http.StatusInternalServerError) - return true - } - req.Resp.WriteHeader(http.StatusCreated) - _, err = req.Resp.Write(out) - if err != nil { - log.Println("SWAssistant: Error writing new room:", err) - req.Resp.WriteHeader(http.StatusInternalServerError) - } - return true + json.NewEncoder(w).Encode(map[string]string{"id": newRoom.ID, "name": newRoom.Name}) } func (s *SWBackend) GetRoom(w http.ResponseWriter, r *http.Request) { @@ -106,39 +92,22 @@ func (s *SWBackend) GetRoom(w http.ResponseWriter, r *http.Request) { backend.ReturnError(w, http.StatusUnauthorized, "unauthorized", "Application not authorized") return } - if req.Method != http.MethodGet { - req.Resp.WriteHeader(http.StatusBadRequest) - return true - } else if req.User == nil { - req.Resp.WriteHeader(http.StatusUnauthorized) - return true - } - res := s.db.Collection("rooms").FindOne(context.TODO(), bson.M{"_id": req.Path[1]}) + roomID := r.PathValue("roomID") + res := s.db.Collection("rooms").FindOne(context.TODO(), bson.M{"_id": roomID}) if res.Err() == mongo.ErrNoDocuments { - req.Resp.WriteHeader(http.StatusNotFound) - return true + backend.ReturnError(w, http.StatusNotFound, "not found", "Room not found") + return } else if res.Err() != nil { - log.Println("SWAssistant: Error getting room:", res.Err()) - req.Resp.WriteHeader(http.StatusInternalServerError) - return true + log.Println("error getting room:", res.Err()) + backend.ReturnError(w, http.StatusInternalServerError, "internal", "Server error") + return } - r := Room{} - err := res.Decode(&r) + var rm Room + err = res.Decode(&rm) if err != nil { - log.Println("SWAssistant: Error decoding room:", err) - req.Resp.WriteHeader(http.StatusInternalServerError) - return true + log.Println("error decoding room:", err) + backend.ReturnError(w, http.StatusInternalServerError, "internal", "Server error") + return } - out, err := json.Marshal(r) - if err != nil { - log.Println("SWAssistant: Error encoding room:", err) - req.Resp.WriteHeader(http.StatusInternalServerError) - return true - } - _, err = req.Resp.Write(out) - if err != nil { - log.Println("SWAssistant: Error writing room:", err) - req.Resp.WriteHeader(http.StatusInternalServerError) - } - return true + json.NewEncoder(w).Encode(rm) }