| 30 | } |
| 31 | |
| 32 | func newAdminUserCreatePlan(input adminUserCreateInput) (adminUserCreatePlan, error) { |
| 33 | plan := adminUserCreatePlan{ |
| 34 | Email: strings.TrimSpace(input.Email), |
| 35 | Password: strings.TrimSpace(input.Password), |
| 36 | } |
| 37 | givenName := strings.TrimSpace(input.GivenName) |
| 38 | familyName := strings.TrimSpace(input.FamilyName) |
| 39 | if plan.Email == "" { |
| 40 | return adminUserCreatePlan{}, usage("email required") |
| 41 | } |
| 42 | if err := validatePlainEmail("email", plan.Email); err != nil { |
| 43 | return adminUserCreatePlan{}, err |
| 44 | } |
| 45 | if givenName == "" { |
| 46 | return adminUserCreatePlan{}, usage("--given required") |
| 47 | } |
| 48 | if familyName == "" { |
| 49 | return adminUserCreatePlan{}, usage("--family required") |
| 50 | } |
| 51 | if input.Admin { |
| 52 | return adminUserCreatePlan{}, usage("--admin is not supported; assign admin roles separately after user creation") |
| 53 | } |
| 54 | |
| 55 | hashFunction, err := normalizeAdminUserHashFunction(input.HashFunction) |
| 56 | if err != nil { |
| 57 | return adminUserCreatePlan{}, err |
| 58 | } |
| 59 | if hashFunction != "" && plan.Password == "" { |
| 60 | return adminUserCreatePlan{}, usage("--password required when --hash-function is set") |
| 61 | } |
| 62 | |
| 63 | plan.GeneratePassword = plan.Password == "" |
| 64 | plan.User = &admin.User{ |
| 65 | PrimaryEmail: plan.Email, |
| 66 | Name: &admin.UserName{ |
| 67 | GivenName: givenName, |
| 68 | FamilyName: familyName, |
| 69 | }, |
| 70 | ChangePasswordAtNextLogin: input.ChangePwd || plan.GeneratePassword, |
| 71 | Suspended: input.Suspended, |
| 72 | Archived: input.Archived, |
| 73 | OrgUnitPath: strings.TrimSpace(input.OrgUnit), |
| 74 | RecoveryEmail: strings.TrimSpace(input.RecoveryEmail), |
| 75 | RecoveryPhone: strings.TrimSpace(input.RecoveryPhone), |
| 76 | HashFunction: hashFunction, |
| 77 | } |
| 78 | if plan.User.RecoveryEmail != "" { |
| 79 | if err := validatePlainEmail("--recovery-email", plan.User.RecoveryEmail); err != nil { |
| 80 | return adminUserCreatePlan{}, err |
| 81 | } |
| 82 | } |
| 83 | if input.Suspended || input.Archived { |
| 84 | plan.StatePatch = &admin.User{ |
| 85 | Suspended: input.Suspended, |
| 86 | Archived: input.Archived, |
| 87 | } |
| 88 | } |
| 89 | return plan, nil |