ghainer
|
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 |
|