github.com/gravitational/teleport/api@v0.0.0-20240507183017-3110591cbafc/client/userloginstate/userloginstate.go (about) 1 // Copyright 2023 Gravitational, Inc. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package userloginstate 16 17 import ( 18 "context" 19 20 "github.com/gravitational/trace" 21 22 userloginstatev1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/userloginstate/v1" 23 "github.com/gravitational/teleport/api/types/userloginstate" 24 conv "github.com/gravitational/teleport/api/types/userloginstate/convert/v1" 25 ) 26 27 // Client is a user login state client that conforms to the following lib/services interfaces: 28 // * services.UserLoginStates 29 type Client struct { 30 grpcClient userloginstatev1.UserLoginStateServiceClient 31 } 32 33 // NewClient creates a new user login state client. 34 func NewClient(grpcClient userloginstatev1.UserLoginStateServiceClient) *Client { 35 return &Client{ 36 grpcClient: grpcClient, 37 } 38 } 39 40 // GetUserLoginStates returns a list of all user login states. 41 func (c *Client) GetUserLoginStates(ctx context.Context) ([]*userloginstate.UserLoginState, error) { 42 resp, err := c.grpcClient.GetUserLoginStates(ctx, &userloginstatev1.GetUserLoginStatesRequest{}) 43 if err != nil { 44 return nil, trace.Wrap(err) 45 } 46 47 ulsList := make([]*userloginstate.UserLoginState, len(resp.UserLoginStates)) 48 for i, uls := range resp.UserLoginStates { 49 var err error 50 ulsList[i], err = conv.FromProto(uls) 51 if err != nil { 52 return nil, trace.Wrap(err) 53 } 54 } 55 56 return ulsList, nil 57 } 58 59 // GetUserLoginState returns the specified user login state resource. 60 func (c *Client) GetUserLoginState(ctx context.Context, name string) (*userloginstate.UserLoginState, error) { 61 resp, err := c.grpcClient.GetUserLoginState(ctx, &userloginstatev1.GetUserLoginStateRequest{ 62 Name: name, 63 }) 64 if err != nil { 65 return nil, trace.Wrap(err) 66 } 67 68 uls, err := conv.FromProto(resp) 69 return uls, trace.Wrap(err) 70 } 71 72 // UpsertUserLoginState creates or updates a user login state resource. 73 func (c *Client) UpsertUserLoginState(ctx context.Context, uls *userloginstate.UserLoginState) (*userloginstate.UserLoginState, error) { 74 resp, err := c.grpcClient.UpsertUserLoginState(ctx, &userloginstatev1.UpsertUserLoginStateRequest{ 75 UserLoginState: conv.ToProto(uls), 76 }) 77 if err != nil { 78 return nil, trace.Wrap(err) 79 } 80 responseUls, err := conv.FromProto(resp) 81 return responseUls, trace.Wrap(err) 82 } 83 84 // DeleteUserLoginState removes the specified user login state resource. 85 func (c *Client) DeleteUserLoginState(ctx context.Context, name string) error { 86 _, err := c.grpcClient.DeleteUserLoginState(ctx, &userloginstatev1.DeleteUserLoginStateRequest{ 87 Name: name, 88 }) 89 return trace.Wrap(err) 90 } 91 92 // DeleteAllUserLoginStates removes all user login states. 93 func (c *Client) DeleteAllUserLoginStates(ctx context.Context) error { 94 _, err := c.grpcClient.DeleteAllUserLoginStates(ctx, &userloginstatev1.DeleteAllUserLoginStatesRequest{}) 95 return trace.Wrap(err) 96 }