Compare commits
6 Commits
799763e7e7
...
f68a9492a8
| Author | SHA1 | Date | |
|---|---|---|---|
|
f68a9492a8
|
|||
|
1dbf4fc745
|
|||
|
a425524fdd
|
|||
|
57654ad9a6
|
|||
|
3927c525dd
|
|||
|
46a4e5a8ca
|
@@ -187,7 +187,7 @@ paths:
|
|||||||
/maps/{MapID}/combobulate:
|
/maps/{MapID}/combobulate:
|
||||||
post:
|
post:
|
||||||
summary: Queue a map for combobulator processing
|
summary: Queue a map for combobulator processing
|
||||||
operationId: combobulate
|
operationId: combobulateMap
|
||||||
tags:
|
tags:
|
||||||
- Maps
|
- Maps
|
||||||
parameters:
|
parameters:
|
||||||
|
|||||||
@@ -193,12 +193,12 @@ type Invoker interface {
|
|||||||
//
|
//
|
||||||
// POST /usernames
|
// POST /usernames
|
||||||
BatchUsernames(ctx context.Context, request *BatchUsernamesReq) (*BatchUsernamesOK, error)
|
BatchUsernames(ctx context.Context, request *BatchUsernamesReq) (*BatchUsernamesOK, error)
|
||||||
// Combobulate invokes combobulate operation.
|
// CombobulateMap invokes combobulateMap operation.
|
||||||
//
|
//
|
||||||
// Queue a map for combobulator processing.
|
// Queue a map for combobulator processing.
|
||||||
//
|
//
|
||||||
// POST /maps/{MapID}/combobulate
|
// POST /maps/{MapID}/combobulate
|
||||||
Combobulate(ctx context.Context, params CombobulateParams) error
|
CombobulateMap(ctx context.Context, params CombobulateMapParams) error
|
||||||
// CreateMapfix invokes createMapfix operation.
|
// CreateMapfix invokes createMapfix operation.
|
||||||
//
|
//
|
||||||
// Trigger the validator to create a mapfix.
|
// Trigger the validator to create a mapfix.
|
||||||
@@ -3728,19 +3728,19 @@ func (c *Client) sendBatchUsernames(ctx context.Context, request *BatchUsernames
|
|||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Combobulate invokes combobulate operation.
|
// CombobulateMap invokes combobulateMap operation.
|
||||||
//
|
//
|
||||||
// Queue a map for combobulator processing.
|
// Queue a map for combobulator processing.
|
||||||
//
|
//
|
||||||
// POST /maps/{MapID}/combobulate
|
// POST /maps/{MapID}/combobulate
|
||||||
func (c *Client) Combobulate(ctx context.Context, params CombobulateParams) error {
|
func (c *Client) CombobulateMap(ctx context.Context, params CombobulateMapParams) error {
|
||||||
_, err := c.sendCombobulate(ctx, params)
|
_, err := c.sendCombobulateMap(ctx, params)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) sendCombobulate(ctx context.Context, params CombobulateParams) (res *CombobulateNoContent, err error) {
|
func (c *Client) sendCombobulateMap(ctx context.Context, params CombobulateMapParams) (res *CombobulateMapNoContent, err error) {
|
||||||
otelAttrs := []attribute.KeyValue{
|
otelAttrs := []attribute.KeyValue{
|
||||||
otelogen.OperationID("combobulate"),
|
otelogen.OperationID("combobulateMap"),
|
||||||
semconv.HTTPRequestMethodKey.String("POST"),
|
semconv.HTTPRequestMethodKey.String("POST"),
|
||||||
semconv.URLTemplateKey.String("/maps/{MapID}/combobulate"),
|
semconv.URLTemplateKey.String("/maps/{MapID}/combobulate"),
|
||||||
}
|
}
|
||||||
@@ -3758,7 +3758,7 @@ func (c *Client) sendCombobulate(ctx context.Context, params CombobulateParams)
|
|||||||
c.requests.Add(ctx, 1, metric.WithAttributes(otelAttrs...))
|
c.requests.Add(ctx, 1, metric.WithAttributes(otelAttrs...))
|
||||||
|
|
||||||
// Start a span for this request.
|
// Start a span for this request.
|
||||||
ctx, span := c.cfg.Tracer.Start(ctx, CombobulateOperation,
|
ctx, span := c.cfg.Tracer.Start(ctx, CombobulateMapOperation,
|
||||||
trace.WithAttributes(otelAttrs...),
|
trace.WithAttributes(otelAttrs...),
|
||||||
clientSpanKind,
|
clientSpanKind,
|
||||||
)
|
)
|
||||||
@@ -3809,7 +3809,7 @@ func (c *Client) sendCombobulate(ctx context.Context, params CombobulateParams)
|
|||||||
var satisfied bitset
|
var satisfied bitset
|
||||||
{
|
{
|
||||||
stage = "Security:CookieAuth"
|
stage = "Security:CookieAuth"
|
||||||
switch err := c.securityCookieAuth(ctx, CombobulateOperation, r); {
|
switch err := c.securityCookieAuth(ctx, CombobulateMapOperation, r); {
|
||||||
case err == nil: // if NO error
|
case err == nil: // if NO error
|
||||||
satisfied[0] |= 1 << 0
|
satisfied[0] |= 1 << 0
|
||||||
case errors.Is(err, ogenerrors.ErrSkipClientSecurity):
|
case errors.Is(err, ogenerrors.ErrSkipClientSecurity):
|
||||||
@@ -3846,7 +3846,7 @@ func (c *Client) sendCombobulate(ctx context.Context, params CombobulateParams)
|
|||||||
defer body.Close()
|
defer body.Close()
|
||||||
|
|
||||||
stage = "DecodeResponse"
|
stage = "DecodeResponse"
|
||||||
result, err := decodeCombobulateResponse(resp)
|
result, err := decodeCombobulateMapResponse(resp)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return res, errors.Wrap(err, "decode response")
|
return res, errors.Wrap(err, "decode response")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5298,16 +5298,16 @@ func (s *Server) handleBatchUsernamesRequest(args [0]string, argsEscaped bool, w
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// handleCombobulateRequest handles combobulate operation.
|
// handleCombobulateMapRequest handles combobulateMap operation.
|
||||||
//
|
//
|
||||||
// Queue a map for combobulator processing.
|
// Queue a map for combobulator processing.
|
||||||
//
|
//
|
||||||
// POST /maps/{MapID}/combobulate
|
// POST /maps/{MapID}/combobulate
|
||||||
func (s *Server) handleCombobulateRequest(args [1]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) {
|
func (s *Server) handleCombobulateMapRequest(args [1]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) {
|
||||||
statusWriter := &codeRecorder{ResponseWriter: w}
|
statusWriter := &codeRecorder{ResponseWriter: w}
|
||||||
w = statusWriter
|
w = statusWriter
|
||||||
otelAttrs := []attribute.KeyValue{
|
otelAttrs := []attribute.KeyValue{
|
||||||
otelogen.OperationID("combobulate"),
|
otelogen.OperationID("combobulateMap"),
|
||||||
semconv.HTTPRequestMethodKey.String("POST"),
|
semconv.HTTPRequestMethodKey.String("POST"),
|
||||||
semconv.HTTPRouteKey.String("/maps/{MapID}/combobulate"),
|
semconv.HTTPRouteKey.String("/maps/{MapID}/combobulate"),
|
||||||
}
|
}
|
||||||
@@ -5315,7 +5315,7 @@ func (s *Server) handleCombobulateRequest(args [1]string, argsEscaped bool, w ht
|
|||||||
otelAttrs = append(otelAttrs, s.cfg.Attributes...)
|
otelAttrs = append(otelAttrs, s.cfg.Attributes...)
|
||||||
|
|
||||||
// Start a span for this request.
|
// Start a span for this request.
|
||||||
ctx, span := s.cfg.Tracer.Start(r.Context(), CombobulateOperation,
|
ctx, span := s.cfg.Tracer.Start(r.Context(), CombobulateMapOperation,
|
||||||
trace.WithAttributes(otelAttrs...),
|
trace.WithAttributes(otelAttrs...),
|
||||||
serverSpanKind,
|
serverSpanKind,
|
||||||
)
|
)
|
||||||
@@ -5370,15 +5370,15 @@ func (s *Server) handleCombobulateRequest(args [1]string, argsEscaped bool, w ht
|
|||||||
}
|
}
|
||||||
err error
|
err error
|
||||||
opErrContext = ogenerrors.OperationContext{
|
opErrContext = ogenerrors.OperationContext{
|
||||||
Name: CombobulateOperation,
|
Name: CombobulateMapOperation,
|
||||||
ID: "combobulate",
|
ID: "combobulateMap",
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
type bitset = [1]uint8
|
type bitset = [1]uint8
|
||||||
var satisfied bitset
|
var satisfied bitset
|
||||||
{
|
{
|
||||||
sctx, ok, err := s.securityCookieAuth(ctx, CombobulateOperation, r)
|
sctx, ok, err := s.securityCookieAuth(ctx, CombobulateMapOperation, r)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = &ogenerrors.SecurityError{
|
err = &ogenerrors.SecurityError{
|
||||||
OperationContext: opErrContext,
|
OperationContext: opErrContext,
|
||||||
@@ -5420,7 +5420,7 @@ func (s *Server) handleCombobulateRequest(args [1]string, argsEscaped bool, w ht
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
params, err := decodeCombobulateParams(args, argsEscaped, r)
|
params, err := decodeCombobulateMapParams(args, argsEscaped, r)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = &ogenerrors.DecodeParamsError{
|
err = &ogenerrors.DecodeParamsError{
|
||||||
OperationContext: opErrContext,
|
OperationContext: opErrContext,
|
||||||
@@ -5433,13 +5433,13 @@ func (s *Server) handleCombobulateRequest(args [1]string, argsEscaped bool, w ht
|
|||||||
|
|
||||||
var rawBody []byte
|
var rawBody []byte
|
||||||
|
|
||||||
var response *CombobulateNoContent
|
var response *CombobulateMapNoContent
|
||||||
if m := s.cfg.Middleware; m != nil {
|
if m := s.cfg.Middleware; m != nil {
|
||||||
mreq := middleware.Request{
|
mreq := middleware.Request{
|
||||||
Context: ctx,
|
Context: ctx,
|
||||||
OperationName: CombobulateOperation,
|
OperationName: CombobulateMapOperation,
|
||||||
OperationSummary: "Queue a map for combobulator processing",
|
OperationSummary: "Queue a map for combobulator processing",
|
||||||
OperationID: "combobulate",
|
OperationID: "combobulateMap",
|
||||||
Body: nil,
|
Body: nil,
|
||||||
RawBody: rawBody,
|
RawBody: rawBody,
|
||||||
Params: middleware.Parameters{
|
Params: middleware.Parameters{
|
||||||
@@ -5453,8 +5453,8 @@ func (s *Server) handleCombobulateRequest(args [1]string, argsEscaped bool, w ht
|
|||||||
|
|
||||||
type (
|
type (
|
||||||
Request = struct{}
|
Request = struct{}
|
||||||
Params = CombobulateParams
|
Params = CombobulateMapParams
|
||||||
Response = *CombobulateNoContent
|
Response = *CombobulateMapNoContent
|
||||||
)
|
)
|
||||||
response, err = middleware.HookMiddleware[
|
response, err = middleware.HookMiddleware[
|
||||||
Request,
|
Request,
|
||||||
@@ -5463,14 +5463,14 @@ func (s *Server) handleCombobulateRequest(args [1]string, argsEscaped bool, w ht
|
|||||||
](
|
](
|
||||||
m,
|
m,
|
||||||
mreq,
|
mreq,
|
||||||
unpackCombobulateParams,
|
unpackCombobulateMapParams,
|
||||||
func(ctx context.Context, request Request, params Params) (response Response, err error) {
|
func(ctx context.Context, request Request, params Params) (response Response, err error) {
|
||||||
err = s.h.Combobulate(ctx, params)
|
err = s.h.CombobulateMap(ctx, params)
|
||||||
return response, err
|
return response, err
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
err = s.h.Combobulate(ctx, params)
|
err = s.h.CombobulateMap(ctx, params)
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if errRes, ok := errors.Into[*ErrorStatusCode](err); ok {
|
if errRes, ok := errors.Into[*ErrorStatusCode](err); ok {
|
||||||
@@ -5489,7 +5489,7 @@ func (s *Server) handleCombobulateRequest(args [1]string, argsEscaped bool, w ht
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := encodeCombobulateResponse(response, w, span); err != nil {
|
if err := encodeCombobulateMapResponse(response, w, span); err != nil {
|
||||||
defer recordError("EncodeResponse", err)
|
defer recordError("EncodeResponse", err)
|
||||||
if !errors.Is(err, ht.ErrInternalServerErrorResponse) {
|
if !errors.Is(err, ht.ErrInternalServerErrorResponse) {
|
||||||
s.cfg.ErrorHandler(ctx, w, r, err)
|
s.cfg.ErrorHandler(ctx, w, r, err)
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ const (
|
|||||||
BatchAssetThumbnailsOperation OperationName = "BatchAssetThumbnails"
|
BatchAssetThumbnailsOperation OperationName = "BatchAssetThumbnails"
|
||||||
BatchUserThumbnailsOperation OperationName = "BatchUserThumbnails"
|
BatchUserThumbnailsOperation OperationName = "BatchUserThumbnails"
|
||||||
BatchUsernamesOperation OperationName = "BatchUsernames"
|
BatchUsernamesOperation OperationName = "BatchUsernames"
|
||||||
CombobulateOperation OperationName = "Combobulate"
|
CombobulateMapOperation OperationName = "CombobulateMap"
|
||||||
CreateMapfixOperation OperationName = "CreateMapfix"
|
CreateMapfixOperation OperationName = "CreateMapfix"
|
||||||
CreateMapfixAuditCommentOperation OperationName = "CreateMapfixAuditComment"
|
CreateMapfixAuditCommentOperation OperationName = "CreateMapfixAuditComment"
|
||||||
CreateScriptOperation OperationName = "CreateScript"
|
CreateScriptOperation OperationName = "CreateScript"
|
||||||
|
|||||||
@@ -2030,12 +2030,12 @@ func decodeActionSubmissionValidatedParams(args [1]string, argsEscaped bool, r *
|
|||||||
return params, nil
|
return params, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// CombobulateParams is parameters of combobulate operation.
|
// CombobulateMapParams is parameters of combobulateMap operation.
|
||||||
type CombobulateParams struct {
|
type CombobulateMapParams struct {
|
||||||
MapID int64
|
MapID int64
|
||||||
}
|
}
|
||||||
|
|
||||||
func unpackCombobulateParams(packed middleware.Parameters) (params CombobulateParams) {
|
func unpackCombobulateMapParams(packed middleware.Parameters) (params CombobulateMapParams) {
|
||||||
{
|
{
|
||||||
key := middleware.ParameterKey{
|
key := middleware.ParameterKey{
|
||||||
Name: "MapID",
|
Name: "MapID",
|
||||||
@@ -2046,7 +2046,7 @@ func unpackCombobulateParams(packed middleware.Parameters) (params CombobulatePa
|
|||||||
return params
|
return params
|
||||||
}
|
}
|
||||||
|
|
||||||
func decodeCombobulateParams(args [1]string, argsEscaped bool, r *http.Request) (params CombobulateParams, _ error) {
|
func decodeCombobulateMapParams(args [1]string, argsEscaped bool, r *http.Request) (params CombobulateMapParams, _ error) {
|
||||||
// Decode path: MapID.
|
// Decode path: MapID.
|
||||||
if err := func() error {
|
if err := func() error {
|
||||||
param := args[0]
|
param := args[0]
|
||||||
|
|||||||
@@ -1733,11 +1733,11 @@ func decodeBatchUsernamesResponse(resp *http.Response) (res *BatchUsernamesOK, _
|
|||||||
return res, errors.Wrap(defRes, "error")
|
return res, errors.Wrap(defRes, "error")
|
||||||
}
|
}
|
||||||
|
|
||||||
func decodeCombobulateResponse(resp *http.Response) (res *CombobulateNoContent, _ error) {
|
func decodeCombobulateMapResponse(resp *http.Response) (res *CombobulateMapNoContent, _ error) {
|
||||||
switch resp.StatusCode {
|
switch resp.StatusCode {
|
||||||
case 204:
|
case 204:
|
||||||
// Code 204.
|
// Code 204.
|
||||||
return &CombobulateNoContent{}, nil
|
return &CombobulateMapNoContent{}, nil
|
||||||
}
|
}
|
||||||
// Convenient error response.
|
// Convenient error response.
|
||||||
defRes, err := func() (res *ErrorStatusCode, err error) {
|
defRes, err := func() (res *ErrorStatusCode, err error) {
|
||||||
|
|||||||
@@ -225,7 +225,7 @@ func encodeBatchUsernamesResponse(response *BatchUsernamesOK, w http.ResponseWri
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func encodeCombobulateResponse(response *CombobulateNoContent, w http.ResponseWriter, span trace.Span) error {
|
func encodeCombobulateMapResponse(response *CombobulateMapNoContent, w http.ResponseWriter, span trace.Span) error {
|
||||||
w.WriteHeader(204)
|
w.WriteHeader(204)
|
||||||
span.SetStatus(codes.Ok, http.StatusText(204))
|
span.SetStatus(codes.Ok, http.StatusText(204))
|
||||||
|
|
||||||
|
|||||||
@@ -862,7 +862,7 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|||||||
// Leaf node.
|
// Leaf node.
|
||||||
switch r.Method {
|
switch r.Method {
|
||||||
case "POST":
|
case "POST":
|
||||||
s.handleCombobulateRequest([1]string{
|
s.handleCombobulateMapRequest([1]string{
|
||||||
args[0],
|
args[0],
|
||||||
}, elemIsEscaped, w, r)
|
}, elemIsEscaped, w, r)
|
||||||
default:
|
default:
|
||||||
@@ -2851,9 +2851,9 @@ func (s *Server) FindPath(method string, u *url.URL) (r Route, _ bool) {
|
|||||||
// Leaf node.
|
// Leaf node.
|
||||||
switch method {
|
switch method {
|
||||||
case "POST":
|
case "POST":
|
||||||
r.name = CombobulateOperation
|
r.name = CombobulateMapOperation
|
||||||
r.summary = "Queue a map for combobulator processing"
|
r.summary = "Queue a map for combobulator processing"
|
||||||
r.operationID = "combobulate"
|
r.operationID = "combobulateMap"
|
||||||
r.operationGroup = ""
|
r.operationGroup = ""
|
||||||
r.pathPattern = "/maps/{MapID}/combobulate"
|
r.pathPattern = "/maps/{MapID}/combobulate"
|
||||||
r.args = args
|
r.args = args
|
||||||
|
|||||||
@@ -441,8 +441,8 @@ func (s *BatchUsernamesReq) SetUserIds(val []uint64) {
|
|||||||
s.UserIds = val
|
s.UserIds = val
|
||||||
}
|
}
|
||||||
|
|
||||||
// CombobulateNoContent is response for Combobulate operation.
|
// CombobulateMapNoContent is response for CombobulateMap operation.
|
||||||
type CombobulateNoContent struct{}
|
type CombobulateMapNoContent struct{}
|
||||||
|
|
||||||
type CookieAuth struct {
|
type CookieAuth struct {
|
||||||
APIKey string
|
APIKey string
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ var operationRolesCookieAuth = map[string][]string{
|
|||||||
ActionSubmissionTriggerUploadOperation: []string{},
|
ActionSubmissionTriggerUploadOperation: []string{},
|
||||||
ActionSubmissionTriggerValidateOperation: []string{},
|
ActionSubmissionTriggerValidateOperation: []string{},
|
||||||
ActionSubmissionValidatedOperation: []string{},
|
ActionSubmissionValidatedOperation: []string{},
|
||||||
CombobulateOperation: []string{},
|
CombobulateMapOperation: []string{},
|
||||||
CreateMapfixOperation: []string{},
|
CreateMapfixOperation: []string{},
|
||||||
CreateMapfixAuditCommentOperation: []string{},
|
CreateMapfixAuditCommentOperation: []string{},
|
||||||
CreateScriptOperation: []string{},
|
CreateScriptOperation: []string{},
|
||||||
|
|||||||
@@ -173,12 +173,12 @@ type Handler interface {
|
|||||||
//
|
//
|
||||||
// POST /usernames
|
// POST /usernames
|
||||||
BatchUsernames(ctx context.Context, req *BatchUsernamesReq) (*BatchUsernamesOK, error)
|
BatchUsernames(ctx context.Context, req *BatchUsernamesReq) (*BatchUsernamesOK, error)
|
||||||
// Combobulate implements combobulate operation.
|
// CombobulateMap implements combobulateMap operation.
|
||||||
//
|
//
|
||||||
// Queue a map for combobulator processing.
|
// Queue a map for combobulator processing.
|
||||||
//
|
//
|
||||||
// POST /maps/{MapID}/combobulate
|
// POST /maps/{MapID}/combobulate
|
||||||
Combobulate(ctx context.Context, params CombobulateParams) error
|
CombobulateMap(ctx context.Context, params CombobulateMapParams) error
|
||||||
// CreateMapfix implements createMapfix operation.
|
// CreateMapfix implements createMapfix operation.
|
||||||
//
|
//
|
||||||
// Trigger the validator to create a mapfix.
|
// Trigger the validator to create a mapfix.
|
||||||
|
|||||||
@@ -259,12 +259,12 @@ func (UnimplementedHandler) BatchUsernames(ctx context.Context, req *BatchUserna
|
|||||||
return r, ht.ErrNotImplemented
|
return r, ht.ErrNotImplemented
|
||||||
}
|
}
|
||||||
|
|
||||||
// Combobulate implements combobulate operation.
|
// CombobulateMap implements combobulateMap operation.
|
||||||
//
|
//
|
||||||
// Queue a map for combobulator processing.
|
// Queue a map for combobulator processing.
|
||||||
//
|
//
|
||||||
// POST /maps/{MapID}/combobulate
|
// POST /maps/{MapID}/combobulate
|
||||||
func (UnimplementedHandler) Combobulate(ctx context.Context, params CombobulateParams) error {
|
func (UnimplementedHandler) CombobulateMap(ctx context.Context, params CombobulateMapParams) error {
|
||||||
return ht.ErrNotImplemented
|
return ht.ErrNotImplemented
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -119,12 +119,12 @@ func (svc *Service) SeedCombobulator(ctx context.Context) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Combobulate implements combobulate operation.
|
// CombobulateMap implements combobulateMap operation.
|
||||||
//
|
//
|
||||||
// Queue a map for combobulator processing.
|
// Queue a map for combobulator processing.
|
||||||
//
|
//
|
||||||
// POST /maps-admin/combobulate
|
// POST /maps-admin/combobulate
|
||||||
func (svc *Service) Combobulate(ctx context.Context, params api.CombobulateParams) error {
|
func (svc *Service) CombobulateMap(ctx context.Context, params api.CombobulateMapParams) error {
|
||||||
userInfo, ok := ctx.Value("UserInfo").(UserInfoHandle)
|
userInfo, ok := ctx.Value("UserInfo").(UserInfoHandle)
|
||||||
if !ok {
|
if !ok {
|
||||||
return ErrUserInfo
|
return ErrUserInfo
|
||||||
|
|||||||
Reference in New Issue
Block a user