core/config/assets.go
package config
import (
"bytes"
"fmt"
"github.com/synapsecns/sanguine/core/internal/assets"
"os"
"path/filepath"
)
// logoFileName is the name of the logo file.
const logoFileName = "logo.svg"
// nameSuffix is the name suffix to use after the app name.
// this is useful for testing/versioning in a future version of this app.
var nameSuffix string
// GetLogoPath fetches the logo path from the config and writes it to the global config if it doesn't exist
// TODO this should be more generalized to work across static assets when we have more.
// returns an empty string if not present.
//
//nolint:nestif
func GetLogoPath() (_ string, err error) {
configDir, err := GetConfigDir()
if err != nil {
return "", fmt.Errorf("could not get config dir: %w", err)
}
logoPath := filepath.Join(configDir, logoFileName)
shouldWrite := true
var fileHandle *os.File
if _, err := os.Stat(logoPath); os.IsNotExist(err) {
//nolint: gosec
fileHandle, err = os.Create(logoPath)
if err != nil {
return "", fmt.Errorf("could not get logo: %w", err)
}
} else {
//nolint: gosec
fileHandle, err = os.Open(logoPath)
if err != nil {
return "", fmt.Errorf("could not get logo: %w", err)
}
data, _ := os.ReadFile(fileHandle.Name())
if bytes.Equal(data, assets.Logo) {
shouldWrite = false
}
}
// otherwise create the file and return it
if shouldWrite {
_, err = fileHandle.Write(assets.Logo)
if err != nil {
return "", fmt.Errorf("could not write file: %w", err)
}
}
_ = fileHandle.Close()
return fileHandle.Name(), nil
}