@@ -267,12 +267,59 @@ func (r *RootCmd) login() *serpent.Command {
267
267
trial = v == "yes" || v == "y"
268
268
}
269
269
270
+ var trialInfo codersdk.CreateFirstUserTrialInfo
271
+ if trial {
272
+ if trialInfo .FirstName == "" {
273
+ trialInfo .FirstName , err = promptTrialInfo (inv , "firstName" )
274
+ if err != nil {
275
+ return err
276
+ }
277
+ }
278
+ if trialInfo .LastName == "" {
279
+ trialInfo .LastName , err = promptTrialInfo (inv , "lastName" )
280
+ if err != nil {
281
+ return err
282
+ }
283
+ }
284
+ if trialInfo .PhoneNumber == "" {
285
+ trialInfo .PhoneNumber , err = promptTrialInfo (inv , "phoneNumber" )
286
+ if err != nil {
287
+ return err
288
+ }
289
+ }
290
+ if trialInfo .JobTitle == "" {
291
+ trialInfo .JobTitle , err = promptTrialInfo (inv , "jobTitle" )
292
+ if err != nil {
293
+ return err
294
+ }
295
+ }
296
+ if trialInfo .CompanyName == "" {
297
+ trialInfo .CompanyName , err = promptTrialInfo (inv , "companyName" )
298
+ if err != nil {
299
+ return err
300
+ }
301
+ }
302
+ if trialInfo .Country == "" {
303
+ trialInfo .Country , err = promptCountry (inv )
304
+ if err != nil {
305
+ return err
306
+ }
307
+ }
308
+ if trialInfo .Developers == "" {
309
+ trialInfo .Developers , err = promptDevelopers (inv )
310
+ if err != nil {
311
+ return err
312
+ }
313
+ }
314
+ }
315
+
270
316
_ , err = client .CreateFirstUser (ctx , codersdk.CreateFirstUserRequest {
271
- Email : email ,
272
- Username : username ,
273
- Name : name ,
274
- Password : password ,
275
- Trial : trial ,
317
+ Email : email ,
318
+ Username : username ,
319
+ Name : name ,
320
+ Password : password ,
321
+ Trial : trial ,
322
+ TrialInfo : trialInfo ,
276
323
})
277
324
if err != nil {
278
325
return xerrors .Errorf ("create initial user: %w" , err )
@@ -449,3 +496,75 @@ func openURL(inv *serpent.Invocation, urlToOpen string) error {
449
496
450
497
return browser .OpenURL (urlToOpen )
451
498
}
499
+
500
+ func promptTrialInfo (inv * serpent.Invocation , fieldName string ) (string , error ) {
501
+ value , err := cliui .Prompt (inv , cliui.PromptOptions {
502
+ Text : fmt .Sprintf ("Please enter %s:" , pretty .Sprint (cliui .DefaultStyles .Field , fieldName )),
503
+ Validate : func (s string ) error {
504
+ if strings .TrimSpace (s ) == "" {
505
+ return xerrors .Errorf ("%s is required" , fieldName )
506
+ }
507
+ return nil
508
+ },
509
+ })
510
+ if err != nil {
511
+ if errors .Is (err , cliui .Canceled ) {
512
+ return "" , nil
513
+ }
514
+ return "" , err
515
+ }
516
+ return value , nil
517
+ }
518
+
519
+ func promptDevelopers (inv * serpent.Invocation ) (string , error ) {
520
+ options := []string {"1-100" , "101-500" , "501-1000" , "1001-2500" , "2500+" }
521
+ selection , err := cliui .Select (inv , cliui.SelectOptions {
522
+ Options : options ,
523
+ HideSearch : false ,
524
+ Message : "Select the number of developers:" ,
525
+ })
526
+ if err != nil {
527
+ return "" , xerrors .Errorf ("select developers: %w" , err )
528
+ }
529
+ return selection , nil
530
+ }
531
+
532
+ func promptCountry (inv * serpent.Invocation ) (string , error ) {
533
+ countries := []string {
534
+ "Afghanistan" , "Åland Islands" , "Albania" , "Algeria" , "American Samoa" , "Andorra" , "Angola" , "Anguilla" , "Antarctica" , "Antigua and Barbuda" ,
535
+ "Argentina" , "Armenia" , "Aruba" , "Australia" , "Austria" , "Azerbaijan" , "Bahamas" , "Bahrain" , "Bangladesh" , "Barbados" ,
536
+ "Belarus" , "Belgium" , "Belize" , "Benin" , "Bermuda" , "Bhutan" , "Bolivia, Plurinational State of" , "Bonaire, Sint Eustatius and Saba" , "Bosnia and Herzegovina" , "Botswana" ,
537
+ "Bouvet Island" , "Brazil" , "British Indian Ocean Territory" , "Brunei Darussalam" , "Bulgaria" , "Burkina Faso" , "Burundi" , "Cambodia" , "Cameroon" , "Canada" ,
538
+ "Cape Verde" , "Cayman Islands" , "Central African Republic" , "Chad" , "Chile" , "China" , "Christmas Island" , "Cocos (Keeling) Islands" , "Colombia" , "Comoros" ,
539
+ "Congo" , "Congo, the Democratic Republic of the" , "Cook Islands" , "Costa Rica" , "Côte d'Ivoire" , "Croatia" , "Cuba" , "Curaçao" , "Cyprus" , "Czech Republic" ,
540
+ "Denmark" , "Djibouti" , "Dominica" , "Dominican Republic" , "Ecuador" , "Egypt" , "El Salvador" , "Equatorial Guinea" , "Eritrea" , "Estonia" ,
541
+ "Ethiopia" , "Falkland Islands (Malvinas)" , "Faroe Islands" , "Fiji" , "Finland" , "France" , "French Guiana" , "French Polynesia" , "French Southern Territories" , "Gabon" ,
542
+ "Gambia" , "Georgia" , "Germany" , "Ghana" , "Gibraltar" , "Greece" , "Greenland" , "Grenada" , "Guadeloupe" , "Guam" ,
543
+ "Guatemala" , "Guernsey" , "Guinea" , "Guinea-Bissau" , "Guyana" , "Haiti" , "Heard Island and McDonald Islands" , "Holy See (Vatican City State)" , "Honduras" , "Hong Kong" ,
544
+ "Hungary" , "Iceland" , "India" , "Indonesia" , "Iran, Islamic Republic of" , "Iraq" , "Ireland" , "Isle of Man" , "Israel" , "Italy" ,
545
+ "Jamaica" , "Japan" , "Jersey" , "Jordan" , "Kazakhstan" , "Kenya" , "Kiribati" , "Korea, Democratic People's Republic of" , "Korea, Republic of" , "Kuwait" ,
546
+ "Kyrgyzstan" , "Lao People's Democratic Republic" , "Latvia" , "Lebanon" , "Lesotho" , "Liberia" , "Libya" , "Liechtenstein" , "Lithuania" , "Luxembourg" ,
547
+ "Macao" , "Macedonia, the Former Yugoslav Republic of" , "Madagascar" , "Malawi" , "Malaysia" , "Maldives" , "Mali" , "Malta" , "Marshall Islands" , "Martinique" ,
548
+ "Mauritania" , "Mauritius" , "Mayotte" , "Mexico" , "Micronesia, Federated States of" , "Moldova, Republic of" , "Monaco" , "Mongolia" , "Montenegro" , "Montserrat" ,
549
+ "Morocco" , "Mozambique" , "Myanmar" , "Namibia" , "Nauru" , "Nepal" , "Netherlands" , "New Caledonia" , "New Zealand" , "Nicaragua" ,
550
+ "Niger" , "Nigeria" , "Niue" , "Norfolk Island" , "Northern Mariana Islands" , "Norway" , "Oman" , "Pakistan" , "Palau" , "Palestine, State of" ,
551
+ "Panama" , "Papua New Guinea" , "Paraguay" , "Peru" , "Philippines" , "Pitcairn" , "Poland" , "Portugal" , "Puerto Rico" , "Qatar" ,
552
+ "Réunion" , "Romania" , "Russian Federation" , "Rwanda" , "Saint Barthélemy" , "Saint Helena, Ascension and Tristan da Cunha" , "Saint Kitts and Nevis" , "Saint Lucia" , "Saint Martin (French part)" , "Saint Pierre and Miquelon" ,
553
+ "Saint Vincent and the Grenadines" , "Samoa" , "San Marino" , "Sao Tome and Principe" , "Saudi Arabia" , "Senegal" , "Serbia" , "Seychelles" , "Sierra Leone" , "Singapore" ,
554
+ "Sint Maarten (Dutch part)" , "Slovakia" , "Slovenia" , "Solomon Islands" , "Somalia" , "South Africa" , "South Georgia and the South Sandwich Islands" , "South Sudan" , "Spain" , "Sri Lanka" ,
555
+ "Sudan" , "Suriname" , "Svalbard and Jan Mayen" , "Swaziland" , "Sweden" , "Switzerland" , "Syrian Arab Republic" , "Taiwan, Province of China" , "Tajikistan" , "Tanzania, United Republic of" ,
556
+ "Thailand" , "Timor-Leste" , "Togo" , "Tokelau" , "Tonga" , "Trinidad and Tobago" , "Tunisia" , "Turkey" , "Turkmenistan" , "Turks and Caicos Islands" ,
557
+ "Tuvalu" , "Uganda" , "Ukraine" , "United Arab Emirates" , "United Kingdom" , "United States" , "United States Minor Outlying Islands" , "Uruguay" , "Uzbekistan" , "Vanuatu" ,
558
+ "Venezuela, Bolivarian Republic of" , "Vietnam" , "Virgin Islands, British" , "Virgin Islands, U.S." , "Wallis and Futuna" , "Western Sahara" , "Yemen" , "Zambia" , "Zimbabwe" ,
559
+ }
560
+
561
+ selection , err := cliui .Select (inv , cliui.SelectOptions {
562
+ Options : countries ,
563
+ Message : "Select the country:" ,
564
+ HideSearch : false ,
565
+ })
566
+ if err != nil {
567
+ return "" , xerrors .Errorf ("select country: %w" , err )
568
+ }
569
+ return selection , nil
570
+ }
0 commit comments