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 |
|
Brandon Fryslie
|
9d6ae4bf02
|
feat(ssh-keys): add ssh-keys command to manage SSH public keys (#940)
## Summary
- Adds `tea ssh-keys` command group (aliases: `ssh-key`, `keys`) under the SETUP category
- Mirrors the interface of `gh ssh-key add/list/delete`
- Three subcommands: `add <keyfile>`, `list`, `delete <id>`
## Commands
\`\`\`sh
tea ssh-keys add ~/.ssh/id_ed25519.pub # title defaults to filename stem
tea ssh-keys add ~/.ssh/id_rsa.pub --title "work laptop"
tea ssh-keys add ~/.ssh/deploy.pub --read-only # authentication-only key
tea ssh-keys list
tea ssh-keys list --output json
tea ssh-keys delete 42 # prompts for confirmation
tea ssh-keys delete 42 --force # skip prompt
\`\`\`
## Test plan
- [x] `make lint` — 0 issues
- [x] `make fmt-check` — passes
- [x] `go test ./cmd/sshkeys/... -run TestKeyTitle` — unit tests pass (no server needed)
- [ ] Integration tests with live Gitea instance:
\`\`\`sh
GITEA_TEA_TEST_URL=https://your-gitea \
GITEA_TEA_TEST_TOKEN=<token> \
go test ./cmd/sshkeys/... -v -run TestSSHKey
\`\`\`
Exercises full add → SDK-verify → delete → 404-verify lifecycle.
---------
Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
Co-authored-by: Brandon Fryslie <530235+brandon-fryslie@users.noreply.github.com>
Reviewed-on: https://gitea.com/gitea/tea/pulls/940
Reviewed-by: Lunny Xiao <xiaolunwen@gmail.com>
Co-authored-by: Brandon Fryslie <186614+brandroid@noreply.gitea.com>
Co-committed-by: Brandon Fryslie <186614+brandroid@noreply.gitea.com>
|
2026-05-02 18:24:08 +00:00 |
|