// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. package config import "github.com/pkg/errors" // Migrate migrates SAML keys and certificates from one store to another given their data source names. func Migrate(from, to string) error { source, err := NewStore(from, false) if err != nil { return errors.Wrapf(err, "failed to access source config %s", from) } destination, err := NewStore(to, false) if err != nil { return errors.Wrapf(err, "failed to access destination config %s", to) } sourceConfig := source.Get() if _, err = destination.Set(sourceConfig); err != nil { return errors.Wrapf(err, "failed to set config") } files := []string{*sourceConfig.SamlSettings.IdpCertificateFile, *sourceConfig.SamlSettings.PublicCertificateFile, *sourceConfig.SamlSettings.PrivateKeyFile} files = append(files, sourceConfig.PluginSettings.SignaturePublicKeyFiles...) for _, file := range files { err = migrateFile(file, source, destination) if err != nil { return err } } return nil } func migrateFile(name string, source Store, destination Store) error { fileExists, err := source.HasFile(name) if err != nil { return errors.Wrapf(err, "failed to check existence of %s", name) } if fileExists { file, err := source.GetFile(name) if err != nil { return errors.Wrapf(err, "failed to migrate %s", name) } err = destination.SetFile(name, file) if err != nil { return errors.Wrapf(err, "failed to migrate %s", name) } } return nil }