package grpc import ( "context" "git.solsynth.dev/hypernet/passport/pkg/authkit/models" "git.solsynth.dev/hypernet/passport/pkg/internal/database" "git.solsynth.dev/hypernet/passport/pkg/proto" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) func (v *App) GetThirdClient(ctx context.Context, request *proto.GetThirdClientRequest) (*proto.GetThirdClientResponse, error) { tx := database.C if request.Id == nil && request.Alias == nil { return nil, status.Error(codes.InvalidArgument, "either id or alias must be specified") } if request.Id != nil { tx = tx.Where("id = ?", request.Id) } else if request.Alias != nil { tx = tx.Where("alias = ?", request.Alias) } var client models.ThirdClient if err := tx.First(&client).Error; err != nil { return nil, status.Errorf(codes.NotFound, "requested client was not found") } if request.Secret != nil { if client.Secret != request.GetSecret() { return nil, status.Errorf(codes.PermissionDenied, "invalid secret") } } return &proto.GetThirdClientResponse{ Info: &proto.ThirdClientInfo{ Id: uint64(client.ID), Name: client.Name, Description: client.Description, }, }, nil }