mirror of
https://github.com/gitpod-io/gitpod.git
synced 2025-12-08 17:36:30 +00:00
* [common-go] Composable log fields * add test for compose * use in public api * fix * fix
124 lines
3.2 KiB
Go
124 lines
3.2 KiB
Go
// Copyright (c) 2022 Gitpod GmbH. All rights reserved.
|
|
// Licensed under the GNU Affero General Public License (AGPL).
|
|
// See License.AGPL.txt in the project root for license information.
|
|
|
|
package apiv1
|
|
|
|
import (
|
|
"context"
|
|
|
|
connect "github.com/bufbuild/connect-go"
|
|
"github.com/gitpod-io/gitpod/common-go/log"
|
|
v1 "github.com/gitpod-io/gitpod/components/public-api/go/experimental/v1"
|
|
"github.com/gitpod-io/gitpod/components/public-api/go/experimental/v1/v1connect"
|
|
protocol "github.com/gitpod-io/gitpod/gitpod-protocol"
|
|
"github.com/gitpod-io/gitpod/public-api-server/pkg/proxy"
|
|
)
|
|
|
|
func NewUserService(pool proxy.ServerConnectionPool) *UserService {
|
|
return &UserService{
|
|
connectionPool: pool,
|
|
}
|
|
}
|
|
|
|
var _ v1connect.UserServiceHandler = (*UserService)(nil)
|
|
|
|
type UserService struct {
|
|
connectionPool proxy.ServerConnectionPool
|
|
|
|
v1connect.UnimplementedUserServiceHandler
|
|
}
|
|
|
|
func (s *UserService) GetAuthenticatedUser(ctx context.Context, req *connect.Request[v1.GetAuthenticatedUserRequest]) (*connect.Response[v1.GetAuthenticatedUserResponse], error) {
|
|
conn, err := getConnection(ctx, s.connectionPool)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
user, err := conn.GetLoggedInUser(ctx)
|
|
if err != nil {
|
|
return nil, proxy.ConvertError(err)
|
|
}
|
|
log.AddFields(ctx, log.UserID(user.ID))
|
|
|
|
response := userToAPIResponse(user)
|
|
|
|
return connect.NewResponse(&v1.GetAuthenticatedUserResponse{
|
|
User: response,
|
|
}), nil
|
|
}
|
|
|
|
func (s *UserService) ListSSHKeys(ctx context.Context, req *connect.Request[v1.ListSSHKeysRequest]) (*connect.Response[v1.ListSSHKeysResponse], error) {
|
|
conn, err := getConnection(ctx, s.connectionPool)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
sshKeys, err := conn.GetSSHPublicKeys(ctx)
|
|
if err != nil {
|
|
return nil, proxy.ConvertError(err)
|
|
}
|
|
|
|
var response []*v1.SSHKey
|
|
for _, k := range sshKeys {
|
|
response = append(response, sshKeyToAPIResponse(k))
|
|
}
|
|
|
|
return connect.NewResponse(&v1.ListSSHKeysResponse{
|
|
Keys: response,
|
|
}), nil
|
|
}
|
|
|
|
func (s *UserService) GetGitToken(ctx context.Context, req *connect.Request[v1.GetGitTokenRequest]) (*connect.Response[v1.GetGitTokenResponse], error) {
|
|
conn, err := getConnection(ctx, s.connectionPool)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
token, err := conn.GetToken(ctx, &protocol.GetTokenSearchOptions{Host: req.Msg.Host})
|
|
if err != nil {
|
|
return nil, proxy.ConvertError(err)
|
|
}
|
|
|
|
response := gitTokenToAPIResponse(token)
|
|
|
|
return connect.NewResponse(&v1.GetGitTokenResponse{
|
|
Token: response,
|
|
}), nil
|
|
}
|
|
|
|
func userToAPIResponse(user *protocol.User) *v1.User {
|
|
name := user.Name
|
|
if name == "" {
|
|
name = user.FullName
|
|
}
|
|
|
|
return &v1.User{
|
|
Id: user.ID,
|
|
Name: name,
|
|
AvatarUrl: user.AvatarURL,
|
|
CreatedAt: parseGitpodTimeStampOrDefault(user.CreationDate),
|
|
}
|
|
}
|
|
|
|
func sshKeyToAPIResponse(key *protocol.UserSSHPublicKeyValue) *v1.SSHKey {
|
|
return &v1.SSHKey{
|
|
Id: key.ID,
|
|
Name: key.Name,
|
|
Key: key.Key,
|
|
CreatedAt: parseGitpodTimeStampOrDefault(key.CreationTime),
|
|
}
|
|
}
|
|
|
|
func gitTokenToAPIResponse(token *protocol.Token) *v1.GitToken {
|
|
return &v1.GitToken{
|
|
ExpiryDate: token.ExpiryDate,
|
|
IdToken: token.IDToken,
|
|
RefreshToken: token.RefreshToken,
|
|
Scopes: token.Scopes,
|
|
UpdateDate: token.UpdateDate,
|
|
Username: token.Username,
|
|
Value: token.Value,
|
|
}
|
|
}
|