Path: blob/main/components/public-api-server/pkg/apiv1/user.go
2499 views
// Copyright (c) 2022 Gitpod GmbH. All rights reserved.1// Licensed under the GNU Affero General Public License (AGPL).2// See License.AGPL.txt in the project root for license information.34package apiv156import (7"context"89connect "github.com/bufbuild/connect-go"10"github.com/gitpod-io/gitpod/common-go/log"11v1 "github.com/gitpod-io/gitpod/components/public-api/go/experimental/v1"12"github.com/gitpod-io/gitpod/components/public-api/go/experimental/v1/v1connect"13protocol "github.com/gitpod-io/gitpod/gitpod-protocol"14"github.com/gitpod-io/gitpod/public-api-server/pkg/proxy"15)1617func NewUserService(pool proxy.ServerConnectionPool) *UserService {18return &UserService{19connectionPool: pool,20}21}2223var _ v1connect.UserServiceHandler = (*UserService)(nil)2425type UserService struct {26connectionPool proxy.ServerConnectionPool2728v1connect.UnimplementedUserServiceHandler29}3031func (s *UserService) GetAuthenticatedUser(ctx context.Context, req *connect.Request[v1.GetAuthenticatedUserRequest]) (*connect.Response[v1.GetAuthenticatedUserResponse], error) {32conn, err := getConnection(ctx, s.connectionPool)33if err != nil {34return nil, err35}3637user, err := conn.GetLoggedInUser(ctx)38if err != nil {39return nil, proxy.ConvertError(err)40}41log.AddFields(ctx, log.UserID(user.ID))4243response := userToAPIResponse(user)4445return connect.NewResponse(&v1.GetAuthenticatedUserResponse{46User: response,47}), nil48}4950func (s *UserService) ListSSHKeys(ctx context.Context, req *connect.Request[v1.ListSSHKeysRequest]) (*connect.Response[v1.ListSSHKeysResponse], error) {51conn, err := getConnection(ctx, s.connectionPool)52if err != nil {53return nil, err54}5556sshKeys, err := conn.GetSSHPublicKeys(ctx)57if err != nil {58return nil, proxy.ConvertError(err)59}6061var response []*v1.SSHKey62for _, k := range sshKeys {63response = append(response, sshKeyToAPIResponse(k))64}6566return connect.NewResponse(&v1.ListSSHKeysResponse{67Keys: response,68}), nil69}7071func (s *UserService) GetGitToken(ctx context.Context, req *connect.Request[v1.GetGitTokenRequest]) (*connect.Response[v1.GetGitTokenResponse], error) {72conn, err := getConnection(ctx, s.connectionPool)73if err != nil {74return nil, err75}7677token, err := conn.GetToken(ctx, &protocol.GetTokenSearchOptions{Host: req.Msg.Host})78if err != nil {79return nil, proxy.ConvertError(err)80}8182response := gitTokenToAPIResponse(token)8384return connect.NewResponse(&v1.GetGitTokenResponse{85Token: response,86}), nil87}8889func userToAPIResponse(user *protocol.User) *v1.User {90name := user.Name91if name == "" {92name = user.FullName93}9495return &v1.User{96Id: user.ID,97Name: name,98AvatarUrl: user.AvatarURL,99CreatedAt: parseGitpodTimeStampOrDefault(user.CreationDate),100}101}102103func sshKeyToAPIResponse(key *protocol.UserSSHPublicKeyValue) *v1.SSHKey {104return &v1.SSHKey{105Id: key.ID,106Name: key.Name,107Key: key.Key,108CreatedAt: parseGitpodTimeStampOrDefault(key.CreationTime),109}110}111112func gitTokenToAPIResponse(token *protocol.Token) *v1.GitToken {113return &v1.GitToken{114ExpiryDate: token.ExpiryDate,115IdToken: token.IDToken,116RefreshToken: token.RefreshToken,117Scopes: token.Scopes,118UpdateDate: token.UpdateDate,119Username: token.Username,120Value: token.Value,121}122}123124125