
ghainerandLunny Xiao
22ff601988
feat: add additional admin users subcommands (#842)
## Summary
Adds admin user management commands to the tea CLI, enabling admins to create, edit, and delete user accounts.
## Features Added
### Admin User Management Commands
- **Create users**: `tea admin users create` - Create new user accounts with configurable options
- **Edit users**: `tea admin users edit <username>` - Update user properties including password, permissions, and profile settings
- **Delete users**: `tea admin users delete <username>` - Remove user accounts with confirmation prompt
### Implementation Details
#### Create Command (`admin users create`)
- Required: username
- Optional: email, full name, password
- Flags: admin, restricted, prohibit-login, visibility
- Password input: command-line flag, file, stdin, or interactive prompt with confirmation
- Default: users must change password on first login (use `--no-must-change-password` to skip)
- Post-creation updates for admin/restricted/prohibit-login (not available during creation)
#### Edit Command (`admin users edit`)
- Updates only explicitly provided fields (partial updates)
- Password change support with the same input methods as create
- Editable fields:
- Profile: email, full name, description, website, location
- Permissions: admin/restricted/active status
- Settings: visibility, max repo creation limits
- Advanced: git hooks, local imports, organization creation
- Default: password changes require password change on next login (use `--no-must-change-password` to skip)
#### Delete Command (`admin users delete`)
- Confirmation prompt by default
- `--confirm` flag to skip confirmation
- Displays user details before deletion
### Security Features
- Secure password input via interactive prompts (hidden input)
- Multiple password input methods: flag, file, stdin, interactive
- Password confirmation for interactive mode
- Whitespace trimming for file/stdin inputs
### Password Input Methods
1. **Command-line flag**: `--password <value>`
2. **File input**: `--password-file <file>` - Read from file
3. **Stdin input**: `--password-stdin` - Read from stdin
4. **Interactive prompt**: Automatically prompts if password not provided (with confirmation)
For edit command: Use `--password=""` to trigger interactive prompt.
## Usage Examples
```bash
# Create a new user
tea admin users create --username john --email john@example.com --admin --no-must-change-password
# Create with interactive password prompt
tea admin users create jane --email jane@example.com
# Edit user properties
tea admin users edit john --email newemail@example.com --restricted
# Change user password (will prompt if not provided)
tea admin users edit john --password=""
tea admin users edit john --password-file /path/to/password.txt
# Delete a user (with confirmation)
tea admin users delete olduser
# Delete without confirmation
tea admin users delete olduser --confirm
```
## Related Issue
Resolves #161
## Testing
- Unit tests for all commands
- Flag validation and default value tests
- Password input method tests (file, stdin, interactive)
- Test coverage for all user option structures
- Confirmation logic tests for delete command
## Technical Details
- Uses Gitea SDK `AdminCreateUser`, `AdminEditUser`, and `AdminDeleteUser` APIs
- Follows existing tea CLI patterns and conventions
- Handles fields not available during creation via post-creation updates
- Partial update support for edit command (only updates explicitly set fields)
- Consistent with other tea commands (webhooks, secrets) in password handling and confirmation patterns
All tests pass and the implementation integrates with existing tea CLI infrastructure.
---------
Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
Reviewed-on: https://gitea.com/gitea/tea/pulls/842
Reviewed-by: Lunny Xiao <xiaolunwen@gmail.com>
Co-authored-by: ghainer <gehainer@gmail.com>
Co-committed-by: ghainer <gehainer@gmail.com>
2026-05-02 23:50:36 +00:00
..
2026-04-09 20:03:33 +00:00
2026-05-02 23:50:36 +00:00
2026-04-23 17:06:42 +00:00
2026-04-15 17:27:47 +00:00
2026-04-08 03:38:49 +00:00
2026-05-01 16:39:48 +00:00
2026-03-27 03:36:44 +00:00
2026-04-08 03:38:49 +00:00
2026-03-27 03:36:44 +00:00
2026-03-27 03:36:44 +00:00
2026-03-27 03:36:44 +00:00
2026-05-02 17:01:40 +00:00
2026-04-23 17:06:42 +00:00
2026-05-02 04:18:45 +00:00
2026-05-02 18:24:08 +00:00
2026-04-08 03:38:49 +00:00
2026-05-01 16:45:52 +00:00
2026-02-11 00:40:06 +00:00
2026-05-02 23:50:36 +00:00
2026-03-27 03:36:44 +00:00
2026-03-27 03:36:44 +00:00
2025-06-10 05:19:59 +00:00
2026-04-15 17:27:47 +00:00
2023-09-08 01:40:02 +00:00
2026-04-08 03:38:49 +00:00
2026-05-02 18:24:08 +00:00
2026-04-08 03:38:49 +00:00
2026-03-27 03:36:44 +00:00
2026-03-27 03:36:44 +00:00
2026-03-27 03:36:44 +00:00
2026-04-08 03:38:49 +00:00
2026-03-27 03:36:44 +00:00
2025-06-10 05:19:59 +00:00
2026-04-29 15:04:55 +00:00
2026-03-27 03:36:44 +00:00
2025-06-10 05:19:59 +00:00
2026-03-27 03:36:44 +00:00
2026-03-27 03:36:44 +00:00
2026-04-23 17:06:42 +00:00
2025-06-10 05:19:59 +00:00
2026-04-20 19:50:28 +00:00
2026-05-02 18:24:08 +00:00
2025-06-10 05:19:59 +00:00
2026-03-27 03:36:44 +00:00
2026-03-27 03:36:44 +00:00