diff --git a/doc/index.html b/doc/index.html index 727e8473..a877622d 100644 --- a/doc/index.html +++ b/doc/index.html @@ -20766,6 +20766,13 @@

VPNServiceAuthKeyRequest + + reusable + bool + +

Reusable, if set to true, the authkey can be used multiple times within the expiration window.

+ + @@ -20819,6 +20826,13 @@

VPNServiceAuthKeyResponse

CreatedAt this key was created at this timestamp.

+ + reusable + bool + +

Reusable, if set to true, the authkey can be used multiple times within the expiration window.

+ + diff --git a/go.mod b/go.mod index 19c3f272..ec73f24b 100644 --- a/go.mod +++ b/go.mod @@ -22,11 +22,11 @@ require ( cel.dev/expr v0.25.3 // indirect github.com/antlr4-go/antlr/v4 v4.13.1 // indirect github.com/klauspost/compress v1.20.3 // indirect - github.com/minio/minlz v1.2.2 // indirect + github.com/minio/minlz v1.2.3 // indirect go.yaml.in/yaml/v3 v3.0.5 // indirect golang.org/x/exp v0.0.0-20261014143641-f0251eb4aa3e // indirect golang.org/x/sys v0.49.0 // indirect golang.org/x/text v0.43.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20261012220534-4341edf3f941 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20261012220534-4341edf3f941 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20261019180522-ce908d29299b // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20261019180522-ce908d29299b // indirect ) diff --git a/go.sum b/go.sum index 4c87ad3f..1914c4dd 100644 --- a/go.sum +++ b/go.sum @@ -28,8 +28,8 @@ github.com/klauspost/compress v1.20.3 h1:zWNoFqq/lSuYQRim3dUXlXeA0IqwuZGicdG5ZTf github.com/klauspost/compress v1.20.3/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/klauspost/connect-compress/v2 v2.1.1 h1:ycZNp4rWOZBodVE2Ls5AzK4aHkyK+GteEfzRZgKNs+c= github.com/klauspost/connect-compress/v2 v2.1.1/go.mod h1:9oilsPHJMzGKkjafSBk9J7iVo4mO+dw0G0KSdVpnlVE= -github.com/minio/minlz v1.2.2 h1:o3YoP6f3VG0oY3Ykhx2mHrpCywsoobsFPVWslgfKcbY= -github.com/minio/minlz v1.2.2/go.mod h1:xHhZ+MJmC2U4ssK/rSENsoyCfv0VFQo1mT6AdCA2RJ8= +github.com/minio/minlz v1.2.3 h1:xUNhxBd8AlRJbJIsFkVmrN96gk9as9PjheVh3f9x90s= +github.com/minio/minlz v1.2.3/go.mod h1:xHhZ+MJmC2U4ssK/rSENsoyCfv0VFQo1mT6AdCA2RJ8= github.com/rodaine/protogofakeit v0.1.1 h1:ZKouljuRM3A+TArppfBqnH8tGZHOwM/pjvtXe9DaXH8= github.com/rodaine/protogofakeit v0.1.1/go.mod h1:pXn/AstBYMaSfc1/RqH3N82pBuxtWgejz1AlYpY1mI0= github.com/stretchr/testify v1.12.1 h1:EuwCh5fleGS7H32xRwO3wRGT7DxrDhLAT6FF8MpWDWE= @@ -44,10 +44,10 @@ golang.org/x/sys v0.49.0 h1:XbzkgYJHdqh/8m2Uu0W/dQv8nktxx4BFHp1M0gROTXA= golang.org/x/sys v0.49.0/go.mod h1:hNLxWAXmnKAxqDtdwIYC4bM9oQPEecfsnNMuSxOs3og= golang.org/x/text v0.43.0 h1:1QivrlhwAsnMOcqgOdl9my7s9OyZl8O5/UGUTJVXoWc= golang.org/x/text v0.43.0/go.mod h1:hbSIYA/amXcRXTFSZqh8tWHEoqRvvbKPJ2uz/KU+a+s= -google.golang.org/genproto/googleapis/api v0.0.0-20261012220534-4341edf3f941 h1:DS/w3N8rsfrwxwgGSj6WhMsPo7aNQGmDx74J81zd0NQ= -google.golang.org/genproto/googleapis/api v0.0.0-20261012220534-4341edf3f941/go.mod h1:AuGAdi9KnXss7xbLxIKhCvk+Ro/SxpET/iS45DNYN+M= -google.golang.org/genproto/googleapis/rpc v0.0.0-20261012220534-4341edf3f941 h1:QG6hS4zFplRZvOQedzei4t2pT/zkQc3VR1u+S9/rcAw= -google.golang.org/genproto/googleapis/rpc v0.0.0-20261012220534-4341edf3f941/go.mod h1:OaIUM3+LpYcK2GXM4FTmhWoIq371Owdr+Cc7/BsYHHc= +google.golang.org/genproto/googleapis/api v0.0.0-20261019180522-ce908d29299b h1:nB3spRIaSPtxJpxb0k41yljROvm2Jrwfs2pSNdKS5y8= +google.golang.org/genproto/googleapis/api v0.0.0-20261019180522-ce908d29299b/go.mod h1:9N4vtjEwvgQKEdlFVQO0M44ErhecQ9DCSQfGoZ51M6w= +google.golang.org/genproto/googleapis/rpc v0.0.0-20261019180522-ce908d29299b h1:6WNWHZk91dp4gZ25642OALkuG1UVNZbwENJD19DnB8k= +google.golang.org/genproto/googleapis/rpc v0.0.0-20261019180522-ce908d29299b/go.mod h1:OaIUM3+LpYcK2GXM4FTmhWoIq371Owdr+Cc7/BsYHHc= google.golang.org/grpc v1.84.0 h1:soMyaPJ8pAak5PIQ0DGBUir0XRo2fRoMqhNWMLlLxO0= google.golang.org/grpc v1.84.0/go.mod h1:ljCht0DrxQrXBDRTZp52Qxh3Ffk8CdYm2sj4O2QN2C0= google.golang.org/protobuf v1.36.12 h1:pJOKDDOyeXErUroCihFAd5LQuwXBSpVnKGrj5o/fwxc= diff --git a/go/metalstack/admin/v2/vpn.pb.go b/go/metalstack/admin/v2/vpn.pb.go index 2554f608..ebba4a5e 100644 --- a/go/metalstack/admin/v2/vpn.pb.go +++ b/go/metalstack/admin/v2/vpn.pb.go @@ -36,7 +36,9 @@ type VPNServiceAuthKeyRequest struct { Expires *durationpb.Duration `protobuf:"bytes,3,opt,name=expires,proto3" json:"expires,omitempty"` // Reason must be provided why access to the VPN is requested. // Reason is only forwarded to an audit sink. - Reason string `protobuf:"bytes,4,opt,name=reason,proto3" json:"reason,omitempty"` + Reason string `protobuf:"bytes,4,opt,name=reason,proto3" json:"reason,omitempty"` + // Reusable, if set to true, the authkey can be used multiple times within the expiration window. + Reusable bool `protobuf:"varint,5,opt,name=reusable,proto3" json:"reusable,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -99,6 +101,13 @@ func (x *VPNServiceAuthKeyRequest) GetReason() string { return "" } +func (x *VPNServiceAuthKeyRequest) GetReusable() bool { + if x != nil { + return x.Reusable + } + return false +} + // VPNServiceAuthKeyResponse is the response payload for generating a VPN authentication key. type VPNServiceAuthKeyResponse struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -112,7 +121,9 @@ type VPNServiceAuthKeyResponse struct { // ExpiresAt this key cannot be used after this timestamp. ExpiresAt *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=expires_at,json=expiresAt,proto3" json:"expires_at,omitempty"` // CreatedAt this key was created at this timestamp. - CreatedAt *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + // Reusable, if set to true, the authkey can be used multiple times within the expiration window. + Reusable bool `protobuf:"varint,6,opt,name=reusable,proto3" json:"reusable,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -182,6 +193,13 @@ func (x *VPNServiceAuthKeyResponse) GetCreatedAt() *timestamppb.Timestamp { return nil } +func (x *VPNServiceAuthKeyResponse) GetReusable() bool { + if x != nil { + return x.Reusable + } + return false +} + // VPNServiceListNodesRequest is the request payload for listing VPN nodes. type VPNServiceListNodesRequest struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -278,14 +296,15 @@ var File_metalstack_admin_v2_vpn_proto protoreflect.FileDescriptor const file_metalstack_admin_v2_vpn_proto_rawDesc = "" + "\n" + - "\x1dmetalstack/admin/v2/vpn.proto\x12\x13metalstack.admin.v2\x1a\x1bbuf/validate/validate.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1emetalstack/api/v2/common.proto\x1a\x1bmetalstack/api/v2/vpn.proto\"\xb5\x01\n" + + "\x1dmetalstack/admin/v2/vpn.proto\x12\x13metalstack.admin.v2\x1a\x1bbuf/validate/validate.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1emetalstack/api/v2/common.proto\x1a\x1bmetalstack/api/v2/vpn.proto\"\xd1\x01\n" + "\x18VPNServiceAuthKeyRequest\x12\"\n" + "\aproject\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\x12\x1c\n" + "\tephemeral\x18\x02 \x01(\bR\tephemeral\x123\n" + "\aexpires\x18\x03 \x01(\v2\x19.google.protobuf.DurationR\aexpires\x12\"\n" + "\x06reason\x18\x04 \x01(\tB\n" + "\xbaH\ar\x05\x10\n" + - "\x18\x80\x04R\x06reason\"\xe4\x01\n" + + "\x18\x80\x04R\x06reason\x12\x1a\n" + + "\breusable\x18\x05 \x01(\bR\breusable\"\x80\x02\n" + "\x19VPNServiceAuthKeyResponse\x12\x18\n" + "\aaddress\x18\x01 \x01(\tR\aaddress\x12\x19\n" + "\bauth_key\x18\x02 \x01(\tR\aauthKey\x12\x1c\n" + @@ -293,7 +312,8 @@ const file_metalstack_admin_v2_vpn_proto_rawDesc = "" + "\n" + "expires_at\x18\x04 \x01(\v2\x1a.google.protobuf.TimestampR\texpiresAt\x129\n" + "\n" + - "created_at\x18\x05 \x01(\v2\x1a.google.protobuf.TimestampR\tcreatedAt\"G\n" + + "created_at\x18\x05 \x01(\v2\x1a.google.protobuf.TimestampR\tcreatedAt\x12\x1a\n" + + "\breusable\x18\x06 \x01(\bR\breusable\"G\n" + "\x1aVPNServiceListNodesRequest\x12\x1d\n" + "\aproject\x18\x01 \x01(\tH\x00R\aproject\x88\x01\x01B\n" + "\n" + diff --git a/js/metalstack/admin/v2/vpn_pb.d.ts b/js/metalstack/admin/v2/vpn_pb.d.ts index 968d5357..b1c316f9 100644 --- a/js/metalstack/admin/v2/vpn_pb.d.ts +++ b/js/metalstack/admin/v2/vpn_pb.d.ts @@ -37,6 +37,12 @@ export type VPNServiceAuthKeyRequest = Message<"metalstack.admin.v2.VPNServiceAu * @generated from field: string reason = 4; */ reason: string; + /** + * Reusable, if set to true, the authkey can be used multiple times within the expiration window. + * + * @generated from field: bool reusable = 5; + */ + reusable: boolean; }; /** * Describes the message metalstack.admin.v2.VPNServiceAuthKeyRequest. @@ -80,6 +86,12 @@ export type VPNServiceAuthKeyResponse = Message<"metalstack.admin.v2.VPNServiceA * @generated from field: google.protobuf.Timestamp created_at = 5; */ createdAt?: Timestamp | undefined; + /** + * Reusable, if set to true, the authkey can be used multiple times within the expiration window. + * + * @generated from field: bool reusable = 6; + */ + reusable: boolean; }; /** * Describes the message metalstack.admin.v2.VPNServiceAuthKeyResponse. diff --git a/js/metalstack/admin/v2/vpn_pb.js b/js/metalstack/admin/v2/vpn_pb.js index 871db54c..baa5f8f5 100644 --- a/js/metalstack/admin/v2/vpn_pb.js +++ b/js/metalstack/admin/v2/vpn_pb.js @@ -9,7 +9,7 @@ import { file_metalstack_api_v2_vpn } from "../../api/v2/vpn_pb"; /** * Describes the file metalstack/admin/v2/vpn.proto. */ -export const file_metalstack_admin_v2_vpn = /*@__PURE__*/ fileDesc("Ch1tZXRhbHN0YWNrL2FkbWluL3YyL3Zwbi5wcm90bxITbWV0YWxzdGFjay5hZG1pbi52MiKQAQoYVlBOU2VydmljZUF1dGhLZXlSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBEhEKCWVwaGVtZXJhbBgCIAEoCBIqCgdleHBpcmVzGAMgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uEhoKBnJlYXNvbhgEIAEoCUIKukgHcgUQChiABCKxAQoZVlBOU2VydmljZUF1dGhLZXlSZXNwb25zZRIPCgdhZGRyZXNzGAEgASgJEhAKCGF1dGhfa2V5GAIgASgJEhEKCWVwaGVtZXJhbBgDIAEoCBIuCgpleHBpcmVzX2F0GAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgpjcmVhdGVkX2F0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCI+ChpWUE5TZXJ2aWNlTGlzdE5vZGVzUmVxdWVzdBIUCgdwcm9qZWN0GAEgASgJSACIAQFCCgoIX3Byb2plY3QiSAobVlBOU2VydmljZUxpc3ROb2Rlc1Jlc3BvbnNlEikKBW5vZGVzGAEgAygLMhoubWV0YWxzdGFjay5hcGkudjIuVlBOTm9kZTL9AQoKVlBOU2VydmljZRJzCgdBdXRoS2V5Ei0ubWV0YWxzdGFjay5hZG1pbi52Mi5WUE5TZXJ2aWNlQXV0aEtleVJlcXVlc3QaLi5tZXRhbHN0YWNrLmFkbWluLnYyLlZQTlNlcnZpY2VBdXRoS2V5UmVzcG9uc2UiCdLzGAEB4PMYARJ6CglMaXN0Tm9kZXMSLy5tZXRhbHN0YWNrLmFkbWluLnYyLlZQTlNlcnZpY2VMaXN0Tm9kZXNSZXF1ZXN0GjAubWV0YWxzdGFjay5hZG1pbi52Mi5WUE5TZXJ2aWNlTGlzdE5vZGVzUmVzcG9uc2UiCtLzGAIBAuDzGAFCzAEKF2NvbS5tZXRhbHN0YWNrLmFkbWluLnYyQghWcG5Qcm90b1ABWjlnaXRodWIuY29tL21ldGFsLXN0YWNrL2FwaS9nby9tZXRhbHN0YWNrL2FkbWluL3YyO2FkbWludjKiAgNNQViqAhNNZXRhbHN0YWNrLkFkbWluLlYyygITTWV0YWxzdGFja1xBZG1pblxWMuICH01ldGFsc3RhY2tcQWRtaW5cVjJcR1BCTWV0YWRhdGHqAhVNZXRhbHN0YWNrOjpBZG1pbjo6VjJiBnByb3RvMw", [file_buf_validate_validate, file_google_protobuf_duration, file_google_protobuf_timestamp, file_metalstack_api_v2_common, file_metalstack_api_v2_vpn]); +export const file_metalstack_admin_v2_vpn = /*@__PURE__*/ fileDesc("Ch1tZXRhbHN0YWNrL2FkbWluL3YyL3Zwbi5wcm90bxITbWV0YWxzdGFjay5hZG1pbi52MiKiAQoYVlBOU2VydmljZUF1dGhLZXlSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBEhEKCWVwaGVtZXJhbBgCIAEoCBIqCgdleHBpcmVzGAMgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uEhoKBnJlYXNvbhgEIAEoCUIKukgHcgUQChiABBIQCghyZXVzYWJsZRgFIAEoCCLDAQoZVlBOU2VydmljZUF1dGhLZXlSZXNwb25zZRIPCgdhZGRyZXNzGAEgASgJEhAKCGF1dGhfa2V5GAIgASgJEhEKCWVwaGVtZXJhbBgDIAEoCBIuCgpleHBpcmVzX2F0GAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgpjcmVhdGVkX2F0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIQCghyZXVzYWJsZRgGIAEoCCI+ChpWUE5TZXJ2aWNlTGlzdE5vZGVzUmVxdWVzdBIUCgdwcm9qZWN0GAEgASgJSACIAQFCCgoIX3Byb2plY3QiSAobVlBOU2VydmljZUxpc3ROb2Rlc1Jlc3BvbnNlEikKBW5vZGVzGAEgAygLMhoubWV0YWxzdGFjay5hcGkudjIuVlBOTm9kZTL9AQoKVlBOU2VydmljZRJzCgdBdXRoS2V5Ei0ubWV0YWxzdGFjay5hZG1pbi52Mi5WUE5TZXJ2aWNlQXV0aEtleVJlcXVlc3QaLi5tZXRhbHN0YWNrLmFkbWluLnYyLlZQTlNlcnZpY2VBdXRoS2V5UmVzcG9uc2UiCdLzGAEB4PMYARJ6CglMaXN0Tm9kZXMSLy5tZXRhbHN0YWNrLmFkbWluLnYyLlZQTlNlcnZpY2VMaXN0Tm9kZXNSZXF1ZXN0GjAubWV0YWxzdGFjay5hZG1pbi52Mi5WUE5TZXJ2aWNlTGlzdE5vZGVzUmVzcG9uc2UiCtLzGAIBAuDzGAFCzAEKF2NvbS5tZXRhbHN0YWNrLmFkbWluLnYyQghWcG5Qcm90b1ABWjlnaXRodWIuY29tL21ldGFsLXN0YWNrL2FwaS9nby9tZXRhbHN0YWNrL2FkbWluL3YyO2FkbWludjKiAgNNQViqAhNNZXRhbHN0YWNrLkFkbWluLlYyygITTWV0YWxzdGFja1xBZG1pblxWMuICH01ldGFsc3RhY2tcQWRtaW5cVjJcR1BCTWV0YWRhdGHqAhVNZXRhbHN0YWNrOjpBZG1pbjo6VjJiBnByb3RvMw", [file_buf_validate_validate, file_google_protobuf_duration, file_google_protobuf_timestamp, file_metalstack_api_v2_common, file_metalstack_api_v2_vpn]); /** * Describes the message metalstack.admin.v2.VPNServiceAuthKeyRequest. * Use `create(VPNServiceAuthKeyRequestSchema)` to create a new message. diff --git a/js/metalstack/admin/v2/vpn_pb.ts b/js/metalstack/admin/v2/vpn_pb.ts index 56af263e..a3c3b69d 100644 --- a/js/metalstack/admin/v2/vpn_pb.ts +++ b/js/metalstack/admin/v2/vpn_pb.ts @@ -16,7 +16,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file metalstack/admin/v2/vpn.proto. */ export const file_metalstack_admin_v2_vpn: GenFile = /*@__PURE__*/ - fileDesc("Ch1tZXRhbHN0YWNrL2FkbWluL3YyL3Zwbi5wcm90bxITbWV0YWxzdGFjay5hZG1pbi52MiKQAQoYVlBOU2VydmljZUF1dGhLZXlSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBEhEKCWVwaGVtZXJhbBgCIAEoCBIqCgdleHBpcmVzGAMgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uEhoKBnJlYXNvbhgEIAEoCUIKukgHcgUQChiABCKxAQoZVlBOU2VydmljZUF1dGhLZXlSZXNwb25zZRIPCgdhZGRyZXNzGAEgASgJEhAKCGF1dGhfa2V5GAIgASgJEhEKCWVwaGVtZXJhbBgDIAEoCBIuCgpleHBpcmVzX2F0GAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgpjcmVhdGVkX2F0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCI+ChpWUE5TZXJ2aWNlTGlzdE5vZGVzUmVxdWVzdBIUCgdwcm9qZWN0GAEgASgJSACIAQFCCgoIX3Byb2plY3QiSAobVlBOU2VydmljZUxpc3ROb2Rlc1Jlc3BvbnNlEikKBW5vZGVzGAEgAygLMhoubWV0YWxzdGFjay5hcGkudjIuVlBOTm9kZTL9AQoKVlBOU2VydmljZRJzCgdBdXRoS2V5Ei0ubWV0YWxzdGFjay5hZG1pbi52Mi5WUE5TZXJ2aWNlQXV0aEtleVJlcXVlc3QaLi5tZXRhbHN0YWNrLmFkbWluLnYyLlZQTlNlcnZpY2VBdXRoS2V5UmVzcG9uc2UiCdLzGAEB4PMYARJ6CglMaXN0Tm9kZXMSLy5tZXRhbHN0YWNrLmFkbWluLnYyLlZQTlNlcnZpY2VMaXN0Tm9kZXNSZXF1ZXN0GjAubWV0YWxzdGFjay5hZG1pbi52Mi5WUE5TZXJ2aWNlTGlzdE5vZGVzUmVzcG9uc2UiCtLzGAIBAuDzGAFCzAEKF2NvbS5tZXRhbHN0YWNrLmFkbWluLnYyQghWcG5Qcm90b1ABWjlnaXRodWIuY29tL21ldGFsLXN0YWNrL2FwaS9nby9tZXRhbHN0YWNrL2FkbWluL3YyO2FkbWludjKiAgNNQViqAhNNZXRhbHN0YWNrLkFkbWluLlYyygITTWV0YWxzdGFja1xBZG1pblxWMuICH01ldGFsc3RhY2tcQWRtaW5cVjJcR1BCTWV0YWRhdGHqAhVNZXRhbHN0YWNrOjpBZG1pbjo6VjJiBnByb3RvMw", [file_buf_validate_validate, file_google_protobuf_duration, file_google_protobuf_timestamp, file_metalstack_api_v2_common, file_metalstack_api_v2_vpn]); + fileDesc("Ch1tZXRhbHN0YWNrL2FkbWluL3YyL3Zwbi5wcm90bxITbWV0YWxzdGFjay5hZG1pbi52MiKiAQoYVlBOU2VydmljZUF1dGhLZXlSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBEhEKCWVwaGVtZXJhbBgCIAEoCBIqCgdleHBpcmVzGAMgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uEhoKBnJlYXNvbhgEIAEoCUIKukgHcgUQChiABBIQCghyZXVzYWJsZRgFIAEoCCLDAQoZVlBOU2VydmljZUF1dGhLZXlSZXNwb25zZRIPCgdhZGRyZXNzGAEgASgJEhAKCGF1dGhfa2V5GAIgASgJEhEKCWVwaGVtZXJhbBgDIAEoCBIuCgpleHBpcmVzX2F0GAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgpjcmVhdGVkX2F0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIQCghyZXVzYWJsZRgGIAEoCCI+ChpWUE5TZXJ2aWNlTGlzdE5vZGVzUmVxdWVzdBIUCgdwcm9qZWN0GAEgASgJSACIAQFCCgoIX3Byb2plY3QiSAobVlBOU2VydmljZUxpc3ROb2Rlc1Jlc3BvbnNlEikKBW5vZGVzGAEgAygLMhoubWV0YWxzdGFjay5hcGkudjIuVlBOTm9kZTL9AQoKVlBOU2VydmljZRJzCgdBdXRoS2V5Ei0ubWV0YWxzdGFjay5hZG1pbi52Mi5WUE5TZXJ2aWNlQXV0aEtleVJlcXVlc3QaLi5tZXRhbHN0YWNrLmFkbWluLnYyLlZQTlNlcnZpY2VBdXRoS2V5UmVzcG9uc2UiCdLzGAEB4PMYARJ6CglMaXN0Tm9kZXMSLy5tZXRhbHN0YWNrLmFkbWluLnYyLlZQTlNlcnZpY2VMaXN0Tm9kZXNSZXF1ZXN0GjAubWV0YWxzdGFjay5hZG1pbi52Mi5WUE5TZXJ2aWNlTGlzdE5vZGVzUmVzcG9uc2UiCtLzGAIBAuDzGAFCzAEKF2NvbS5tZXRhbHN0YWNrLmFkbWluLnYyQghWcG5Qcm90b1ABWjlnaXRodWIuY29tL21ldGFsLXN0YWNrL2FwaS9nby9tZXRhbHN0YWNrL2FkbWluL3YyO2FkbWludjKiAgNNQViqAhNNZXRhbHN0YWNrLkFkbWluLlYyygITTWV0YWxzdGFja1xBZG1pblxWMuICH01ldGFsc3RhY2tcQWRtaW5cVjJcR1BCTWV0YWRhdGHqAhVNZXRhbHN0YWNrOjpBZG1pbjo6VjJiBnByb3RvMw", [file_buf_validate_validate, file_google_protobuf_duration, file_google_protobuf_timestamp, file_metalstack_api_v2_common, file_metalstack_api_v2_vpn]); /** * VPNServiceAuthKeyRequest is the request payload for generating a VPN authentication key. @@ -52,6 +52,13 @@ export type VPNServiceAuthKeyRequest = Message<"metalstack.admin.v2.VPNServiceAu * @generated from field: string reason = 4; */ reason: string; + + /** + * Reusable, if set to true, the authkey can be used multiple times within the expiration window. + * + * @generated from field: bool reusable = 5; + */ + reusable: boolean; }; /** @@ -102,6 +109,13 @@ export type VPNServiceAuthKeyResponse = Message<"metalstack.admin.v2.VPNServiceA * @generated from field: google.protobuf.Timestamp created_at = 5; */ createdAt?: Timestamp | undefined; + + /** + * Reusable, if set to true, the authkey can be used multiple times within the expiration window. + * + * @generated from field: bool reusable = 6; + */ + reusable: boolean; }; /** diff --git a/proto/Makefile b/proto/Makefile index 57978844..e04529e7 100644 --- a/proto/Makefile +++ b/proto/Makefile @@ -1,5 +1,5 @@ MAKEFLAGS += --no-print-directory -BUF_VERSION := 1.73.0 +BUF_VERSION := 1.74.0 _buf: docker run --rm \ diff --git a/proto/metalstack/admin/v2/vpn.proto b/proto/metalstack/admin/v2/vpn.proto index 632570ac..8c3658d2 100644 --- a/proto/metalstack/admin/v2/vpn.proto +++ b/proto/metalstack/admin/v2/vpn.proto @@ -39,6 +39,8 @@ message VPNServiceAuthKeyRequest { (buf.validate.field).string.min_len = 10, (buf.validate.field).string.max_len = 512 ]; + // Reusable, if set to true, the authkey can be used multiple times within the expiration window. + bool reusable = 5; } // VPNServiceAuthKeyResponse is the response payload for generating a VPN authentication key. @@ -54,6 +56,8 @@ message VPNServiceAuthKeyResponse { google.protobuf.Timestamp expires_at = 4; // CreatedAt this key was created at this timestamp. google.protobuf.Timestamp created_at = 5; + // Reusable, if set to true, the authkey can be used multiple times within the expiration window. + bool reusable = 6; } // VPNServiceListNodesRequest is the request payload for listing VPN nodes. diff --git a/python/metalstack/admin/v2/vpn_pb2.py b/python/metalstack/admin/v2/vpn_pb2.py index 5d011e8b..d739be6f 100644 --- a/python/metalstack/admin/v2/vpn_pb2.py +++ b/python/metalstack/admin/v2/vpn_pb2.py @@ -29,7 +29,7 @@ from metalstack.api.v2 import vpn_pb2 as metalstack_dot_api_dot_v2_dot_vpn__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1dmetalstack/admin/v2/vpn.proto\x12\x13metalstack.admin.v2\x1a\x1b\x62uf/validate/validate.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1emetalstack/api/v2/common.proto\x1a\x1bmetalstack/api/v2/vpn.proto\"\xb5\x01\n\x18VPNServiceAuthKeyRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12\x1c\n\tephemeral\x18\x02 \x01(\x08R\tephemeral\x12\x33\n\x07\x65xpires\x18\x03 \x01(\x0b\x32\x19.google.protobuf.DurationR\x07\x65xpires\x12\"\n\x06reason\x18\x04 \x01(\tB\n\xbaH\x07r\x05\x10\n\x18\x80\x04R\x06reason\"\xe4\x01\n\x19VPNServiceAuthKeyResponse\x12\x18\n\x07\x61\x64\x64ress\x18\x01 \x01(\tR\x07\x61\x64\x64ress\x12\x19\n\x08\x61uth_key\x18\x02 \x01(\tR\x07\x61uthKey\x12\x1c\n\tephemeral\x18\x03 \x01(\x08R\tephemeral\x12\x39\n\nexpires_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\texpiresAt\x12\x39\n\ncreated_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\"G\n\x1aVPNServiceListNodesRequest\x12\x1d\n\x07project\x18\x01 \x01(\tH\x00R\x07project\x88\x01\x01\x42\n\n\x08_project\"O\n\x1bVPNServiceListNodesResponse\x12\x30\n\x05nodes\x18\x01 \x03(\x0b\x32\x1a.metalstack.api.v2.VPNNodeR\x05nodes2\xfd\x01\n\nVPNService\x12s\n\x07\x41uthKey\x12-.metalstack.admin.v2.VPNServiceAuthKeyRequest\x1a..metalstack.admin.v2.VPNServiceAuthKeyResponse\"\t\xd2\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12z\n\tListNodes\x12/.metalstack.admin.v2.VPNServiceListNodesRequest\x1a\x30.metalstack.admin.v2.VPNServiceListNodesResponse\"\n\xd2\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x42\xcc\x01\n\x17\x63om.metalstack.admin.v2B\x08VpnProtoP\x01Z9github.com/metal-stack/api/go/metalstack/admin/v2;adminv2\xa2\x02\x03MAX\xaa\x02\x13Metalstack.Admin.V2\xca\x02\x13Metalstack\\Admin\\V2\xe2\x02\x1fMetalstack\\Admin\\V2\\GPBMetadata\xea\x02\x15Metalstack::Admin::V2b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1dmetalstack/admin/v2/vpn.proto\x12\x13metalstack.admin.v2\x1a\x1b\x62uf/validate/validate.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1emetalstack/api/v2/common.proto\x1a\x1bmetalstack/api/v2/vpn.proto\"\xd1\x01\n\x18VPNServiceAuthKeyRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12\x1c\n\tephemeral\x18\x02 \x01(\x08R\tephemeral\x12\x33\n\x07\x65xpires\x18\x03 \x01(\x0b\x32\x19.google.protobuf.DurationR\x07\x65xpires\x12\"\n\x06reason\x18\x04 \x01(\tB\n\xbaH\x07r\x05\x10\n\x18\x80\x04R\x06reason\x12\x1a\n\x08reusable\x18\x05 \x01(\x08R\x08reusable\"\x80\x02\n\x19VPNServiceAuthKeyResponse\x12\x18\n\x07\x61\x64\x64ress\x18\x01 \x01(\tR\x07\x61\x64\x64ress\x12\x19\n\x08\x61uth_key\x18\x02 \x01(\tR\x07\x61uthKey\x12\x1c\n\tephemeral\x18\x03 \x01(\x08R\tephemeral\x12\x39\n\nexpires_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\texpiresAt\x12\x39\n\ncreated_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12\x1a\n\x08reusable\x18\x06 \x01(\x08R\x08reusable\"G\n\x1aVPNServiceListNodesRequest\x12\x1d\n\x07project\x18\x01 \x01(\tH\x00R\x07project\x88\x01\x01\x42\n\n\x08_project\"O\n\x1bVPNServiceListNodesResponse\x12\x30\n\x05nodes\x18\x01 \x03(\x0b\x32\x1a.metalstack.api.v2.VPNNodeR\x05nodes2\xfd\x01\n\nVPNService\x12s\n\x07\x41uthKey\x12-.metalstack.admin.v2.VPNServiceAuthKeyRequest\x1a..metalstack.admin.v2.VPNServiceAuthKeyResponse\"\t\xd2\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12z\n\tListNodes\x12/.metalstack.admin.v2.VPNServiceListNodesRequest\x1a\x30.metalstack.admin.v2.VPNServiceListNodesResponse\"\n\xd2\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x42\xcc\x01\n\x17\x63om.metalstack.admin.v2B\x08VpnProtoP\x01Z9github.com/metal-stack/api/go/metalstack/admin/v2;adminv2\xa2\x02\x03MAX\xaa\x02\x13Metalstack.Admin.V2\xca\x02\x13Metalstack\\Admin\\V2\xe2\x02\x1fMetalstack\\Admin\\V2\\GPBMetadata\xea\x02\x15Metalstack::Admin::V2b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -46,13 +46,13 @@ _globals['_VPNSERVICE'].methods_by_name['ListNodes']._loaded_options = None _globals['_VPNSERVICE'].methods_by_name['ListNodes']._serialized_options = b'\322\363\030\002\001\002\340\363\030\001' _globals['_VPNSERVICEAUTHKEYREQUEST']._serialized_start=210 - _globals['_VPNSERVICEAUTHKEYREQUEST']._serialized_end=391 - _globals['_VPNSERVICEAUTHKEYRESPONSE']._serialized_start=394 - _globals['_VPNSERVICEAUTHKEYRESPONSE']._serialized_end=622 - _globals['_VPNSERVICELISTNODESREQUEST']._serialized_start=624 - _globals['_VPNSERVICELISTNODESREQUEST']._serialized_end=695 - _globals['_VPNSERVICELISTNODESRESPONSE']._serialized_start=697 - _globals['_VPNSERVICELISTNODESRESPONSE']._serialized_end=776 - _globals['_VPNSERVICE']._serialized_start=779 - _globals['_VPNSERVICE']._serialized_end=1032 + _globals['_VPNSERVICEAUTHKEYREQUEST']._serialized_end=419 + _globals['_VPNSERVICEAUTHKEYRESPONSE']._serialized_start=422 + _globals['_VPNSERVICEAUTHKEYRESPONSE']._serialized_end=678 + _globals['_VPNSERVICELISTNODESREQUEST']._serialized_start=680 + _globals['_VPNSERVICELISTNODESREQUEST']._serialized_end=751 + _globals['_VPNSERVICELISTNODESRESPONSE']._serialized_start=753 + _globals['_VPNSERVICELISTNODESRESPONSE']._serialized_end=832 + _globals['_VPNSERVICE']._serialized_start=835 + _globals['_VPNSERVICE']._serialized_end=1088 # @@protoc_insertion_point(module_scope) diff --git a/python/metalstack/admin/v2/vpn_pb2.pyi b/python/metalstack/admin/v2/vpn_pb2.pyi index f7a4718f..32abe436 100644 --- a/python/metalstack/admin/v2/vpn_pb2.pyi +++ b/python/metalstack/admin/v2/vpn_pb2.pyi @@ -14,30 +14,34 @@ from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union DESCRIPTOR: _descriptor.FileDescriptor class VPNServiceAuthKeyRequest(_message.Message): - __slots__ = ("project", "ephemeral", "expires", "reason") + __slots__ = ("project", "ephemeral", "expires", "reason", "reusable") PROJECT_FIELD_NUMBER: _ClassVar[int] EPHEMERAL_FIELD_NUMBER: _ClassVar[int] EXPIRES_FIELD_NUMBER: _ClassVar[int] REASON_FIELD_NUMBER: _ClassVar[int] + REUSABLE_FIELD_NUMBER: _ClassVar[int] project: str ephemeral: bool expires: _duration_pb2.Duration reason: str - def __init__(self, project: _Optional[str] = ..., ephemeral: _Optional[bool] = ..., expires: _Optional[_Union[datetime.timedelta, _duration_pb2.Duration, _Mapping]] = ..., reason: _Optional[str] = ...) -> None: ... + reusable: bool + def __init__(self, project: _Optional[str] = ..., ephemeral: _Optional[bool] = ..., expires: _Optional[_Union[datetime.timedelta, _duration_pb2.Duration, _Mapping]] = ..., reason: _Optional[str] = ..., reusable: _Optional[bool] = ...) -> None: ... class VPNServiceAuthKeyResponse(_message.Message): - __slots__ = ("address", "auth_key", "ephemeral", "expires_at", "created_at") + __slots__ = ("address", "auth_key", "ephemeral", "expires_at", "created_at", "reusable") ADDRESS_FIELD_NUMBER: _ClassVar[int] AUTH_KEY_FIELD_NUMBER: _ClassVar[int] EPHEMERAL_FIELD_NUMBER: _ClassVar[int] EXPIRES_AT_FIELD_NUMBER: _ClassVar[int] CREATED_AT_FIELD_NUMBER: _ClassVar[int] + REUSABLE_FIELD_NUMBER: _ClassVar[int] address: str auth_key: str ephemeral: bool expires_at: _timestamp_pb2.Timestamp created_at: _timestamp_pb2.Timestamp - def __init__(self, address: _Optional[str] = ..., auth_key: _Optional[str] = ..., ephemeral: _Optional[bool] = ..., expires_at: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ..., created_at: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ...) -> None: ... + reusable: bool + def __init__(self, address: _Optional[str] = ..., auth_key: _Optional[str] = ..., ephemeral: _Optional[bool] = ..., expires_at: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ..., created_at: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ..., reusable: _Optional[bool] = ...) -> None: ... class VPNServiceListNodesRequest(_message.Message): __slots__ = ("project",)