This repository has been archived on 2023-04-11. You can view files and clone it, but cannot push or open issues or pull requests.
openskins-plugin/core/skinstore.go

134 lines
2.9 KiB
Go
Raw Permalink Normal View History

package core
import (
"bufio"
"fmt"
"github.com/ilyakaznacheev/cleanenv"
"github.com/josephbmanley/OpenSkins-Common/datatypes"
"os"
)
type standaloneConfig struct {
SkinDirectory string `yaml:"skin_directory" env:"SKIN_DIR" env-default:"skins"`
WebserverDomain string `yaml:"domain" env:"DOMAIN" env-default:"localhost"`
WebserverSubpath string `yaml:"subpath" env:"SUBPATH" env-default:""`
}
const configFile = "standalone_config.yaml"
var config standaloneConfig
// SkinstoreStandalone is root of the skinstore plugin
type SkinstoreStandalone struct{}
// Initialize intializes the skinstore module
func (s *SkinstoreStandalone) Initialize() error {
for _, w := range warnings {
fmt.Printf("WARNING: %v\n", w)
}
// Check if config file exists
if _, err := os.Stat(configFile); err == nil {
// Read config with config file & environment variables
if err := cleanenv.ReadConfig(configFile, &config); err != nil {
return err
}
} else if os.IsNotExist(err) {
// Read config with only environment variables
if err := cleanenv.ReadEnv(&config); err != nil {
return err
}
} else {
return err
}
if _, err := os.Stat(config.SkinDirectory); err != nil {
if !os.IsNotExist(err) {
return err
}
os.Mkdir(config.SkinDirectory, 0755)
}
return nil
}
// GetSkin returns a skin object
func (s *SkinstoreStandalone) GetSkin(skinID string) (*datatypes.Skin, error) {
skinPath := fmt.Sprintf("%v/%v", config.SkinDirectory, skinID)
// Check if skin exists
if _, err := os.Stat(skinPath); err != nil {
// Catch not exist errors
if os.IsNotExist(err) {
return nil, nil
}
return nil, err
}
skin := datatypes.Skin{
UID: skinID,
Name: skinID,
Location: fmt.Sprintf("%v/%v%v", config.WebserverDomain, config.WebserverSubpath, skinID),
Metadata: map[string]string{},
}
return &skin, nil
}
// AddSkin returns a skin creates a new skin object
func (s *SkinstoreStandalone) AddSkin(skinID string, fileData []byte) error {
skinPath := fmt.Sprintf("%v/%v", config.SkinDirectory, skinID)
if _, err := os.Stat(skinPath); err != nil {
// Check if error was not 404 error
if !os.IsNotExist(err) {
return err
}
// Create file if it didn't exist
if _, err := os.Create(skinPath); err != nil {
return err
}
}
// Open file with rw permissions
file, err := os.OpenFile(skinPath, os.O_RDWR|os.O_CREATE, 0755)
if err != nil {
return err
}
// Write data to file
writer := bufio.NewWriter(file)
if _, err = writer.Write(fileData); err != nil {
return err
}
return nil
}
// DeleteSkin deletes a skin object
// func (s *SkinstoreStandalone) DeleteSkin(skinID string) error {
// skinPath := fmt.Sprintf("%v/%v", config.SkinDirectory, skinID)
// // Check if skin exists
// if _, err := os.Stat(skinPath); err != nil {
// // Check if error was not 404 error
// if !os.IsNotExist(err) {
// return err
// }
// return nil
// }
// return os.Remove(skinPath)
// }