@@ -25,39 +25,61 @@ func loginCmd() *cmdBuilder.Cmd {
2525 HelpFlag (i18n .T (i18n .CmdHelpLogin )).
2626 Arg ("token" ).
2727 GuestRunFunc (func (ctx context.Context , cmdData * cmdBuilder.GuestCmdData ) error {
28+ // Check if token is provided
29+ if len (cmdData .Args ["token" ]) == 0 {
30+ return errors .New ("token is required" )
31+ }
32+ token := cmdData .Args ["token" ][0 ]
33+ if token == "" {
34+ return errors .New ("token cannot be empty" )
35+ }
36+
2837 uxBlocks := cmdData .UxBlocks
2938
3039 regionRetriever := region .New (httpClient .New (ctx , httpClient.Config {HttpTimeout : time .Minute * 5 }))
3140
32- regions , err := regionRetriever .RetrieveAllFromURL (ctx , cmdData .Params .GetString ("regionUrl" ))
41+ regionUrl := cmdData .Params .GetString ("regionUrl" )
42+ if regionUrl == "" {
43+ return errors .New ("regionUrl is empty" )
44+ }
45+
46+ regions , err := regionRetriever .RetrieveAllFromURL (ctx , regionUrl )
3347 if err != nil {
34- return err
48+ return errors .Wrap (err , "failed to retrieve regions" )
49+ }
50+
51+ if len (regions ) == 0 {
52+ return errors .New ("no regions available" )
3553 }
3654
3755 reg , err := getLoginRegion (ctx , uxBlocks , regions , cmdData .Params .GetString ("region" ))
3856 if err != nil {
39- return err
57+ return errors . Wrap ( err , "failed to get login region" )
4058 }
4159
42- restApiClient := zeropsRestApiClient .NewAuthorizedClient (cmdData . Args [ " token" ][ 0 ] , "https://" + reg .Address )
60+ restApiClient := zeropsRestApiClient .NewAuthorizedClient (token , "https://" + reg .Address )
4361
4462 response , err := restApiClient .GetUserInfo (ctx )
4563 if err != nil {
46- return err
64+ return errors . Wrap ( err , "failed to get user info" )
4765 }
4866
4967 output , err := response .Output ()
5068 if err != nil {
51- return err
69+ return errors .Wrap (err , "failed to process user info output" )
70+ }
71+
72+ if output .FullName == "" || output .Email == "" {
73+ return errors .New ("incomplete user info: missing full name or email" )
5274 }
5375
5476 _ , err = cmdData .CliStorage .Update (func (data cliStorage.Data ) cliStorage.Data {
55- data .Token = cmdData . Args [ " token" ][ 0 ]
77+ data .Token = token
5678 data .RegionData = reg
5779 return data
5880 })
5981 if err != nil {
60- return err
82+ return errors . Wrap ( err , "failed to update CLI storage" )
6183 }
6284
6385 uxBlocks .PrintInfo (styles .SuccessLine (i18n .T (i18n .LoginSuccess , output .FullName , output .Email )))
@@ -72,6 +94,10 @@ func getLoginRegion(
7294 regions []region.RegionItem ,
7395 selectedRegion string ,
7496) (region.RegionItem , error ) {
97+ if len (regions ) == 0 {
98+ return region.RegionItem {}, errors .New ("no regions available" )
99+ }
100+
75101 if selectedRegion != "" {
76102 for _ , reg := range regions {
77103 if reg .Name == selectedRegion {
@@ -103,7 +129,15 @@ func getLoginRegion(
103129 uxBlock .SelectTableHeader (header ),
104130 )
105131 if err != nil {
106- return region.RegionItem {}, err
132+ return region.RegionItem {}, errors .Wrap (err , "failed to select region" )
133+ }
134+
135+ if len (regionIndex ) == 0 {
136+ return region.RegionItem {}, errors .New ("no region selected" )
137+ }
138+
139+ if regionIndex [0 ] < 0 || regionIndex [0 ] >= len (regions ) {
140+ return region.RegionItem {}, errors .New ("invalid region index selected" )
107141 }
108142
109143 return regions [regionIndex [0 ]], nil
0 commit comments