From f2e8bc828555c24aff67ecbcc774a25cbe1e8d96 Mon Sep 17 00:00:00 2001 From: Chen-I Lim Date: Mon, 11 Jan 2021 18:53:08 -0800 Subject: [PATCH] Store blocks modified_by userID --- server/api/api.go | 17 ++ server/app/auth.go | 5 +- server/model/block.go | 21 +- server/services/store/sqlstore/blocks.go | 146 ++++++++++-- .../sqlstore/migrations/postgres/bindata.go | 211 +++++++++--------- .../000005_blocks_modifiedby.down.sql | 2 + .../000005_blocks_modifiedby.up.sql | 2 + .../sqlstore/migrations/sqlite/bindata.go | 211 +++++++++--------- .../000005_blocks_modifiedby.down.sql | 2 + .../000005_blocks_modifiedby.up.sql | 2 + 10 files changed, 377 insertions(+), 242 deletions(-) create mode 100644 server/services/store/sqlstore/migrations/postgres_files/000005_blocks_modifiedby.down.sql create mode 100644 server/services/store/sqlstore/migrations/postgres_files/000005_blocks_modifiedby.up.sql create mode 100644 server/services/store/sqlstore/migrations/sqlite_files/000005_blocks_modifiedby.down.sql create mode 100644 server/services/store/sqlstore/migrations/sqlite_files/000005_blocks_modifiedby.up.sql diff --git a/server/api/api.go b/server/api/api.go index d86c0e28e..a48f7da22 100644 --- a/server/api/api.go +++ b/server/api/api.go @@ -78,6 +78,19 @@ func (a *API) handleGetBlocks(w http.ResponseWriter, r *http.Request) { jsonBytesResponse(w, http.StatusOK, json) } +func stampModifiedByUser(r *http.Request, blocks []model.Block) { + ctx := r.Context() + session := ctx.Value("session").(*model.Session) + userID := session.UserID + if userID == "single-user" { + userID = "" + } + + for i := range blocks { + blocks[i].ModifiedBy = userID + } +} + func (a *API) handlePostBlocks(w http.ResponseWriter, r *http.Request) { requestBody, err := ioutil.ReadAll(r.Body) if err != nil { @@ -129,6 +142,8 @@ func (a *API) handlePostBlocks(w http.ResponseWriter, r *http.Request) { } } + stampModifiedByUser(r, blocks) + err = a.app().InsertBlocks(blocks) if err != nil { log.Printf(`ERROR: %v, REQUEST: %v`, err, r) @@ -349,6 +364,8 @@ func (a *API) handleImport(w http.ResponseWriter, r *http.Request) { return } + stampModifiedByUser(r, blocks) + err = a.app().InsertBlocks(blocks) if err != nil { log.Printf(`ERROR: %v, REQUEST: %v`, err, r) diff --git a/server/app/auth.go b/server/app/auth.go index 3e5dcd1c2..8c41b69bb 100644 --- a/server/app/auth.go +++ b/server/app/auth.go @@ -1,6 +1,7 @@ package app import ( + "fmt" "log" "time" @@ -15,7 +16,7 @@ import ( func (a *App) GetSession(token string) (*model.Session, error) { session, err := a.store.GetSession(token, a.config.SessionExpireTime) if err != nil { - return nil, errors.Wrap(err, "unable to get the session for the token") + return nil, errors.Wrap(err, fmt.Sprintf("unable to get the session for the token (%v)", token)) } if session.UpdateAt < (time.Now().Unix() - a.config.SessionRefreshTime) { a.store.RefreshSession(session) @@ -27,7 +28,7 @@ func (a *App) GetSession(token string) (*model.Session, error) { func (a *App) GetUser(ID string) (*model.User, error) { user, err := a.store.GetUserById(ID) if err != nil { - return nil, errors.Wrap(err, "unable to get the session for the token") + return nil, errors.Wrap(err, fmt.Sprintf("unable to get the session for the user (%v)", ID)) } return user, nil } diff --git a/server/model/block.go b/server/model/block.go index 06ebfd28b..c165aaec6 100644 --- a/server/model/block.go +++ b/server/model/block.go @@ -7,16 +7,17 @@ import ( // Block is the basic data unit. type Block struct { - ID string `json:"id"` - ParentID string `json:"parentId"` - RootID string `json:"rootId"` - Schema int64 `json:"schema"` - Type string `json:"type"` - Title string `json:"title"` - Fields map[string]interface{} `json:"fields"` - CreateAt int64 `json:"createAt"` - UpdateAt int64 `json:"updateAt"` - DeleteAt int64 `json:"deleteAt"` + ID string `json:"id"` + ParentID string `json:"parentId"` + RootID string `json:"rootId"` + ModifiedBy string `json:"modifiedBy"` + Schema int64 `json:"schema"` + Type string `json:"type"` + Title string `json:"title"` + Fields map[string]interface{} `json:"fields"` + CreateAt int64 `json:"createAt"` + UpdateAt int64 `json:"updateAt"` + DeleteAt int64 `json:"deleteAt"` } // Archive is an import / export archive diff --git a/server/services/store/sqlstore/blocks.go b/server/services/store/sqlstore/blocks.go index 12be0fa7c..0d93ca3d5 100644 --- a/server/services/store/sqlstore/blocks.go +++ b/server/services/store/sqlstore/blocks.go @@ -24,9 +24,19 @@ func (s *SQLStore) latestsBlocksSubquery() sq.SelectBuilder { func (s *SQLStore) GetBlocksWithParentAndType(parentID string, blockType string) ([]model.Block, error) { query := s.getQueryBuilder(). - Select("id", "parent_id", "root_id", "schema", "type", "title", - "COALESCE(\"fields\", '{}')", "create_at", "update_at", - "delete_at"). + Select( + "id", + "parent_id", + "root_id", + "modified_by", + "schema", + "type", + "title", + "COALESCE(\"fields\", '{}')", + "create_at", + "update_at", + "delete_at", + ). FromSelect(s.latestsBlocksSubquery(), "latest"). Where(sq.Eq{"parent_id": parentID}). Where(sq.Eq{"type": blockType}) @@ -43,9 +53,19 @@ func (s *SQLStore) GetBlocksWithParentAndType(parentID string, blockType string) func (s *SQLStore) GetBlocksWithParent(parentID string) ([]model.Block, error) { query := s.getQueryBuilder(). - Select("id", "parent_id", "root_id", "schema", "type", "title", - "COALESCE(\"fields\", '{}')", "create_at", "update_at", - "delete_at"). + Select( + "id", + "parent_id", + "root_id", + "modified_by", + "schema", + "type", + "title", + "COALESCE(\"fields\", '{}')", + "create_at", + "update_at", + "delete_at", + ). FromSelect(s.latestsBlocksSubquery(), "latest"). Where(sq.Eq{"parent_id": parentID}) @@ -61,9 +81,19 @@ func (s *SQLStore) GetBlocksWithParent(parentID string) ([]model.Block, error) { func (s *SQLStore) GetBlocksWithType(blockType string) ([]model.Block, error) { query := s.getQueryBuilder(). - Select("id", "parent_id", "root_id", "schema", "type", "title", - "COALESCE(\"fields\", '{}')", "create_at", "update_at", - "delete_at"). + Select( + "id", + "parent_id", + "root_id", + "modified_by", + "schema", + "type", + "title", + "COALESCE(\"fields\", '{}')", + "create_at", + "update_at", + "delete_at", + ). FromSelect(s.latestsBlocksSubquery(), "latest"). Where(sq.Eq{"type": blockType}) @@ -80,9 +110,19 @@ func (s *SQLStore) GetBlocksWithType(blockType string) ([]model.Block, error) { // GetSubTree2 returns blocks within 2 levels of the given blockID func (s *SQLStore) GetSubTree2(blockID string) ([]model.Block, error) { query := s.getQueryBuilder(). - Select("id", "parent_id", "root_id", "schema", "type", "title", - "COALESCE(\"fields\", '{}')", "create_at", "update_at", - "delete_at"). + Select( + "id", + "parent_id", + "root_id", + "modified_by", + "schema", + "type", + "title", + "COALESCE(\"fields\", '{}')", + "create_at", + "update_at", + "delete_at", + ). FromSelect(s.latestsBlocksSubquery(), "latest"). Where(sq.Or{sq.Eq{"id": blockID}, sq.Eq{"parent_id": blockID}}) @@ -99,9 +139,19 @@ func (s *SQLStore) GetSubTree2(blockID string) ([]model.Block, error) { // GetSubTree3 returns blocks within 3 levels of the given blockID func (s *SQLStore) GetSubTree3(blockID string) ([]model.Block, error) { // This first subquery returns repeated blocks - subquery1 := sq.Select("l3.id", "l3.parent_id", "l3.root_id", "l3.schema", "l3.type", "l3.title", - "l3.fields", "l3.create_at", "l3.update_at", - "l3.delete_at"). + subquery1 := sq.Select( + "l3.id", + "l3.parent_id", + "l3.root_id", + "l3.modified_by", + "l3.schema", + "l3.type", + "l3.title", + "l3.fields", + "l3.create_at", + "l3.update_at", + "l3.delete_at", + ). FromSelect(s.latestsBlocksSubquery(), "l1"). JoinClause(s.latestsBlocksSubquery().Prefix("JOIN (").Suffix(") l2 on l2.parent_id = l1.id or l2.id = l1.id")). JoinClause(s.latestsBlocksSubquery().Prefix("JOIN (").Suffix(") l3 on l3.parent_id = l2.id or l3.id = l2.id")). @@ -112,9 +162,19 @@ func (s *SQLStore) GetSubTree3(blockID string) ([]model.Block, error) { subquery2 := sq.Select("*", "ROW_NUMBER() OVER (PARTITION BY id) AS rn"). FromSelect(subquery1, "sub1") - query := s.getQueryBuilder().Select("id", "parent_id", "root_id", "schema", "type", "title", - "COALESCE(\"fields\", '{}')", "create_at", "update_at", - "delete_at"). + query := s.getQueryBuilder().Select( + "id", + "parent_id", + "root_id", + "modified_by", + "schema", + "type", + "title", + "COALESCE(\"fields\", '{}')", + "create_at", + "update_at", + "delete_at", + ). FromSelect(subquery2, "sub2"). Where(sq.Eq{"rn": 1}) @@ -130,9 +190,19 @@ func (s *SQLStore) GetSubTree3(blockID string) ([]model.Block, error) { func (s *SQLStore) GetAllBlocks() ([]model.Block, error) { query := s.getQueryBuilder(). - Select("id", "parent_id", "root_id", "schema", "type", "title", - "COALESCE(\"fields\", '{}')", "create_at", "update_at", - "delete_at"). + Select( + "id", + "parent_id", + "root_id", + "modified_by", + "schema", + "type", + "title", + "COALESCE(\"fields\", '{}')", + "create_at", + "update_at", + "delete_at", + ). FromSelect(s.latestsBlocksSubquery(), "latest") rows, err := query.Query() @@ -153,11 +223,13 @@ func blocksFromRows(rows *sql.Rows) ([]model.Block, error) { for rows.Next() { var block model.Block var fieldsJSON string + var modifiedBy sql.NullString err := rows.Scan( &block.ID, &block.ParentID, &block.RootID, + &modifiedBy, &block.Schema, &block.Type, &block.Title, @@ -172,6 +244,10 @@ func blocksFromRows(rows *sql.Rows) ([]model.Block, error) { return nil, err } + if modifiedBy.Valid { + block.ModifiedBy = modifiedBy.String + } + err = json.Unmarshal([]byte(fieldsJSON), &block.Fields) if err != nil { // handle this error @@ -214,9 +290,31 @@ func (s *SQLStore) InsertBlock(block model.Block) error { } query := s.getQueryBuilder().Insert("blocks"). - Columns("id", "parent_id", "root_id", "schema", "type", "title", "fields", "create_at", "update_at", "delete_at"). - Values(block.ID, block.ParentID, block.RootID, block.Schema, block.Type, block.Title, - fieldsJSON, block.CreateAt, block.UpdateAt, block.DeleteAt) + Columns( + "id", + "parent_id", + "root_id", + "modified_by", + "schema", + "type", + "title", + "fields", + "create_at", + "update_at", + "delete_at", + ).Values( + block.ID, + block.ParentID, + block.RootID, + block.ModifiedBy, + block.Schema, + block.Type, + block.Title, + fieldsJSON, + block.CreateAt, + block.UpdateAt, + block.DeleteAt, + ) _, err = query.Exec() if err != nil { diff --git a/server/services/store/sqlstore/migrations/postgres/bindata.go b/server/services/store/sqlstore/migrations/postgres/bindata.go index 0f10afc4b..5694c7aeb 100644 --- a/server/services/store/sqlstore/migrations/postgres/bindata.go +++ b/server/services/store/sqlstore/migrations/postgres/bindata.go @@ -1,20 +1,20 @@ // Code generated by go-bindata. DO NOT EDIT. // sources: -// postgres_files/000001_init.down.sql (19B) -// postgres_files/000001_init.up.sql (268B) -// postgres_files/000002_system_settings_table.down.sql (28B) -// postgres_files/000002_system_settings_table.up.sql (97B) -// postgres_files/000003_blocks_rootid.down.sql (40B) -// postgres_files/000003_blocks_rootid.up.sql (51B) -// postgres_files/000004_auth_table.down.sql (39B) -// postgres_files/000004_auth_table.up.sql (491B) - +// postgres_files/000001_init.down.sql +// postgres_files/000001_init.up.sql +// postgres_files/000002_system_settings_table.down.sql +// postgres_files/000002_system_settings_table.up.sql +// postgres_files/000003_blocks_rootid.down.sql +// postgres_files/000003_blocks_rootid.up.sql +// postgres_files/000004_auth_table.down.sql +// postgres_files/000004_auth_table.up.sql +// postgres_files/000005_blocks_modifiedby.down.sql +// postgres_files/000005_blocks_modifiedby.up.sql package postgres import ( "bytes" "compress/gzip" - "crypto/sha256" "fmt" "io" "io/ioutil" @@ -27,7 +27,7 @@ import ( func bindataRead(data []byte, name string) ([]byte, error) { gz, err := gzip.NewReader(bytes.NewBuffer(data)) if err != nil { - return nil, fmt.Errorf("read %q: %w", name, err) + return nil, fmt.Errorf("Read %q: %v", name, err) } var buf bytes.Buffer @@ -35,7 +35,7 @@ func bindataRead(data []byte, name string) ([]byte, error) { clErr := gz.Close() if err != nil { - return nil, fmt.Errorf("read %q: %w", name, err) + return nil, fmt.Errorf("Read %q: %v", name, err) } if clErr != nil { return nil, err @@ -45,9 +45,8 @@ func bindataRead(data []byte, name string) ([]byte, error) { } type asset struct { - bytes []byte - info os.FileInfo - digest [sha256.Size]byte + bytes []byte + info os.FileInfo } type bindataFileInfo struct { @@ -91,8 +90,8 @@ func _000001_initDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "000001_init.down.sql", size: 19, mode: os.FileMode(0644), modTime: time.Unix(1602958996, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe4, 0x9a, 0x67, 0x49, 0xbf, 0xf7, 0xaa, 0x0, 0xe2, 0x48, 0xe4, 0xe2, 0xdc, 0x1, 0x8b, 0xa3, 0x24, 0x4, 0xcc, 0xbd, 0x3d, 0xbd, 0xf8, 0xec, 0xcf, 0x54, 0x9e, 0xc6, 0x83, 0x69, 0x7c, 0xb0}} + info := bindataFileInfo{name: "000001_init.down.sql", size: 19, mode: os.FileMode(420), modTime: time.Unix(1603074564, 0)} + a := &asset{bytes: bytes, info: info} return a, nil } @@ -111,8 +110,8 @@ func _000001_initUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "000001_init.up.sql", size: 268, mode: os.FileMode(0644), modTime: time.Unix(1603214842, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1d, 0xaf, 0xd8, 0x41, 0x91, 0x97, 0x98, 0xd, 0x84, 0x1f, 0x4, 0xf8, 0xc8, 0x17, 0xa3, 0x20, 0x3f, 0x5b, 0x65, 0xee, 0x26, 0xae, 0x17, 0x8, 0xe7, 0xe, 0x25, 0xca, 0x87, 0xaa, 0xd4, 0xd4}} + info := bindataFileInfo{name: "000001_init.up.sql", size: 268, mode: os.FileMode(420), modTime: time.Unix(1607029670, 0)} + a := &asset{bytes: bytes, info: info} return a, nil } @@ -131,8 +130,8 @@ func _000002_system_settings_tableDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "000002_system_settings_table.down.sql", size: 28, mode: os.FileMode(0644), modTime: time.Unix(1603112131, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe4, 0xfd, 0xe6, 0x5d, 0xd1, 0xb2, 0xe9, 0x49, 0x14, 0x3b, 0xec, 0xb, 0x5f, 0x9d, 0x1d, 0x56, 0x13, 0x70, 0x76, 0x78, 0x7e, 0xd7, 0xd2, 0x57, 0x1e, 0xe7, 0x11, 0xb, 0xf9, 0xfb, 0x67, 0xb9}} + info := bindataFileInfo{name: "000002_system_settings_table.down.sql", size: 28, mode: os.FileMode(420), modTime: time.Unix(1603229117, 0)} + a := &asset{bytes: bytes, info: info} return a, nil } @@ -151,8 +150,8 @@ func _000002_system_settings_tableUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "000002_system_settings_table.up.sql", size: 97, mode: os.FileMode(0644), modTime: time.Unix(1603112131, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x5, 0xac, 0x61, 0xab, 0xf5, 0x91, 0x2f, 0xfd, 0xa8, 0x27, 0xa4, 0x63, 0xd1, 0x2d, 0xf4, 0x79, 0x2a, 0x9d, 0x78, 0x94, 0xb7, 0x7a, 0xaf, 0xcb, 0x9d, 0xae, 0x10, 0x89, 0xb3, 0xeb, 0x1e, 0x5d}} + info := bindataFileInfo{name: "000002_system_settings_table.up.sql", size: 97, mode: os.FileMode(420), modTime: time.Unix(1603229117, 0)} + a := &asset{bytes: bytes, info: info} return a, nil } @@ -171,8 +170,8 @@ func _000003_blocks_rootidDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "000003_blocks_rootid.down.sql", size: 40, mode: os.FileMode(0644), modTime: time.Unix(1607094225, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1a, 0xb4, 0xdd, 0x99, 0x6e, 0xb8, 0x1a, 0xfd, 0x54, 0x43, 0x8f, 0x9, 0x3a, 0xd1, 0xe4, 0x32, 0x20, 0x3b, 0x43, 0xf4, 0x61, 0x17, 0x9b, 0xff, 0x85, 0xb0, 0x9a, 0x48, 0x9f, 0xfd, 0xbb, 0xcc}} + info := bindataFileInfo{name: "000003_blocks_rootid.down.sql", size: 40, mode: os.FileMode(420), modTime: time.Unix(1610349080, 0)} + a := &asset{bytes: bytes, info: info} return a, nil } @@ -191,8 +190,8 @@ func _000003_blocks_rootidUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "000003_blocks_rootid.up.sql", size: 51, mode: os.FileMode(0644), modTime: time.Unix(1607094225, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x20, 0x3e, 0xe3, 0x25, 0xb9, 0x60, 0x1a, 0xc2, 0xbf, 0x51, 0x2e, 0xf0, 0xbb, 0x9e, 0x61, 0xb9, 0x16, 0x19, 0xc0, 0x6, 0x7a, 0x81, 0x1c, 0xce, 0xa0, 0xea, 0x91, 0xb2, 0xf, 0xb9, 0xba, 0x91}} + info := bindataFileInfo{name: "000003_blocks_rootid.up.sql", size: 51, mode: os.FileMode(420), modTime: time.Unix(1610349080, 0)} + a := &asset{bytes: bytes, info: info} return a, nil } @@ -211,8 +210,8 @@ func _000004_auth_tableDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "000004_auth_table.down.sql", size: 39, mode: os.FileMode(0644), modTime: time.Unix(1606923754, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb6, 0x5b, 0x33, 0x33, 0xd4, 0x68, 0x4, 0xb4, 0xfd, 0x61, 0x61, 0x33, 0x1b, 0xc6, 0x44, 0x5e, 0x57, 0xd0, 0xe7, 0x21, 0x36, 0xff, 0x10, 0x1a, 0xc2, 0xa2, 0xe7, 0x3a, 0xbd, 0x2e, 0xba, 0x66}} + info := bindataFileInfo{name: "000004_auth_table.down.sql", size: 39, mode: os.FileMode(420), modTime: time.Unix(1610392216, 0)} + a := &asset{bytes: bytes, info: info} return a, nil } @@ -231,8 +230,48 @@ func _000004_auth_tableUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "000004_auth_table.up.sql", size: 491, mode: os.FileMode(0644), modTime: time.Unix(1610375570, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x51, 0xbe, 0x84, 0x23, 0xcb, 0x3b, 0x88, 0xbf, 0x9e, 0xd, 0x32, 0x46, 0x47, 0xe1, 0x6e, 0xb2, 0x2e, 0x36, 0x6b, 0xde, 0x38, 0x7f, 0x0, 0x27, 0xd8, 0x10, 0x7e, 0xf2, 0xa4, 0x6, 0x73, 0xd}} + info := bindataFileInfo{name: "000004_auth_table.up.sql", size: 491, mode: os.FileMode(420), modTime: time.Unix(1610392216, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __000005_blocks_modifiedbyDownSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\xf4\x09\x71\x0d\x52\x08\x71\x74\xf2\x71\x55\x48\xca\xc9\x4f\xce\x2e\xe6\x72\x09\xf2\x0f\x50\x70\xf6\xf7\x09\xf5\xf5\x53\xc8\xcd\x4f\xc9\x4c\xcb\x4c\x4d\x89\x4f\xaa\xb4\xe6\x02\x04\x00\x00\xff\xff\xe4\x42\x8b\x2e\x2c\x00\x00\x00") + +func _000005_blocks_modifiedbyDownSqlBytes() ([]byte, error) { + return bindataRead( + __000005_blocks_modifiedbyDownSql, + "000005_blocks_modifiedby.down.sql", + ) +} + +func _000005_blocks_modifiedbyDownSql() (*asset, error) { + bytes, err := _000005_blocks_modifiedbyDownSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "000005_blocks_modifiedby.down.sql", size: 44, mode: os.FileMode(420), modTime: time.Unix(1610412613, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __000005_blocks_modifiedbyUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\xf4\x09\x71\x0d\x52\x08\x71\x74\xf2\x71\x55\x48\xca\xc9\x4f\xce\x2e\xe6\x72\x74\x71\x51\x70\xf6\xf7\x09\xf5\xf5\x53\xc8\xcd\x4f\xc9\x4c\xcb\x4c\x4d\x89\x4f\xaa\x54\x08\x73\x0c\x72\xf6\x70\x0c\xd2\x30\x36\xd3\xb4\xe6\x02\x04\x00\x00\xff\xff\xea\xb0\x5a\x65\x37\x00\x00\x00") + +func _000005_blocks_modifiedbyUpSqlBytes() ([]byte, error) { + return bindataRead( + __000005_blocks_modifiedbyUpSql, + "000005_blocks_modifiedby.up.sql", + ) +} + +func _000005_blocks_modifiedbyUpSql() (*asset, error) { + bytes, err := _000005_blocks_modifiedbyUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "000005_blocks_modifiedby.up.sql", size: 55, mode: os.FileMode(420), modTime: time.Unix(1610412615, 0)} + a := &asset{bytes: bytes, info: info} return a, nil } @@ -240,8 +279,8 @@ func _000004_auth_tableUpSql() (*asset, error) { // It returns an error if the asset could not be found or // could not be loaded. func Asset(name string) ([]byte, error) { - canonicalName := strings.Replace(name, "\\", "/", -1) - if f, ok := _bindata[canonicalName]; ok { + cannonicalName := strings.Replace(name, "\\", "/", -1) + if f, ok := _bindata[cannonicalName]; ok { a, err := f() if err != nil { return nil, fmt.Errorf("Asset %s can't read by error: %v", name, err) @@ -251,12 +290,6 @@ func Asset(name string) ([]byte, error) { return nil, fmt.Errorf("Asset %s not found", name) } -// AssetString returns the asset contents as a string (instead of a []byte). -func AssetString(name string) (string, error) { - data, err := Asset(name) - return string(data), err -} - // MustAsset is like Asset but panics when Asset would return an error. // It simplifies safe initialization of global variables. func MustAsset(name string) []byte { @@ -268,18 +301,12 @@ func MustAsset(name string) []byte { return a } -// MustAssetString is like AssetString but panics when Asset would return an -// error. It simplifies safe initialization of global variables. -func MustAssetString(name string) string { - return string(MustAsset(name)) -} - // AssetInfo loads and returns the asset info for the given name. // It returns an error if the asset could not be found or // could not be loaded. func AssetInfo(name string) (os.FileInfo, error) { - canonicalName := strings.Replace(name, "\\", "/", -1) - if f, ok := _bindata[canonicalName]; ok { + cannonicalName := strings.Replace(name, "\\", "/", -1) + if f, ok := _bindata[cannonicalName]; ok { a, err := f() if err != nil { return nil, fmt.Errorf("AssetInfo %s can't read by error: %v", name, err) @@ -289,33 +316,6 @@ func AssetInfo(name string) (os.FileInfo, error) { return nil, fmt.Errorf("AssetInfo %s not found", name) } -// AssetDigest returns the digest of the file with the given name. It returns an -// error if the asset could not be found or the digest could not be loaded. -func AssetDigest(name string) ([sha256.Size]byte, error) { - canonicalName := strings.Replace(name, "\\", "/", -1) - if f, ok := _bindata[canonicalName]; ok { - a, err := f() - if err != nil { - return [sha256.Size]byte{}, fmt.Errorf("AssetDigest %s can't read by error: %v", name, err) - } - return a.digest, nil - } - return [sha256.Size]byte{}, fmt.Errorf("AssetDigest %s not found", name) -} - -// Digests returns a map of all known files and their checksums. -func Digests() (map[string][sha256.Size]byte, error) { - mp := make(map[string][sha256.Size]byte, len(_bindata)) - for name := range _bindata { - a, err := _bindata[name]() - if err != nil { - return nil, err - } - mp[name] = a.digest - } - return mp, nil -} - // AssetNames returns the names of the assets. func AssetNames() []string { names := make([]string, 0, len(_bindata)) @@ -327,19 +327,18 @@ func AssetNames() []string { // _bindata is a table, holding each asset generator, mapped to its name. var _bindata = map[string]func() (*asset, error){ - "000001_init.down.sql": _000001_initDownSql, - "000001_init.up.sql": _000001_initUpSql, + "000001_init.down.sql": _000001_initDownSql, + "000001_init.up.sql": _000001_initUpSql, "000002_system_settings_table.down.sql": _000002_system_settings_tableDownSql, - "000002_system_settings_table.up.sql": _000002_system_settings_tableUpSql, - "000003_blocks_rootid.down.sql": _000003_blocks_rootidDownSql, - "000003_blocks_rootid.up.sql": _000003_blocks_rootidUpSql, - "000004_auth_table.down.sql": _000004_auth_tableDownSql, - "000004_auth_table.up.sql": _000004_auth_tableUpSql, + "000002_system_settings_table.up.sql": _000002_system_settings_tableUpSql, + "000003_blocks_rootid.down.sql": _000003_blocks_rootidDownSql, + "000003_blocks_rootid.up.sql": _000003_blocks_rootidUpSql, + "000004_auth_table.down.sql": _000004_auth_tableDownSql, + "000004_auth_table.up.sql": _000004_auth_tableUpSql, + "000005_blocks_modifiedby.down.sql": _000005_blocks_modifiedbyDownSql, + "000005_blocks_modifiedby.up.sql": _000005_blocks_modifiedbyUpSql, } -// AssetDebug is true if the assets were built with the debug flag enabled. -const AssetDebug = false - // AssetDir returns the file names below a certain // directory embedded in the file by go-bindata. // For example if you run go-bindata on data/... and data contains the @@ -349,15 +348,15 @@ const AssetDebug = false // img/ // a.png // b.png -// then AssetDir("data") would return []string{"foo.txt", "img"}, -// AssetDir("data/img") would return []string{"a.png", "b.png"}, -// AssetDir("foo.txt") and AssetDir("notexist") would return an error, and +// then AssetDir("data") would return []string{"foo.txt", "img"} +// AssetDir("data/img") would return []string{"a.png", "b.png"} +// AssetDir("foo.txt") and AssetDir("notexist") would return an error // AssetDir("") will return []string{"data"}. func AssetDir(name string) ([]string, error) { node := _bintree if len(name) != 0 { - canonicalName := strings.Replace(name, "\\", "/", -1) - pathList := strings.Split(canonicalName, "/") + cannonicalName := strings.Replace(name, "\\", "/", -1) + pathList := strings.Split(cannonicalName, "/") for _, p := range pathList { node = node.Children[p] if node == nil { @@ -379,19 +378,20 @@ type bintree struct { Func func() (*asset, error) Children map[string]*bintree } - var _bintree = &bintree{nil, map[string]*bintree{ - "000001_init.down.sql": {_000001_initDownSql, map[string]*bintree{}}, - "000001_init.up.sql": {_000001_initUpSql, map[string]*bintree{}}, - "000002_system_settings_table.down.sql": {_000002_system_settings_tableDownSql, map[string]*bintree{}}, - "000002_system_settings_table.up.sql": {_000002_system_settings_tableUpSql, map[string]*bintree{}}, - "000003_blocks_rootid.down.sql": {_000003_blocks_rootidDownSql, map[string]*bintree{}}, - "000003_blocks_rootid.up.sql": {_000003_blocks_rootidUpSql, map[string]*bintree{}}, - "000004_auth_table.down.sql": {_000004_auth_tableDownSql, map[string]*bintree{}}, - "000004_auth_table.up.sql": {_000004_auth_tableUpSql, map[string]*bintree{}}, + "000001_init.down.sql": &bintree{_000001_initDownSql, map[string]*bintree{}}, + "000001_init.up.sql": &bintree{_000001_initUpSql, map[string]*bintree{}}, + "000002_system_settings_table.down.sql": &bintree{_000002_system_settings_tableDownSql, map[string]*bintree{}}, + "000002_system_settings_table.up.sql": &bintree{_000002_system_settings_tableUpSql, map[string]*bintree{}}, + "000003_blocks_rootid.down.sql": &bintree{_000003_blocks_rootidDownSql, map[string]*bintree{}}, + "000003_blocks_rootid.up.sql": &bintree{_000003_blocks_rootidUpSql, map[string]*bintree{}}, + "000004_auth_table.down.sql": &bintree{_000004_auth_tableDownSql, map[string]*bintree{}}, + "000004_auth_table.up.sql": &bintree{_000004_auth_tableUpSql, map[string]*bintree{}}, + "000005_blocks_modifiedby.down.sql": &bintree{_000005_blocks_modifiedbyDownSql, map[string]*bintree{}}, + "000005_blocks_modifiedby.up.sql": &bintree{_000005_blocks_modifiedbyUpSql, map[string]*bintree{}}, }} -// RestoreAsset restores an asset under the given directory. +// RestoreAsset restores an asset under the given directory func RestoreAsset(dir, name string) error { data, err := Asset(name) if err != nil { @@ -409,10 +409,14 @@ func RestoreAsset(dir, name string) error { if err != nil { return err } - return os.Chtimes(_filePath(dir, name), info.ModTime(), info.ModTime()) + err = os.Chtimes(_filePath(dir, name), info.ModTime(), info.ModTime()) + if err != nil { + return err + } + return nil } -// RestoreAssets restores an asset under the given directory recursively. +// RestoreAssets restores an asset under the given directory recursively func RestoreAssets(dir, name string) error { children, err := AssetDir(name) // File @@ -430,6 +434,7 @@ func RestoreAssets(dir, name string) error { } func _filePath(dir, name string) string { - canonicalName := strings.Replace(name, "\\", "/", -1) - return filepath.Join(append([]string{dir}, strings.Split(canonicalName, "/")...)...) + cannonicalName := strings.Replace(name, "\\", "/", -1) + return filepath.Join(append([]string{dir}, strings.Split(cannonicalName, "/")...)...) } + diff --git a/server/services/store/sqlstore/migrations/postgres_files/000005_blocks_modifiedby.down.sql b/server/services/store/sqlstore/migrations/postgres_files/000005_blocks_modifiedby.down.sql new file mode 100644 index 000000000..3009822eb --- /dev/null +++ b/server/services/store/sqlstore/migrations/postgres_files/000005_blocks_modifiedby.down.sql @@ -0,0 +1,2 @@ +ALTER TABLE blocks +DROP COLUMN modified_by; diff --git a/server/services/store/sqlstore/migrations/postgres_files/000005_blocks_modifiedby.up.sql b/server/services/store/sqlstore/migrations/postgres_files/000005_blocks_modifiedby.up.sql new file mode 100644 index 000000000..b237fb1cb --- /dev/null +++ b/server/services/store/sqlstore/migrations/postgres_files/000005_blocks_modifiedby.up.sql @@ -0,0 +1,2 @@ +ALTER TABLE blocks +ADD COLUMN modified_by VARCHAR(36); diff --git a/server/services/store/sqlstore/migrations/sqlite/bindata.go b/server/services/store/sqlstore/migrations/sqlite/bindata.go index 58e8d8fbc..d5eca7224 100644 --- a/server/services/store/sqlstore/migrations/sqlite/bindata.go +++ b/server/services/store/sqlstore/migrations/sqlite/bindata.go @@ -1,20 +1,20 @@ // Code generated by go-bindata. DO NOT EDIT. // sources: -// sqlite_files/000001_init.down.sql (19B) -// sqlite_files/000001_init.up.sql (297B) -// sqlite_files/000002_system_settings_table.down.sql (28B) -// sqlite_files/000002_system_settings_table.up.sql (96B) -// sqlite_files/000003_blocks_rootid.down.sql (40B) -// sqlite_files/000003_blocks_rootid.up.sql (51B) -// sqlite_files/000004_auth_table.down.sql (39B) -// sqlite_files/000004_auth_table.up.sql (491B) - +// sqlite_files/000001_init.down.sql +// sqlite_files/000001_init.up.sql +// sqlite_files/000002_system_settings_table.down.sql +// sqlite_files/000002_system_settings_table.up.sql +// sqlite_files/000003_blocks_rootid.down.sql +// sqlite_files/000003_blocks_rootid.up.sql +// sqlite_files/000004_auth_table.down.sql +// sqlite_files/000004_auth_table.up.sql +// sqlite_files/000005_blocks_modifiedby.down.sql +// sqlite_files/000005_blocks_modifiedby.up.sql package sqlite import ( "bytes" "compress/gzip" - "crypto/sha256" "fmt" "io" "io/ioutil" @@ -27,7 +27,7 @@ import ( func bindataRead(data []byte, name string) ([]byte, error) { gz, err := gzip.NewReader(bytes.NewBuffer(data)) if err != nil { - return nil, fmt.Errorf("read %q: %w", name, err) + return nil, fmt.Errorf("Read %q: %v", name, err) } var buf bytes.Buffer @@ -35,7 +35,7 @@ func bindataRead(data []byte, name string) ([]byte, error) { clErr := gz.Close() if err != nil { - return nil, fmt.Errorf("read %q: %w", name, err) + return nil, fmt.Errorf("Read %q: %v", name, err) } if clErr != nil { return nil, err @@ -45,9 +45,8 @@ func bindataRead(data []byte, name string) ([]byte, error) { } type asset struct { - bytes []byte - info os.FileInfo - digest [sha256.Size]byte + bytes []byte + info os.FileInfo } type bindataFileInfo struct { @@ -91,8 +90,8 @@ func _000001_initDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "000001_init.down.sql", size: 19, mode: os.FileMode(0644), modTime: time.Unix(1602958996, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe4, 0x9a, 0x67, 0x49, 0xbf, 0xf7, 0xaa, 0x0, 0xe2, 0x48, 0xe4, 0xe2, 0xdc, 0x1, 0x8b, 0xa3, 0x24, 0x4, 0xcc, 0xbd, 0x3d, 0xbd, 0xf8, 0xec, 0xcf, 0x54, 0x9e, 0xc6, 0x83, 0x69, 0x7c, 0xb0}} + info := bindataFileInfo{name: "000001_init.down.sql", size: 19, mode: os.FileMode(420), modTime: time.Unix(1603074564, 0)} + a := &asset{bytes: bytes, info: info} return a, nil } @@ -111,8 +110,8 @@ func _000001_initUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "000001_init.up.sql", size: 297, mode: os.FileMode(0644), modTime: time.Unix(1603029845, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xcc, 0xb4, 0xcf, 0xde, 0xfb, 0xcc, 0xa1, 0xf8, 0x73, 0x51, 0x3b, 0xbf, 0x6a, 0xb0, 0xd0, 0x6b, 0xdf, 0xb0, 0x76, 0xaf, 0x4e, 0x89, 0x21, 0xc7, 0x8e, 0xe8, 0x18, 0x50, 0xc7, 0x9, 0xd8, 0xbf}} + info := bindataFileInfo{name: "000001_init.up.sql", size: 297, mode: os.FileMode(420), modTime: time.Unix(1607029839, 0)} + a := &asset{bytes: bytes, info: info} return a, nil } @@ -131,8 +130,8 @@ func _000002_system_settings_tableDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "000002_system_settings_table.down.sql", size: 28, mode: os.FileMode(0644), modTime: time.Unix(1603112131, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe4, 0xfd, 0xe6, 0x5d, 0xd1, 0xb2, 0xe9, 0x49, 0x14, 0x3b, 0xec, 0xb, 0x5f, 0x9d, 0x1d, 0x56, 0x13, 0x70, 0x76, 0x78, 0x7e, 0xd7, 0xd2, 0x57, 0x1e, 0xe7, 0x11, 0xb, 0xf9, 0xfb, 0x67, 0xb9}} + info := bindataFileInfo{name: "000002_system_settings_table.down.sql", size: 28, mode: os.FileMode(420), modTime: time.Unix(1603229117, 0)} + a := &asset{bytes: bytes, info: info} return a, nil } @@ -151,8 +150,8 @@ func _000002_system_settings_tableUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "000002_system_settings_table.up.sql", size: 96, mode: os.FileMode(0644), modTime: time.Unix(1603112131, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x24, 0x6f, 0x66, 0x74, 0xbf, 0xec, 0xae, 0x5a, 0x56, 0x95, 0x4b, 0x4d, 0xaa, 0xf6, 0x8, 0xae, 0x88, 0x62, 0x21, 0x4f, 0xdc, 0xb1, 0x3, 0x30, 0x79, 0xd4, 0xc2, 0x17, 0x2, 0x9e, 0x1c, 0x8e}} + info := bindataFileInfo{name: "000002_system_settings_table.up.sql", size: 96, mode: os.FileMode(420), modTime: time.Unix(1603229117, 0)} + a := &asset{bytes: bytes, info: info} return a, nil } @@ -171,8 +170,8 @@ func _000003_blocks_rootidDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "000003_blocks_rootid.down.sql", size: 40, mode: os.FileMode(0644), modTime: time.Unix(1607094225, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1a, 0xb4, 0xdd, 0x99, 0x6e, 0xb8, 0x1a, 0xfd, 0x54, 0x43, 0x8f, 0x9, 0x3a, 0xd1, 0xe4, 0x32, 0x20, 0x3b, 0x43, 0xf4, 0x61, 0x17, 0x9b, 0xff, 0x85, 0xb0, 0x9a, 0x48, 0x9f, 0xfd, 0xbb, 0xcc}} + info := bindataFileInfo{name: "000003_blocks_rootid.down.sql", size: 40, mode: os.FileMode(420), modTime: time.Unix(1610349080, 0)} + a := &asset{bytes: bytes, info: info} return a, nil } @@ -191,8 +190,8 @@ func _000003_blocks_rootidUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "000003_blocks_rootid.up.sql", size: 51, mode: os.FileMode(0644), modTime: time.Unix(1607094225, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x20, 0x3e, 0xe3, 0x25, 0xb9, 0x60, 0x1a, 0xc2, 0xbf, 0x51, 0x2e, 0xf0, 0xbb, 0x9e, 0x61, 0xb9, 0x16, 0x19, 0xc0, 0x6, 0x7a, 0x81, 0x1c, 0xce, 0xa0, 0xea, 0x91, 0xb2, 0xf, 0xb9, 0xba, 0x91}} + info := bindataFileInfo{name: "000003_blocks_rootid.up.sql", size: 51, mode: os.FileMode(420), modTime: time.Unix(1610349080, 0)} + a := &asset{bytes: bytes, info: info} return a, nil } @@ -211,8 +210,8 @@ func _000004_auth_tableDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "000004_auth_table.down.sql", size: 39, mode: os.FileMode(0644), modTime: time.Unix(1606923777, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb6, 0x5b, 0x33, 0x33, 0xd4, 0x68, 0x4, 0xb4, 0xfd, 0x61, 0x61, 0x33, 0x1b, 0xc6, 0x44, 0x5e, 0x57, 0xd0, 0xe7, 0x21, 0x36, 0xff, 0x10, 0x1a, 0xc2, 0xa2, 0xe7, 0x3a, 0xbd, 0x2e, 0xba, 0x66}} + info := bindataFileInfo{name: "000004_auth_table.down.sql", size: 39, mode: os.FileMode(420), modTime: time.Unix(1610392216, 0)} + a := &asset{bytes: bytes, info: info} return a, nil } @@ -231,8 +230,48 @@ func _000004_auth_tableUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "000004_auth_table.up.sql", size: 491, mode: os.FileMode(0644), modTime: time.Unix(1610375590, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb6, 0xf9, 0x52, 0xb2, 0x63, 0x7b, 0x65, 0xea, 0x26, 0xeb, 0xa3, 0x8c, 0x5, 0x70, 0xd7, 0x4e, 0xd0, 0x63, 0x75, 0xc6, 0x7d, 0xf4, 0x5d, 0x11, 0x62, 0x8e, 0x94, 0x43, 0x25, 0x0, 0xaa, 0xf2}} + info := bindataFileInfo{name: "000004_auth_table.up.sql", size: 491, mode: os.FileMode(420), modTime: time.Unix(1610392216, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __000005_blocks_modifiedbyDownSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\xf4\x09\x71\x0d\x52\x08\x71\x74\xf2\x71\x55\x48\xca\xc9\x4f\xce\x2e\xe6\x72\x09\xf2\x0f\x50\x70\xf6\xf7\x09\xf5\xf5\x53\xc8\xcd\x4f\xc9\x4c\xcb\x4c\x4d\x89\x4f\xaa\xb4\xe6\x02\x04\x00\x00\xff\xff\xe4\x42\x8b\x2e\x2c\x00\x00\x00") + +func _000005_blocks_modifiedbyDownSqlBytes() ([]byte, error) { + return bindataRead( + __000005_blocks_modifiedbyDownSql, + "000005_blocks_modifiedby.down.sql", + ) +} + +func _000005_blocks_modifiedbyDownSql() (*asset, error) { + bytes, err := _000005_blocks_modifiedbyDownSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "000005_blocks_modifiedby.down.sql", size: 44, mode: os.FileMode(420), modTime: time.Unix(1610412613, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __000005_blocks_modifiedbyUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\xf4\x09\x71\x0d\x52\x08\x71\x74\xf2\x71\x55\x48\xca\xc9\x4f\xce\x2e\xe6\x72\x74\x71\x51\x70\xf6\xf7\x09\xf5\xf5\x53\xc8\xcd\x4f\xc9\x4c\xcb\x4c\x4d\x89\x4f\xaa\x54\x08\x73\x0c\x72\xf6\x70\x0c\xd2\x30\x36\xd3\xb4\xe6\x02\x04\x00\x00\xff\xff\xea\xb0\x5a\x65\x37\x00\x00\x00") + +func _000005_blocks_modifiedbyUpSqlBytes() ([]byte, error) { + return bindataRead( + __000005_blocks_modifiedbyUpSql, + "000005_blocks_modifiedby.up.sql", + ) +} + +func _000005_blocks_modifiedbyUpSql() (*asset, error) { + bytes, err := _000005_blocks_modifiedbyUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "000005_blocks_modifiedby.up.sql", size: 55, mode: os.FileMode(420), modTime: time.Unix(1610412615, 0)} + a := &asset{bytes: bytes, info: info} return a, nil } @@ -240,8 +279,8 @@ func _000004_auth_tableUpSql() (*asset, error) { // It returns an error if the asset could not be found or // could not be loaded. func Asset(name string) ([]byte, error) { - canonicalName := strings.Replace(name, "\\", "/", -1) - if f, ok := _bindata[canonicalName]; ok { + cannonicalName := strings.Replace(name, "\\", "/", -1) + if f, ok := _bindata[cannonicalName]; ok { a, err := f() if err != nil { return nil, fmt.Errorf("Asset %s can't read by error: %v", name, err) @@ -251,12 +290,6 @@ func Asset(name string) ([]byte, error) { return nil, fmt.Errorf("Asset %s not found", name) } -// AssetString returns the asset contents as a string (instead of a []byte). -func AssetString(name string) (string, error) { - data, err := Asset(name) - return string(data), err -} - // MustAsset is like Asset but panics when Asset would return an error. // It simplifies safe initialization of global variables. func MustAsset(name string) []byte { @@ -268,18 +301,12 @@ func MustAsset(name string) []byte { return a } -// MustAssetString is like AssetString but panics when Asset would return an -// error. It simplifies safe initialization of global variables. -func MustAssetString(name string) string { - return string(MustAsset(name)) -} - // AssetInfo loads and returns the asset info for the given name. // It returns an error if the asset could not be found or // could not be loaded. func AssetInfo(name string) (os.FileInfo, error) { - canonicalName := strings.Replace(name, "\\", "/", -1) - if f, ok := _bindata[canonicalName]; ok { + cannonicalName := strings.Replace(name, "\\", "/", -1) + if f, ok := _bindata[cannonicalName]; ok { a, err := f() if err != nil { return nil, fmt.Errorf("AssetInfo %s can't read by error: %v", name, err) @@ -289,33 +316,6 @@ func AssetInfo(name string) (os.FileInfo, error) { return nil, fmt.Errorf("AssetInfo %s not found", name) } -// AssetDigest returns the digest of the file with the given name. It returns an -// error if the asset could not be found or the digest could not be loaded. -func AssetDigest(name string) ([sha256.Size]byte, error) { - canonicalName := strings.Replace(name, "\\", "/", -1) - if f, ok := _bindata[canonicalName]; ok { - a, err := f() - if err != nil { - return [sha256.Size]byte{}, fmt.Errorf("AssetDigest %s can't read by error: %v", name, err) - } - return a.digest, nil - } - return [sha256.Size]byte{}, fmt.Errorf("AssetDigest %s not found", name) -} - -// Digests returns a map of all known files and their checksums. -func Digests() (map[string][sha256.Size]byte, error) { - mp := make(map[string][sha256.Size]byte, len(_bindata)) - for name := range _bindata { - a, err := _bindata[name]() - if err != nil { - return nil, err - } - mp[name] = a.digest - } - return mp, nil -} - // AssetNames returns the names of the assets. func AssetNames() []string { names := make([]string, 0, len(_bindata)) @@ -327,19 +327,18 @@ func AssetNames() []string { // _bindata is a table, holding each asset generator, mapped to its name. var _bindata = map[string]func() (*asset, error){ - "000001_init.down.sql": _000001_initDownSql, - "000001_init.up.sql": _000001_initUpSql, + "000001_init.down.sql": _000001_initDownSql, + "000001_init.up.sql": _000001_initUpSql, "000002_system_settings_table.down.sql": _000002_system_settings_tableDownSql, - "000002_system_settings_table.up.sql": _000002_system_settings_tableUpSql, - "000003_blocks_rootid.down.sql": _000003_blocks_rootidDownSql, - "000003_blocks_rootid.up.sql": _000003_blocks_rootidUpSql, - "000004_auth_table.down.sql": _000004_auth_tableDownSql, - "000004_auth_table.up.sql": _000004_auth_tableUpSql, + "000002_system_settings_table.up.sql": _000002_system_settings_tableUpSql, + "000003_blocks_rootid.down.sql": _000003_blocks_rootidDownSql, + "000003_blocks_rootid.up.sql": _000003_blocks_rootidUpSql, + "000004_auth_table.down.sql": _000004_auth_tableDownSql, + "000004_auth_table.up.sql": _000004_auth_tableUpSql, + "000005_blocks_modifiedby.down.sql": _000005_blocks_modifiedbyDownSql, + "000005_blocks_modifiedby.up.sql": _000005_blocks_modifiedbyUpSql, } -// AssetDebug is true if the assets were built with the debug flag enabled. -const AssetDebug = false - // AssetDir returns the file names below a certain // directory embedded in the file by go-bindata. // For example if you run go-bindata on data/... and data contains the @@ -349,15 +348,15 @@ const AssetDebug = false // img/ // a.png // b.png -// then AssetDir("data") would return []string{"foo.txt", "img"}, -// AssetDir("data/img") would return []string{"a.png", "b.png"}, -// AssetDir("foo.txt") and AssetDir("notexist") would return an error, and +// then AssetDir("data") would return []string{"foo.txt", "img"} +// AssetDir("data/img") would return []string{"a.png", "b.png"} +// AssetDir("foo.txt") and AssetDir("notexist") would return an error // AssetDir("") will return []string{"data"}. func AssetDir(name string) ([]string, error) { node := _bintree if len(name) != 0 { - canonicalName := strings.Replace(name, "\\", "/", -1) - pathList := strings.Split(canonicalName, "/") + cannonicalName := strings.Replace(name, "\\", "/", -1) + pathList := strings.Split(cannonicalName, "/") for _, p := range pathList { node = node.Children[p] if node == nil { @@ -379,19 +378,20 @@ type bintree struct { Func func() (*asset, error) Children map[string]*bintree } - var _bintree = &bintree{nil, map[string]*bintree{ - "000001_init.down.sql": {_000001_initDownSql, map[string]*bintree{}}, - "000001_init.up.sql": {_000001_initUpSql, map[string]*bintree{}}, - "000002_system_settings_table.down.sql": {_000002_system_settings_tableDownSql, map[string]*bintree{}}, - "000002_system_settings_table.up.sql": {_000002_system_settings_tableUpSql, map[string]*bintree{}}, - "000003_blocks_rootid.down.sql": {_000003_blocks_rootidDownSql, map[string]*bintree{}}, - "000003_blocks_rootid.up.sql": {_000003_blocks_rootidUpSql, map[string]*bintree{}}, - "000004_auth_table.down.sql": {_000004_auth_tableDownSql, map[string]*bintree{}}, - "000004_auth_table.up.sql": {_000004_auth_tableUpSql, map[string]*bintree{}}, + "000001_init.down.sql": &bintree{_000001_initDownSql, map[string]*bintree{}}, + "000001_init.up.sql": &bintree{_000001_initUpSql, map[string]*bintree{}}, + "000002_system_settings_table.down.sql": &bintree{_000002_system_settings_tableDownSql, map[string]*bintree{}}, + "000002_system_settings_table.up.sql": &bintree{_000002_system_settings_tableUpSql, map[string]*bintree{}}, + "000003_blocks_rootid.down.sql": &bintree{_000003_blocks_rootidDownSql, map[string]*bintree{}}, + "000003_blocks_rootid.up.sql": &bintree{_000003_blocks_rootidUpSql, map[string]*bintree{}}, + "000004_auth_table.down.sql": &bintree{_000004_auth_tableDownSql, map[string]*bintree{}}, + "000004_auth_table.up.sql": &bintree{_000004_auth_tableUpSql, map[string]*bintree{}}, + "000005_blocks_modifiedby.down.sql": &bintree{_000005_blocks_modifiedbyDownSql, map[string]*bintree{}}, + "000005_blocks_modifiedby.up.sql": &bintree{_000005_blocks_modifiedbyUpSql, map[string]*bintree{}}, }} -// RestoreAsset restores an asset under the given directory. +// RestoreAsset restores an asset under the given directory func RestoreAsset(dir, name string) error { data, err := Asset(name) if err != nil { @@ -409,10 +409,14 @@ func RestoreAsset(dir, name string) error { if err != nil { return err } - return os.Chtimes(_filePath(dir, name), info.ModTime(), info.ModTime()) + err = os.Chtimes(_filePath(dir, name), info.ModTime(), info.ModTime()) + if err != nil { + return err + } + return nil } -// RestoreAssets restores an asset under the given directory recursively. +// RestoreAssets restores an asset under the given directory recursively func RestoreAssets(dir, name string) error { children, err := AssetDir(name) // File @@ -430,6 +434,7 @@ func RestoreAssets(dir, name string) error { } func _filePath(dir, name string) string { - canonicalName := strings.Replace(name, "\\", "/", -1) - return filepath.Join(append([]string{dir}, strings.Split(canonicalName, "/")...)...) + cannonicalName := strings.Replace(name, "\\", "/", -1) + return filepath.Join(append([]string{dir}, strings.Split(cannonicalName, "/")...)...) } + diff --git a/server/services/store/sqlstore/migrations/sqlite_files/000005_blocks_modifiedby.down.sql b/server/services/store/sqlstore/migrations/sqlite_files/000005_blocks_modifiedby.down.sql new file mode 100644 index 000000000..3009822eb --- /dev/null +++ b/server/services/store/sqlstore/migrations/sqlite_files/000005_blocks_modifiedby.down.sql @@ -0,0 +1,2 @@ +ALTER TABLE blocks +DROP COLUMN modified_by; diff --git a/server/services/store/sqlstore/migrations/sqlite_files/000005_blocks_modifiedby.up.sql b/server/services/store/sqlstore/migrations/sqlite_files/000005_blocks_modifiedby.up.sql new file mode 100644 index 000000000..b237fb1cb --- /dev/null +++ b/server/services/store/sqlstore/migrations/sqlite_files/000005_blocks_modifiedby.up.sql @@ -0,0 +1,2 @@ +ALTER TABLE blocks +ADD COLUMN modified_by VARCHAR(36);