package storage import ( "crypto/rand" "encoding/hex" "time" "go.mongodb.org/mongo-driver/bson/primitive" ) type User struct { Id primitive.ObjectID `bson:"_id" json:"id,omitempty"` Username string Password []byte `json:"-"` IsAdmin bool LastLogin time.Time RootFolderId primitive.ObjectID } type Session struct { Id primitive.ObjectID `bson:"_id" json:"id,omitempty"` Token string `json:"-"` UserID primitive.ObjectID IP string LoggedAt time.Time ExpiresAt time.Time IsAdmin bool } type ApiKey struct { Id primitive.ObjectID `bson:"_id" json:"id,omitempty"` UserID primitive.ObjectID Key string } type Folder struct { Id primitive.ObjectID `bson:"_id" json:"id,omitempty"` Name string ParentID primitive.ObjectID UserID primitive.ObjectID Icon []byte Created time.Time } type Bookmark struct { Id primitive.ObjectID `bson:"_id" json:"id,omitempty"` Name string Url string UserID primitive.ObjectID FolderID primitive.ObjectID Tags []string Icon []byte Created time.Time } type Note struct { Id primitive.ObjectID `bson:"_id" json:"id,omitempty"` Name string Tags []string Content string Created time.Time } func GenSessionToken() string { b := make([]byte, 128) if _, err := rand.Read(b); err != nil { return "" } return hex.EncodeToString(b) }