@@ -29,16 +29,38 @@ var (
29
29
Name : "admin" ,
30
30
Usage : "Command line interface to perform common administrative operations" ,
31
31
Subcommands : []cli.Command {
32
- subcmdCreateUser ,
33
- subcmdChangePassword ,
32
+ subcmdUser ,
34
33
subcmdRepoSyncReleases ,
35
34
subcmdRegenerate ,
36
35
subcmdAuth ,
37
36
},
38
37
}
39
38
40
- subcmdCreateUser = cli.Command {
41
- Name : "create-user" ,
39
+ subcmdUser = cli.Command {
40
+ Name : "user" ,
41
+ Usage : "Modify users" ,
42
+ Subcommands : []cli.Command {
43
+ microcmdUserCreate ,
44
+ microcmdUserList ,
45
+ microcmdUserChangePassword ,
46
+ microcmdUserDelete ,
47
+ },
48
+ }
49
+
50
+ microcmdUserList = cli.Command {
51
+ Name : "list" ,
52
+ Usage : "List users" ,
53
+ Action : runListUsers ,
54
+ Flags : []cli.Flag {
55
+ cli.BoolFlag {
56
+ Name : "admin" ,
57
+ Usage : "List only admin users" ,
58
+ },
59
+ },
60
+ }
61
+
62
+ microcmdUserCreate = cli.Command {
63
+ Name : "create" ,
42
64
Usage : "Create a new user in database" ,
43
65
Action : runCreateUser ,
44
66
Flags : []cli.Flag {
82
104
},
83
105
}
84
106
85
- subcmdChangePassword = cli.Command {
107
+ microcmdUserChangePassword = cli.Command {
86
108
Name : "change-password" ,
87
109
Usage : "Change a user's password" ,
88
110
Action : runChangePassword ,
@@ -100,6 +122,13 @@ var (
100
122
},
101
123
}
102
124
125
+ microcmdUserDelete = cli.Command {
126
+ Name : "delete" ,
127
+ Usage : "Delete specific user" ,
128
+ Flags : []cli.Flag {idFlag },
129
+ Action : runDeleteUser ,
130
+ }
131
+
103
132
subcmdRepoSyncReleases = cli.Command {
104
133
Name : "repo-sync-releases" ,
105
134
Usage : "Synchronize repository releases with tags" ,
@@ -343,6 +372,56 @@ func runCreateUser(c *cli.Context) error {
343
372
return nil
344
373
}
345
374
375
+ func runListUsers (c * cli.Context ) error {
376
+ if err := initDB (); err != nil {
377
+ return err
378
+ }
379
+
380
+ users , err := models .ListUsers ()
381
+
382
+ if err != nil {
383
+ return err
384
+ }
385
+
386
+ w := tabwriter .NewWriter (os .Stdout , 5 , 0 , 1 , ' ' , 0 )
387
+
388
+ if c .IsSet ("admin" ) {
389
+ fmt .Fprintf (w , "ID\t Username\t Email\t IsActive\n " )
390
+ for _ , u := range users {
391
+ if u .IsAdmin {
392
+ fmt .Fprintf (w , "%d\t %s\t %s\t %t\n " , u .ID , u .Name , u .Email , u .IsActive )
393
+ }
394
+ }
395
+ } else {
396
+ fmt .Fprintf (w , "ID\t Username\t Email\t IsActive\t IsAdmin\n " )
397
+ for _ , u := range users {
398
+ fmt .Fprintf (w , "%d\t %s\t %s\t %t\t %t\n " , u .ID , u .Name , u .Email , u .IsAdmin , u .IsActive )
399
+ }
400
+
401
+ }
402
+
403
+ w .Flush ()
404
+ return nil
405
+
406
+ }
407
+
408
+ func runDeleteUser (c * cli.Context ) error {
409
+ if ! c .IsSet ("id" ) {
410
+ return fmt .Errorf ("--id flag is missing" )
411
+ }
412
+
413
+ if err := initDB (); err != nil {
414
+ return err
415
+ }
416
+
417
+ user , err := models .GetUserByID (c .Int64 ("id" ))
418
+ if err != nil {
419
+ return err
420
+ }
421
+
422
+ return models .DeleteUser (user )
423
+ }
424
+
346
425
func runRepoSyncReleases (c * cli.Context ) error {
347
426
if err := initDB (); err != nil {
348
427
return err
0 commit comments