Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions cmd/harbor/root/project/member.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ func Member() *cobra.Command {
member.CreateMemberCommand(),
member.DeleteMemberCommand(),
member.UpdateMemberCommand(),
member.ViewMemberCommand(),
)

return cmd
Expand Down
88 changes: 88 additions & 0 deletions cmd/harbor/root/project/member/view.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
// Copyright Project Harbor Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package member

import (
"fmt"
"strconv"

"github.com/goharbor/harbor-cli/pkg/api"
"github.com/goharbor/harbor-cli/pkg/prompt"
"github.com/goharbor/harbor-cli/pkg/utils"
"github.com/goharbor/harbor-cli/pkg/views/member/view"
"github.com/spf13/cobra"
"github.com/spf13/viper"
)

// ViewMemberCommand creates a new `harbor project member view` command
func ViewMemberCommand() *cobra.Command {
var opts api.GetMemberOptions
var isID bool

cmd := &cobra.Command{
Use: "view [projectName] [memberID]",
Short: "get project member by ID or name",
Long: "get member details by MemberID",
Example: " harbor project member view my-project [memberID]\n harbor project member view my-project 5\n harbor project member view my-project 5 --wide",
Args: cobra.MaximumNArgs(2),
RunE: func(cmd *cobra.Command, args []string) error {
var err error

if len(args) == 1 {
opts.ProjectNameOrID = args[0]
} else if len(args) == 2 {
opts.ProjectNameOrID = args[0]
opts.ID, _ = strconv.ParseInt(args[1], 0, 64)
}

if opts.ProjectNameOrID == "" {
opts.ProjectNameOrID, err = prompt.GetProjectNameFromUser()
if err != nil {
return fmt.Errorf("failed to get project name: %v", err)
}
}

if opts.ID == 0 {
opts.ID = prompt.GetMemberIDFromUser(opts.ProjectNameOrID, "")
if opts.ID == 0 {
return fmt.Errorf("no members found in project")
}
}

opts.XIsResourceName = !isID

member, err := api.GetMember(opts)
if err != nil {
return fmt.Errorf("failed to get project member info: %v", err)
}

FormatFlag := viper.GetString("output-format")
if FormatFlag != "" {
err = utils.PrintFormat(member.Payload, FormatFlag)
if err != nil {
return err
}
} else {
wideFlag := viper.GetBool("wide")
view.ViewMember(member.Payload, wideFlag)
}
return nil
},
}

flags := cmd.Flags()
flags.BoolVarP(&isID, "id", "", false, "parses projectName as an ID")
return cmd
}
11 changes: 6 additions & 5 deletions doc/cli-docs/harbor-project-member-view.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,28 +13,29 @@ weight: 90
get member details by MemberID

```sh
harbor project member view [ProjectName Or ID] [member ID] [flags]
harbor project member view [projectName] [memberID] [flags]
```

### Examples

```sh
harbor project member view my-project [memberID]
harbor project member view my-project 5
harbor project member view my-project 5 --wide
```

### Options

```sh
-h, --help help for view
--id int Member ID
-p, --projectname string Project Name
-h, --help help for view
--id parses projectName as an ID
```

### Options inherited from parent commands

```sh
-c, --config string config file (default is $HOME/.config/harbor-cli/config.yaml)
-o, --output-format string Output format. One of: json|yaml
-o, --output-format string Output format. One of: json|yaml|csv
-v, --verbose verbose output
```

Expand Down
1 change: 1 addition & 0 deletions doc/cli-docs/harbor-project-member.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,4 +39,5 @@ Manage members and assign roles to them
* [harbor project member delete](harbor-project-member-delete.md) - delete member by username
* [harbor project member list](harbor-project-member-list.md) - list members in a project
* [harbor project member update](harbor-project-member-update.md) - update member by name
* [harbor project member view](harbor-project-member-view.md) - get project member information

19 changes: 8 additions & 11 deletions doc/man-docs/man1/harbor-project-member-view.1
Original file line number Diff line number Diff line change
Expand Up @@ -2,28 +2,24 @@
.TH "HARBOR" "1" "Harbor Community" "Harbor User Manuals"

.SH NAME
harbor-project-member-view - get project member by ID or name
harbor-project-member-view - get project member information


.SH SYNOPSIS
\fBharbor project member view [ProjectName Or ID] [member ID] [flags]\fP
\fBharbor project member view [projectName] [memberID] [flags]\fP


.SH DESCRIPTION
get member details by MemberID
get project member information


.SH OPTIONS
\fB-h\fP, \fB--help\fP[=false]
help for view

.PP
\fB--id\fP=0
Member ID

.PP
\fB-p\fP, \fB--projectname\fP=""
Project Name
\fB--id\fP[=false]
parses projectName as an ID


.SH OPTIONS INHERITED FROM PARENT COMMANDS
Expand All @@ -32,7 +28,7 @@ get member details by MemberID

.PP
\fB-o\fP, \fB--output-format\fP=""
Output format. One of: json|yaml
Output format. One of: json|yaml|csv

.PP
\fB-v\fP, \fB--verbose\fP[=false]
Expand All @@ -41,7 +37,8 @@ get member details by MemberID

.SH EXAMPLE
.EX
harbor project member view my-project [memberID]
harbor project member view my-project 5
harbor project member view my-project 5 --wide
.EE


Expand Down
2 changes: 1 addition & 1 deletion doc/man-docs/man1/harbor-project-member.1
Original file line number Diff line number Diff line change
Expand Up @@ -38,4 +38,4 @@ Manage members and assign roles to them


.SH SEE ALSO
\fBharbor-project(1)\fP, \fBharbor-project-member-create(1)\fP, \fBharbor-project-member-delete(1)\fP, \fBharbor-project-member-list(1)\fP, \fBharbor-project-member-update(1)\fP
\fBharbor-project(1)\fP, \fBharbor-project-member-create(1)\fP, \fBharbor-project-member-delete(1)\fP, \fBharbor-project-member-list(1)\fP, \fBharbor-project-member-update(1)\fP, \fBharbor-project-member-view(1)\fP
7 changes: 6 additions & 1 deletion pkg/views/webhook/create/view.go
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,12 @@ func WebhookCreateView(createView *CreateView) error {
Title("Endpoint URL").
Value(&createView.EndpointURL).
Validate(func(str string) error {
return utils.ValidateURL(str)
formattedUrl := utils.FormatUrl(str)
if err := utils.ValidateURL(formattedUrl); err != nil {
return err
}
createView.EndpointURL = formattedUrl
return nil
}),
huh.NewInput().
Title("Auth Header").
Expand Down
4 changes: 3 additions & 1 deletion pkg/views/webhook/edit/view.go
Original file line number Diff line number Diff line change
Expand Up @@ -109,9 +109,11 @@ func WebhookEditView(editView *EditView) {
if strings.TrimSpace(str) == "" {
return errors.New("endpoint URL cannot be empty")
}
if err := utils.ValidateURL(str); err != nil {
formattedUrl := utils.FormatUrl(str)
if err := utils.ValidateURL(formattedUrl); err != nil {
return err
}
editView.EndpointURL = formattedUrl
return nil
}),

Expand Down