|  | @@ -4,43 +4,43 @@ package shadowsocks
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  import (
 | 
	
		
			
				|  |  |  	"encoding/json"
 | 
	
		
			
				|  |  | -  
 | 
	
		
			
				|  |  | -  "github.com/v2ray/v2ray-core/common/log"
 | 
	
		
			
				|  |  | -  "github.com/v2ray/v2ray-core/common/serial"
 | 
	
		
			
				|  |  | -  "github.com/v2ray/v2ray-core/proxy/internal"
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	"github.com/v2ray/v2ray-core/common/log"
 | 
	
		
			
				|  |  | +	"github.com/v2ray/v2ray-core/common/serial"
 | 
	
		
			
				|  |  | +	"github.com/v2ray/v2ray-core/proxy/internal"
 | 
	
		
			
				|  |  |  )
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  func (this *Config) UnmarshalJSON(data []byte) error {
 | 
	
		
			
				|  |  |  	type JsonConfig struct {
 | 
	
		
			
				|  |  | -		Cipher   *serial.StringLiteral `json:"method"`
 | 
	
		
			
				|  |  | -		Password *serial.StringLiteral `json:"password"`
 | 
	
		
			
				|  |  | +		Cipher   serial.StringLiteral `json:"method"`
 | 
	
		
			
				|  |  | +		Password serial.StringLiteral `json:"password"`
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  	jsonConfig := new(JsonConfig)
 | 
	
		
			
				|  |  |  	if err := json.Unmarshal(data, jsonConfig); err != nil {
 | 
	
		
			
				|  |  |  		return err
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  | -  if this.Password == nil {
 | 
	
		
			
				|  |  | -    log.Error("Shadowsocks: Password is not specified.")
 | 
	
		
			
				|  |  | -    return internal.ErrorBadConfiguration
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -  this.Password = jsonConfig.Password.String()
 | 
	
		
			
				|  |  | -  if this.Cipher == nil {
 | 
	
		
			
				|  |  | -    log.Error("Shadowsocks: Cipher method is not specified.")
 | 
	
		
			
				|  |  | -    return internal.ErrorBadConfiguration
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -  jsonConfig.Cipher = jsonConfig.Cipher.ToLower()
 | 
	
		
			
				|  |  | -  switch jsonConfig.Cipher.String() {
 | 
	
		
			
				|  |  | -    case "aes-256-cfb":
 | 
	
		
			
				|  |  | -    this.Cipher = &AesCfb {
 | 
	
		
			
				|  |  | -      KeyBytes: 32
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    case "aes-128-cfb":
 | 
	
		
			
				|  |  | -    this.Cipher = &AesCfb {
 | 
	
		
			
				|  |  | -      KeyBytes: 32
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    default:
 | 
	
		
			
				|  |  | -    log.Error("Shadowsocks: Unknown cipher method: ", jsonConfig.Cipher)
 | 
	
		
			
				|  |  | -    return internal.ErrorBadConfiguration
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -  return nil
 | 
	
		
			
				|  |  | +	if len(jsonConfig.Password) == 0 {
 | 
	
		
			
				|  |  | +		log.Error("Shadowsocks: Password is not specified.")
 | 
	
		
			
				|  |  | +		return internal.ErrorBadConfiguration
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	this.Password = jsonConfig.Password.String()
 | 
	
		
			
				|  |  | +	if this.Cipher == nil {
 | 
	
		
			
				|  |  | +		log.Error("Shadowsocks: Cipher method is not specified.")
 | 
	
		
			
				|  |  | +		return internal.ErrorBadConfiguration
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	jsonConfig.Cipher = jsonConfig.Cipher.ToLower()
 | 
	
		
			
				|  |  | +	switch jsonConfig.Cipher.String() {
 | 
	
		
			
				|  |  | +	case "aes-256-cfb":
 | 
	
		
			
				|  |  | +		this.Cipher = &AesCfb{
 | 
	
		
			
				|  |  | +			KeyBytes: 32,
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	case "aes-128-cfb":
 | 
	
		
			
				|  |  | +		this.Cipher = &AesCfb{
 | 
	
		
			
				|  |  | +			KeyBytes: 32,
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	default:
 | 
	
		
			
				|  |  | +		log.Error("Shadowsocks: Unknown cipher method: ", jsonConfig.Cipher)
 | 
	
		
			
				|  |  | +		return internal.ErrorBadConfiguration
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	return nil
 | 
	
		
			
				|  |  |  }
 |