mirror of https://github.com/XTLS/Xray-core
				
				
				
			Fix missing user in shadowsocks-2022 inbound
							parent
							
								
									cf7e675c45
								
							
						
					
					
						commit
						1edce576ca
					
				|  | @ -29,7 +29,8 @@ type ServerConfig struct { | |||
| 	Method  string        `protobuf:"bytes,1,opt,name=method,proto3" json:"method,omitempty"` | ||||
| 	Key     string        `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"` | ||||
| 	Email   string        `protobuf:"bytes,3,opt,name=email,proto3" json:"email,omitempty"` | ||||
| 	Network []net.Network `protobuf:"varint,4,rep,packed,name=network,proto3,enum=xray.common.net.Network" json:"network,omitempty"` | ||||
| 	Level   int32         `protobuf:"varint,4,opt,name=level,proto3" json:"level,omitempty"` | ||||
| 	Network []net.Network `protobuf:"varint,5,rep,packed,name=network,proto3,enum=xray.common.net.Network" json:"network,omitempty"` | ||||
| } | ||||
| 
 | ||||
| func (x *ServerConfig) Reset() { | ||||
|  | @ -85,6 +86,13 @@ func (x *ServerConfig) GetEmail() string { | |||
| 	return "" | ||||
| } | ||||
| 
 | ||||
| func (x *ServerConfig) GetLevel() int32 { | ||||
| 	if x != nil { | ||||
| 		return x.Level | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
| 
 | ||||
| func (x *ServerConfig) GetNetwork() []net.Network { | ||||
| 	if x != nil { | ||||
| 		return x.Network | ||||
|  | @ -170,6 +178,7 @@ type User struct { | |||
| 
 | ||||
| 	Key   string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` | ||||
| 	Email string `protobuf:"bytes,2,opt,name=email,proto3" json:"email,omitempty"` | ||||
| 	Level int32  `protobuf:"varint,3,opt,name=level,proto3" json:"level,omitempty"` | ||||
| } | ||||
| 
 | ||||
| func (x *User) Reset() { | ||||
|  | @ -218,6 +227,13 @@ func (x *User) GetEmail() string { | |||
| 	return "" | ||||
| } | ||||
| 
 | ||||
| func (x *User) GetLevel() int32 { | ||||
| 	if x != nil { | ||||
| 		return x.Level | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
| 
 | ||||
| type ClientConfig struct { | ||||
| 	state         protoimpl.MessageState | ||||
| 	sizeCache     protoimpl.SizeCache | ||||
|  | @ -307,49 +323,52 @@ var file_proxy_shadowsocks_2022_config_proto_rawDesc = []byte{ | |||
| 	0x32, 0x32, 0x1a, 0x18, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x6e, 0x65, 0x74, 0x2f, 0x6e, | ||||
| 	0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x63, 0x6f, | ||||
| 	0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x6e, 0x65, 0x74, 0x2f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, | ||||
| 	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x82, 0x01, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, | ||||
| 	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x98, 0x01, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, | ||||
| 	0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, | ||||
| 	0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, | ||||
| 	0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, | ||||
| 	0x79, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, | ||||
| 	0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x32, 0x0a, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, | ||||
| 	0x72, 0x6b, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, | ||||
| 	0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, | ||||
| 	0x72, 0x6b, 0x52, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x22, 0xae, 0x01, 0x0a, 0x15, | ||||
| 	0x4d, 0x75, 0x6c, 0x74, 0x69, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, | ||||
| 	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, | ||||
| 	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x10, 0x0a, | ||||
| 	0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, | ||||
| 	0x37, 0x0a, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, | ||||
| 	0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x73, 0x68, 0x61, 0x64, | ||||
| 	0x6f, 0x77, 0x73, 0x6f, 0x63, 0x6b, 0x73, 0x5f, 0x32, 0x30, 0x32, 0x32, 0x2e, 0x55, 0x73, 0x65, | ||||
| 	0x72, 0x52, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x12, 0x32, 0x0a, 0x07, 0x6e, 0x65, 0x74, 0x77, | ||||
| 	0x6f, 0x72, 0x6b, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x78, 0x72, 0x61, 0x79, | ||||
| 	0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x2e, 0x4e, 0x65, 0x74, 0x77, | ||||
| 	0x6f, 0x72, 0x6b, 0x52, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x22, 0x2e, 0x0a, 0x04, | ||||
| 	0x55, 0x73, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, | ||||
| 	0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, | ||||
| 	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x22, 0xba, 0x01, 0x0a, | ||||
| 	0x0c, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x35, 0x0a, | ||||
| 	0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, | ||||
| 	0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, | ||||
| 	0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x32, 0x0a, | ||||
| 	0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x18, | ||||
| 	0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x6e, 0x65, 0x74, | ||||
| 	0x2e, 0x49, 0x50, 0x4f, 0x72, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x07, 0x61, 0x64, 0x64, | ||||
| 	0x72, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, | ||||
| 	0x28, 0x0d, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, | ||||
| 	0x6f, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, | ||||
| 	0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, | ||||
| 	0x65, 0x79, 0x12, 0x35, 0x0a, 0x17, 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, 0x64, 0x5f, 0x69, 0x76, | ||||
| 	0x5f, 0x68, 0x65, 0x61, 0x64, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x70, 0x79, 0x18, 0x05, 0x20, | ||||
| 	0x01, 0x28, 0x08, 0x52, 0x14, 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, 0x64, 0x49, 0x76, 0x48, 0x65, | ||||
| 	0x61, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x6f, 0x70, 0x79, 0x42, 0x72, 0x0a, 0x1f, 0x63, 0x6f, 0x6d, | ||||
| 	0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x73, 0x68, 0x61, 0x64, | ||||
| 	0x6f, 0x77, 0x73, 0x6f, 0x63, 0x6b, 0x73, 0x5f, 0x32, 0x30, 0x32, 0x32, 0x50, 0x01, 0x5a, 0x30, | ||||
| 	0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x74, 0x6c, 0x73, 0x2f, | ||||
| 	0x78, 0x72, 0x61, 0x79, 0x2d, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2f, | ||||
| 	0x73, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x73, 0x6f, 0x63, 0x6b, 0x73, 0x5f, 0x32, 0x30, 0x32, 0x32, | ||||
| 	0xaa, 0x02, 0x1a, 0x58, 0x72, 0x61, 0x79, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x53, 0x68, | ||||
| 	0x61, 0x64, 0x6f, 0x77, 0x73, 0x6f, 0x63, 0x6b, 0x73, 0x32, 0x30, 0x32, 0x32, 0x62, 0x06, 0x70, | ||||
| 	0x72, 0x6f, 0x74, 0x6f, 0x33, | ||||
| 	0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, | ||||
| 	0x6b, 0x22, 0xae, 0x01, 0x0a, 0x15, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x55, 0x73, 0x65, 0x72, 0x53, | ||||
| 	0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x6d, | ||||
| 	0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, 0x74, | ||||
| 	0x68, 0x6f, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, | ||||
| 	0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x37, 0x0a, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x18, 0x03, | ||||
| 	0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x78, | ||||
| 	0x79, 0x2e, 0x73, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x73, 0x6f, 0x63, 0x6b, 0x73, 0x5f, 0x32, 0x30, | ||||
| 	0x32, 0x32, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x12, 0x32, | ||||
| 	0x0a, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0e, 0x32, | ||||
| 	0x18, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x6e, 0x65, | ||||
| 	0x74, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, | ||||
| 	0x72, 0x6b, 0x22, 0x44, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, | ||||
| 	0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, | ||||
| 	0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, | ||||
| 	0x69, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, | ||||
| 	0x05, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x22, 0xba, 0x01, 0x0a, 0x0c, 0x43, 0x6c, 0x69, | ||||
| 	0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x35, 0x0a, 0x07, 0x61, 0x64, 0x64, | ||||
| 	0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x78, 0x72, 0x61, | ||||
| 	0x79, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x2e, 0x49, 0x50, 0x4f, | ||||
| 	0x72, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, | ||||
| 	0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, | ||||
| 	0x70, 0x6f, 0x72, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x03, | ||||
| 	0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x10, 0x0a, 0x03, | ||||
| 	0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x35, | ||||
| 	0x0a, 0x17, 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, 0x64, 0x5f, 0x69, 0x76, 0x5f, 0x68, 0x65, 0x61, | ||||
| 	0x64, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x70, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, | ||||
| 	0x14, 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, 0x64, 0x49, 0x76, 0x48, 0x65, 0x61, 0x64, 0x45, 0x6e, | ||||
| 	0x74, 0x72, 0x6f, 0x70, 0x79, 0x42, 0x72, 0x0a, 0x1f, 0x63, 0x6f, 0x6d, 0x2e, 0x78, 0x72, 0x61, | ||||
| 	0x79, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x73, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x73, 0x6f, | ||||
| 	0x63, 0x6b, 0x73, 0x5f, 0x32, 0x30, 0x32, 0x32, 0x50, 0x01, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, | ||||
| 	0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x74, 0x6c, 0x73, 0x2f, 0x78, 0x72, 0x61, 0x79, | ||||
| 	0x2d, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2f, 0x73, 0x68, 0x61, 0x64, | ||||
| 	0x6f, 0x77, 0x73, 0x6f, 0x63, 0x6b, 0x73, 0x5f, 0x32, 0x30, 0x32, 0x32, 0xaa, 0x02, 0x1a, 0x58, | ||||
| 	0x72, 0x61, 0x79, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x53, 0x68, 0x61, 0x64, 0x6f, 0x77, | ||||
| 	0x73, 0x6f, 0x63, 0x6b, 0x73, 0x32, 0x30, 0x32, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, | ||||
| 	0x33, | ||||
| } | ||||
| 
 | ||||
| var ( | ||||
|  |  | |||
|  | @ -13,7 +13,8 @@ message ServerConfig { | |||
|   string method = 1; | ||||
|   string key = 2; | ||||
|   string email = 3; | ||||
|   repeated xray.common.net.Network network = 4; | ||||
|   int32 level = 4; | ||||
|   repeated xray.common.net.Network network = 5; | ||||
| } | ||||
| 
 | ||||
| message MultiUserServerConfig { | ||||
|  | @ -26,6 +27,7 @@ message MultiUserServerConfig { | |||
| message User { | ||||
|   string key = 1; | ||||
|   string email = 2; | ||||
|   int32 level = 3; | ||||
| } | ||||
| 
 | ||||
| message ClientConfig { | ||||
|  |  | |||
|  | @ -16,6 +16,7 @@ import ( | |||
| 	"github.com/xtls/xray-core/common/buf" | ||||
| 	"github.com/xtls/xray-core/common/log" | ||||
| 	"github.com/xtls/xray-core/common/net" | ||||
| 	"github.com/xtls/xray-core/common/protocol" | ||||
| 	"github.com/xtls/xray-core/common/session" | ||||
| 	"github.com/xtls/xray-core/features/routing" | ||||
| 	"github.com/xtls/xray-core/transport/internet/stat" | ||||
|  | @ -31,6 +32,7 @@ type Inbound struct { | |||
| 	networks []net.Network | ||||
| 	service  shadowsocks.Service | ||||
| 	email    string | ||||
| 	level    int | ||||
| } | ||||
| 
 | ||||
| func NewServer(ctx context.Context, config *ServerConfig) (*Inbound, error) { | ||||
|  | @ -44,6 +46,7 @@ func NewServer(ctx context.Context, config *ServerConfig) (*Inbound, error) { | |||
| 	inbound := &Inbound{ | ||||
| 		networks: networks, | ||||
| 		email:    config.Email, | ||||
| 		level:    int(config.Level), | ||||
| 	} | ||||
| 	if !C.Contains(shadowaead_2022.List, config.Method) { | ||||
| 		return nil, newError("unsupported method ", config.Method) | ||||
|  | @ -69,9 +72,6 @@ func (i *Inbound) Network() []net.Network { | |||
| 
 | ||||
| func (i *Inbound) Process(ctx context.Context, network net.Network, connection stat.Connection, dispatcher routing.Dispatcher) error { | ||||
| 	inbound := session.InboundFromContext(ctx) | ||||
| 	if inbound == nil { | ||||
| 		panic("no inbound metadata") | ||||
| 	} | ||||
| 
 | ||||
| 	var metadata M.Metadata | ||||
| 	if inbound.Source.IsValid() { | ||||
|  | @ -101,6 +101,11 @@ func (i *Inbound) Process(ctx context.Context, network net.Network, connection s | |||
| } | ||||
| 
 | ||||
| func (i *Inbound) NewConnection(ctx context.Context, conn net.Conn, metadata M.Metadata) error { | ||||
| 	inbound := session.InboundFromContext(ctx) | ||||
| 	inbound.User = &protocol.MemoryUser{ | ||||
| 		Email: i.email, | ||||
| 		Level: uint32(i.level), | ||||
| 	} | ||||
| 	ctx = log.ContextWithAccessMessage(ctx, &log.AccessMessage{ | ||||
| 		From:   metadata.Source, | ||||
| 		To:     metadata.Destination, | ||||
|  | @ -122,6 +127,11 @@ func (i *Inbound) NewConnection(ctx context.Context, conn net.Conn, metadata M.M | |||
| } | ||||
| 
 | ||||
| func (i *Inbound) NewPacketConnection(ctx context.Context, conn N.PacketConn, metadata M.Metadata) error { | ||||
| 	inbound := session.InboundFromContext(ctx) | ||||
| 	inbound.User = &protocol.MemoryUser{ | ||||
| 		Email: i.email, | ||||
| 		Level: uint32(i.level), | ||||
| 	} | ||||
| 	ctx = log.ContextWithAccessMessage(ctx, &log.AccessMessage{ | ||||
| 		From:   metadata.Source, | ||||
| 		To:     metadata.Destination, | ||||
|  |  | |||
|  | @ -15,6 +15,7 @@ import ( | |||
| 	"github.com/xtls/xray-core/common/buf" | ||||
| 	"github.com/xtls/xray-core/common/log" | ||||
| 	"github.com/xtls/xray-core/common/net" | ||||
| 	"github.com/xtls/xray-core/common/protocol" | ||||
| 	"github.com/xtls/xray-core/common/session" | ||||
| 	"github.com/xtls/xray-core/common/uuid" | ||||
| 	"github.com/xtls/xray-core/features/routing" | ||||
|  | @ -29,7 +30,8 @@ func init() { | |||
| 
 | ||||
| type MultiUserInbound struct { | ||||
| 	networks []net.Network | ||||
| 	service  *shadowaead_2022.MultiService[string] | ||||
| 	users    []*User | ||||
| 	service  *shadowaead_2022.MultiService[int] | ||||
| } | ||||
| 
 | ||||
| func NewMultiServer(ctx context.Context, config *MultiUserServerConfig) (*MultiUserInbound, error) { | ||||
|  | @ -50,21 +52,21 @@ func NewMultiServer(ctx context.Context, config *MultiUserServerConfig) (*MultiU | |||
| 	if err != nil { | ||||
| 		return nil, newError("parse config").Base(err) | ||||
| 	} | ||||
| 	service, err := shadowaead_2022.NewMultiService[string](config.Method, psk, random.Default, 500, inbound) | ||||
| 	service, err := shadowaead_2022.NewMultiService[int](config.Method, psk, random.Default, 500, inbound) | ||||
| 	if err != nil { | ||||
| 		return nil, newError("create service").Base(err) | ||||
| 	} | ||||
| 
 | ||||
| 	for _, user := range config.Users { | ||||
| 	for i, user := range config.Users { | ||||
| 		if user.Email == "" { | ||||
| 			u := uuid.New() | ||||
| 			user.Email = "(user with empty email - " + u.String() + ")" | ||||
| 		} | ||||
| 		uPsk, err := base64.StdEncoding.DecodeString(user.Key) | ||||
| 		uPSK, err := base64.StdEncoding.DecodeString(user.Key) | ||||
| 		if err != nil { | ||||
| 			return nil, newError("parse user key for ", user.Email).Base(err) | ||||
| 		} | ||||
| 		err = service.AddUser(user.Email, uPsk) | ||||
| 		err = service.AddUser(i, uPSK) | ||||
| 		if err != nil { | ||||
| 			return nil, newError("add user").Base(err) | ||||
| 		} | ||||
|  | @ -80,9 +82,6 @@ func (i *MultiUserInbound) Network() []net.Network { | |||
| 
 | ||||
| func (i *MultiUserInbound) Process(ctx context.Context, network net.Network, connection stat.Connection, dispatcher routing.Dispatcher) error { | ||||
| 	inbound := session.InboundFromContext(ctx) | ||||
| 	if inbound == nil { | ||||
| 		panic("no inbound metadata") | ||||
| 	} | ||||
| 
 | ||||
| 	var metadata M.Metadata | ||||
| 	if inbound.Source.IsValid() { | ||||
|  | @ -112,12 +111,18 @@ func (i *MultiUserInbound) Process(ctx context.Context, network net.Network, con | |||
| } | ||||
| 
 | ||||
| func (i *MultiUserInbound) NewConnection(ctx context.Context, conn net.Conn, metadata M.Metadata) error { | ||||
| 	userCtx := ctx.(*shadowsocks.UserContext[string]) | ||||
| 	userCtx := ctx.(*shadowsocks.UserContext[int]) | ||||
| 	inbound := session.InboundFromContext(ctx) | ||||
| 	user := i.users[userCtx.User] | ||||
| 	inbound.User = &protocol.MemoryUser{ | ||||
| 		Email: user.Email, | ||||
| 		Level: uint32(user.Level), | ||||
| 	} | ||||
| 	ctx = log.ContextWithAccessMessage(userCtx.Context, &log.AccessMessage{ | ||||
| 		From:   metadata.Source, | ||||
| 		To:     metadata.Destination, | ||||
| 		Status: log.AccessAccepted, | ||||
| 		Email:  userCtx.User, | ||||
| 		Email:  user.Email, | ||||
| 	}) | ||||
| 	newError("tunnelling request to tcp:", metadata.Destination).WriteToLog(session.ExportIDToError(ctx)) | ||||
| 	dispatcher := session.DispatcherFromContext(ctx) | ||||
|  | @ -134,12 +139,18 @@ func (i *MultiUserInbound) NewConnection(ctx context.Context, conn net.Conn, met | |||
| } | ||||
| 
 | ||||
| func (i *MultiUserInbound) NewPacketConnection(ctx context.Context, conn N.PacketConn, metadata M.Metadata) error { | ||||
| 	userCtx := ctx.(*shadowsocks.UserContext[string]) | ||||
| 	userCtx := ctx.(*shadowsocks.UserContext[int]) | ||||
| 	inbound := session.InboundFromContext(ctx) | ||||
| 	user := i.users[userCtx.User] | ||||
| 	inbound.User = &protocol.MemoryUser{ | ||||
| 		Email: user.Email, | ||||
| 		Level: uint32(user.Level), | ||||
| 	} | ||||
| 	ctx = log.ContextWithAccessMessage(userCtx.Context, &log.AccessMessage{ | ||||
| 		From:   metadata.Source, | ||||
| 		To:     metadata.Destination, | ||||
| 		Status: log.AccessAccepted, | ||||
| 		Email:  userCtx.User, | ||||
| 		Email:  user.Email, | ||||
| 	}) | ||||
| 	newError("tunnelling request to udp:", metadata.Destination).WriteToLog(session.ExportIDToError(ctx)) | ||||
| 	dispatcher := session.DispatcherFromContext(ctx) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 世界
						世界