Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[main] upgrade module to v9 standard go version workflow #3260

Open
wants to merge 18 commits into
base: main
Choose a base branch
from
Open
Changes from 1 commit
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
Prev Previous commit
Next Next commit
use counterfeiter generate for fake generation
  • Loading branch information
jcvrabo committed Jan 3, 2025

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
commit b0a06dfc88cb0c69b3447313da53c3d7ba776100
3 changes: 3 additions & 0 deletions api/cfnetworking/cfnetv1/cfvnetv1.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package cfnetv1

//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6 -generate
10 changes: 5 additions & 5 deletions api/cfnetworking/cfnetv1/connection_wrapper.go
Original file line number Diff line number Diff line change
@@ -2,16 +2,16 @@ package cfnetv1

import "code.cloudfoundry.org/cli/v9/api/cfnetworking"

//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6 . ConnectionWrapper

// ConnectionWrapper can wrap a given connection allowing the wrapper to modify
// all requests going in and out of the given connection.
//
//counterfeiter:generate . ConnectionWrapper
type ConnectionWrapper interface {
cfnetworking.Connection
Wrap(innerconnection cfnetworking.Connection) cfnetworking.Connection
cfnetworking.Connection
Wrap(innerconnection cfnetworking.Connection) cfnetworking.Connection
}

// WrapConnection wraps the current Client connection in the wrapper.
func (client *Client) WrapConnection(wrapper ConnectionWrapper) {
client.connection = wrapper.Wrap(client.connection)
client.connection = wrapper.Wrap(client.connection)
}
6 changes: 6 additions & 0 deletions api/cfnetworking/cfnetworking.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
// CF networking API. Copied from code.cloudfoundry.org/cfnetworking-cli-api
// to reduce recursive dependencies and allow proper go module management.

package cfnetworking

//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6 -generate
6 changes: 3 additions & 3 deletions api/cfnetworking/connection.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package cfnetworking

//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6 . Connection

// Connection creates and executes http requests
//
//counterfeiter:generate . Connection
type Connection interface {
Make(request *Request, passedResponse *Response) error
Make(request *Request, passedResponse *Response) error
}
31 changes: 15 additions & 16 deletions api/cfnetworking/request.go
Original file line number Diff line number Diff line change
@@ -1,35 +1,34 @@
package cfnetworking

import (
"io"
"net/http"
"io"
"net/http"
)

//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6 . ReadSeeker

//counterfeiter:generate . ReadSeeker
type ReadSeeker interface {
io.ReadSeeker
io.ReadSeeker
}

// Request represents the request of the cloud controller.
type Request struct {
*http.Request
*http.Request

body io.ReadSeeker
body io.ReadSeeker
}

func (r *Request) ResetBody() error {
if r.body == nil {
return nil
}
if r.body == nil {
return nil
}

_, err := r.body.Seek(0, 0)
return err
_, err := r.body.Seek(0, 0)
return err
}

func NewRequest(request *http.Request, body io.ReadSeeker) *Request {
return &Request{
Request: request,
body: body,
}
return &Request{
Request: request,
body: body,
}
}
232 changes: 116 additions & 116 deletions api/cfnetworking/wrapper/request_logger.go
Original file line number Diff line number Diff line change
@@ -1,156 +1,156 @@
package wrapper

import (
"fmt"
"io/ioutil"
"net/http"
"sort"
"strings"
"time"

"code.cloudfoundry.org/cli/v9/api/cfnetworking"
"fmt"
"io/ioutil"
"net/http"
"sort"
"strings"
"time"

"code.cloudfoundry.org/cli/v9/api/cfnetworking"
)

//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6 . RequestLoggerOutput

// RequestLoggerOutput is the interface for displaying logs
//
//counterfeiter:generate . RequestLoggerOutput
type RequestLoggerOutput interface {
DisplayHeader(name string, value string) error
DisplayHost(name string) error
DisplayJSONBody(body []byte) error
DisplayMessage(msg string) error
DisplayRequestHeader(method string, uri string, httpProtocol string) error
DisplayResponseHeader(httpProtocol string, status string) error
DisplayType(name string, requestDate time.Time) error
HandleInternalError(err error)
Start() error
Stop() error
DisplayHeader(name string, value string) error
DisplayHost(name string) error
DisplayJSONBody(body []byte) error
DisplayMessage(msg string) error
DisplayRequestHeader(method string, uri string, httpProtocol string) error
DisplayResponseHeader(httpProtocol string, status string) error
DisplayType(name string, requestDate time.Time) error
HandleInternalError(err error)
Start() error
Stop() error
}

// RequestLogger is the wrapper that logs requests to and responses from the
// Cloud Controller server
type RequestLogger struct {
connection cfnetworking.Connection
output RequestLoggerOutput
connection cfnetworking.Connection
output RequestLoggerOutput
}

// NewRequestLogger returns a pointer to a RequestLogger wrapper
func NewRequestLogger(output RequestLoggerOutput) *RequestLogger {
return &RequestLogger{
output: output,
}
return &RequestLogger{
output: output,
}
}

// Wrap sets the connection on the RequestLogger and returns itself
func (logger *RequestLogger) Wrap(innerconnection cfnetworking.Connection) cfnetworking.Connection {
logger.connection = innerconnection
return logger
logger.connection = innerconnection
return logger
}

