github.com/jfrog/jfrog-cli-core/v2@v2.51.0/general/invite/invite.go (about) 1 package invite 2 3 import ( 4 "fmt" 5 "github.com/jfrog/jfrog-cli-core/v2/artifactory/utils" 6 "github.com/jfrog/jfrog-client-go/access" 7 accessservices "github.com/jfrog/jfrog-client-go/access/services" 8 "github.com/jfrog/jfrog-client-go/artifactory/services" 9 clientutils "github.com/jfrog/jfrog-client-go/utils" 10 "github.com/jfrog/jfrog-client-go/utils/log" 11 "strings" 12 13 "github.com/jfrog/jfrog-cli-core/v2/utils/config" 14 ) 15 16 const InviteCliSourceName = "cli" 17 18 type InviteCommand struct { 19 invitedEmail string 20 serverDetails *config.ServerDetails 21 } 22 23 func (ic *InviteCommand) SetInvitedEmail(invitedEmail string) *InviteCommand { 24 ic.invitedEmail = invitedEmail 25 return ic 26 } 27 28 func (ic *InviteCommand) SetServerDetails(serverDetails *config.ServerDetails) *InviteCommand { 29 ic.serverDetails = serverDetails 30 return ic 31 } 32 33 func (ic *InviteCommand) ServerDetails() (*config.ServerDetails, error) { 34 return ic.serverDetails, nil 35 } 36 37 func (ic *InviteCommand) CommandName() string { 38 return "invite" 39 } 40 41 func NewInviteCommand() *InviteCommand { 42 return &InviteCommand{} 43 } 44 45 func (ic *InviteCommand) Run() (err error) { 46 servicesManager, err := utils.CreateServiceManager(ic.serverDetails, -1, 0, false) 47 if err != nil { 48 return err 49 } 50 userDetails := ic.createNewInvitedUser() 51 52 log.Info(fmt.Sprintf("Sending invitation email to: %s...", userDetails.Name)) 53 params := new(services.UserParams) 54 params.UserDetails = *userDetails 55 params.ReplaceIfExists = false 56 // Inviting the new user - send a 'CreateUser' request to artifactory with the "shouldInvite=true" parameter. 57 err = servicesManager.CreateUser(*params) 58 if err != nil { 59 if strings.HasSuffix(err.Error(), "already exists") { 60 log.Debug(fmt.Sprintf("Re-sending invitation email to: %s...", userDetails.Name)) 61 var accessManager *access.AccessServicesManager 62 accessManager, err = utils.CreateAccessServiceManager(ic.serverDetails, false) 63 if err != nil { 64 return 65 } 66 // Re-inviting user - send an "Invite" request to access. 67 err = accessManager.InviteUser(params.UserDetails.Email, InviteCliSourceName) 68 if err != nil { 69 return 70 } 71 } 72 } 73 return 74 } 75 76 func (ic *InviteCommand) createNewInvitedUser() *services.User { 77 userDetails := services.User{} 78 // Parameters "name" and "email" should both be with the email value for internal reasons in access. 79 userDetails.Email = ic.invitedEmail 80 userDetails.Name = ic.invitedEmail 81 // Random valid password - information won't be used in access. 82 userDetails.Password = "Password1!" 83 userDetails.Admin = clientutils.Pointer(true) 84 userDetails.ShouldInvite = clientutils.Pointer(true) 85 userDetails.Source = accessservices.InviteCliSourceName 86 87 userDetails.ProfileUpdatable = clientutils.Pointer(true) 88 userDetails.DisableUIAccess = clientutils.Pointer(false) 89 userDetails.InternalPasswordDisabled = clientutils.Pointer(false) 90 return &userDetails 91 }