syntax = "proto3"; package headscale.v1; option go_package = "github.com/juanfont/headscale/gen/go/v1"; import "google/api/annotations.proto"; import "headscale/v1/user.proto"; import "headscale/v1/preauthkey.proto"; import "headscale/v1/machine.proto"; import "headscale/v1/routes.proto"; import "headscale/v1/apikey.proto"; // import "headscale/v1/device.proto"; service HeadscaleService { // --- User start --- rpc GetUser(GetUserRequest) returns(GetUserResponse) { option(google.api.http) = { get : "/api/v1/user/{name}" }; } rpc CreateUser(CreateUserRequest) returns(CreateUserResponse) { option(google.api.http) = { post : "/api/v1/user" body : "*" }; } rpc RenameUser(RenameUserRequest) returns(RenameUserResponse) { option(google.api.http) = { post : "/api/v1/user/{old_name}/rename/{new_name}" }; } rpc DeleteUser(DeleteUserRequest) returns(DeleteUserResponse) { option(google.api.http) = { delete : "/api/v1/user/{name}" }; } rpc ListUsers(ListUsersRequest) returns(ListUsersResponse) { option(google.api.http) = { get : "/api/v1/user" }; } // --- User end --- // --- PreAuthKeys start --- rpc CreatePreAuthKey(CreatePreAuthKeyRequest) returns(CreatePreAuthKeyResponse) { option(google.api.http) = { post : "/api/v1/preauthkey" body : "*" }; } rpc ExpirePreAuthKey(ExpirePreAuthKeyRequest) returns(ExpirePreAuthKeyResponse) { option(google.api.http) = { post : "/api/v1/preauthkey/expire" body : "*" }; } rpc ListPreAuthKeys(ListPreAuthKeysRequest) returns(ListPreAuthKeysResponse) { option(google.api.http) = { get : "/api/v1/preauthkey" }; } // --- PreAuthKeys end --- // --- Machine start --- rpc DebugCreateMachine(DebugCreateMachineRequest) returns(DebugCreateMachineResponse) { option(google.api.http) = { post : "/api/v1/debug/machine" body : "*" }; } rpc GetMachine(GetMachineRequest) returns(GetMachineResponse) { option(google.api.http) = { get : "/api/v1/machine/{machine_id}" }; } rpc SetTags(SetTagsRequest) returns(SetTagsResponse) { option(google.api.http) = { post : "/api/v1/machine/{machine_id}/tags" body : "*" }; } rpc RegisterMachine(RegisterMachineRequest) returns(RegisterMachineResponse) { option(google.api.http) = { post : "/api/v1/machine/register" }; } rpc DeleteMachine(DeleteMachineRequest) returns(DeleteMachineResponse) { option(google.api.http) = { delete : "/api/v1/machine/{machine_id}" }; } rpc ExpireMachine(ExpireMachineRequest) returns(ExpireMachineResponse) { option(google.api.http) = { post : "/api/v1/machine/{machine_id}/expire" }; } rpc RenameMachine(RenameMachineRequest) returns(RenameMachineResponse) { option(google.api.http) = { post : "/api/v1/machine/{machine_id}/rename/{new_name}" }; } rpc ListMachines(ListMachinesRequest) returns(ListMachinesResponse) { option(google.api.http) = { get : "/api/v1/machine" }; } rpc MoveMachine(MoveMachineRequest) returns(MoveMachineResponse) { option(google.api.http) = { post : "/api/v1/machine/{machine_id}/user" }; } // --- Machine end --- // --- Route start --- rpc GetRoutes(GetRoutesRequest) returns(GetRoutesResponse) { option(google.api.http) = { get : "/api/v1/routes" }; } rpc EnableRoute(EnableRouteRequest) returns(EnableRouteResponse) { option(google.api.http) = { post : "/api/v1/routes/{route_id}/enable" }; } rpc DisableRoute(DisableRouteRequest) returns(DisableRouteResponse) { option(google.api.http) = { post : "/api/v1/routes/{route_id}/disable" }; } rpc GetMachineRoutes(GetMachineRoutesRequest) returns(GetMachineRoutesResponse) { option(google.api.http) = { get : "/api/v1/machine/{machine_id}/routes" }; } rpc DeleteRoute(DeleteRouteRequest) returns(DeleteRouteResponse) { option(google.api.http) = { delete : "/api/v1/routes/{route_id}" }; } // --- Route end --- // --- ApiKeys start --- rpc CreateApiKey(CreateApiKeyRequest) returns(CreateApiKeyResponse) { option(google.api.http) = { post : "/api/v1/apikey" body : "*" }; } rpc ExpireApiKey(ExpireApiKeyRequest) returns(ExpireApiKeyResponse) { option(google.api.http) = { post : "/api/v1/apikey/expire" body : "*" }; } rpc ListApiKeys(ListApiKeysRequest) returns(ListApiKeysResponse) { option(google.api.http) = { get : "/api/v1/apikey" }; } // --- ApiKeys end --- // Implement Tailscale API // rpc GetDevice(GetDeviceRequest) returns(GetDeviceResponse) { // option(google.api.http) = { // get : "/api/v1/device/{id}" // }; // } // rpc DeleteDevice(DeleteDeviceRequest) returns(DeleteDeviceResponse) { // option(google.api.http) = { // delete : "/api/v1/device/{id}" // }; // } // rpc GetDeviceRoutes(GetDeviceRoutesRequest) returns(GetDeviceRoutesResponse) { // option(google.api.http) = { // get : "/api/v1/device/{id}/routes" // }; // } // rpc EnableDeviceRoutes(EnableDeviceRoutesRequest) returns(EnableDeviceRoutesResponse) { // option(google.api.http) = { // post : "/api/v1/device/{id}/routes" // }; // } }