Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
124 changes: 74 additions & 50 deletions gen/proto/go/teleport/lib/teleterm/v1/access_request.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

32 changes: 31 additions & 1 deletion gen/proto/ts/teleport/lib/teleterm/v1/access_request_pb.ts

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions lib/teleterm/apiserver/handler/handler_access_requests.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import (
"google.golang.org/protobuf/types/known/timestamppb"

accesslistv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/accesslist/v1"
"github.com/gravitational/teleport/api/types"
accesslistv1conv "github.com/gravitational/teleport/api/types/accesslist/convert/v1"
api "github.com/gravitational/teleport/gen/proto/go/teleport/lib/teleterm/v1"
"github.com/gravitational/teleport/lib/teleterm/api/uri"
Expand Down Expand Up @@ -200,6 +201,11 @@ func newAPIAccessRequest(req clusters.AccessRequest) *api.AccessRequest {
}
}

dryRunEnrichment := req.GetDryRunEnrichment()
if dryRunEnrichment == nil {
dryRunEnrichment = &types.AccessRequestDryRunEnrichment{}
}

return &api.AccessRequest{
Id: req.GetName(),
State: req.GetState().String(),
Expand All @@ -219,6 +225,8 @@ func newAPIAccessRequest(req clusters.AccessRequest) *api.AccessRequest {
MaxDuration: timestamppb.New(req.GetMaxDuration()),
RequestTtl: timestamppb.New(req.Expiry()),
SessionTtl: timestamppb.New(req.GetSessionTLL()),
ReasonMode: string(dryRunEnrichment.ReasonMode),
ReasonPrompts: dryRunEnrichment.ReasonPrompts,
}
}

Expand Down
6 changes: 6 additions & 0 deletions proto/teleport/lib/teleterm/v1/access_request.proto
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,12 @@ message AccessRequest {
google.protobuf.Timestamp request_ttl = 17;
// session_ttl indicates how long a certificate for a session should be valid for.
google.protobuf.Timestamp session_ttl = 18;
// reason_mode specifies the reason mode for this Access Request. It can be either "optional" or
// "required". It's only added in response to a dry run request.
string reason_mode = 19;
// reason_prompts is a sorted and deduplicated list of reason prompts for this Access Request.
// It's only added in response to a dry run request.
repeated string reason_prompts = 20;
}

message AccessRequestReview {
Expand Down
2 changes: 2 additions & 0 deletions web/packages/teleterm/src/services/tshd/testHelpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -366,6 +366,8 @@ export const makeAccessRequest = (
maxDuration: { seconds: 1729026573n, nanos: 0 },
requestTtl: { seconds: 1729026573n, nanos: 0 },
sessionTtl: { seconds: 1729026573n, nanos: 0 },
reasonMode: 'optional',
reasonPrompts: [],
...props,
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ export function AccessRequestCheckout() {
onStartTimeChange,
fetchKubeNamespaces,
updateNamespacesForKubeCluster,
reasonMode,
reasonPrompts,
} = useAccessRequestCheckout();

Expand Down Expand Up @@ -269,7 +270,6 @@ export function AccessRequestCheckout() {
clearAttempt={clearCreateAttempt}
selectedReviewers={selectedReviewers}
setSelectedReviewers={setSelectedReviewers}
requireReason={false}
numRequestedResources={requestedCount}
isResourceRequest={!isRoleRequest}
fetchStatus={'loaded'}
Expand All @@ -284,6 +284,7 @@ export function AccessRequestCheckout() {
onStartTimeChange={onStartTimeChange}
fetchKubeNamespaces={fetchKubeNamespaces}
updateNamespacesForKubeCluster={updateNamespacesForKubeCluster}
requireReason={reasonMode === 'required'}
reasonPrompts={reasonPrompts}
/>
)}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,8 @@ const mockedAccessRequest: AccessRequest = {
maxDuration: { seconds: 1729026573n, nanos: 0 },
requestTtl: { seconds: 1729026573n, nanos: 0 },
sessionTtl: { seconds: 1729026573n, nanos: 0 },
reasonMode: 'optional',
reasonPrompts: [],
};

export function Browsing() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,8 @@ test('makeUiAccessRequest', async () => {
seconds: 1709853650n,
nanos: 520000000,
},
reasonMode: 'optional',
reasonPrompts: [],
};

const processedRequest: AccessRequest = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,8 @@ export function makeUiAccessRequest(request: TshdAccessRequest) {
suggestedReviewers: request.suggestedReviewers,
thresholdNames: request.thresholdNames,
resources: request.resources,
reasonMode: request.reasonMode || 'optional',
reasonPrompts: request.reasonPrompts,
});
}

Expand Down
Loading