func (s *MongoStore) New(r *http.Request, name string) (*sessions.Session, error) { session := sessions.NewSession(s, name) session.Options = &(*s.Options) session.IsNew = true var err error if c, errCookie := r.Cookie(name); errCookie == nil { err = securecookie.DecodeMulti(name, c.Value, &session.ID, s.Codecs...) if err == nil { err = s.load(session) if err == nil { session.IsNew = false } } } // Remove older sessions s.DBCollection.RemoveAll(bson.M{ "age": bson.M{ "$lt": bson.Now().Add(time.Duration(-s.Options.MaxAge) * time.Second), }, }) return session, err }
func (file *GridFile) insertFile() { hexsum := hex.EncodeToString(file.wsum.Sum(nil)) for file.wpending > 0 { debugf("GridFile %p: waiting for %d pending chunks to insert file", file, file.wpending) file.c.Wait() } if file.err == nil { file.doc.UploadDate = bson.Now() file.doc.MD5 = hexsum file.err = file.gfs.Files.Insert(file.doc) file.gfs.Chunks.EnsureIndexKey([]string{"files_id", "n"}) } }
func (s *MongoStore) save(session *sessions.Session) error { encoded, err := securecookie.EncodeMulti(session.Name(), session.Values, s.Codecs...) if err != nil { return err } mg := &MgSessionTbl{ Encoded: encoded, SessionID: []byte(session.ID), Age: bson.Now(), } _, err = s.DBCollection.Upsert(bson.M{"sessionid": session.ID}, mg) return err }
func (s *S) TestGridFSCreate(c *C) { session, err := mgo.Dial("localhost:40011") c.Assert(err, IsNil) defer session.Close() db := session.DB("mydb") before := bson.Now() gfs := db.GridFS("fs") file, err := gfs.Create("") c.Assert(err, IsNil) n, err := file.Write([]byte("some data")) c.Assert(err, IsNil) c.Assert(n, Equals, 9) err = file.Close() c.Assert(err, IsNil) after := bson.Now() // Check the file information. result := M{} err = db.C("fs.files").Find(nil).One(result) c.Assert(err, IsNil) fileId, ok := result["_id"].(bson.ObjectId) c.Assert(ok, Equals, true) c.Assert(fileId.Valid(), Equals, true) result["_id"] = "<id>" fileTs, ok := result["uploadDate"].(bson.Timestamp) c.Assert(ok, Equals, true) c.Assert(fileTs >= before && fileTs <= after, Equals, true) result["uploadDate"] = "<timestamp>" expected := M{ "_id": "<id>", "length": 9, "chunkSize": 262144, "uploadDate": "<timestamp>", "md5": "1e50210a0202497fb79bc38b6ade6c34", } c.Assert(result, Equals, expected) // Check the chunk. result = M{} err = db.C("fs.chunks").Find(nil).One(result) c.Assert(err, IsNil) chunkId, ok := result["_id"].(bson.ObjectId) c.Assert(ok, Equals, true) c.Assert(chunkId.Valid(), Equals, true) result["_id"] = "<id>" expected = M{ "_id": "<id>", "files_id": fileId, "n": 0, "data": []byte("some data"), } c.Assert(result, Equals, expected) // Check that an index was created. indexes, err := db.C("fs.chunks").Indexes() c.Assert(err, IsNil) c.Assert(len(indexes), Equals, 2) c.Assert(indexes[1].Key, Equals, []string{"files_id", "n"}) }