Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
canifa_note
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Vũ Hoàng Anh
canifa_note
Commits
51d58d39
Commit
51d58d39
authored
Feb 21, 2024
by
Steven
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
chore: add workspace setting migrator
parent
4378816e
Changes
10
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
92 additions
and
60 deletions
+92
-60
system.go
api/v1/system.go
+1
-1
system_setting.go
api/v1/system_setting.go
+0
-3
auth_service.go
api/v2/auth_service.go
+2
-2
workspace_setting_service.go
api/v2/workspace_setting_service.go
+0
-18
main.go
bin/memos/main.go
+6
-0
frontend.go
server/frontend/frontend.go
+3
-6
migrator.go
store/migrator.go
+58
-0
store.go
store/store.go
+7
-0
workspace_setting.go
store/workspace_setting.go
+15
-0
workspace_setting_test.go
test/store/workspace_setting_test.go
+0
-30
No files found.
api/v1/system.go
View file @
51d58d39
...
@@ -102,7 +102,7 @@ func (s *APIV1Service) GetSystemStatus(c echo.Context) error {
...
@@ -102,7 +102,7 @@ func (s *APIV1Service) GetSystemStatus(c echo.Context) error {
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to find system setting list"
)
.
SetInternal
(
err
)
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to find system setting list"
)
.
SetInternal
(
err
)
}
}
for
_
,
systemSetting
:=
range
systemSettingList
{
for
_
,
systemSetting
:=
range
systemSettingList
{
if
systemSetting
.
Name
==
SystemSettingServerIDName
.
String
()
||
systemSetting
.
Name
==
SystemSettingSecretSessionName
.
String
()
||
systemSetting
.
Name
==
SystemSettingTelegramBotTokenName
.
String
()
||
systemSetting
.
Name
==
SystemSettingInstanceURLName
.
String
()
{
if
systemSetting
.
Name
==
SystemSettingServerIDName
.
String
()
||
systemSetting
.
Name
==
SystemSettingSecretSessionName
.
String
()
||
systemSetting
.
Name
==
SystemSettingTelegramBotTokenName
.
String
()
{
continue
continue
}
}
...
...
api/v1/system_setting.go
View file @
51d58d39
...
@@ -41,8 +41,6 @@ const (
...
@@ -41,8 +41,6 @@ const (
SystemSettingTelegramBotTokenName
SystemSettingName
=
"telegram-bot-token"
SystemSettingTelegramBotTokenName
SystemSettingName
=
"telegram-bot-token"
// SystemSettingMemoDisplayWithUpdatedTsName is the name of memo display with updated ts.
// SystemSettingMemoDisplayWithUpdatedTsName is the name of memo display with updated ts.
SystemSettingMemoDisplayWithUpdatedTsName
SystemSettingName
=
"memo-display-with-updated-ts"
SystemSettingMemoDisplayWithUpdatedTsName
SystemSettingName
=
"memo-display-with-updated-ts"
// SystemSettingInstanceURLName is the name of instance url setting.
SystemSettingInstanceURLName
SystemSettingName
=
"instance-url"
)
)
const
systemSettingUnmarshalError
=
`failed to unmarshal value from system setting "%v"`
const
systemSettingUnmarshalError
=
`failed to unmarshal value from system setting "%v"`
...
@@ -288,7 +286,6 @@ func (upsert UpsertSystemSettingRequest) Validate() error {
...
@@ -288,7 +286,6 @@ func (upsert UpsertSystemSettingRequest) Validate() error {
if
err
:=
json
.
Unmarshal
([]
byte
(
upsert
.
Value
),
&
value
);
err
!=
nil
{
if
err
:=
json
.
Unmarshal
([]
byte
(
upsert
.
Value
),
&
value
);
err
!=
nil
{
return
errors
.
Errorf
(
systemSettingUnmarshalError
,
settingName
)
return
errors
.
Errorf
(
systemSettingUnmarshalError
,
settingName
)
}
}
case
SystemSettingInstanceURLName
:
default
:
default
:
return
errors
.
New
(
"invalid system setting name"
)
return
errors
.
New
(
"invalid system setting name"
)
}
}
...
...
api/v2/auth_service.go
View file @
51d58d39
...
@@ -173,7 +173,7 @@ func (s *APIV2Service) doSignIn(ctx context.Context, user *store.User, expireTim
...
@@ -173,7 +173,7 @@ func (s *APIV2Service) doSignIn(ctx context.Context, user *store.User, expireTim
}
}
func
(
s
*
APIV2Service
)
SignUp
(
ctx
context
.
Context
,
request
*
apiv2pb
.
SignUpRequest
)
(
*
apiv2pb
.
SignUpResponse
,
error
)
{
func
(
s
*
APIV2Service
)
SignUp
(
ctx
context
.
Context
,
request
*
apiv2pb
.
SignUpRequest
)
(
*
apiv2pb
.
SignUpResponse
,
error
)
{
workspaceGeneralSetting
,
err
:=
s
.
GetWorkspaceGeneralSetting
(
ctx
)
workspaceGeneralSetting
,
err
:=
s
.
Store
.
GetWorkspaceGeneralSetting
(
ctx
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
status
.
Errorf
(
codes
.
Internal
,
fmt
.
Sprintf
(
"failed to get workspace setting, err: %s"
,
err
))
return
nil
,
status
.
Errorf
(
codes
.
Internal
,
fmt
.
Sprintf
(
"failed to get workspace setting, err: %s"
,
err
))
}
}
...
@@ -251,7 +251,7 @@ func (s *APIV2Service) buildAccessTokenCookie(ctx context.Context, accessToken s
...
@@ -251,7 +251,7 @@ func (s *APIV2Service) buildAccessTokenCookie(ctx context.Context, accessToken s
}
else
{
}
else
{
attrs
=
append
(
attrs
,
"Expires="
+
expireTime
.
Format
(
time
.
RFC1123
))
attrs
=
append
(
attrs
,
"Expires="
+
expireTime
.
Format
(
time
.
RFC1123
))
}
}
workspaceGeneralSetting
,
err
:=
s
.
GetWorkspaceGeneralSetting
(
ctx
)
workspaceGeneralSetting
,
err
:=
s
.
Store
.
GetWorkspaceGeneralSetting
(
ctx
)
if
err
!=
nil
{
if
err
!=
nil
{
return
""
,
errors
.
Wrap
(
err
,
"failed to get workspace setting"
)
return
""
,
errors
.
Wrap
(
err
,
"failed to get workspace setting"
)
}
}
...
...
api/v2/workspace_setting_service.go
View file @
51d58d39
...
@@ -4,10 +4,8 @@ import (
...
@@ -4,10 +4,8 @@ import (
"context"
"context"
"fmt"
"fmt"
"github.com/pkg/errors"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
"google.golang.org/grpc/status"
"google.golang.org/protobuf/encoding/protojson"
apiv2pb
"github.com/usememos/memos/proto/gen/api/v2"
apiv2pb
"github.com/usememos/memos/proto/gen/api/v2"
storepb
"github.com/usememos/memos/proto/gen/store"
storepb
"github.com/usememos/memos/proto/gen/store"
...
@@ -51,22 +49,6 @@ func (s *APIV2Service) SetWorkspaceSetting(ctx context.Context, request *apiv2pb
...
@@ -51,22 +49,6 @@ func (s *APIV2Service) SetWorkspaceSetting(ctx context.Context, request *apiv2pb
return
&
apiv2pb
.
SetWorkspaceSettingResponse
{},
nil
return
&
apiv2pb
.
SetWorkspaceSettingResponse
{},
nil
}
}
func
(
s
*
APIV2Service
)
GetWorkspaceGeneralSetting
(
ctx
context
.
Context
)
(
*
storepb
.
WorkspaceGeneralSetting
,
error
)
{
workspaceSetting
,
err
:=
s
.
Store
.
GetWorkspaceSetting
(
ctx
,
&
store
.
FindWorkspaceSetting
{
Name
:
storepb
.
WorkspaceSettingKey_WORKSPACE_SETTING_GENERAL
.
String
(),
})
if
err
!=
nil
{
return
nil
,
errors
.
Wrap
(
err
,
"failed to get workspace setting"
)
}
workspaceGeneralSetting
:=
&
storepb
.
WorkspaceGeneralSetting
{}
if
workspaceSetting
!=
nil
{
if
err
:=
protojson
.
Unmarshal
([]
byte
(
workspaceSetting
.
Value
),
workspaceGeneralSetting
);
err
!=
nil
{
return
nil
,
errors
.
Wrap
(
err
,
"failed to unmarshal workspace setting"
)
}
}
return
workspaceGeneralSetting
,
nil
}
func
convertWorkspaceSettingFromStore
(
setting
*
storepb
.
WorkspaceSetting
)
*
apiv2pb
.
WorkspaceSetting
{
func
convertWorkspaceSettingFromStore
(
setting
*
storepb
.
WorkspaceSetting
)
*
apiv2pb
.
WorkspaceSetting
{
return
&
apiv2pb
.
WorkspaceSetting
{
return
&
apiv2pb
.
WorkspaceSetting
{
Name
:
fmt
.
Sprintf
(
"%s%s"
,
WorkspaceSettingNamePrefix
,
setting
.
Key
.
String
()),
Name
:
fmt
.
Sprintf
(
"%s%s"
,
WorkspaceSettingNamePrefix
,
setting
.
Key
.
String
()),
...
...
bin/memos/main.go
View file @
51d58d39
...
@@ -61,6 +61,12 @@ var (
...
@@ -61,6 +61,12 @@ var (
}
}
storeInstance
:=
store
.
New
(
dbDriver
,
profile
)
storeInstance
:=
store
.
New
(
dbDriver
,
profile
)
if
err
:=
storeInstance
.
MigrateManually
(
ctx
);
err
!=
nil
{
cancel
()
log
.
Error
(
"failed to migrate manually"
,
zap
.
Error
(
err
))
return
}
s
,
err
:=
server
.
NewServer
(
ctx
,
profile
,
storeInstance
)
s
,
err
:=
server
.
NewServer
(
ctx
,
profile
,
storeInstance
)
if
err
!=
nil
{
if
err
!=
nil
{
cancel
()
cancel
()
...
...
server/frontend/frontend.go
View file @
51d58d39
...
@@ -13,7 +13,6 @@ import (
...
@@ -13,7 +13,6 @@ import (
"github.com/yourselfhosted/gomark/parser/tokenizer"
"github.com/yourselfhosted/gomark/parser/tokenizer"
"github.com/yourselfhosted/gomark/renderer"
"github.com/yourselfhosted/gomark/renderer"
apiv1
"github.com/usememos/memos/api/v1"
"github.com/usememos/memos/internal/util"
"github.com/usememos/memos/internal/util"
"github.com/usememos/memos/server/profile"
"github.com/usememos/memos/server/profile"
"github.com/usememos/memos/store"
"github.com/usememos/memos/store"
...
@@ -81,13 +80,11 @@ func (s *FrontendService) registerRoutes(e *echo.Echo) {
...
@@ -81,13 +80,11 @@ func (s *FrontendService) registerRoutes(e *echo.Echo) {
}
}
func
(
s
*
FrontendService
)
registerFileRoutes
(
ctx
context
.
Context
,
e
*
echo
.
Echo
)
{
func
(
s
*
FrontendService
)
registerFileRoutes
(
ctx
context
.
Context
,
e
*
echo
.
Echo
)
{
instanceURLSetting
,
err
:=
s
.
Store
.
GetWorkspaceSetting
(
ctx
,
&
store
.
FindWorkspaceSetting
{
workspaceGeneralSetting
,
err
:=
s
.
Store
.
GetWorkspaceGeneralSetting
(
ctx
)
Name
:
apiv1
.
SystemSettingInstanceURLName
.
String
(),
if
err
!=
nil
{
})
if
err
!=
nil
||
instanceURLSetting
==
nil
{
return
return
}
}
instanceURL
:=
instanceURLSetting
.
Value
instanceURL
:=
workspaceGeneralSetting
.
GetInstanceUrl
()
if
instanceURL
==
""
{
if
instanceURL
==
""
{
return
return
}
}
...
...
store/migrator.go
0 → 100644
View file @
51d58d39
package
store
import
(
"context"
"encoding/json"
"fmt"
"github.com/pkg/errors"
storepb
"github.com/usememos/memos/proto/gen/store"
)
// MigrateWorkspaceSetting migrates workspace setting from v1 to v2.
func
(
s
*
Store
)
MigrateWorkspaceSetting
(
ctx
context
.
Context
)
error
{
workspaceSettings
,
err
:=
s
.
ListWorkspaceSettings
(
ctx
,
&
FindWorkspaceSetting
{})
if
err
!=
nil
{
return
errors
.
Wrap
(
err
,
"failed to list workspace settings"
)
}
workspaceGeneralSetting
,
err
:=
s
.
GetWorkspaceGeneralSetting
(
ctx
)
if
err
!=
nil
{
return
errors
.
Wrap
(
err
,
"failed to get workspace general setting"
)
}
for
_
,
workspaceSetting
:=
range
workspaceSettings
{
matched
:=
true
var
baseValue
any
json
.
Unmarshal
([]
byte
(
workspaceSetting
.
Value
),
&
baseValue
)
if
workspaceSetting
.
Name
==
"allow-signup"
{
workspaceGeneralSetting
.
DisallowSignup
=
baseValue
.
(
bool
)
}
else
if
workspaceSetting
.
Name
==
"disable-password-login"
{
workspaceGeneralSetting
.
DisallowPasswordLogin
=
baseValue
.
(
bool
)
}
else
if
workspaceSetting
.
Name
==
"additional-style"
{
workspaceGeneralSetting
.
AdditionalStyle
=
baseValue
.
(
string
)
}
else
if
workspaceSetting
.
Name
==
"additional-script"
{
workspaceGeneralSetting
.
AdditionalScript
=
baseValue
.
(
string
)
}
else
if
workspaceSetting
.
Name
==
"instance-url"
{
workspaceGeneralSetting
.
InstanceUrl
=
workspaceSetting
.
Value
}
else
{
matched
=
false
}
if
matched
{
if
_
,
err
:=
s
.
driver
.
GetDB
()
.
ExecContext
(
ctx
,
fmt
.
Sprintf
(
"DELETE FROM system_setting WHERE name = '%s'"
,
workspaceSetting
.
Name
));
err
!=
nil
{
return
errors
.
Wrap
(
err
,
"failed to delete workspace setting"
)
}
}
}
if
_
,
err
:=
s
.
UpsertWorkspaceSettingV1
(
ctx
,
&
storepb
.
WorkspaceSetting
{
Key
:
storepb
.
WorkspaceSettingKey_WORKSPACE_SETTING_GENERAL
,
Value
:
&
storepb
.
WorkspaceSetting_General
{
General
:
workspaceGeneralSetting
},
});
err
!=
nil
{
return
errors
.
Wrap
(
err
,
"failed to upsert workspace general setting"
)
}
return
nil
}
store/store.go
View file @
51d58d39
...
@@ -26,6 +26,13 @@ func New(driver Driver, profile *profile.Profile) *Store {
...
@@ -26,6 +26,13 @@ func New(driver Driver, profile *profile.Profile) *Store {
}
}
}
}
func
(
s
*
Store
)
MigrateManually
(
ctx
context
.
Context
)
error
{
if
err
:=
s
.
MigrateWorkspaceSetting
(
ctx
);
err
!=
nil
{
return
err
}
return
nil
}
func
(
s
*
Store
)
Vacuum
(
ctx
context
.
Context
)
error
{
func
(
s
*
Store
)
Vacuum
(
ctx
context
.
Context
)
error
{
return
s
.
driver
.
Vacuum
(
ctx
)
return
s
.
driver
.
Vacuum
(
ctx
)
}
}
...
...
store/workspace_setting.go
View file @
51d58d39
...
@@ -99,3 +99,18 @@ func (s *Store) GetWorkspaceSettingV1(ctx context.Context, find *FindWorkspaceSe
...
@@ -99,3 +99,18 @@ func (s *Store) GetWorkspaceSettingV1(ctx context.Context, find *FindWorkspaceSe
s
.
workspaceSettingV1Cache
.
Store
(
workspaceSetting
.
Key
.
String
(),
workspaceSetting
)
s
.
workspaceSettingV1Cache
.
Store
(
workspaceSetting
.
Key
.
String
(),
workspaceSetting
)
return
workspaceSetting
,
nil
return
workspaceSetting
,
nil
}
}
func
(
s
*
Store
)
GetWorkspaceGeneralSetting
(
ctx
context
.
Context
)
(
*
storepb
.
WorkspaceGeneralSetting
,
error
)
{
workspaceSetting
,
err
:=
s
.
GetWorkspaceSettingV1
(
ctx
,
&
FindWorkspaceSettingV1
{
Key
:
storepb
.
WorkspaceSettingKey_WORKSPACE_SETTING_GENERAL
,
})
if
err
!=
nil
{
return
nil
,
errors
.
Wrap
(
err
,
"failed to get workspace setting"
)
}
workspaceGeneralSetting
:=
&
storepb
.
WorkspaceGeneralSetting
{}
if
workspaceSetting
!=
nil
{
workspaceGeneralSetting
=
workspaceSetting
.
GetGeneral
()
}
return
workspaceGeneralSetting
,
nil
}
test/store/workspace_setting_test.go
View file @
51d58d39
...
@@ -6,40 +6,10 @@ import (
...
@@ -6,40 +6,10 @@ import (
"github.com/stretchr/testify/require"
"github.com/stretchr/testify/require"
apiv1
"github.com/usememos/memos/api/v1"
storepb
"github.com/usememos/memos/proto/gen/store"
storepb
"github.com/usememos/memos/proto/gen/store"
"github.com/usememos/memos/store"
"github.com/usememos/memos/store"
)
)
func
TestWorkspaceSettingStore
(
t
*
testing
.
T
)
{
ctx
:=
context
.
Background
()
ts
:=
NewTestingStore
(
ctx
,
t
)
_
,
err
:=
ts
.
UpsertWorkspaceSetting
(
ctx
,
&
store
.
WorkspaceSetting
{
Name
:
apiv1
.
SystemSettingServerIDName
.
String
(),
Value
:
"test_server_id"
,
})
require
.
NoError
(
t
,
err
)
_
,
err
=
ts
.
UpsertWorkspaceSetting
(
ctx
,
&
store
.
WorkspaceSetting
{
Name
:
apiv1
.
SystemSettingSecretSessionName
.
String
(),
Value
:
"test_secret_session_name"
,
})
require
.
NoError
(
t
,
err
)
_
,
err
=
ts
.
UpsertWorkspaceSetting
(
ctx
,
&
store
.
WorkspaceSetting
{
Name
:
apiv1
.
SystemSettingAllowSignUpName
.
String
(),
Value
:
"true"
,
})
require
.
NoError
(
t
,
err
)
_
,
err
=
ts
.
UpsertWorkspaceSetting
(
ctx
,
&
store
.
WorkspaceSetting
{
Name
:
apiv1
.
SystemSettingLocalStoragePathName
.
String
(),
Value
:
"/tmp/memos"
,
})
require
.
NoError
(
t
,
err
)
list
,
err
:=
ts
.
ListWorkspaceSettings
(
ctx
,
&
store
.
FindWorkspaceSetting
{})
require
.
NoError
(
t
,
err
)
require
.
Equal
(
t
,
4
,
len
(
list
))
ts
.
Close
()
}
func
TestWorkspaceSettingV1Store
(
t
*
testing
.
T
)
{
func
TestWorkspaceSettingV1Store
(
t
*
testing
.
T
)
{
ctx
:=
context
.
Background
()
ctx
:=
context
.
Background
()
ts
:=
NewTestingStore
(
ctx
,
t
)
ts
:=
NewTestingStore
(
ctx
,
t
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment