migrator.go 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package store
  2. import (
  3. "context"
  4. "encoding/json"
  5. "fmt"
  6. "github.com/pkg/errors"
  7. storepb "github.com/usememos/memos/proto/gen/store"
  8. )
  9. // MigrateWorkspaceSetting migrates workspace setting from v1 to v2.
  10. func (s *Store) MigrateWorkspaceSetting(ctx context.Context) error {
  11. workspaceSettings, err := s.ListWorkspaceSettings(ctx, &FindWorkspaceSetting{})
  12. if err != nil {
  13. return errors.Wrap(err, "failed to list workspace settings")
  14. }
  15. workspaceGeneralSetting, err := s.GetWorkspaceGeneralSetting(ctx)
  16. if err != nil {
  17. return errors.Wrap(err, "failed to get workspace general setting")
  18. }
  19. for _, workspaceSetting := range workspaceSettings {
  20. matched := true
  21. var baseValue any
  22. // nolint
  23. json.Unmarshal([]byte(workspaceSetting.Value), &baseValue)
  24. if workspaceSetting.Name == "allow-signup" {
  25. workspaceGeneralSetting.DisallowSignup = !baseValue.(bool)
  26. } else if workspaceSetting.Name == "disable-password-login" {
  27. workspaceGeneralSetting.DisallowPasswordLogin = baseValue.(bool)
  28. } else if workspaceSetting.Name == "additional-style" {
  29. workspaceGeneralSetting.AdditionalStyle = baseValue.(string)
  30. } else if workspaceSetting.Name == "additional-script" {
  31. workspaceGeneralSetting.AdditionalScript = baseValue.(string)
  32. } else if workspaceSetting.Name == "instance-url" {
  33. workspaceGeneralSetting.InstanceUrl = workspaceSetting.Value
  34. } else {
  35. matched = false
  36. }
  37. if matched {
  38. if err := s.DeleteWorkspaceSetting(ctx, &DeleteWorkspaceSetting{
  39. Name: workspaceSetting.Name,
  40. }); err != nil {
  41. return errors.Wrap(err, fmt.Sprintf("failed to delete workspace setting: %s", workspaceSetting.Name))
  42. }
  43. }
  44. }
  45. if _, err := s.UpsertWorkspaceSettingV1(ctx, &storepb.WorkspaceSetting{
  46. Key: storepb.WorkspaceSettingKey_WORKSPACE_SETTING_GENERAL,
  47. Value: &storepb.WorkspaceSetting_General{General: workspaceGeneralSetting},
  48. }); err != nil {
  49. return errors.Wrap(err, "failed to upsert workspace general setting")
  50. }
  51. return nil
  52. }