mirror of
				https://github.com/3ybactuk/marketplace-go-service-project.git
				synced 2025-10-31 06:23:44 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			52 lines
		
	
	
		
			1013 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1013 B
		
	
	
	
		
			Go
		
	
	
	
	
	
| package config
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"os"
 | |
| 	"path/filepath"
 | |
| 	"strings"
 | |
| 
 | |
| 	"gopkg.in/yaml.v3"
 | |
| )
 | |
| 
 | |
| type Config struct {
 | |
| 	Service struct {
 | |
| 		LogLevel string `yaml:"log_level"`
 | |
| 	} `yaml:"service"`
 | |
| 
 | |
| 	Kafka struct {
 | |
| 		Host            string `yaml:"host"`
 | |
| 		Port            string `yaml:"port"`
 | |
| 		OrderTopic      string `yaml:"order_topic"`
 | |
| 		ConsumerGroupID string `yaml:"consumer_group_id"`
 | |
| 		Brokers         string `yaml:"brokers"`
 | |
| 	} `yaml:"kafka"`
 | |
| }
 | |
| 
 | |
| func LoadConfig(filename string) (*Config, error) {
 | |
| 	workDir, err := os.Getwd()
 | |
| 	if err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 	cfgRoot := filepath.Join(workDir, "configs")
 | |
| 	absCfgRoot, _ := filepath.Abs(cfgRoot)
 | |
| 
 | |
| 	filePath := filepath.Join(absCfgRoot, filepath.Clean(filename))
 | |
| 	if !strings.HasPrefix(filePath, absCfgRoot) {
 | |
| 		return nil, fmt.Errorf("invalid path")
 | |
| 	}
 | |
| 
 | |
| 	f, err := os.Open(filename)
 | |
| 	if err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 	defer f.Close()
 | |
| 
 | |
| 	config := &Config{}
 | |
| 	if err := yaml.NewDecoder(f).Decode(config); err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 
 | |
| 	return config, nil
 | |
| }
 | 
