From c89695c1b850f14db23f65dba416239751fed26b Mon Sep 17 00:00:00 2001 From: "lijunwen.gigoo" Date: Mon, 11 Aug 2025 12:09:38 +0800 Subject: [PATCH] feat(singleagent): add ImpersonateCozeUserAccessToken api --- .../api/handler/coze/bot_open_api_service.go | 22 + .../model/app/bot_open_api/bot_open_api.go | 1638 ++++++++++++++++- backend/api/model/coze/api.go | 16 - backend/api/router/coze/api.go | 4 + backend/api/router/coze/middleware.go | 10 + backend/application/openauth/openapiauth.go | 23 + .../agentrun/service/agent_run_impl.go | 20 +- idl/app/bot_open_api.thrift | 33 + 8 files changed, 1732 insertions(+), 34 deletions(-) diff --git a/backend/api/handler/coze/bot_open_api_service.go b/backend/api/handler/coze/bot_open_api_service.go index 9faba0881..11f025674 100644 --- a/backend/api/handler/coze/bot_open_api_service.go +++ b/backend/api/handler/coze/bot_open_api_service.go @@ -22,6 +22,7 @@ import ( "context" "fmt" + openapiauthApp "github.com/coze-dev/coze-studio/backend/application/openauth" "github.com/coze-dev/coze-studio/backend/application/plugin" "github.com/coze-dev/coze-studio/backend/application/singleagent" "github.com/coze-dev/coze-studio/backend/application/upload" @@ -105,3 +106,24 @@ func GetBotOnlineInfo(ctx context.Context, c *app.RequestContext) { } c.JSON(consts.StatusOK, resp) } + +// ImpersonateCozeUser . +// @router /api/permission_api/coze_web_app/impersonate_coze_user [POST] +func ImpersonateCozeUser(ctx context.Context, c *app.RequestContext) { + var err error + var req bot_open_api.ImpersonateCozeUserRequest + err = c.BindAndValidate(&req) + if err != nil { + c.String(consts.StatusBadRequest, err.Error()) + return + } + + resp, err := openapiauthApp.OpenAuthApplication.ImpersonateCozeUserAccessToken(ctx, &req) + + if err != nil { + internalServerErrorResponse(ctx, c, err) + return + } + + c.JSON(consts.StatusOK, resp) +} diff --git a/backend/api/model/app/bot_open_api/bot_open_api.go b/backend/api/model/app/bot_open_api/bot_open_api.go index ac3fb5da6..aa275114b 100644 --- a/backend/api/model/app/bot_open_api/bot_open_api.go +++ b/backend/api/model/app/bot_open_api/bot_open_api.go @@ -1,19 +1,3 @@ -/* - * Copyright 2025 coze-dev 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. - */ - // Code generated by thriftgo (0.4.1). DO NOT EDIT. package bot_open_api @@ -1761,8 +1745,1280 @@ func (p *GetBotOnlineInfoResp) String() string { } +type WorkspacePermission struct { + WorkspaceIDList []string `thrift:"workspace_id_list,1" form:"workspace_id_list" json:"workspace_id_list" query:"workspace_id_list"` + PermissionList []string `thrift:"permission_list,2" form:"permission_list" json:"permission_list" query:"permission_list"` +} + +func NewWorkspacePermission() *WorkspacePermission { + return &WorkspacePermission{} +} + +func (p *WorkspacePermission) InitDefault() { +} + +func (p *WorkspacePermission) GetWorkspaceIDList() (v []string) { + return p.WorkspaceIDList +} + +func (p *WorkspacePermission) GetPermissionList() (v []string) { + return p.PermissionList +} + +var fieldIDToName_WorkspacePermission = map[int16]string{ + 1: "workspace_id_list", + 2: "permission_list", +} + +func (p *WorkspacePermission) Read(iprot thrift.TProtocol) (err error) { + var fieldTypeId thrift.TType + var fieldId int16 + + if _, err = iprot.ReadStructBegin(); err != nil { + goto ReadStructBeginError + } + + for { + _, fieldTypeId, fieldId, err = iprot.ReadFieldBegin() + if err != nil { + goto ReadFieldBeginError + } + if fieldTypeId == thrift.STOP { + break + } + + switch fieldId { + case 1: + if fieldTypeId == thrift.LIST { + if err = p.ReadField1(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + case 2: + if fieldTypeId == thrift.LIST { + if err = p.ReadField2(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + default: + if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + } + if err = iprot.ReadFieldEnd(); err != nil { + goto ReadFieldEndError + } + } + if err = iprot.ReadStructEnd(); err != nil { + goto ReadStructEndError + } + + return nil +ReadStructBeginError: + return thrift.PrependError(fmt.Sprintf("%T read struct begin error: ", p), err) +ReadFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) +ReadFieldError: + return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_WorkspacePermission[fieldId]), err) +SkipFieldError: + return thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) + +ReadFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T read field end error", p), err) +ReadStructEndError: + return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) +} + +func (p *WorkspacePermission) ReadField1(iprot thrift.TProtocol) error { + _, size, err := iprot.ReadListBegin() + if err != nil { + return err + } + _field := make([]string, 0, size) + for i := 0; i < size; i++ { + + var _elem string + if v, err := iprot.ReadString(); err != nil { + return err + } else { + _elem = v + } + + _field = append(_field, _elem) + } + if err := iprot.ReadListEnd(); err != nil { + return err + } + p.WorkspaceIDList = _field + return nil +} +func (p *WorkspacePermission) ReadField2(iprot thrift.TProtocol) error { + _, size, err := iprot.ReadListBegin() + if err != nil { + return err + } + _field := make([]string, 0, size) + for i := 0; i < size; i++ { + + var _elem string + if v, err := iprot.ReadString(); err != nil { + return err + } else { + _elem = v + } + + _field = append(_field, _elem) + } + if err := iprot.ReadListEnd(); err != nil { + return err + } + p.PermissionList = _field + return nil +} + +func (p *WorkspacePermission) Write(oprot thrift.TProtocol) (err error) { + var fieldId int16 + if err = oprot.WriteStructBegin("WorkspacePermission"); err != nil { + goto WriteStructBeginError + } + if p != nil { + if err = p.writeField1(oprot); err != nil { + fieldId = 1 + goto WriteFieldError + } + if err = p.writeField2(oprot); err != nil { + fieldId = 2 + goto WriteFieldError + } + } + if err = oprot.WriteFieldStop(); err != nil { + goto WriteFieldStopError + } + if err = oprot.WriteStructEnd(); err != nil { + goto WriteStructEndError + } + return nil +WriteStructBeginError: + return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) +WriteFieldError: + return thrift.PrependError(fmt.Sprintf("%T write field %d error: ", p, fieldId), err) +WriteFieldStopError: + return thrift.PrependError(fmt.Sprintf("%T write field stop error: ", p), err) +WriteStructEndError: + return thrift.PrependError(fmt.Sprintf("%T write struct end error: ", p), err) +} + +func (p *WorkspacePermission) writeField1(oprot thrift.TProtocol) (err error) { + if err = oprot.WriteFieldBegin("workspace_id_list", thrift.LIST, 1); err != nil { + goto WriteFieldBeginError + } + if err := oprot.WriteListBegin(thrift.STRING, len(p.WorkspaceIDList)); err != nil { + return err + } + for _, v := range p.WorkspaceIDList { + if err := oprot.WriteString(v); err != nil { + return err + } + } + if err := oprot.WriteListEnd(); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 1 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 1 end error: ", p), err) +} +func (p *WorkspacePermission) writeField2(oprot thrift.TProtocol) (err error) { + if err = oprot.WriteFieldBegin("permission_list", thrift.LIST, 2); err != nil { + goto WriteFieldBeginError + } + if err := oprot.WriteListBegin(thrift.STRING, len(p.PermissionList)); err != nil { + return err + } + for _, v := range p.PermissionList { + if err := oprot.WriteString(v); err != nil { + return err + } + } + if err := oprot.WriteListEnd(); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 2 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 2 end error: ", p), err) +} + +func (p *WorkspacePermission) String() string { + if p == nil { + return "" + } + return fmt.Sprintf("WorkspacePermission(%+v)", *p) + +} + +type AccountPermission struct { + PermissionList []string `thrift:"permission_list,1" form:"permission_list" json:"permission_list" query:"permission_list"` +} + +func NewAccountPermission() *AccountPermission { + return &AccountPermission{} +} + +func (p *AccountPermission) InitDefault() { +} + +func (p *AccountPermission) GetPermissionList() (v []string) { + return p.PermissionList +} + +var fieldIDToName_AccountPermission = map[int16]string{ + 1: "permission_list", +} + +func (p *AccountPermission) Read(iprot thrift.TProtocol) (err error) { + var fieldTypeId thrift.TType + var fieldId int16 + + if _, err = iprot.ReadStructBegin(); err != nil { + goto ReadStructBeginError + } + + for { + _, fieldTypeId, fieldId, err = iprot.ReadFieldBegin() + if err != nil { + goto ReadFieldBeginError + } + if fieldTypeId == thrift.STOP { + break + } + + switch fieldId { + case 1: + if fieldTypeId == thrift.LIST { + if err = p.ReadField1(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + default: + if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + } + if err = iprot.ReadFieldEnd(); err != nil { + goto ReadFieldEndError + } + } + if err = iprot.ReadStructEnd(); err != nil { + goto ReadStructEndError + } + + return nil +ReadStructBeginError: + return thrift.PrependError(fmt.Sprintf("%T read struct begin error: ", p), err) +ReadFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) +ReadFieldError: + return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_AccountPermission[fieldId]), err) +SkipFieldError: + return thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) + +ReadFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T read field end error", p), err) +ReadStructEndError: + return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) +} + +func (p *AccountPermission) ReadField1(iprot thrift.TProtocol) error { + _, size, err := iprot.ReadListBegin() + if err != nil { + return err + } + _field := make([]string, 0, size) + for i := 0; i < size; i++ { + + var _elem string + if v, err := iprot.ReadString(); err != nil { + return err + } else { + _elem = v + } + + _field = append(_field, _elem) + } + if err := iprot.ReadListEnd(); err != nil { + return err + } + p.PermissionList = _field + return nil +} + +func (p *AccountPermission) Write(oprot thrift.TProtocol) (err error) { + var fieldId int16 + if err = oprot.WriteStructBegin("AccountPermission"); err != nil { + goto WriteStructBeginError + } + if p != nil { + if err = p.writeField1(oprot); err != nil { + fieldId = 1 + goto WriteFieldError + } + } + if err = oprot.WriteFieldStop(); err != nil { + goto WriteFieldStopError + } + if err = oprot.WriteStructEnd(); err != nil { + goto WriteStructEndError + } + return nil +WriteStructBeginError: + return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) +WriteFieldError: + return thrift.PrependError(fmt.Sprintf("%T write field %d error: ", p, fieldId), err) +WriteFieldStopError: + return thrift.PrependError(fmt.Sprintf("%T write field stop error: ", p), err) +WriteStructEndError: + return thrift.PrependError(fmt.Sprintf("%T write struct end error: ", p), err) +} + +func (p *AccountPermission) writeField1(oprot thrift.TProtocol) (err error) { + if err = oprot.WriteFieldBegin("permission_list", thrift.LIST, 1); err != nil { + goto WriteFieldBeginError + } + if err := oprot.WriteListBegin(thrift.STRING, len(p.PermissionList)); err != nil { + return err + } + for _, v := range p.PermissionList { + if err := oprot.WriteString(v); err != nil { + return err + } + } + if err := oprot.WriteListEnd(); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 1 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 1 end error: ", p), err) +} + +func (p *AccountPermission) String() string { + if p == nil { + return "" + } + return fmt.Sprintf("AccountPermission(%+v)", *p) + +} + +type Scope struct { + WorkspacePermission *WorkspacePermission `thrift:"workspace_permission,1" form:"workspace_permission" json:"workspace_permission" query:"workspace_permission"` + AccountPermission *AccountPermission `thrift:"account_permission,2" form:"account_permission" json:"account_permission" query:"account_permission"` +} + +func NewScope() *Scope { + return &Scope{} +} + +func (p *Scope) InitDefault() { +} + +var Scope_WorkspacePermission_DEFAULT *WorkspacePermission + +func (p *Scope) GetWorkspacePermission() (v *WorkspacePermission) { + if !p.IsSetWorkspacePermission() { + return Scope_WorkspacePermission_DEFAULT + } + return p.WorkspacePermission +} + +var Scope_AccountPermission_DEFAULT *AccountPermission + +func (p *Scope) GetAccountPermission() (v *AccountPermission) { + if !p.IsSetAccountPermission() { + return Scope_AccountPermission_DEFAULT + } + return p.AccountPermission +} + +var fieldIDToName_Scope = map[int16]string{ + 1: "workspace_permission", + 2: "account_permission", +} + +func (p *Scope) IsSetWorkspacePermission() bool { + return p.WorkspacePermission != nil +} + +func (p *Scope) IsSetAccountPermission() bool { + return p.AccountPermission != nil +} + +func (p *Scope) Read(iprot thrift.TProtocol) (err error) { + var fieldTypeId thrift.TType + var fieldId int16 + + if _, err = iprot.ReadStructBegin(); err != nil { + goto ReadStructBeginError + } + + for { + _, fieldTypeId, fieldId, err = iprot.ReadFieldBegin() + if err != nil { + goto ReadFieldBeginError + } + if fieldTypeId == thrift.STOP { + break + } + + switch fieldId { + case 1: + if fieldTypeId == thrift.STRUCT { + if err = p.ReadField1(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + case 2: + if fieldTypeId == thrift.STRUCT { + if err = p.ReadField2(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + default: + if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + } + if err = iprot.ReadFieldEnd(); err != nil { + goto ReadFieldEndError + } + } + if err = iprot.ReadStructEnd(); err != nil { + goto ReadStructEndError + } + + return nil +ReadStructBeginError: + return thrift.PrependError(fmt.Sprintf("%T read struct begin error: ", p), err) +ReadFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) +ReadFieldError: + return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_Scope[fieldId]), err) +SkipFieldError: + return thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) + +ReadFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T read field end error", p), err) +ReadStructEndError: + return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) +} + +func (p *Scope) ReadField1(iprot thrift.TProtocol) error { + _field := NewWorkspacePermission() + if err := _field.Read(iprot); err != nil { + return err + } + p.WorkspacePermission = _field + return nil +} +func (p *Scope) ReadField2(iprot thrift.TProtocol) error { + _field := NewAccountPermission() + if err := _field.Read(iprot); err != nil { + return err + } + p.AccountPermission = _field + return nil +} + +func (p *Scope) Write(oprot thrift.TProtocol) (err error) { + var fieldId int16 + if err = oprot.WriteStructBegin("Scope"); err != nil { + goto WriteStructBeginError + } + if p != nil { + if err = p.writeField1(oprot); err != nil { + fieldId = 1 + goto WriteFieldError + } + if err = p.writeField2(oprot); err != nil { + fieldId = 2 + goto WriteFieldError + } + } + if err = oprot.WriteFieldStop(); err != nil { + goto WriteFieldStopError + } + if err = oprot.WriteStructEnd(); err != nil { + goto WriteStructEndError + } + return nil +WriteStructBeginError: + return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) +WriteFieldError: + return thrift.PrependError(fmt.Sprintf("%T write field %d error: ", p, fieldId), err) +WriteFieldStopError: + return thrift.PrependError(fmt.Sprintf("%T write field stop error: ", p), err) +WriteStructEndError: + return thrift.PrependError(fmt.Sprintf("%T write struct end error: ", p), err) +} + +func (p *Scope) writeField1(oprot thrift.TProtocol) (err error) { + if err = oprot.WriteFieldBegin("workspace_permission", thrift.STRUCT, 1); err != nil { + goto WriteFieldBeginError + } + if err := p.WorkspacePermission.Write(oprot); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 1 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 1 end error: ", p), err) +} +func (p *Scope) writeField2(oprot thrift.TProtocol) (err error) { + if err = oprot.WriteFieldBegin("account_permission", thrift.STRUCT, 2); err != nil { + goto WriteFieldBeginError + } + if err := p.AccountPermission.Write(oprot); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 2 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 2 end error: ", p), err) +} + +func (p *Scope) String() string { + if p == nil { + return "" + } + return fmt.Sprintf("Scope(%+v)", *p) + +} + +type ImpersonateCozeUserRequest struct { + DurationSeconds int64 `thrift:"duration_seconds,1" form:"duration_seconds" json:"duration_seconds" query:"duration_seconds"` + Scope *Scope `thrift:"scope,2" form:"scope" json:"scope" query:"scope"` +} + +func NewImpersonateCozeUserRequest() *ImpersonateCozeUserRequest { + return &ImpersonateCozeUserRequest{} +} + +func (p *ImpersonateCozeUserRequest) InitDefault() { +} + +func (p *ImpersonateCozeUserRequest) GetDurationSeconds() (v int64) { + return p.DurationSeconds +} + +var ImpersonateCozeUserRequest_Scope_DEFAULT *Scope + +func (p *ImpersonateCozeUserRequest) GetScope() (v *Scope) { + if !p.IsSetScope() { + return ImpersonateCozeUserRequest_Scope_DEFAULT + } + return p.Scope +} + +var fieldIDToName_ImpersonateCozeUserRequest = map[int16]string{ + 1: "duration_seconds", + 2: "scope", +} + +func (p *ImpersonateCozeUserRequest) IsSetScope() bool { + return p.Scope != nil +} + +func (p *ImpersonateCozeUserRequest) Read(iprot thrift.TProtocol) (err error) { + var fieldTypeId thrift.TType + var fieldId int16 + + if _, err = iprot.ReadStructBegin(); err != nil { + goto ReadStructBeginError + } + + for { + _, fieldTypeId, fieldId, err = iprot.ReadFieldBegin() + if err != nil { + goto ReadFieldBeginError + } + if fieldTypeId == thrift.STOP { + break + } + + switch fieldId { + case 1: + if fieldTypeId == thrift.I64 { + if err = p.ReadField1(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + case 2: + if fieldTypeId == thrift.STRUCT { + if err = p.ReadField2(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + default: + if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + } + if err = iprot.ReadFieldEnd(); err != nil { + goto ReadFieldEndError + } + } + if err = iprot.ReadStructEnd(); err != nil { + goto ReadStructEndError + } + + return nil +ReadStructBeginError: + return thrift.PrependError(fmt.Sprintf("%T read struct begin error: ", p), err) +ReadFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) +ReadFieldError: + return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_ImpersonateCozeUserRequest[fieldId]), err) +SkipFieldError: + return thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) + +ReadFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T read field end error", p), err) +ReadStructEndError: + return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) +} + +func (p *ImpersonateCozeUserRequest) ReadField1(iprot thrift.TProtocol) error { + + var _field int64 + if v, err := iprot.ReadI64(); err != nil { + return err + } else { + _field = v + } + p.DurationSeconds = _field + return nil +} +func (p *ImpersonateCozeUserRequest) ReadField2(iprot thrift.TProtocol) error { + _field := NewScope() + if err := _field.Read(iprot); err != nil { + return err + } + p.Scope = _field + return nil +} + +func (p *ImpersonateCozeUserRequest) Write(oprot thrift.TProtocol) (err error) { + var fieldId int16 + if err = oprot.WriteStructBegin("ImpersonateCozeUserRequest"); err != nil { + goto WriteStructBeginError + } + if p != nil { + if err = p.writeField1(oprot); err != nil { + fieldId = 1 + goto WriteFieldError + } + if err = p.writeField2(oprot); err != nil { + fieldId = 2 + goto WriteFieldError + } + } + if err = oprot.WriteFieldStop(); err != nil { + goto WriteFieldStopError + } + if err = oprot.WriteStructEnd(); err != nil { + goto WriteStructEndError + } + return nil +WriteStructBeginError: + return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) +WriteFieldError: + return thrift.PrependError(fmt.Sprintf("%T write field %d error: ", p, fieldId), err) +WriteFieldStopError: + return thrift.PrependError(fmt.Sprintf("%T write field stop error: ", p), err) +WriteStructEndError: + return thrift.PrependError(fmt.Sprintf("%T write struct end error: ", p), err) +} + +func (p *ImpersonateCozeUserRequest) writeField1(oprot thrift.TProtocol) (err error) { + if err = oprot.WriteFieldBegin("duration_seconds", thrift.I64, 1); err != nil { + goto WriteFieldBeginError + } + if err := oprot.WriteI64(p.DurationSeconds); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 1 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 1 end error: ", p), err) +} +func (p *ImpersonateCozeUserRequest) writeField2(oprot thrift.TProtocol) (err error) { + if err = oprot.WriteFieldBegin("scope", thrift.STRUCT, 2); err != nil { + goto WriteFieldBeginError + } + if err := p.Scope.Write(oprot); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 2 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 2 end error: ", p), err) +} + +func (p *ImpersonateCozeUserRequest) String() string { + if p == nil { + return "" + } + return fmt.Sprintf("ImpersonateCozeUserRequest(%+v)", *p) + +} + +type ImpersonateCozeUserResponse struct { + Code int32 `thrift:"code,1,required" form:"code,required" json:"code,required" query:"code,required"` + Msg string `thrift:"msg,2,required" form:"msg,required" json:"msg,required" query:"msg,required"` + Data *ImpersonateCozeUserResponseData `thrift:"data,3" form:"data" json:"data" query:"data"` +} + +func NewImpersonateCozeUserResponse() *ImpersonateCozeUserResponse { + return &ImpersonateCozeUserResponse{} +} + +func (p *ImpersonateCozeUserResponse) InitDefault() { +} + +func (p *ImpersonateCozeUserResponse) GetCode() (v int32) { + return p.Code +} + +func (p *ImpersonateCozeUserResponse) GetMsg() (v string) { + return p.Msg +} + +var ImpersonateCozeUserResponse_Data_DEFAULT *ImpersonateCozeUserResponseData + +func (p *ImpersonateCozeUserResponse) GetData() (v *ImpersonateCozeUserResponseData) { + if !p.IsSetData() { + return ImpersonateCozeUserResponse_Data_DEFAULT + } + return p.Data +} + +var fieldIDToName_ImpersonateCozeUserResponse = map[int16]string{ + 1: "code", + 2: "msg", + 3: "data", +} + +func (p *ImpersonateCozeUserResponse) IsSetData() bool { + return p.Data != nil +} + +func (p *ImpersonateCozeUserResponse) Read(iprot thrift.TProtocol) (err error) { + var fieldTypeId thrift.TType + var fieldId int16 + var issetCode bool = false + var issetMsg bool = false + + if _, err = iprot.ReadStructBegin(); err != nil { + goto ReadStructBeginError + } + + for { + _, fieldTypeId, fieldId, err = iprot.ReadFieldBegin() + if err != nil { + goto ReadFieldBeginError + } + if fieldTypeId == thrift.STOP { + break + } + + switch fieldId { + case 1: + if fieldTypeId == thrift.I32 { + if err = p.ReadField1(iprot); err != nil { + goto ReadFieldError + } + issetCode = true + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + case 2: + if fieldTypeId == thrift.STRING { + if err = p.ReadField2(iprot); err != nil { + goto ReadFieldError + } + issetMsg = true + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + case 3: + if fieldTypeId == thrift.STRUCT { + if err = p.ReadField3(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + default: + if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + } + if err = iprot.ReadFieldEnd(); err != nil { + goto ReadFieldEndError + } + } + if err = iprot.ReadStructEnd(); err != nil { + goto ReadStructEndError + } + + if !issetCode { + fieldId = 1 + goto RequiredFieldNotSetError + } + + if !issetMsg { + fieldId = 2 + goto RequiredFieldNotSetError + } + return nil +ReadStructBeginError: + return thrift.PrependError(fmt.Sprintf("%T read struct begin error: ", p), err) +ReadFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) +ReadFieldError: + return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_ImpersonateCozeUserResponse[fieldId]), err) +SkipFieldError: + return thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) + +ReadFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T read field end error", p), err) +ReadStructEndError: + return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) +RequiredFieldNotSetError: + return thrift.NewTProtocolExceptionWithType(thrift.INVALID_DATA, fmt.Errorf("required field %s is not set", fieldIDToName_ImpersonateCozeUserResponse[fieldId])) +} + +func (p *ImpersonateCozeUserResponse) ReadField1(iprot thrift.TProtocol) error { + + var _field int32 + if v, err := iprot.ReadI32(); err != nil { + return err + } else { + _field = v + } + p.Code = _field + return nil +} +func (p *ImpersonateCozeUserResponse) ReadField2(iprot thrift.TProtocol) error { + + var _field string + if v, err := iprot.ReadString(); err != nil { + return err + } else { + _field = v + } + p.Msg = _field + return nil +} +func (p *ImpersonateCozeUserResponse) ReadField3(iprot thrift.TProtocol) error { + _field := NewImpersonateCozeUserResponseData() + if err := _field.Read(iprot); err != nil { + return err + } + p.Data = _field + return nil +} + +func (p *ImpersonateCozeUserResponse) Write(oprot thrift.TProtocol) (err error) { + var fieldId int16 + if err = oprot.WriteStructBegin("ImpersonateCozeUserResponse"); err != nil { + goto WriteStructBeginError + } + if p != nil { + if err = p.writeField1(oprot); err != nil { + fieldId = 1 + goto WriteFieldError + } + if err = p.writeField2(oprot); err != nil { + fieldId = 2 + goto WriteFieldError + } + if err = p.writeField3(oprot); err != nil { + fieldId = 3 + goto WriteFieldError + } + } + if err = oprot.WriteFieldStop(); err != nil { + goto WriteFieldStopError + } + if err = oprot.WriteStructEnd(); err != nil { + goto WriteStructEndError + } + return nil +WriteStructBeginError: + return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) +WriteFieldError: + return thrift.PrependError(fmt.Sprintf("%T write field %d error: ", p, fieldId), err) +WriteFieldStopError: + return thrift.PrependError(fmt.Sprintf("%T write field stop error: ", p), err) +WriteStructEndError: + return thrift.PrependError(fmt.Sprintf("%T write struct end error: ", p), err) +} + +func (p *ImpersonateCozeUserResponse) writeField1(oprot thrift.TProtocol) (err error) { + if err = oprot.WriteFieldBegin("code", thrift.I32, 1); err != nil { + goto WriteFieldBeginError + } + if err := oprot.WriteI32(p.Code); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 1 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 1 end error: ", p), err) +} +func (p *ImpersonateCozeUserResponse) writeField2(oprot thrift.TProtocol) (err error) { + if err = oprot.WriteFieldBegin("msg", thrift.STRING, 2); err != nil { + goto WriteFieldBeginError + } + if err := oprot.WriteString(p.Msg); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 2 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 2 end error: ", p), err) +} +func (p *ImpersonateCozeUserResponse) writeField3(oprot thrift.TProtocol) (err error) { + if err = oprot.WriteFieldBegin("data", thrift.STRUCT, 3); err != nil { + goto WriteFieldBeginError + } + if err := p.Data.Write(oprot); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 3 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 3 end error: ", p), err) +} + +func (p *ImpersonateCozeUserResponse) String() string { + if p == nil { + return "" + } + return fmt.Sprintf("ImpersonateCozeUserResponse(%+v)", *p) + +} + +type ImpersonateCozeUserResponseData struct { + AccessToken string `thrift:"access_token,1,required" form:"access_token,required" json:"access_token,required" query:"access_token,required"` + ExpiresIn int64 `thrift:"expires_in,2,required" form:"expires_in,required" json:"expires_in,required" query:"expires_in,required"` + TokenType string `thrift:"token_type,3,required" form:"token_type,required" json:"token_type,required" query:"token_type,required"` +} + +func NewImpersonateCozeUserResponseData() *ImpersonateCozeUserResponseData { + return &ImpersonateCozeUserResponseData{} +} + +func (p *ImpersonateCozeUserResponseData) InitDefault() { +} + +func (p *ImpersonateCozeUserResponseData) GetAccessToken() (v string) { + return p.AccessToken +} + +func (p *ImpersonateCozeUserResponseData) GetExpiresIn() (v int64) { + return p.ExpiresIn +} + +func (p *ImpersonateCozeUserResponseData) GetTokenType() (v string) { + return p.TokenType +} + +var fieldIDToName_ImpersonateCozeUserResponseData = map[int16]string{ + 1: "access_token", + 2: "expires_in", + 3: "token_type", +} + +func (p *ImpersonateCozeUserResponseData) Read(iprot thrift.TProtocol) (err error) { + var fieldTypeId thrift.TType + var fieldId int16 + var issetAccessToken bool = false + var issetExpiresIn bool = false + var issetTokenType bool = false + + if _, err = iprot.ReadStructBegin(); err != nil { + goto ReadStructBeginError + } + + for { + _, fieldTypeId, fieldId, err = iprot.ReadFieldBegin() + if err != nil { + goto ReadFieldBeginError + } + if fieldTypeId == thrift.STOP { + break + } + + switch fieldId { + case 1: + if fieldTypeId == thrift.STRING { + if err = p.ReadField1(iprot); err != nil { + goto ReadFieldError + } + issetAccessToken = true + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + case 2: + if fieldTypeId == thrift.I64 { + if err = p.ReadField2(iprot); err != nil { + goto ReadFieldError + } + issetExpiresIn = true + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + case 3: + if fieldTypeId == thrift.STRING { + if err = p.ReadField3(iprot); err != nil { + goto ReadFieldError + } + issetTokenType = true + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + default: + if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + } + if err = iprot.ReadFieldEnd(); err != nil { + goto ReadFieldEndError + } + } + if err = iprot.ReadStructEnd(); err != nil { + goto ReadStructEndError + } + + if !issetAccessToken { + fieldId = 1 + goto RequiredFieldNotSetError + } + + if !issetExpiresIn { + fieldId = 2 + goto RequiredFieldNotSetError + } + + if !issetTokenType { + fieldId = 3 + goto RequiredFieldNotSetError + } + return nil +ReadStructBeginError: + return thrift.PrependError(fmt.Sprintf("%T read struct begin error: ", p), err) +ReadFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) +ReadFieldError: + return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_ImpersonateCozeUserResponseData[fieldId]), err) +SkipFieldError: + return thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) + +ReadFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T read field end error", p), err) +ReadStructEndError: + return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) +RequiredFieldNotSetError: + return thrift.NewTProtocolExceptionWithType(thrift.INVALID_DATA, fmt.Errorf("required field %s is not set", fieldIDToName_ImpersonateCozeUserResponseData[fieldId])) +} + +func (p *ImpersonateCozeUserResponseData) ReadField1(iprot thrift.TProtocol) error { + + var _field string + if v, err := iprot.ReadString(); err != nil { + return err + } else { + _field = v + } + p.AccessToken = _field + return nil +} +func (p *ImpersonateCozeUserResponseData) ReadField2(iprot thrift.TProtocol) error { + + var _field int64 + if v, err := iprot.ReadI64(); err != nil { + return err + } else { + _field = v + } + p.ExpiresIn = _field + return nil +} +func (p *ImpersonateCozeUserResponseData) ReadField3(iprot thrift.TProtocol) error { + + var _field string + if v, err := iprot.ReadString(); err != nil { + return err + } else { + _field = v + } + p.TokenType = _field + return nil +} + +func (p *ImpersonateCozeUserResponseData) Write(oprot thrift.TProtocol) (err error) { + var fieldId int16 + if err = oprot.WriteStructBegin("ImpersonateCozeUserResponseData"); err != nil { + goto WriteStructBeginError + } + if p != nil { + if err = p.writeField1(oprot); err != nil { + fieldId = 1 + goto WriteFieldError + } + if err = p.writeField2(oprot); err != nil { + fieldId = 2 + goto WriteFieldError + } + if err = p.writeField3(oprot); err != nil { + fieldId = 3 + goto WriteFieldError + } + } + if err = oprot.WriteFieldStop(); err != nil { + goto WriteFieldStopError + } + if err = oprot.WriteStructEnd(); err != nil { + goto WriteStructEndError + } + return nil +WriteStructBeginError: + return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) +WriteFieldError: + return thrift.PrependError(fmt.Sprintf("%T write field %d error: ", p, fieldId), err) +WriteFieldStopError: + return thrift.PrependError(fmt.Sprintf("%T write field stop error: ", p), err) +WriteStructEndError: + return thrift.PrependError(fmt.Sprintf("%T write struct end error: ", p), err) +} + +func (p *ImpersonateCozeUserResponseData) writeField1(oprot thrift.TProtocol) (err error) { + if err = oprot.WriteFieldBegin("access_token", thrift.STRING, 1); err != nil { + goto WriteFieldBeginError + } + if err := oprot.WriteString(p.AccessToken); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 1 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 1 end error: ", p), err) +} +func (p *ImpersonateCozeUserResponseData) writeField2(oprot thrift.TProtocol) (err error) { + if err = oprot.WriteFieldBegin("expires_in", thrift.I64, 2); err != nil { + goto WriteFieldBeginError + } + if err := oprot.WriteI64(p.ExpiresIn); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 2 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 2 end error: ", p), err) +} +func (p *ImpersonateCozeUserResponseData) writeField3(oprot thrift.TProtocol) (err error) { + if err = oprot.WriteFieldBegin("token_type", thrift.STRING, 3); err != nil { + goto WriteFieldBeginError + } + if err := oprot.WriteString(p.TokenType); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 3 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 3 end error: ", p), err) +} + +func (p *ImpersonateCozeUserResponseData) String() string { + if p == nil { + return "" + } + return fmt.Sprintf("ImpersonateCozeUserResponseData(%+v)", *p) + +} + type BotOpenApiService interface { OauthAuthorizationCode(ctx context.Context, request *OauthAuthorizationCodeReq) (r *OauthAuthorizationCodeResp, err error) + + ImpersonateCozeUser(ctx context.Context, request *ImpersonateCozeUserRequest) (r *ImpersonateCozeUserResponse, err error) //openapi GetBotOnlineInfo(ctx context.Context, request *GetBotOnlineInfoReq) (r *GetBotOnlineInfoResp, err error) // File related OpenAPI @@ -1804,6 +3060,15 @@ func (p *BotOpenApiServiceClient) OauthAuthorizationCode(ctx context.Context, re } return _result.GetSuccess(), nil } +func (p *BotOpenApiServiceClient) ImpersonateCozeUser(ctx context.Context, request *ImpersonateCozeUserRequest) (r *ImpersonateCozeUserResponse, err error) { + var _args BotOpenApiServiceImpersonateCozeUserArgs + _args.Request = request + var _result BotOpenApiServiceImpersonateCozeUserResult + if err = p.Client_().Call(ctx, "ImpersonateCozeUser", &_args, &_result); err != nil { + return + } + return _result.GetSuccess(), nil +} func (p *BotOpenApiServiceClient) GetBotOnlineInfo(ctx context.Context, request *GetBotOnlineInfoReq) (r *GetBotOnlineInfoResp, err error) { var _args BotOpenApiServiceGetBotOnlineInfoArgs _args.Request = request @@ -1844,6 +3109,7 @@ func (p *BotOpenApiServiceProcessor) ProcessorMap() map[string]thrift.TProcessor func NewBotOpenApiServiceProcessor(handler BotOpenApiService) *BotOpenApiServiceProcessor { self := &BotOpenApiServiceProcessor{handler: handler, processorMap: make(map[string]thrift.TProcessorFunction)} self.AddToProcessorMap("OauthAuthorizationCode", &botOpenApiServiceProcessorOauthAuthorizationCode{handler: handler}) + self.AddToProcessorMap("ImpersonateCozeUser", &botOpenApiServiceProcessorImpersonateCozeUser{handler: handler}) self.AddToProcessorMap("GetBotOnlineInfo", &botOpenApiServiceProcessorGetBotOnlineInfo{handler: handler}) self.AddToProcessorMap("UploadFileOpen", &botOpenApiServiceProcessorUploadFileOpen{handler: handler}) return self @@ -1914,6 +3180,54 @@ func (p *botOpenApiServiceProcessorOauthAuthorizationCode) Process(ctx context.C return true, err } +type botOpenApiServiceProcessorImpersonateCozeUser struct { + handler BotOpenApiService +} + +func (p *botOpenApiServiceProcessorImpersonateCozeUser) Process(ctx context.Context, seqId int32, iprot, oprot thrift.TProtocol) (success bool, err thrift.TException) { + args := BotOpenApiServiceImpersonateCozeUserArgs{} + if err = args.Read(iprot); err != nil { + iprot.ReadMessageEnd() + x := thrift.NewTApplicationException(thrift.PROTOCOL_ERROR, err.Error()) + oprot.WriteMessageBegin("ImpersonateCozeUser", thrift.EXCEPTION, seqId) + x.Write(oprot) + oprot.WriteMessageEnd() + oprot.Flush(ctx) + return false, err + } + + iprot.ReadMessageEnd() + var err2 error + result := BotOpenApiServiceImpersonateCozeUserResult{} + var retval *ImpersonateCozeUserResponse + if retval, err2 = p.handler.ImpersonateCozeUser(ctx, args.Request); err2 != nil { + x := thrift.NewTApplicationException(thrift.INTERNAL_ERROR, "Internal error processing ImpersonateCozeUser: "+err2.Error()) + oprot.WriteMessageBegin("ImpersonateCozeUser", thrift.EXCEPTION, seqId) + x.Write(oprot) + oprot.WriteMessageEnd() + oprot.Flush(ctx) + return true, err2 + } else { + result.Success = retval + } + if err2 = oprot.WriteMessageBegin("ImpersonateCozeUser", thrift.REPLY, seqId); err2 != nil { + err = err2 + } + if err2 = result.Write(oprot); err == nil && err2 != nil { + err = err2 + } + if err2 = oprot.WriteMessageEnd(); err == nil && err2 != nil { + err = err2 + } + if err2 = oprot.Flush(ctx); err == nil && err2 != nil { + err = err2 + } + if err != nil { + return + } + return true, err +} + type botOpenApiServiceProcessorGetBotOnlineInfo struct { handler BotOpenApiService } @@ -2302,6 +3616,298 @@ func (p *BotOpenApiServiceOauthAuthorizationCodeResult) String() string { } +type BotOpenApiServiceImpersonateCozeUserArgs struct { + Request *ImpersonateCozeUserRequest `thrift:"request,1"` +} + +func NewBotOpenApiServiceImpersonateCozeUserArgs() *BotOpenApiServiceImpersonateCozeUserArgs { + return &BotOpenApiServiceImpersonateCozeUserArgs{} +} + +func (p *BotOpenApiServiceImpersonateCozeUserArgs) InitDefault() { +} + +var BotOpenApiServiceImpersonateCozeUserArgs_Request_DEFAULT *ImpersonateCozeUserRequest + +func (p *BotOpenApiServiceImpersonateCozeUserArgs) GetRequest() (v *ImpersonateCozeUserRequest) { + if !p.IsSetRequest() { + return BotOpenApiServiceImpersonateCozeUserArgs_Request_DEFAULT + } + return p.Request +} + +var fieldIDToName_BotOpenApiServiceImpersonateCozeUserArgs = map[int16]string{ + 1: "request", +} + +func (p *BotOpenApiServiceImpersonateCozeUserArgs) IsSetRequest() bool { + return p.Request != nil +} + +func (p *BotOpenApiServiceImpersonateCozeUserArgs) Read(iprot thrift.TProtocol) (err error) { + var fieldTypeId thrift.TType + var fieldId int16 + + if _, err = iprot.ReadStructBegin(); err != nil { + goto ReadStructBeginError + } + + for { + _, fieldTypeId, fieldId, err = iprot.ReadFieldBegin() + if err != nil { + goto ReadFieldBeginError + } + if fieldTypeId == thrift.STOP { + break + } + + switch fieldId { + case 1: + if fieldTypeId == thrift.STRUCT { + if err = p.ReadField1(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + default: + if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + } + if err = iprot.ReadFieldEnd(); err != nil { + goto ReadFieldEndError + } + } + if err = iprot.ReadStructEnd(); err != nil { + goto ReadStructEndError + } + + return nil +ReadStructBeginError: + return thrift.PrependError(fmt.Sprintf("%T read struct begin error: ", p), err) +ReadFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) +ReadFieldError: + return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_BotOpenApiServiceImpersonateCozeUserArgs[fieldId]), err) +SkipFieldError: + return thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) + +ReadFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T read field end error", p), err) +ReadStructEndError: + return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) +} + +func (p *BotOpenApiServiceImpersonateCozeUserArgs) ReadField1(iprot thrift.TProtocol) error { + _field := NewImpersonateCozeUserRequest() + if err := _field.Read(iprot); err != nil { + return err + } + p.Request = _field + return nil +} + +func (p *BotOpenApiServiceImpersonateCozeUserArgs) Write(oprot thrift.TProtocol) (err error) { + var fieldId int16 + if err = oprot.WriteStructBegin("ImpersonateCozeUser_args"); err != nil { + goto WriteStructBeginError + } + if p != nil { + if err = p.writeField1(oprot); err != nil { + fieldId = 1 + goto WriteFieldError + } + } + if err = oprot.WriteFieldStop(); err != nil { + goto WriteFieldStopError + } + if err = oprot.WriteStructEnd(); err != nil { + goto WriteStructEndError + } + return nil +WriteStructBeginError: + return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) +WriteFieldError: + return thrift.PrependError(fmt.Sprintf("%T write field %d error: ", p, fieldId), err) +WriteFieldStopError: + return thrift.PrependError(fmt.Sprintf("%T write field stop error: ", p), err) +WriteStructEndError: + return thrift.PrependError(fmt.Sprintf("%T write struct end error: ", p), err) +} + +func (p *BotOpenApiServiceImpersonateCozeUserArgs) writeField1(oprot thrift.TProtocol) (err error) { + if err = oprot.WriteFieldBegin("request", thrift.STRUCT, 1); err != nil { + goto WriteFieldBeginError + } + if err := p.Request.Write(oprot); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 1 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 1 end error: ", p), err) +} + +func (p *BotOpenApiServiceImpersonateCozeUserArgs) String() string { + if p == nil { + return "" + } + return fmt.Sprintf("BotOpenApiServiceImpersonateCozeUserArgs(%+v)", *p) + +} + +type BotOpenApiServiceImpersonateCozeUserResult struct { + Success *ImpersonateCozeUserResponse `thrift:"success,0,optional"` +} + +func NewBotOpenApiServiceImpersonateCozeUserResult() *BotOpenApiServiceImpersonateCozeUserResult { + return &BotOpenApiServiceImpersonateCozeUserResult{} +} + +func (p *BotOpenApiServiceImpersonateCozeUserResult) InitDefault() { +} + +var BotOpenApiServiceImpersonateCozeUserResult_Success_DEFAULT *ImpersonateCozeUserResponse + +func (p *BotOpenApiServiceImpersonateCozeUserResult) GetSuccess() (v *ImpersonateCozeUserResponse) { + if !p.IsSetSuccess() { + return BotOpenApiServiceImpersonateCozeUserResult_Success_DEFAULT + } + return p.Success +} + +var fieldIDToName_BotOpenApiServiceImpersonateCozeUserResult = map[int16]string{ + 0: "success", +} + +func (p *BotOpenApiServiceImpersonateCozeUserResult) IsSetSuccess() bool { + return p.Success != nil +} + +func (p *BotOpenApiServiceImpersonateCozeUserResult) Read(iprot thrift.TProtocol) (err error) { + var fieldTypeId thrift.TType + var fieldId int16 + + if _, err = iprot.ReadStructBegin(); err != nil { + goto ReadStructBeginError + } + + for { + _, fieldTypeId, fieldId, err = iprot.ReadFieldBegin() + if err != nil { + goto ReadFieldBeginError + } + if fieldTypeId == thrift.STOP { + break + } + + switch fieldId { + case 0: + if fieldTypeId == thrift.STRUCT { + if err = p.ReadField0(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + default: + if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + } + if err = iprot.ReadFieldEnd(); err != nil { + goto ReadFieldEndError + } + } + if err = iprot.ReadStructEnd(); err != nil { + goto ReadStructEndError + } + + return nil +ReadStructBeginError: + return thrift.PrependError(fmt.Sprintf("%T read struct begin error: ", p), err) +ReadFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) +ReadFieldError: + return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_BotOpenApiServiceImpersonateCozeUserResult[fieldId]), err) +SkipFieldError: + return thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) + +ReadFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T read field end error", p), err) +ReadStructEndError: + return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) +} + +func (p *BotOpenApiServiceImpersonateCozeUserResult) ReadField0(iprot thrift.TProtocol) error { + _field := NewImpersonateCozeUserResponse() + if err := _field.Read(iprot); err != nil { + return err + } + p.Success = _field + return nil +} + +func (p *BotOpenApiServiceImpersonateCozeUserResult) Write(oprot thrift.TProtocol) (err error) { + var fieldId int16 + if err = oprot.WriteStructBegin("ImpersonateCozeUser_result"); err != nil { + goto WriteStructBeginError + } + if p != nil { + if err = p.writeField0(oprot); err != nil { + fieldId = 0 + goto WriteFieldError + } + } + if err = oprot.WriteFieldStop(); err != nil { + goto WriteFieldStopError + } + if err = oprot.WriteStructEnd(); err != nil { + goto WriteStructEndError + } + return nil +WriteStructBeginError: + return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) +WriteFieldError: + return thrift.PrependError(fmt.Sprintf("%T write field %d error: ", p, fieldId), err) +WriteFieldStopError: + return thrift.PrependError(fmt.Sprintf("%T write field stop error: ", p), err) +WriteStructEndError: + return thrift.PrependError(fmt.Sprintf("%T write struct end error: ", p), err) +} + +func (p *BotOpenApiServiceImpersonateCozeUserResult) writeField0(oprot thrift.TProtocol) (err error) { + if p.IsSetSuccess() { + if err = oprot.WriteFieldBegin("success", thrift.STRUCT, 0); err != nil { + goto WriteFieldBeginError + } + if err := p.Success.Write(oprot); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 0 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 0 end error: ", p), err) +} + +func (p *BotOpenApiServiceImpersonateCozeUserResult) String() string { + if p == nil { + return "" + } + return fmt.Sprintf("BotOpenApiServiceImpersonateCozeUserResult(%+v)", *p) + +} + type BotOpenApiServiceGetBotOnlineInfoArgs struct { Request *GetBotOnlineInfoReq `thrift:"request,1"` } diff --git a/backend/api/model/coze/api.go b/backend/api/model/coze/api.go index a0e9afdd0..1072569f6 100644 --- a/backend/api/model/coze/api.go +++ b/backend/api/model/coze/api.go @@ -1,19 +1,3 @@ -/* - * Copyright 2025 coze-dev 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. - */ - // Code generated by thriftgo (0.4.1). DO NOT EDIT. package coze diff --git a/backend/api/router/coze/api.go b/backend/api/router/coze/api.go index d3ee72cb1..d3259d879 100644 --- a/backend/api/router/coze/api.go +++ b/backend/api/router/coze/api.go @@ -250,6 +250,10 @@ func Register(r *server.Hertz) { } { _permission_api := _api.Group("/permission_api", _permission_apiMw()...) + { + _coze_web_app := _permission_api.Group("/coze_web_app", _coze_web_appMw()...) + _coze_web_app.POST("/impersonate_coze_user", append(_impersonatecozeuserMw(), coze.ImpersonateCozeUser)...) + } { _pat := _permission_api.Group("/pat", _patMw()...) _pat.POST("/create_personal_access_token_and_permission", append(_createpersonalaccesstokenandpermissionMw(), coze.CreatePersonalAccessTokenAndPermission)...) diff --git a/backend/api/router/coze/middleware.go b/backend/api/router/coze/middleware.go index f5a35a4d9..94a3023ce 100644 --- a/backend/api/router/coze/middleware.go +++ b/backend/api/router/coze/middleware.go @@ -1505,3 +1505,13 @@ func _upload1Mw() []app.HandlerFunc { // your code... return nil } + +func _coze_web_appMw() []app.HandlerFunc { + // your code... + return nil +} + +func _impersonatecozeuserMw() []app.HandlerFunc { + // your code... + return nil +} diff --git a/backend/application/openauth/openapiauth.go b/backend/application/openauth/openapiauth.go index dd0c8322c..8018f3736 100644 --- a/backend/application/openauth/openapiauth.go +++ b/backend/application/openauth/openapiauth.go @@ -23,6 +23,7 @@ import ( "github.com/pkg/errors" + "github.com/coze-dev/coze-studio/backend/api/model/app/bot_open_api" openapimodel "github.com/coze-dev/coze-studio/backend/api/model/permission/openapiauth" "github.com/coze-dev/coze-studio/backend/application/base/ctxutil" openapi "github.com/coze-dev/coze-studio/backend/domain/openauth/openapiauth" @@ -111,6 +112,28 @@ func (s *OpenAuthApplicationService) CreatePersonalAccessToken(ctx context.Conte return resp, nil } +func (s *OpenAuthApplicationService) ImpersonateCozeUserAccessToken(ctx context.Context, req *bot_open_api.ImpersonateCozeUserRequest) (*bot_open_api.ImpersonateCozeUserResponse, error) { + resp := new(bot_open_api.ImpersonateCozeUserResponse) + userID := ctxutil.GetUIDFromCtx(ctx) + + expiredSecond := time.Second * 60 * 10 + appReq := &entity.CreateApiKey{ + UserID: *userID, + } + + apiKeyResp, err := openapiAuthDomainSVC.Create(ctx, appReq) + if err != nil { + logs.CtxErrorf(ctx, "OpenAuthApplicationService.CreatePersonalAccessToken failed, err=%v", err) + return resp, errors.New("CreatePersonalAccessToken failed") + } + resp.Data = &bot_open_api.ImpersonateCozeUserResponseData{ + AccessToken: apiKeyResp.ApiKey, + ExpiresIn: time.Now().Add(time.Duration(expiredSecond) * time.Hour * 24).Unix(), + TokenType: "", + } + return resp, nil +} + func (s *OpenAuthApplicationService) ListPersonalAccessTokens(ctx context.Context, req *openapimodel.ListPersonalAccessTokensRequest) (*openapimodel.ListPersonalAccessTokensResponse, error) { resp := new(openapimodel.ListPersonalAccessTokensResponse) diff --git a/backend/domain/conversation/agentrun/service/agent_run_impl.go b/backend/domain/conversation/agentrun/service/agent_run_impl.go index 41d6a909c..67a5c6686 100644 --- a/backend/domain/conversation/agentrun/service/agent_run_impl.go +++ b/backend/domain/conversation/agentrun/service/agent_run_impl.go @@ -33,11 +33,12 @@ import ( "github.com/cloudwego/eino/schema" "github.com/mohae/deepcopy" + "github.com/coze-dev/coze-studio/backend/api/model/app/bot_common" messageModel "github.com/coze-dev/coze-studio/backend/api/model/conversation/message" "github.com/coze-dev/coze-studio/backend/api/model/crossdomain/agentrun" "github.com/coze-dev/coze-studio/backend/api/model/crossdomain/message" "github.com/coze-dev/coze-studio/backend/api/model/crossdomain/singleagent" - "github.com/coze-dev/coze-studio/backend/api/model/ocean/cloud/bot_common" + "github.com/coze-dev/coze-studio/backend/crossdomain/contract/crossagent" "github.com/coze-dev/coze-studio/backend/crossdomain/contract/crossmessage" "github.com/coze-dev/coze-studio/backend/crossdomain/contract/crossworkflow" @@ -179,7 +180,7 @@ func (c *runImpl) handlerWfAsAgentStreamExecute(ctx context.Context, sw *schema. BizType: crossworkflow.BizTypeAgent, SyncPattern: crossworkflow.SyncPatternStream, }, map[string]any{ - "input": "你有什么功能?", + "input": concatWfInput(rtDependence), }) mainChan := make(chan *entity.AgentRespEvent, 100) @@ -197,6 +198,20 @@ func (c *runImpl) handlerWfAsAgentStreamExecute(ctx context.Context, sw *schema. return err } +func concatWfInput(rtDependence *runtimeDependence) string { + var input string + for _, content := range rtDependence.runMeta.Content { + if content.Type == message.InputTypeText { + input = content.Text + "," + input + } else { + for _, file := range content.FileData { + input += file.Url + "," + } + } + } + return input +} + func (c *runImpl) handlerAgentStreamExecute(ctx context.Context, sw *schema.StreamWriter[*entity.AgentRunResponse], historyMsg []*msgEntity.Message, input *msgEntity.Message, rtDependence *runtimeDependence) (err error) { mainChan := make(chan *entity.AgentRespEvent, 100) @@ -490,6 +505,7 @@ func (c *runImpl) pullWfStream(ctx context.Context, mainChan chan *entity.AgentR mainChan <- errChunk return } + } } func (c *runImpl) pull(_ context.Context, mainChan chan *entity.AgentRespEvent, events *schema.StreamReader[*crossagent.AgentEvent]) { diff --git a/idl/app/bot_open_api.thrift b/idl/app/bot_open_api.thrift index 2bec82ab4..59e5120be 100644 --- a/idl/app/bot_open_api.thrift +++ b/idl/app/bot_open_api.thrift @@ -46,9 +46,42 @@ struct GetBotOnlineInfoResp { 3: required bot_common.OpenAPIBotInfo data } +struct WorkspacePermission { + 1: list workspace_id_list + 2: list permission_list +} + +struct AccountPermission { + 1: list permission_list +} + +struct Scope { + 1: WorkspacePermission workspace_permission + 2: AccountPermission account_permission +} + +struct ImpersonateCozeUserRequest { + 1: i64 duration_seconds + 2: Scope scope +} + +struct ImpersonateCozeUserResponse { + 1: required i32 code + 2: required string msg + 3: ImpersonateCozeUserResponseData data +} + +struct ImpersonateCozeUserResponseData { + 1: required string access_token + 2: required i64 expires_in + 3: required string token_type +} + service BotOpenApiService { OauthAuthorizationCodeResp OauthAuthorizationCode(1: OauthAuthorizationCodeReq request)(api.get='/api/oauth/authorization_code', api.category="oauth", api.gen_path="oauth") + ImpersonateCozeUserResponse ImpersonateCozeUser (1: ImpersonateCozeUserRequest request) (api.post="/api/permission_api/coze_web_app/impersonate_coze_user") + //openapi GetBotOnlineInfoResp GetBotOnlineInfo(1: GetBotOnlineInfoReq request)(api.get='/v1/bot/get_online_info', api.category="bot", api.tag="openapi", api.gen_path="personal_api") // File related OpenAPI