// Make records the request and the response to UI
func (logger *RequestLogger) Make(request *cfnetworking.Request, passedResponse *cfnetworking.Response) error {
err := logger.displayRequest(request)
if err != nil {
logger.output.HandleInternalError(err)
}
err := logger.displayRequest(request)
if err != nil {
logger.output.HandleInternalError(err)
}

err = logger.connection.Make(request, passedResponse)
err = logger.connection.Make(request, passedResponse)

if passedResponse.HTTPResponse != nil {
displayErr := logger.displayResponse(passedResponse)
if displayErr != nil {
logger.output.HandleInternalError(displayErr)
}
}
if passedResponse.HTTPResponse != nil {
displayErr := logger.displayResponse(passedResponse)
if displayErr != nil {
logger.output.HandleInternalError(displayErr)
}
}

return err
return err
}

func (logger *RequestLogger) displayRequest(request *cfnetworking.Request) error {
err := logger.output.Start()
if err != nil {
return err
}
defer logger.output.Stop()

err = logger.output.DisplayType("REQUEST", time.Now())
if err != nil {
return err
}
err = logger.output.DisplayRequestHeader(request.Method, request.URL.RequestURI(), request.Proto)
if err != nil {
return err
}
err = logger.output.DisplayHost(request.URL.Host)
if err != nil {
return err
}
err = logger.displaySortedHeaders(request.Header)
if err != nil {
return err
}

contentType := request.Header.Get("Content-Type")
if request.Body != nil {
if strings.Contains(contentType, "json") {
rawRequestBody, err := ioutil.ReadAll(request.Body)
if err != nil {
return err
}

defer request.ResetBody()

return logger.output.DisplayJSONBody(rawRequestBody)
} else if contentType != "" {
return logger.output.DisplayMessage(fmt.Sprintf("[%s Content Hidden]", strings.Split(contentType, ";")[0]))
}
}
return nil
err := logger.output.Start()
if err != nil {
return err
}
defer logger.output.Stop()

err = logger.output.DisplayType("REQUEST", time.Now())
if err != nil {
return err
}
err = logger.output.DisplayRequestHeader(request.Method, request.URL.RequestURI(), request.Proto)
if err != nil {
return err
}
err = logger.output.DisplayHost(request.URL.Host)
if err != nil {
return err
}
err = logger.displaySortedHeaders(request.Header)
if err != nil {
return err
}

contentType := request.Header.Get("Content-Type")
if request.Body != nil {
if strings.Contains(contentType, "json") {
rawRequestBody, err := ioutil.ReadAll(request.Body)
if err != nil {
return err
}

defer request.ResetBody()

return logger.output.DisplayJSONBody(rawRequestBody)
} else if contentType != "" {
return logger.output.DisplayMessage(fmt.Sprintf("[%s Content Hidden]", strings.Split(contentType, ";")[0]))
}
}
return nil
}

func (logger *RequestLogger) displayResponse(passedResponse *cfnetworking.Response) error {
err := logger.output.Start()
if err != nil {
return err
}
defer logger.output.Stop()

err = logger.output.DisplayType("RESPONSE", time.Now())
if err != nil {
return err
}
err = logger.output.DisplayResponseHeader(passedResponse.HTTPResponse.Proto, passedResponse.HTTPResponse.Status)
if err != nil {
return err
}
err = logger.displaySortedHeaders(passedResponse.HTTPResponse.Header)
if err != nil {
return err
}
return logger.output.DisplayJSONBody(passedResponse.RawResponse)
err := logger.output.Start()
if err != nil {
return err
}
defer logger.output.Stop()

err = logger.output.DisplayType("RESPONSE", time.Now())
if err != nil {
return err
}
err = logger.output.DisplayResponseHeader(passedResponse.HTTPResponse.Proto, passedResponse.HTTPResponse.Status)
if err != nil {
return err
}
err = logger.displaySortedHeaders(passedResponse.HTTPResponse.Header)
if err != nil {
return err
}
return logger.output.DisplayJSONBody(passedResponse.RawResponse)
}

func (logger *RequestLogger) displaySortedHeaders(headers http.Header) error {
keys := []string{}
for key, _ := range headers {
keys = append(keys, key)
}
sort.Strings(keys)

for _, key := range keys {
for _, value := range headers[key] {
err := logger.output.DisplayHeader(key, redactHeaders(key, value))
if err != nil {
return err
}
}
}
return nil
keys := []string{}
for key, _ := range headers {
keys = append(keys, key)
}
sort.Strings(keys)

for _, key := range keys {
for _, value := range headers[key] {
err := logger.output.DisplayHeader(key, redactHeaders(key, value))
if err != nil {
return err
}
}
}
return nil
}

func redactHeaders(key string, value string) string {
if key == "Authorization" {
return "[PRIVATE DATA HIDDEN]"
}
return value
if key == "Authorization" {
return "[PRIVATE DATA HIDDEN]"
}
return value
}
8 changes: 4 additions & 4 deletions api/cfnetworking/wrapper/uaa_authentication.go
Original file line number Diff line number Diff line change
@@ -6,16 +6,16 @@ import (
"code.cloudfoundry.org/cli/v9/api/uaa"
)

//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6 . UAAClient

// UAAClient is the interface for getting a valid access token
//
//counterfeiter:generate . UAAClient
type UAAClient interface {
RefreshAccessToken(refreshToken string) (uaa.RefreshedTokens, error)
}

//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6 . TokenCache

// TokenCache is where the UAA token information is stored.
//
//counterfeiter:generate . TokenCache
type TokenCache interface {
AccessToken() string
RefreshToken() string
3 changes: 3 additions & 0 deletions api/cfnetworking/wrapper/wrapper.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package wrapper

//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6 -generate