Modifies user account. The following modes are available: * suspend/unsuspend account. * change user's theCard (public name, description, avatar), private comment, trusted values. This macro requires root privileges.
| 47 | |
| 48 | |
| 49 | class Usermod(Macro): |
| 50 | """Modifies user account. The following modes are available: |
| 51 | * suspend/unsuspend account. |
| 52 | * change user's theCard (public name, description, avatar), private comment, trusted values. |
| 53 | |
| 54 | This macro requires root privileges.""" |
| 55 | |
| 56 | def name(self): |
| 57 | return "usermod" |
| 58 | |
| 59 | def description(self): |
| 60 | return 'Modify user account (requires root privileges)' |
| 61 | |
| 62 | def add_parser_args(self): |
| 63 | self.parser.add_argument('userid', help='user to update') |
| 64 | self.parser.add_argument('-L', '--suspend', action='store_true', help='Suspend account') |
| 65 | self.parser.add_argument('-U', '--unsuspend', action='store_true', help='Unsuspend account') |
| 66 | self.parser.add_argument('--name', help='Public name') |
| 67 | self.parser.add_argument('--avatar', help='Avatar file name') |
| 68 | self.parser.add_argument('--comment', help='Private comment on account') |
| 69 | self.parser.add_argument('--note', help='Account description') |
| 70 | self.parser.add_argument('--trusted', help='Add/remove trusted marker: verified, staff, danger') |
| 71 | |
| 72 | def expand(self, id, cmd, args): |
| 73 | if not cmd.userid: |
| 74 | return None |
| 75 | |
| 76 | # Suspend/unsuspend user. |
| 77 | if cmd.suspend or cmd.unsuspend: |
| 78 | if cmd.suspend and cmd.unsuspend: |
| 79 | stdoutln("Cannot both suspend and unsuspend account") |
| 80 | return None |
| 81 | new_cmd = 'acc --user %s --as_root' % cmd.userid |
| 82 | if cmd.suspend: |
| 83 | new_cmd += ' --suspend true' |
| 84 | if cmd.unsuspend: |
| 85 | new_cmd += ' --suspend false' |
| 86 | return [new_cmd] |
| 87 | |
| 88 | # Change theCard. |
| 89 | varname = cmd.varname if hasattr(cmd, 'varname') and cmd.varname else '$temp' |
| 90 | set_cmd = '.must ' + varname + ' set me' |
| 91 | if cmd.name is not None: |
| 92 | set_cmd += ' --fn="%s"' % cmd.name |
| 93 | if cmd.avatar is not None: |
| 94 | set_cmd += ' --photo="%s"' % cmd.avatar |
| 95 | if cmd.comment is not None: |
| 96 | set_cmd += ' --private="%s"' % cmd.comment |
| 97 | if cmd.note is not None: |
| 98 | set_cmd += ' --note="%s"' % cmd.note |
| 99 | if cmd.trusted is not None: |
| 100 | set_cmd += ' --trusted="%s" --as_root' % cmd.trusted |
| 101 | old_user = tn_globals.DefaultUser if tn_globals.DefaultUser else '' |
| 102 | return ['.use --user %s' % cmd.userid, |
| 103 | '.must sub me', |
| 104 | set_cmd, |
| 105 | '.must leave me', |
| 106 | '.use --user "%s"' % old_user] |