-
Notifications
You must be signed in to change notification settings - Fork 4.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
gRPC APIs for list of inbounds and users #2745
Comments
You can use protoc and grpc plugin on your desired language to auto generate Protobuffers with any language for example for PHP the command to generate proto buffs will be something like this protoc \
--proto_path=xray/proto \ # proto files path - can be xray-core repo path cloned
--php_out=xray \
--grpc_out=./xray \
--plugin=protoc-gen-grpc=./grpc/cmake/build/grpc_php_plugin \ # path to grpc php plugin
xray/proto/HandlerService.proto \ # some .proto files
xray/proto/proxy/vless/inbound/config.proto \ # .proto files You need to have GRPC compiled, then it'll generate php files regarding to protobufs Final code use will be something like this $grpcOptions = [
'credentials' => ChannelCredentials::createInsecure()
];
$client = new HandlerServiceClient("{$server->ipv4}:{$server->port}", $grpcOptions);
$client->waitForReady(5 * 1000 * 1000); // microseconds
return $client->RemoveInbound(new RemoveInboundRequest([
'tag' => 'vless-tcp'
]), [], [
'timeout' => 5 * 1000 * 1000 // microseconds
]); Take a look at these: |
Thanks @amir-devman, I am familiar with gRPC, but there isn't an API available to retrieve a list of defined inbounds/outbounds/users. I'm looking for a method to access this specific list. |
HandlerService is all you need to look for inbound/outbound management
As I've looked into xray-core source code I've only found this helpful for managing inbounds/outbounds/users Only thing you can find on Project X document is ReflectionService API that only mentions what services are available which I hope this helps. |
@miladrahimi There's also another document with examples(golang): |
I was hoping for a method or API, perhaps named |
@Fangliding Since there is no "List of inbounds" implemented in the Xray gRPC, I think it's not completed yet. |
@miladrahimi |
This is an important feature. Planning.. |
After all, how do I add clients to VLESS incoming connections? Use the HandlerService from this file
|
@miladrahimi Did I understand correctly that you are interested in implementing grpc functions that will allow you to view lists of defined inbounds, outbounds, or users? |
@mr1cloud Yes, I believe there should be CRUD (Create, Read, Update, Delete) APIs for inbounds, outbounds, and users. This way, Xray panels won't need to interact with the Xray process (binary) to manage these entities. gRPC endpoints would be the ideal approach. |
At the moment, we have a so-called central panel and a bunch of servers (nodes) running instances of Xray. When launching the panel, we generate a configuration file based on the database and pass it to the node’s std. After that, we perform basic CRUD operations via the API. For example, on the frontend, when assigning new inbounds to a user, I need to completely remove the old inbounds first. This means I have to find them somewhere before sending a request to add new ones. It would be much more convenient to handle this almost directly within the core. That is, I could request all available inbounds from the core (getting a list of tags), then send a request to remove the user for each tag, and finally, send a request to add the user for the required tags. As a result, the possible solutions to the problem described above are: |
@iambabyninja I am currently working on these issues, but due to the large number of tasks, this process will take longer than necessary. Stay tuned for updates. |
There are gRPC APIs for adding, altering, and removing inbounds, outbounds, and users but I couldn't find any API for fetching the lists of defined inbounds, outbounds, or users, how can I fetch them?
The text was updated successfully, but these errors were encountered: