mirror of
https://github.com/smallstep/certificates.git
synced 2024-10-31 03:20:16 +00:00
Fix errors.As linter warnings
This commit is contained in:
parent
d46c5b2f40
commit
4c7a2ce3eb
@ -38,14 +38,10 @@ func Error(rw http.ResponseWriter, err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
e, ok := err.(StackTracedError)
|
var st StackTracedError
|
||||||
if !ok {
|
if !errors.As(err, &st) {
|
||||||
e, ok = errors.Cause(err).(StackTracedError)
|
|
||||||
}
|
|
||||||
|
|
||||||
if ok {
|
|
||||||
rl.WithFields(map[string]interface{}{
|
rl.WithFields(map[string]interface{}{
|
||||||
"stack-trace": fmt.Sprintf("%+v", e.StackTrace()),
|
"stack-trace": fmt.Sprintf("%+v", st.StackTrace()),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ package render
|
|||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"google.golang.org/protobuf/encoding/protojson"
|
"google.golang.org/protobuf/encoding/protojson"
|
||||||
@ -77,8 +78,9 @@ type RenderableError interface {
|
|||||||
func Error(w http.ResponseWriter, err error) {
|
func Error(w http.ResponseWriter, err error) {
|
||||||
log.Error(w, err)
|
log.Error(w, err)
|
||||||
|
|
||||||
if e, ok := err.(RenderableError); ok {
|
var r RenderableError
|
||||||
e.Render(w)
|
if errors.As(err, &r) {
|
||||||
|
r.Render(w)
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -105,17 +107,18 @@ func statusCodeFromError(err error) (code int) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for err != nil {
|
for err != nil {
|
||||||
if sc, ok := err.(StatusCodedError); ok {
|
var sc StatusCodedError
|
||||||
|
if errors.As(err, &sc) {
|
||||||
code = sc.StatusCode()
|
code = sc.StatusCode()
|
||||||
|
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
cause, ok := err.(causer)
|
var c causer
|
||||||
if !ok {
|
if !errors.As(err, &c) {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
err = cause.Cause()
|
err = c.Cause()
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
|
@ -313,8 +313,8 @@ func TestAuthority_authorizeToken(t *testing.T) {
|
|||||||
p, err := tc.auth.authorizeToken(context.Background(), tc.token)
|
p, err := tc.auth.authorizeToken(context.Background(), tc.token)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if assert.NotNil(t, tc.err) {
|
if assert.NotNil(t, tc.err) {
|
||||||
sc, ok := err.(render.StatusCodedError)
|
var sc render.StatusCodedError
|
||||||
assert.Fatal(t, ok, "error does not implement StatusCodedError interface")
|
assert.Fatal(t, errors.As(err, &sc), "error does not implement StatusCodedError interface")
|
||||||
assert.Equals(t, sc.StatusCode(), tc.code)
|
assert.Equals(t, sc.StatusCode(), tc.code)
|
||||||
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
||||||
}
|
}
|
||||||
@ -399,8 +399,8 @@ func TestAuthority_authorizeRevoke(t *testing.T) {
|
|||||||
|
|
||||||
if err := tc.auth.authorizeRevoke(context.Background(), tc.token); err != nil {
|
if err := tc.auth.authorizeRevoke(context.Background(), tc.token); err != nil {
|
||||||
if assert.NotNil(t, tc.err) {
|
if assert.NotNil(t, tc.err) {
|
||||||
sc, ok := err.(render.StatusCodedError)
|
var sc render.StatusCodedError
|
||||||
assert.Fatal(t, ok, "error does not implement StatusCodedError interface")
|
assert.Fatal(t, errors.As(err, &sc), "error does not implement StatusCodedError interface")
|
||||||
assert.Equals(t, sc.StatusCode(), tc.code)
|
assert.Equals(t, sc.StatusCode(), tc.code)
|
||||||
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
||||||
}
|
}
|
||||||
@ -484,8 +484,8 @@ func TestAuthority_authorizeSign(t *testing.T) {
|
|||||||
got, err := tc.auth.authorizeSign(context.Background(), tc.token)
|
got, err := tc.auth.authorizeSign(context.Background(), tc.token)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if assert.NotNil(t, tc.err) {
|
if assert.NotNil(t, tc.err) {
|
||||||
sc, ok := err.(render.StatusCodedError)
|
var sc render.StatusCodedError
|
||||||
assert.Fatal(t, ok, "error does not implement StatusCodedError interface")
|
assert.Fatal(t, errors.As(err, &sc), "error does not implement StatusCodedError interface")
|
||||||
assert.Equals(t, sc.StatusCode(), tc.code)
|
assert.Equals(t, sc.StatusCode(), tc.code)
|
||||||
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
||||||
}
|
}
|
||||||
@ -743,8 +743,8 @@ func TestAuthority_Authorize(t *testing.T) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
if assert.NotNil(t, tc.err, fmt.Sprintf("unexpected error: %s", err)) {
|
if assert.NotNil(t, tc.err, fmt.Sprintf("unexpected error: %s", err)) {
|
||||||
assert.Nil(t, got)
|
assert.Nil(t, got)
|
||||||
sc, ok := err.(render.StatusCodedError)
|
var sc render.StatusCodedError
|
||||||
assert.Fatal(t, ok, "error does not implement StatusCodedError interface")
|
assert.Fatal(t, errors.As(err, &sc), "error does not implement StatusCodedError interface")
|
||||||
assert.Equals(t, sc.StatusCode(), tc.code)
|
assert.Equals(t, sc.StatusCode(), tc.code)
|
||||||
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
||||||
|
|
||||||
@ -879,8 +879,8 @@ func TestAuthority_authorizeRenew(t *testing.T) {
|
|||||||
err := tc.auth.authorizeRenew(tc.cert)
|
err := tc.auth.authorizeRenew(tc.cert)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if assert.NotNil(t, tc.err) {
|
if assert.NotNil(t, tc.err) {
|
||||||
sc, ok := err.(render.StatusCodedError)
|
var sc render.StatusCodedError
|
||||||
assert.Fatal(t, ok, "error does not implement StatusCoder interface")
|
assert.Fatal(t, errors.As(err, &sc), "error does not implement StatusCodedError interface")
|
||||||
assert.Equals(t, sc.StatusCode(), tc.code)
|
assert.Equals(t, sc.StatusCode(), tc.code)
|
||||||
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
||||||
|
|
||||||
@ -1027,8 +1027,8 @@ func TestAuthority_authorizeSSHSign(t *testing.T) {
|
|||||||
got, err := tc.auth.authorizeSSHSign(context.Background(), tc.token)
|
got, err := tc.auth.authorizeSSHSign(context.Background(), tc.token)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if assert.NotNil(t, tc.err) {
|
if assert.NotNil(t, tc.err) {
|
||||||
sc, ok := err.(render.StatusCodedError)
|
var sc render.StatusCodedError
|
||||||
assert.Fatal(t, ok, "error does not implement StatusCodedError interface")
|
assert.Fatal(t, errors.As(err, &sc), "error does not implement StatusCodedError interface")
|
||||||
assert.Equals(t, sc.StatusCode(), tc.code)
|
assert.Equals(t, sc.StatusCode(), tc.code)
|
||||||
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
||||||
}
|
}
|
||||||
@ -1144,8 +1144,8 @@ func TestAuthority_authorizeSSHRenew(t *testing.T) {
|
|||||||
got, err := tc.auth.authorizeSSHRenew(context.Background(), tc.token)
|
got, err := tc.auth.authorizeSSHRenew(context.Background(), tc.token)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if assert.NotNil(t, tc.err) {
|
if assert.NotNil(t, tc.err) {
|
||||||
sc, ok := err.(render.StatusCodedError)
|
var sc render.StatusCodedError
|
||||||
assert.Fatal(t, ok, "error does not implement StatusCodedError interface")
|
assert.Fatal(t, errors.As(err, &sc), "error does not implement StatusCodedError interface")
|
||||||
assert.Equals(t, sc.StatusCode(), tc.code)
|
assert.Equals(t, sc.StatusCode(), tc.code)
|
||||||
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
||||||
}
|
}
|
||||||
@ -1244,8 +1244,8 @@ func TestAuthority_authorizeSSHRevoke(t *testing.T) {
|
|||||||
|
|
||||||
if err := tc.auth.authorizeSSHRevoke(context.Background(), tc.token); err != nil {
|
if err := tc.auth.authorizeSSHRevoke(context.Background(), tc.token); err != nil {
|
||||||
if assert.NotNil(t, tc.err) {
|
if assert.NotNil(t, tc.err) {
|
||||||
sc, ok := err.(render.StatusCodedError)
|
var sc render.StatusCodedError
|
||||||
assert.Fatal(t, ok, "error does not implement StatusCodedError interface")
|
assert.Fatal(t, errors.As(err, &sc), "error does not implement StatusCodedError interface")
|
||||||
assert.Equals(t, sc.StatusCode(), tc.code)
|
assert.Equals(t, sc.StatusCode(), tc.code)
|
||||||
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
||||||
}
|
}
|
||||||
@ -1337,8 +1337,8 @@ func TestAuthority_authorizeSSHRekey(t *testing.T) {
|
|||||||
cert, signOpts, err := tc.auth.authorizeSSHRekey(context.Background(), tc.token)
|
cert, signOpts, err := tc.auth.authorizeSSHRekey(context.Background(), tc.token)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if assert.NotNil(t, tc.err) {
|
if assert.NotNil(t, tc.err) {
|
||||||
sc, ok := err.(render.StatusCodedError)
|
var sc render.StatusCodedError
|
||||||
assert.Fatal(t, ok, "error does not implement StatusCodedError interface")
|
assert.Fatal(t, errors.As(err, &sc), "error does not implement StatusCodedError interface")
|
||||||
assert.Equals(t, sc.StatusCode(), tc.code)
|
assert.Equals(t, sc.StatusCode(), tc.code)
|
||||||
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
||||||
}
|
}
|
||||||
|
@ -522,8 +522,8 @@ func TestAWS_authorizeToken(t *testing.T) {
|
|||||||
tc := tt(t)
|
tc := tt(t)
|
||||||
if claims, err := tc.p.authorizeToken(tc.token); err != nil {
|
if claims, err := tc.p.authorizeToken(tc.token); err != nil {
|
||||||
if assert.NotNil(t, tc.err) {
|
if assert.NotNil(t, tc.err) {
|
||||||
sc, ok := err.(render.StatusCodedError)
|
var sc render.StatusCodedError
|
||||||
assert.Fatal(t, ok, "error does not implement StatusCodedError interface")
|
assert.Fatal(t, errors.As(err, &sc), "error does not implement StatusCodedError interface")
|
||||||
assert.Equals(t, sc.StatusCode(), tc.code)
|
assert.Equals(t, sc.StatusCode(), tc.code)
|
||||||
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
||||||
}
|
}
|
||||||
@ -669,8 +669,8 @@ func TestAWS_AuthorizeSign(t *testing.T) {
|
|||||||
t.Errorf("AWS.AuthorizeSign() error = %v, wantErr %v", err, tt.wantErr)
|
t.Errorf("AWS.AuthorizeSign() error = %v, wantErr %v", err, tt.wantErr)
|
||||||
return
|
return
|
||||||
case err != nil:
|
case err != nil:
|
||||||
sc, ok := err.(render.StatusCodedError)
|
var sc render.StatusCodedError
|
||||||
assert.Fatal(t, ok, "error does not implement StatusCodedError interface")
|
assert.Fatal(t, errors.As(err, &sc), "error does not implement StatusCodedError interface")
|
||||||
assert.Equals(t, sc.StatusCode(), tt.code)
|
assert.Equals(t, sc.StatusCode(), tt.code)
|
||||||
default:
|
default:
|
||||||
assert.Equals(t, tt.wantLen, len(got))
|
assert.Equals(t, tt.wantLen, len(got))
|
||||||
@ -807,8 +807,8 @@ func TestAWS_AuthorizeSSHSign(t *testing.T) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
sc, ok := err.(render.StatusCodedError)
|
var sc render.StatusCodedError
|
||||||
assert.Fatal(t, ok, "error does not implement StatusCodedError interface")
|
assert.Fatal(t, errors.As(err, &sc), "error does not implement StatusCodedError interface")
|
||||||
assert.Equals(t, sc.StatusCode(), tt.code)
|
assert.Equals(t, sc.StatusCode(), tt.code)
|
||||||
assert.Nil(t, got)
|
assert.Nil(t, got)
|
||||||
} else if assert.NotNil(t, got) {
|
} else if assert.NotNil(t, got) {
|
||||||
@ -864,8 +864,8 @@ func TestAWS_AuthorizeRenew(t *testing.T) {
|
|||||||
if err := tt.aws.AuthorizeRenew(context.Background(), tt.args.cert); (err != nil) != tt.wantErr {
|
if err := tt.aws.AuthorizeRenew(context.Background(), tt.args.cert); (err != nil) != tt.wantErr {
|
||||||
t.Errorf("AWS.AuthorizeRenew() error = %v, wantErr %v", err, tt.wantErr)
|
t.Errorf("AWS.AuthorizeRenew() error = %v, wantErr %v", err, tt.wantErr)
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
sc, ok := err.(render.StatusCodedError)
|
var sc render.StatusCodedError
|
||||||
assert.Fatal(t, ok, "error does not implement StatusCodedError interface")
|
assert.Fatal(t, errors.As(err, &sc), "error does not implement StatusCodedError interface")
|
||||||
assert.Equals(t, sc.StatusCode(), tt.code)
|
assert.Equals(t, sc.StatusCode(), tt.code)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -336,8 +336,8 @@ func TestAzure_authorizeToken(t *testing.T) {
|
|||||||
tc := tt(t)
|
tc := tt(t)
|
||||||
if claims, name, group, subscriptionID, objectID, err := tc.p.authorizeToken(tc.token); err != nil {
|
if claims, name, group, subscriptionID, objectID, err := tc.p.authorizeToken(tc.token); err != nil {
|
||||||
if assert.NotNil(t, tc.err) {
|
if assert.NotNil(t, tc.err) {
|
||||||
sc, ok := err.(render.StatusCodedError)
|
var sc render.StatusCodedError
|
||||||
assert.Fatal(t, ok, "error does not implement StatusCodedError interface")
|
assert.Fatal(t, errors.As(err, &sc), "error does not implement StatusCodedError interface")
|
||||||
assert.Equals(t, sc.StatusCode(), tc.code)
|
assert.Equals(t, sc.StatusCode(), tc.code)
|
||||||
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
||||||
}
|
}
|
||||||
@ -498,8 +498,8 @@ func TestAzure_AuthorizeSign(t *testing.T) {
|
|||||||
t.Errorf("Azure.AuthorizeSign() error = %v, wantErr %v", err, tt.wantErr)
|
t.Errorf("Azure.AuthorizeSign() error = %v, wantErr %v", err, tt.wantErr)
|
||||||
return
|
return
|
||||||
case err != nil:
|
case err != nil:
|
||||||
sc, ok := err.(render.StatusCodedError)
|
var sc render.StatusCodedError
|
||||||
assert.Fatal(t, ok, "error does not implement StatusCodedError interface")
|
assert.Fatal(t, errors.As(err, &sc), "error does not implement StatusCodedError interface")
|
||||||
assert.Equals(t, sc.StatusCode(), tt.code)
|
assert.Equals(t, sc.StatusCode(), tt.code)
|
||||||
default:
|
default:
|
||||||
assert.Equals(t, tt.wantLen, len(got))
|
assert.Equals(t, tt.wantLen, len(got))
|
||||||
@ -576,8 +576,8 @@ func TestAzure_AuthorizeRenew(t *testing.T) {
|
|||||||
if err := tt.azure.AuthorizeRenew(context.Background(), tt.args.cert); (err != nil) != tt.wantErr {
|
if err := tt.azure.AuthorizeRenew(context.Background(), tt.args.cert); (err != nil) != tt.wantErr {
|
||||||
t.Errorf("Azure.AuthorizeRenew() error = %v, wantErr %v", err, tt.wantErr)
|
t.Errorf("Azure.AuthorizeRenew() error = %v, wantErr %v", err, tt.wantErr)
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
sc, ok := err.(render.StatusCodedError)
|
var sc render.StatusCodedError
|
||||||
assert.Fatal(t, ok, "error does not implement StatusCodedError interface")
|
assert.Fatal(t, errors.As(err, &sc), "error does not implement StatusCodedError interface")
|
||||||
assert.Equals(t, sc.StatusCode(), tt.code)
|
assert.Equals(t, sc.StatusCode(), tt.code)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -673,8 +673,8 @@ func TestAzure_AuthorizeSSHSign(t *testing.T) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
sc, ok := err.(render.StatusCodedError)
|
var sc render.StatusCodedError
|
||||||
assert.Fatal(t, ok, "error does not implement StatusCodedError interface")
|
assert.Fatal(t, errors.As(err, &sc), "error does not implement StatusCodedError interface")
|
||||||
assert.Equals(t, sc.StatusCode(), tt.code)
|
assert.Equals(t, sc.StatusCode(), tt.code)
|
||||||
assert.Nil(t, got)
|
assert.Nil(t, got)
|
||||||
} else if assert.NotNil(t, got) {
|
} else if assert.NotNil(t, got) {
|
||||||
|
@ -391,8 +391,8 @@ func TestGCP_authorizeToken(t *testing.T) {
|
|||||||
tc := tt(t)
|
tc := tt(t)
|
||||||
if claims, err := tc.p.authorizeToken(tc.token); err != nil {
|
if claims, err := tc.p.authorizeToken(tc.token); err != nil {
|
||||||
if assert.NotNil(t, tc.err) {
|
if assert.NotNil(t, tc.err) {
|
||||||
sc, ok := err.(render.StatusCodedError)
|
var sc render.StatusCodedError
|
||||||
assert.Fatal(t, ok, "error does not implement StatusCodedError interface")
|
assert.Fatal(t, errors.As(err, &sc), "error does not implement StatusCodedError interface")
|
||||||
assert.Equals(t, sc.StatusCode(), tc.code)
|
assert.Equals(t, sc.StatusCode(), tc.code)
|
||||||
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
||||||
}
|
}
|
||||||
@ -541,8 +541,8 @@ func TestGCP_AuthorizeSign(t *testing.T) {
|
|||||||
t.Errorf("GCP.AuthorizeSign() error = %v, wantErr %v", err, tt.wantErr)
|
t.Errorf("GCP.AuthorizeSign() error = %v, wantErr %v", err, tt.wantErr)
|
||||||
return
|
return
|
||||||
case err != nil:
|
case err != nil:
|
||||||
sc, ok := err.(render.StatusCodedError)
|
var sc render.StatusCodedError
|
||||||
assert.Fatal(t, ok, "error does not implement StatusCodedError interface")
|
assert.Fatal(t, errors.As(err, &sc), "error does not implement StatusCodedError interface")
|
||||||
assert.Equals(t, sc.StatusCode(), tt.code)
|
assert.Equals(t, sc.StatusCode(), tt.code)
|
||||||
default:
|
default:
|
||||||
assert.Equals(t, tt.wantLen, len(got))
|
assert.Equals(t, tt.wantLen, len(got))
|
||||||
@ -682,8 +682,8 @@ func TestGCP_AuthorizeSSHSign(t *testing.T) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
sc, ok := err.(render.StatusCodedError)
|
var sc render.StatusCodedError
|
||||||
assert.Fatal(t, ok, "error does not implement StatusCodedError interface")
|
assert.Fatal(t, errors.As(err, &sc), "error does not implement StatusCodedError interface")
|
||||||
assert.Equals(t, sc.StatusCode(), tt.code)
|
assert.Equals(t, sc.StatusCode(), tt.code)
|
||||||
assert.Nil(t, got)
|
assert.Nil(t, got)
|
||||||
} else if assert.NotNil(t, got) {
|
} else if assert.NotNil(t, got) {
|
||||||
@ -739,8 +739,8 @@ func TestGCP_AuthorizeRenew(t *testing.T) {
|
|||||||
if err := tt.prov.AuthorizeRenew(context.Background(), tt.args.cert); (err != nil) != tt.wantErr {
|
if err := tt.prov.AuthorizeRenew(context.Background(), tt.args.cert); (err != nil) != tt.wantErr {
|
||||||
t.Errorf("GCP.AuthorizeRenew() error = %v, wantErr %v", err, tt.wantErr)
|
t.Errorf("GCP.AuthorizeRenew() error = %v, wantErr %v", err, tt.wantErr)
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
sc, ok := err.(render.StatusCodedError)
|
var sc render.StatusCodedError
|
||||||
assert.Fatal(t, ok, "error does not implement StatusCoder interface")
|
assert.Fatal(t, errors.As(err, &sc), "error does not implement StatusCodedError interface")
|
||||||
assert.Equals(t, sc.StatusCode(), tt.code)
|
assert.Equals(t, sc.StatusCode(), tt.code)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -185,8 +185,8 @@ func TestJWK_authorizeToken(t *testing.T) {
|
|||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
if got, err := tt.prov.authorizeToken(tt.args.token, testAudiences.Sign); err != nil {
|
if got, err := tt.prov.authorizeToken(tt.args.token, testAudiences.Sign); err != nil {
|
||||||
if assert.NotNil(t, tt.err) {
|
if assert.NotNil(t, tt.err) {
|
||||||
sc, ok := err.(render.StatusCodedError)
|
var sc render.StatusCodedError
|
||||||
assert.Fatal(t, ok, "error does not implement StatusCodedError interface")
|
assert.Fatal(t, errors.As(err, &sc), "error does not implement StatusCodedError interface")
|
||||||
assert.Equals(t, sc.StatusCode(), tt.code)
|
assert.Equals(t, sc.StatusCode(), tt.code)
|
||||||
assert.HasPrefix(t, err.Error(), tt.err.Error())
|
assert.HasPrefix(t, err.Error(), tt.err.Error())
|
||||||
}
|
}
|
||||||
@ -225,8 +225,8 @@ func TestJWK_AuthorizeRevoke(t *testing.T) {
|
|||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
if err := tt.prov.AuthorizeRevoke(context.Background(), tt.args.token); err != nil {
|
if err := tt.prov.AuthorizeRevoke(context.Background(), tt.args.token); err != nil {
|
||||||
if assert.NotNil(t, tt.err) {
|
if assert.NotNil(t, tt.err) {
|
||||||
sc, ok := err.(render.StatusCodedError)
|
var sc render.StatusCodedError
|
||||||
assert.Fatal(t, ok, "error does not implement StatusCodedError interface")
|
assert.Fatal(t, errors.As(err, &sc), "error does not implement StatusCodedError interface")
|
||||||
assert.Equals(t, sc.StatusCode(), tt.code)
|
assert.Equals(t, sc.StatusCode(), tt.code)
|
||||||
assert.HasPrefix(t, err.Error(), tt.err.Error())
|
assert.HasPrefix(t, err.Error(), tt.err.Error())
|
||||||
}
|
}
|
||||||
@ -290,8 +290,8 @@ func TestJWK_AuthorizeSign(t *testing.T) {
|
|||||||
ctx := NewContextWithMethod(context.Background(), SignMethod)
|
ctx := NewContextWithMethod(context.Background(), SignMethod)
|
||||||
if got, err := tt.prov.AuthorizeSign(ctx, tt.args.token); err != nil {
|
if got, err := tt.prov.AuthorizeSign(ctx, tt.args.token); err != nil {
|
||||||
if assert.NotNil(t, tt.err) {
|
if assert.NotNil(t, tt.err) {
|
||||||
sc, ok := err.(render.StatusCodedError)
|
var sc render.StatusCodedError
|
||||||
assert.Fatal(t, ok, "error does not implement StatusCodedError interface")
|
assert.Fatal(t, errors.As(err, &sc), "error does not implement StatusCodedError interface")
|
||||||
assert.Equals(t, sc.StatusCode(), tt.code)
|
assert.Equals(t, sc.StatusCode(), tt.code)
|
||||||
assert.HasPrefix(t, err.Error(), tt.err.Error())
|
assert.HasPrefix(t, err.Error(), tt.err.Error())
|
||||||
}
|
}
|
||||||
@ -366,8 +366,8 @@ func TestJWK_AuthorizeRenew(t *testing.T) {
|
|||||||
if err := tt.prov.AuthorizeRenew(context.Background(), tt.args.cert); (err != nil) != tt.wantErr {
|
if err := tt.prov.AuthorizeRenew(context.Background(), tt.args.cert); (err != nil) != tt.wantErr {
|
||||||
t.Errorf("JWK.AuthorizeRenew() error = %v, wantErr %v", err, tt.wantErr)
|
t.Errorf("JWK.AuthorizeRenew() error = %v, wantErr %v", err, tt.wantErr)
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
sc, ok := err.(render.StatusCodedError)
|
var sc render.StatusCodedError
|
||||||
assert.Fatal(t, ok, "error does not implement StatusCodedError interface")
|
assert.Fatal(t, errors.As(err, &sc), "error does not implement StatusCodedError interface")
|
||||||
assert.Equals(t, sc.StatusCode(), tt.code)
|
assert.Equals(t, sc.StatusCode(), tt.code)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -461,8 +461,8 @@ func TestJWK_AuthorizeSSHSign(t *testing.T) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
sc, ok := err.(render.StatusCodedError)
|
var sc render.StatusCodedError
|
||||||
assert.Fatal(t, ok, "error does not implement StatusCodedError interface")
|
assert.Fatal(t, errors.As(err, &sc), "error does not implement StatusCodedError interface")
|
||||||
assert.Equals(t, sc.StatusCode(), tt.code)
|
assert.Equals(t, sc.StatusCode(), tt.code)
|
||||||
assert.Nil(t, got)
|
assert.Nil(t, got)
|
||||||
} else if assert.NotNil(t, got) {
|
} else if assert.NotNil(t, got) {
|
||||||
@ -626,8 +626,8 @@ func TestJWK_AuthorizeSSHRevoke(t *testing.T) {
|
|||||||
tc := tt(t)
|
tc := tt(t)
|
||||||
if err := tc.p.AuthorizeSSHRevoke(context.Background(), tc.token); err != nil {
|
if err := tc.p.AuthorizeSSHRevoke(context.Background(), tc.token); err != nil {
|
||||||
if assert.NotNil(t, tc.err) {
|
if assert.NotNil(t, tc.err) {
|
||||||
sc, ok := err.(render.StatusCodedError)
|
var sc render.StatusCodedError
|
||||||
assert.Fatal(t, ok, "error does not implement StatusCodedError interface")
|
assert.Fatal(t, errors.As(err, &sc), "error does not implement StatusCodedError interface")
|
||||||
assert.Equals(t, sc.StatusCode(), tc.code)
|
assert.Equals(t, sc.StatusCode(), tc.code)
|
||||||
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
||||||
}
|
}
|
||||||
|
@ -118,8 +118,8 @@ func TestK8sSA_authorizeToken(t *testing.T) {
|
|||||||
tc := tt(t)
|
tc := tt(t)
|
||||||
if claims, err := tc.p.authorizeToken(tc.token, testAudiences.Sign); err != nil {
|
if claims, err := tc.p.authorizeToken(tc.token, testAudiences.Sign); err != nil {
|
||||||
if assert.NotNil(t, tc.err) {
|
if assert.NotNil(t, tc.err) {
|
||||||
sc, ok := err.(render.StatusCodedError)
|
var sc render.StatusCodedError
|
||||||
assert.Fatal(t, ok, "error does not implement StatusCodedError interface")
|
assert.Fatal(t, errors.As(err, &sc), "error does not implement StatusCodedError interface")
|
||||||
assert.Equals(t, sc.StatusCode(), tc.code)
|
assert.Equals(t, sc.StatusCode(), tc.code)
|
||||||
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
||||||
}
|
}
|
||||||
@ -167,8 +167,8 @@ func TestK8sSA_AuthorizeRevoke(t *testing.T) {
|
|||||||
t.Run(name, func(t *testing.T) {
|
t.Run(name, func(t *testing.T) {
|
||||||
tc := tt(t)
|
tc := tt(t)
|
||||||
if err := tc.p.AuthorizeRevoke(context.Background(), tc.token); err != nil {
|
if err := tc.p.AuthorizeRevoke(context.Background(), tc.token); err != nil {
|
||||||
sc, ok := err.(render.StatusCodedError)
|
var sc render.StatusCodedError
|
||||||
assert.Fatal(t, ok, "error does not implement StatusCodedError interface")
|
assert.Fatal(t, errors.As(err, &sc), "error does not implement StatusCodedError interface")
|
||||||
assert.Equals(t, sc.StatusCode(), tc.code)
|
assert.Equals(t, sc.StatusCode(), tc.code)
|
||||||
if assert.NotNil(t, tc.err) {
|
if assert.NotNil(t, tc.err) {
|
||||||
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
||||||
@ -223,8 +223,8 @@ func TestK8sSA_AuthorizeRenew(t *testing.T) {
|
|||||||
t.Run(name, func(t *testing.T) {
|
t.Run(name, func(t *testing.T) {
|
||||||
tc := tt(t)
|
tc := tt(t)
|
||||||
if err := tc.p.AuthorizeRenew(context.Background(), tc.cert); err != nil {
|
if err := tc.p.AuthorizeRenew(context.Background(), tc.cert); err != nil {
|
||||||
sc, ok := err.(render.StatusCodedError)
|
var sc render.StatusCodedError
|
||||||
assert.Fatal(t, ok, "error does not implement StatusCodedError interface")
|
assert.Fatal(t, errors.As(err, &sc), "error does not implement StatusCodedError interface")
|
||||||
assert.Equals(t, sc.StatusCode(), tc.code)
|
assert.Equals(t, sc.StatusCode(), tc.code)
|
||||||
if assert.NotNil(t, tc.err) {
|
if assert.NotNil(t, tc.err) {
|
||||||
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
||||||
@ -272,8 +272,8 @@ func TestK8sSA_AuthorizeSign(t *testing.T) {
|
|||||||
tc := tt(t)
|
tc := tt(t)
|
||||||
if opts, err := tc.p.AuthorizeSign(context.Background(), tc.token); err != nil {
|
if opts, err := tc.p.AuthorizeSign(context.Background(), tc.token); err != nil {
|
||||||
if assert.NotNil(t, tc.err) {
|
if assert.NotNil(t, tc.err) {
|
||||||
sc, ok := err.(render.StatusCodedError)
|
var sc render.StatusCodedError
|
||||||
assert.Fatal(t, ok, "error does not implement StatusCodedError interface")
|
assert.Fatal(t, errors.As(err, &sc), "error does not implement StatusCodedError interface")
|
||||||
assert.Equals(t, sc.StatusCode(), tc.code)
|
assert.Equals(t, sc.StatusCode(), tc.code)
|
||||||
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
||||||
}
|
}
|
||||||
@ -360,8 +360,8 @@ func TestK8sSA_AuthorizeSSHSign(t *testing.T) {
|
|||||||
tc := tt(t)
|
tc := tt(t)
|
||||||
if opts, err := tc.p.AuthorizeSSHSign(context.Background(), tc.token); err != nil {
|
if opts, err := tc.p.AuthorizeSSHSign(context.Background(), tc.token); err != nil {
|
||||||
if assert.NotNil(t, tc.err) {
|
if assert.NotNil(t, tc.err) {
|
||||||
sc, ok := err.(render.StatusCodedError)
|
var sc render.StatusCodedError
|
||||||
assert.Fatal(t, ok, "error does not implement StatusCodedError interface")
|
assert.Fatal(t, errors.As(err, &sc), "error does not implement StatusCodedError interface")
|
||||||
assert.Equals(t, sc.StatusCode(), tc.code)
|
assert.Equals(t, sc.StatusCode(), tc.code)
|
||||||
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
||||||
}
|
}
|
||||||
|
@ -247,8 +247,8 @@ func TestOIDC_authorizeToken(t *testing.T) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
sc, ok := err.(render.StatusCodedError)
|
var sc render.StatusCodedError
|
||||||
assert.Fatal(t, ok, "error does not implement StatusCodedError interface")
|
assert.Fatal(t, errors.As(err, &sc), "error does not implement StatusCodedError interface")
|
||||||
assert.Equals(t, sc.StatusCode(), tt.code)
|
assert.Equals(t, sc.StatusCode(), tt.code)
|
||||||
assert.Nil(t, got)
|
assert.Nil(t, got)
|
||||||
} else {
|
} else {
|
||||||
@ -318,8 +318,8 @@ func TestOIDC_AuthorizeSign(t *testing.T) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
sc, ok := err.(render.StatusCodedError)
|
var sc render.StatusCodedError
|
||||||
assert.Fatal(t, ok, "error does not implement StatusCodedError interface")
|
assert.Fatal(t, errors.As(err, &sc), "error does not implement StatusCodedError interface")
|
||||||
assert.Equals(t, sc.StatusCode(), tt.code)
|
assert.Equals(t, sc.StatusCode(), tt.code)
|
||||||
assert.Nil(t, got)
|
assert.Nil(t, got)
|
||||||
} else if assert.NotNil(t, got) {
|
} else if assert.NotNil(t, got) {
|
||||||
@ -406,8 +406,8 @@ func TestOIDC_AuthorizeRevoke(t *testing.T) {
|
|||||||
t.Errorf("OIDC.Authorize() error = %v, wantErr %v", err, tt.wantErr)
|
t.Errorf("OIDC.Authorize() error = %v, wantErr %v", err, tt.wantErr)
|
||||||
return
|
return
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
sc, ok := err.(render.StatusCodedError)
|
var sc render.StatusCodedError
|
||||||
assert.Fatal(t, ok, "error does not implement StatusCodedError interface")
|
assert.Fatal(t, errors.As(err, &sc), "error does not implement StatusCodedError interface")
|
||||||
assert.Equals(t, sc.StatusCode(), tt.code)
|
assert.Equals(t, sc.StatusCode(), tt.code)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -452,8 +452,8 @@ func TestOIDC_AuthorizeRenew(t *testing.T) {
|
|||||||
if (err != nil) != tt.wantErr {
|
if (err != nil) != tt.wantErr {
|
||||||
t.Errorf("OIDC.AuthorizeRenew() error = %v, wantErr %v", err, tt.wantErr)
|
t.Errorf("OIDC.AuthorizeRenew() error = %v, wantErr %v", err, tt.wantErr)
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
sc, ok := err.(render.StatusCodedError)
|
var sc render.StatusCodedError
|
||||||
assert.Fatal(t, ok, "error does not implement StatusCodedError interface")
|
assert.Fatal(t, errors.As(err, &sc), "error does not implement StatusCodedError interface")
|
||||||
assert.Equals(t, sc.StatusCode(), tt.code)
|
assert.Equals(t, sc.StatusCode(), tt.code)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -614,8 +614,8 @@ func TestOIDC_AuthorizeSSHSign(t *testing.T) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
sc, ok := err.(render.StatusCodedError)
|
var sc render.StatusCodedError
|
||||||
assert.Fatal(t, ok, "error does not implement StatusCodedError interface")
|
assert.Fatal(t, errors.As(err, &sc), "error does not implement StatusCodedError interface")
|
||||||
assert.Equals(t, sc.StatusCode(), tt.code)
|
assert.Equals(t, sc.StatusCode(), tt.code)
|
||||||
assert.Nil(t, got)
|
assert.Nil(t, got)
|
||||||
} else if assert.NotNil(t, got) {
|
} else if assert.NotNil(t, got) {
|
||||||
@ -682,8 +682,8 @@ func TestOIDC_AuthorizeSSHRevoke(t *testing.T) {
|
|||||||
if (err != nil) != tt.wantErr {
|
if (err != nil) != tt.wantErr {
|
||||||
t.Errorf("OIDC.AuthorizeSSHRevoke() error = %v, wantErr %v", err, tt.wantErr)
|
t.Errorf("OIDC.AuthorizeSSHRevoke() error = %v, wantErr %v", err, tt.wantErr)
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
sc, ok := err.(render.StatusCodedError)
|
var sc render.StatusCodedError
|
||||||
assert.Fatal(t, ok, "error does not implement StatusCodedError interface")
|
assert.Fatal(t, errors.As(err, &sc), "error does not implement StatusCodedError interface")
|
||||||
assert.Equals(t, sc.StatusCode(), tt.code)
|
assert.Equals(t, sc.StatusCode(), tt.code)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -32,8 +32,8 @@ func TestRoot(t *testing.T) {
|
|||||||
crt, err := a.Root(tc.sum)
|
crt, err := a.Root(tc.sum)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if assert.NotNil(t, tc.err) {
|
if assert.NotNil(t, tc.err) {
|
||||||
sc, ok := err.(render.StatusCodedError)
|
var sc render.StatusCodedError
|
||||||
assert.Fatal(t, ok, "error does not implement StatusCoder interface")
|
assert.Fatal(t, errors.As(err, &sc), "error does not implement StatusCodedError interface")
|
||||||
assert.Equals(t, sc.StatusCode(), tc.code)
|
assert.Equals(t, sc.StatusCode(), tc.code)
|
||||||
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
||||||
}
|
}
|
||||||
|
@ -850,8 +850,8 @@ func TestAuthority_GetSSHHosts(t *testing.T) {
|
|||||||
hosts, err := auth.GetSSHHosts(context.Background(), tc.cert)
|
hosts, err := auth.GetSSHHosts(context.Background(), tc.cert)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if assert.NotNil(t, tc.err) {
|
if assert.NotNil(t, tc.err) {
|
||||||
sc, ok := err.(render.StatusCodedError)
|
var sc render.StatusCodedError
|
||||||
assert.Fatal(t, ok, "error does not implement StatusCodedError interface")
|
assert.Fatal(t, errors.As(err, &sc), "error does not implement StatusCodedError interface")
|
||||||
assert.Equals(t, sc.StatusCode(), tc.code)
|
assert.Equals(t, sc.StatusCode(), tc.code)
|
||||||
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
||||||
}
|
}
|
||||||
@ -1077,8 +1077,8 @@ func TestAuthority_RekeySSH(t *testing.T) {
|
|||||||
cert, err := auth.RekeySSH(context.Background(), tc.cert, tc.key, tc.signOpts...)
|
cert, err := auth.RekeySSH(context.Background(), tc.cert, tc.key, tc.signOpts...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if assert.NotNil(t, tc.err) {
|
if assert.NotNil(t, tc.err) {
|
||||||
sc, ok := err.(render.StatusCodedError)
|
var sc render.StatusCodedError
|
||||||
assert.Fatal(t, ok, "error does not implement StatusCodedError interface")
|
assert.Fatal(t, errors.As(err, &sc), "error does not implement StatusCodedError interface")
|
||||||
assert.Equals(t, sc.StatusCode(), tc.code)
|
assert.Equals(t, sc.StatusCode(), tc.code)
|
||||||
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
||||||
}
|
}
|
||||||
|
@ -730,8 +730,8 @@ ZYtQ9Ot36qc=
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
if assert.NotNil(t, tc.err, fmt.Sprintf("unexpected error: %s", err)) {
|
if assert.NotNil(t, tc.err, fmt.Sprintf("unexpected error: %s", err)) {
|
||||||
assert.Nil(t, certChain)
|
assert.Nil(t, certChain)
|
||||||
sc, ok := err.(render.StatusCodedError)
|
var sc render.StatusCodedError
|
||||||
assert.Fatal(t, ok, "error does not implement StatusCodedError interface")
|
assert.Fatal(t, errors.As(err, &sc), "error does not implement StatusCodedError interface")
|
||||||
assert.Equals(t, sc.StatusCode(), tc.code)
|
assert.Equals(t, sc.StatusCode(), tc.code)
|
||||||
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
||||||
|
|
||||||
@ -929,8 +929,8 @@ func TestAuthority_Renew(t *testing.T) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
if assert.NotNil(t, tc.err, fmt.Sprintf("unexpected error: %s", err)) {
|
if assert.NotNil(t, tc.err, fmt.Sprintf("unexpected error: %s", err)) {
|
||||||
assert.Nil(t, certChain)
|
assert.Nil(t, certChain)
|
||||||
sc, ok := err.(render.StatusCodedError)
|
var sc render.StatusCodedError
|
||||||
assert.Fatal(t, ok, "error does not implement StatusCodedError interface")
|
assert.Fatal(t, errors.As(err, &sc), "error does not implement StatusCodedError interface")
|
||||||
assert.Equals(t, sc.StatusCode(), tc.code)
|
assert.Equals(t, sc.StatusCode(), tc.code)
|
||||||
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
||||||
|
|
||||||
@ -1136,8 +1136,8 @@ func TestAuthority_Rekey(t *testing.T) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
if assert.NotNil(t, tc.err, fmt.Sprintf("unexpected error: %s", err)) {
|
if assert.NotNil(t, tc.err, fmt.Sprintf("unexpected error: %s", err)) {
|
||||||
assert.Nil(t, certChain)
|
assert.Nil(t, certChain)
|
||||||
sc, ok := err.(render.StatusCodedError)
|
var sc render.StatusCodedError
|
||||||
assert.Fatal(t, ok, "error does not implement StatusCodedError interface")
|
assert.Fatal(t, errors.As(err, &sc), "error does not implement StatusCodedError interface")
|
||||||
assert.Equals(t, sc.StatusCode(), tc.code)
|
assert.Equals(t, sc.StatusCode(), tc.code)
|
||||||
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
||||||
|
|
||||||
@ -1566,8 +1566,8 @@ func TestAuthority_Revoke(t *testing.T) {
|
|||||||
t.Run(name, func(t *testing.T) {
|
t.Run(name, func(t *testing.T) {
|
||||||
if err := tc.auth.Revoke(tc.ctx, tc.opts); err != nil {
|
if err := tc.auth.Revoke(tc.ctx, tc.opts); err != nil {
|
||||||
if assert.NotNil(t, tc.err, fmt.Sprintf("unexpected error: %s", err)) {
|
if assert.NotNil(t, tc.err, fmt.Sprintf("unexpected error: %s", err)) {
|
||||||
sc, ok := err.(render.StatusCodedError)
|
var sc render.StatusCodedError
|
||||||
assert.Fatal(t, ok, "error does not implement StatusCodedError interface")
|
assert.Fatal(t, errors.As(err, &sc), "error does not implement StatusCodedError interface")
|
||||||
assert.Equals(t, sc.StatusCode(), tc.code)
|
assert.Equals(t, sc.StatusCode(), tc.code)
|
||||||
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
assert.HasPrefix(t, err.Error(), tc.err.Error())
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user