feat: Add cloud register command

This commit is contained in:
abhisek 2024-10-09 16:42:05 +05:30
parent eeaf4e1e29
commit 7686e85e52
No known key found for this signature in database
GPG Key ID: CB92A4990C02A88F
3 changed files with 117 additions and 0 deletions

View File

@ -12,6 +12,7 @@ func NewCloudCommand() *cobra.Command {
}
cmd.AddCommand(newCloudLoginCommand())
cmd.AddCommand(newRegisterCommand())
cmd.AddCommand(newQueryCommand())
cmd.AddCommand(newPingCommand())
cmd.AddCommand(newWhoamiCommand())

70
cmd/cloud/register.go Normal file
View File

@ -0,0 +1,70 @@
package cloud
import (
"github.com/safedep/vet/internal/auth"
"github.com/safedep/vet/internal/ui"
"github.com/safedep/vet/pkg/cloud"
"github.com/safedep/vet/pkg/common/logger"
"github.com/spf13/cobra"
)
var (
registerEmail string
registerName string
registerOrgName string
registerOrgDomain string
)
func newRegisterCommand() *cobra.Command {
cmd := &cobra.Command{
Use: "register",
Short: "Register a new user and tenant",
RunE: func(cmd *cobra.Command, args []string) error {
err := registerUserTenant()
if err != nil {
logger.Errorf("Failed to register user: %v", err)
}
return nil
},
}
cmd.Flags().StringVar(&registerEmail, "email", "cloud@safedep.io", "Email of the user (not required for SafeDep cloud)")
cmd.Flags().StringVar(&registerName, "name", "", "Name of the user")
cmd.Flags().StringVar(&registerOrgName, "org-name", "", "Name of the organization")
cmd.Flags().StringVar(&registerOrgDomain, "org-domain", "", "Domain of the organization")
_ = cmd.MarkFlagRequired("name")
_ = cmd.MarkFlagRequired("org-name")
_ = cmd.MarkFlagRequired("org-domain")
return cmd
}
func registerUserTenant() error {
conn, err := auth.ControlPlaneClientConnection("vet-cloud-register")
if err != nil {
return err
}
onboardingService, err := cloud.NewOnboardingService(conn)
if err != nil {
return err
}
res, err := onboardingService.Register(&cloud.RegisterRequest{
Name: registerName,
Email: registerEmail,
OrgName: registerOrgName,
OrgDomain: registerOrgDomain,
})
if err != nil {
return err
}
ui.PrintSuccess("Registered user and tenant.")
ui.PrintSuccess("Tenant domain: %s", res.TenantDomain)
return nil
}

46
pkg/cloud/onboarding.go Normal file
View File

@ -0,0 +1,46 @@
package cloud
import (
"context"
"buf.build/gen/go/safedep/api/grpc/go/safedep/services/controltower/v1/controltowerv1grpc"
controltowerv1 "buf.build/gen/go/safedep/api/protocolbuffers/go/safedep/services/controltower/v1"
"google.golang.org/grpc"
)
type onboardingService struct {
conn *grpc.ClientConn
}
type RegisterRequest struct {
Email string
Name string
OrgName string
OrgDomain string
}
type RegisterResponse struct {
TenantDomain string
}
func NewOnboardingService(conn *grpc.ClientConn) (*onboardingService, error) {
return &onboardingService{conn}, nil
}
func (s *onboardingService) Register(req *RegisterRequest) (*RegisterResponse, error) {
onbService := controltowerv1grpc.NewOnboardingServiceClient(s.conn)
res, err := onbService.OnboardUser(context.Background(), &controltowerv1.OnboardUserRequest{
Email: req.Email,
Name: req.Name,
OrganizationName: req.OrgName,
OrganizationDomain: req.OrgDomain,
})
if err != nil {
return nil, err
}
return &RegisterResponse{
TenantDomain: res.GetTenant().GetDomain(),
}, nil
}