NOISSUE - Update SMQ and Certs dependencies (#342)

* NOISSUE - Update Certs dependencies

Signed-off-by: dusan <borovcanindusan1@gmail.com>

* NOISSUE - Update Certs dependencies

Signed-off-by: dusan <borovcanindusan1@gmail.com>

* Fix linter errors

Signed-off-by: dusan <borovcanindusan1@gmail.com>

* Fix testing errors

Signed-off-by: dusan <borovcanindusan1@gmail.com>

---------

Signed-off-by: dusan <borovcanindusan1@gmail.com>
This commit is contained in:
Dušan Borovčanin
2025-11-03 09:52:17 +01:00
committed by GitHub
parent 2720ad0497
commit 7bc02a2816
9 changed files with 149 additions and 518 deletions
+2 -1
View File
@@ -7,6 +7,7 @@ package main
import (
"log"
certscli "github.com/absmach/certs/cli"
"github.com/absmach/magistrala/cli"
mgcli "github.com/absmach/magistrala/cli"
mgsdk "github.com/absmach/magistrala/pkg/sdk"
@@ -57,7 +58,7 @@ func main() {
groupsCmd := smqcli.NewGroupsCmd()
channelsCmd := smqcli.NewChannelsCmd()
messagesCmd := smqcli.NewMessagesCmd()
certsCmd := smqcli.NewCertsCmd()
certsCmd := certscli.NewCertsCmd()
configCmd := smqcli.NewConfigCmd()
invitationsCmd := smqcli.NewInvitationsCmd()
journalCmd := smqcli.NewJournalCmd()
+9 -2
View File
@@ -13,6 +13,7 @@ import (
"reflect"
chclient "github.com/absmach/callhome/pkg/client"
csdk "github.com/absmach/certs/sdk"
mgsdk "github.com/absmach/magistrala/pkg/sdk"
"github.com/absmach/magistrala/provision"
httpapi "github.com/absmach/magistrala/provision/api"
@@ -81,9 +82,15 @@ func main() {
MsgContentType: contentType,
TLSVerification: cfg.Server.TLS,
}
SDK := mgsdk.NewSDK(SDKCfg)
mgSdk := mgsdk.NewSDK(SDKCfg)
svc := provision.New(cfg, SDK, logger)
csdkConf := csdk.Config{
CertsURL: cfg.Server.CertsURL,
}
cSdk := csdk.NewSDK(csdkConf)
svc := provision.New(cfg, mgSdk, cSdk, logger)
svc = httpapi.NewLoggingMiddleware(svc, logger)
httpServerConfig := server.Config{Host: "", Port: cfg.Server.HTTPPort, KeyFile: cfg.Server.ServerKey, CertFile: cfg.Server.ServerCert}
+4 -4
View File
@@ -1,11 +1,12 @@
module github.com/absmach/magistrala
go 1.25.0
go 1.25.3
require (
github.com/0x6flab/namegenerator v1.4.0
github.com/absmach/callhome v0.18.2
github.com/absmach/supermq v0.18.1
github.com/absmach/certs v0.18.2
github.com/absmach/supermq v0.18.2
github.com/authzed/authzed-go v1.6.0
github.com/authzed/grpcutil v0.0.0-20250221190651-1985b19b35b8
github.com/caarlos0/env/v11 v11.3.1
@@ -52,7 +53,7 @@ require (
require (
buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.10-20250912141014-52f32327d4b0.1 // indirect
cloud.google.com/go/compute/metadata v0.7.0 // indirect
cloud.google.com/go/compute/metadata v0.9.0 // indirect
dario.cat/mergo v1.0.0 // indirect
filippo.io/edwards25519 v1.1.0 // indirect
github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect
@@ -122,7 +123,6 @@ require (
github.com/sagikazarmark/locafero v0.12.0 // indirect
github.com/samber/lo v1.52.0 // indirect
github.com/sirupsen/logrus v1.9.3 // indirect
github.com/smartystreets/goconvey v1.8.1 // indirect
github.com/spf13/afero v1.15.0 // indirect
github.com/spf13/cast v1.10.0 // indirect
github.com/spf13/pflag v1.0.10 // indirect
+22 -14
View File
@@ -3,8 +3,8 @@ buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.10-202509121410
buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.10-20250912141014-52f32327d4b0.1/go.mod h1:fUl8CEN/6ZAMk6bP8ahBJPUJw7rbp+j4x+wCcYi2IG4=
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go/compute/metadata v0.7.0 h1:PBWF+iiAerVNe8UCHxdOt6eHLVc3ydFeOCw78U8ytSU=
cloud.google.com/go/compute/metadata v0.7.0/go.mod h1:j5MvL9PprKL39t166CoB1uVHfQMs4tFQZZcKwksXUjo=
cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs=
cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10=
dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk=
dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
@@ -24,12 +24,14 @@ github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrd
github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g=
github.com/absmach/callhome v0.18.2 h1:dmopRHm2qTheHN1hdUKRRYpKwRrj7X9d8AWCFrb+K6s=
github.com/absmach/callhome v0.18.2/go.mod h1:LEXKhES9JJtj3tBgTZv7VPNjOi5ukJQB0mFic0QP60Q=
github.com/absmach/mgate v0.4.6-0.20250605150648-edf967fbb46a h1:1+772OQFHAS23JLAHrCZxO+DnGoiMllKcSwLQy74y+k=
github.com/absmach/mgate v0.4.6-0.20250605150648-edf967fbb46a/go.mod h1:X2amjQg/2cnM+UKblMdpU2M4cZO74xtEHNIxtuUXCeA=
github.com/absmach/certs v0.18.2 h1:s6KKL3/KfDZ6z0IxvNCksIOUwRnEgQyCpeAonuR15No=
github.com/absmach/certs v0.18.2/go.mod h1:scqVZsmW2xPScnpMTtE70oN6cn0LLjFcJVPi4JKZ4+E=
github.com/absmach/mgate v0.5.0 h1:RV2Aalra3xIm+XTs13TM7iE7v4WTL2SKhKcPbKr22Ac=
github.com/absmach/mgate v0.5.0/go.mod h1:0KVq7mxM0wayosmyXPPxp1EL0c2d9kRp5V8NZCKdetA=
github.com/absmach/senml v1.0.8 h1:+opem/r4g6c6eA/JLyCIuksyEhj7eBdysY3pEmy1mqo=
github.com/absmach/senml v1.0.8/go.mod h1:DRhzHLgvQoIUHroBgpFrSWso+bJZO9E96RlHAHy+VRI=
github.com/absmach/supermq v0.18.1 h1:JRLP6rfSzZoHgRGPfwNSmzJ7a4K4b4Dvz2nCmR32rxI=
github.com/absmach/supermq v0.18.1/go.mod h1:dYnFOIcGQzZ1WpYt1qNv1g609WmOWYzWCBBRjPQV7Uk=
github.com/absmach/supermq v0.18.2 h1:oGiuMyjiFJhAmysmApOsYKtN4Kf/WXpLWElEUqmcZec=
github.com/absmach/supermq v0.18.2/go.mod h1:ehhfnpFhHZLF9EAdxqDSUCWLJxYhu0mqFd7a4CKMY0g=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
@@ -303,8 +305,8 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
github.com/lestrrat-go/blackmagic v1.0.3 h1:94HXkVLxkZO9vJI/w2u1T0DAoprShFd13xtnSINtDWs=
github.com/lestrrat-go/blackmagic v1.0.3/go.mod h1:6AWFyKNNj0zEXQYfTMPfZrAXUWUfTIZ5ECEUEJaijtw=
github.com/lestrrat-go/blackmagic v1.0.4 h1:IwQibdnf8l2KoO+qC3uT4OaTWsW7tuRQXy9TRN9QanA=
github.com/lestrrat-go/blackmagic v1.0.4/go.mod h1:6AWFyKNNj0zEXQYfTMPfZrAXUWUfTIZ5ECEUEJaijtw=
github.com/lestrrat-go/httpcc v1.0.1 h1:ydWCStUeJLkpYyjLDHihupbn2tYmZ7m22BGkcvZZrIE=
github.com/lestrrat-go/httpcc v1.0.1/go.mod h1:qiltp3Mt56+55GPVCbTdM9MlqhvzyuL6W/NMDA8vA5E=
github.com/lestrrat-go/httprc v1.0.6 h1:qgmgIRhpvBqexMJjA/PmwSvhNk679oqD1RbovdCGW8k=
@@ -380,6 +382,12 @@ github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3v
github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4=
github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY=
github.com/pion/dtls/v3 v3.0.7 h1:bItXtTYYhZwkPFk4t1n3Kkf5TDrfj6+4wG+CZR8uI9Q=
github.com/pion/dtls/v3 v3.0.7/go.mod h1:uDlH5VPrgOQIw59irKYkMudSFprY9IEFCqz/eTz16f8=
github.com/pion/logging v0.2.4 h1:tTew+7cmQ+Mc1pTBLKH2puKsOvhm32dROumOZ655zB8=
github.com/pion/logging v0.2.4/go.mod h1:DffhXTKYdNZU+KtJ5pyQDjvOAh/GsNSyv1lbkFbe3so=
github.com/pion/transport/v3 v3.0.8 h1:oI3myyYnTKUSTthu/NZZ8eu2I5sHbxbUNNFW62olaYc=
github.com/pion/transport/v3 v3.0.8/go.mod h1:+c2eewC5WJQHiAA46fkMMzoYZSuGzA/7E2FPrOYHctQ=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
@@ -433,8 +441,8 @@ github.com/sagikazarmark/locafero v0.12.0/go.mod h1:sZh36u/YSZ918v0Io+U9ogLYQJ9t
github.com/samber/lo v1.52.0 h1:Rvi+3BFHES3A8meP33VPAxiBZX/Aws5RxrschYGjomw=
github.com/samber/lo v1.52.0/go.mod h1:4+MXEGsJzbKGaUEQFKBq2xtfuznW9oz/WrgyzMzRoM0=
github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
github.com/segmentio/asm v1.2.0 h1:9BQrFxC+YOHJlTlHGkTrFWf59nbL3XnCoFLTwDCI7ys=
github.com/segmentio/asm v1.2.0/go.mod h1:BqMnlJP91P8d+4ibuonYZw9mfnzI9HfxselHZr5aAcs=
github.com/segmentio/asm v1.2.1 h1:DTNbBqs57ioxAD4PrArqftgypG4/qNpXoJx8TVXxPR0=
github.com/segmentio/asm v1.2.1/go.mod h1:BqMnlJP91P8d+4ibuonYZw9mfnzI9HfxselHZr5aAcs=
github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4=
github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
@@ -570,8 +578,8 @@ golang.org/x/crypto v0.20.0/go.mod h1:Xwo95rrVNIoSMx9wa1JroENMToLWn3RNVrTBpLHgZP
golang.org/x/crypto v0.43.0 h1:dduJYIi3A3KOfdGOHX8AVZ/jGiyPa3IbBozJ5kNuE04=
golang.org/x/crypto v0.43.0/go.mod h1:BFbav4mRNlXJL4wNeejLpWxB7wMbc79PdRGhWKncxR0=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20250606033433-dcc06ee1d476 h1:bsqhLWFR6G6xiQcb+JoGqdKdRU6WzPWmK8E0jxTjzo4=
golang.org/x/exp v0.0.0-20250606033433-dcc06ee1d476/go.mod h1:3//PLf8L/X+8b4vuAfHzxeRUl04Adcb341+IGKfnqS8=
golang.org/x/exp v0.0.0-20251017212417-90e834f514db h1:by6IehL4BH5k3e3SJmcoNbOobMey2SLpAF79iPOEBvw=
golang.org/x/exp v0.0.0-20251017212417-90e834f514db/go.mod h1:j/pmGrbnkbPtQfxEe5D0VQhZC6qKbfKifgD0oM7sR70=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
@@ -605,8 +613,8 @@ golang.org/x/net v0.46.0 h1:giFlY12I07fugqwPuWJi68oOnpfqFnJIJzaIIm2JVV4=
golang.org/x/net v0.46.0/go.mod h1:Q9BGdFy1y4nkUwiLvT5qtyhAnEHgnQ/zd8PfU6nc210=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.31.0 h1:8Fq0yVZLh4j4YA47vHKFTa9Ew5XIrCP8LC6UeNZnLxo=
golang.org/x/oauth2 v0.31.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA=
golang.org/x/oauth2 v0.32.0 h1:jsCblLleRMDrxMN29H3z/k1KliIvpLgCkE6R8FXXNgY=
golang.org/x/oauth2 v0.32.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-407
View File
@@ -10,7 +10,6 @@ package mocks
import (
"context"
"time"
"github.com/absmach/magistrala/pkg/sdk"
"github.com/absmach/supermq/pkg/errors"
@@ -6037,92 +6036,6 @@ func (_c *SDK_Invitations_Call) RunAndReturn(run func(ctx context.Context, pm sd
return _c
}
// IssueCert provides a mock function for the type SDK
func (_mock *SDK) IssueCert(ctx context.Context, clientID string, validity string, domainID string, token string) (sdk0.Cert, errors.SDKError) {
ret := _mock.Called(ctx, clientID, validity, domainID, token)
if len(ret) == 0 {
panic("no return value specified for IssueCert")
}
var r0 sdk0.Cert
var r1 errors.SDKError
if returnFunc, ok := ret.Get(0).(func(context.Context, string, string, string, string) (sdk0.Cert, errors.SDKError)); ok {
return returnFunc(ctx, clientID, validity, domainID, token)
}
if returnFunc, ok := ret.Get(0).(func(context.Context, string, string, string, string) sdk0.Cert); ok {
r0 = returnFunc(ctx, clientID, validity, domainID, token)
} else {
r0 = ret.Get(0).(sdk0.Cert)
}
if returnFunc, ok := ret.Get(1).(func(context.Context, string, string, string, string) errors.SDKError); ok {
r1 = returnFunc(ctx, clientID, validity, domainID, token)
} else {
if ret.Get(1) != nil {
r1 = ret.Get(1).(errors.SDKError)
}
}
return r0, r1
}
// SDK_IssueCert_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'IssueCert'
type SDK_IssueCert_Call struct {
*mock.Call
}
// IssueCert is a helper method to define mock.On call
// - ctx context.Context
// - clientID string
// - validity string
// - domainID string
// - token string
func (_e *SDK_Expecter) IssueCert(ctx interface{}, clientID interface{}, validity interface{}, domainID interface{}, token interface{}) *SDK_IssueCert_Call {
return &SDK_IssueCert_Call{Call: _e.mock.On("IssueCert", ctx, clientID, validity, domainID, token)}
}
func (_c *SDK_IssueCert_Call) Run(run func(ctx context.Context, clientID string, validity string, domainID string, token string)) *SDK_IssueCert_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 context.Context
if args[0] != nil {
arg0 = args[0].(context.Context)
}
var arg1 string
if args[1] != nil {
arg1 = args[1].(string)
}
var arg2 string
if args[2] != nil {
arg2 = args[2].(string)
}
var arg3 string
if args[3] != nil {
arg3 = args[3].(string)
}
var arg4 string
if args[4] != nil {
arg4 = args[4].(string)
}
run(
arg0,
arg1,
arg2,
arg3,
arg4,
)
})
return _c
}
func (_c *SDK_IssueCert_Call) Return(cert sdk0.Cert, sDKError errors.SDKError) *SDK_IssueCert_Call {
_c.Call.Return(cert, sDKError)
return _c
}
func (_c *SDK_IssueCert_Call) RunAndReturn(run func(ctx context.Context, clientID string, validity string, domainID string, token string) (sdk0.Cert, errors.SDKError)) *SDK_IssueCert_Call {
_c.Call.Return(run)
return _c
}
// Journal provides a mock function for the type SDK
func (_mock *SDK) Journal(ctx context.Context, entityType string, entityID string, domainID string, pm sdk0.PageMetadata, token string) (sdk0.JournalsPage, error) {
ret := _mock.Called(ctx, entityType, entityID, domainID, pm, token)
@@ -8358,166 +8271,6 @@ func (_c *SDK_ResetPasswordRequest_Call) RunAndReturn(run func(ctx context.Conte
return _c
}
// RevokeAllCerts provides a mock function for the type SDK
func (_mock *SDK) RevokeAllCerts(ctx context.Context, clientID string, domainID string, token string) (time.Time, errors.SDKError) {
ret := _mock.Called(ctx, clientID, domainID, token)
if len(ret) == 0 {
panic("no return value specified for RevokeAllCerts")
}
var r0 time.Time
var r1 errors.SDKError
if returnFunc, ok := ret.Get(0).(func(context.Context, string, string, string) (time.Time, errors.SDKError)); ok {
return returnFunc(ctx, clientID, domainID, token)
}
if returnFunc, ok := ret.Get(0).(func(context.Context, string, string, string) time.Time); ok {
r0 = returnFunc(ctx, clientID, domainID, token)
} else {
r0 = ret.Get(0).(time.Time)
}
if returnFunc, ok := ret.Get(1).(func(context.Context, string, string, string) errors.SDKError); ok {
r1 = returnFunc(ctx, clientID, domainID, token)
} else {
if ret.Get(1) != nil {
r1 = ret.Get(1).(errors.SDKError)
}
}
return r0, r1
}
// SDK_RevokeAllCerts_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'RevokeAllCerts'
type SDK_RevokeAllCerts_Call struct {
*mock.Call
}
// RevokeAllCerts is a helper method to define mock.On call
// - ctx context.Context
// - clientID string
// - domainID string
// - token string
func (_e *SDK_Expecter) RevokeAllCerts(ctx interface{}, clientID interface{}, domainID interface{}, token interface{}) *SDK_RevokeAllCerts_Call {
return &SDK_RevokeAllCerts_Call{Call: _e.mock.On("RevokeAllCerts", ctx, clientID, domainID, token)}
}
func (_c *SDK_RevokeAllCerts_Call) Run(run func(ctx context.Context, clientID string, domainID string, token string)) *SDK_RevokeAllCerts_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 context.Context
if args[0] != nil {
arg0 = args[0].(context.Context)
}
var arg1 string
if args[1] != nil {
arg1 = args[1].(string)
}
var arg2 string
if args[2] != nil {
arg2 = args[2].(string)
}
var arg3 string
if args[3] != nil {
arg3 = args[3].(string)
}
run(
arg0,
arg1,
arg2,
arg3,
)
})
return _c
}
func (_c *SDK_RevokeAllCerts_Call) Return(time1 time.Time, sDKError errors.SDKError) *SDK_RevokeAllCerts_Call {
_c.Call.Return(time1, sDKError)
return _c
}
func (_c *SDK_RevokeAllCerts_Call) RunAndReturn(run func(ctx context.Context, clientID string, domainID string, token string) (time.Time, errors.SDKError)) *SDK_RevokeAllCerts_Call {
_c.Call.Return(run)
return _c
}
// RevokeCert provides a mock function for the type SDK
func (_mock *SDK) RevokeCert(ctx context.Context, certID string, domainID string, token string) (time.Time, errors.SDKError) {
ret := _mock.Called(ctx, certID, domainID, token)
if len(ret) == 0 {
panic("no return value specified for RevokeCert")
}
var r0 time.Time
var r1 errors.SDKError
if returnFunc, ok := ret.Get(0).(func(context.Context, string, string, string) (time.Time, errors.SDKError)); ok {
return returnFunc(ctx, certID, domainID, token)
}
if returnFunc, ok := ret.Get(0).(func(context.Context, string, string, string) time.Time); ok {
r0 = returnFunc(ctx, certID, domainID, token)
} else {
r0 = ret.Get(0).(time.Time)
}
if returnFunc, ok := ret.Get(1).(func(context.Context, string, string, string) errors.SDKError); ok {
r1 = returnFunc(ctx, certID, domainID, token)
} else {
if ret.Get(1) != nil {
r1 = ret.Get(1).(errors.SDKError)
}
}
return r0, r1
}
// SDK_RevokeCert_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'RevokeCert'
type SDK_RevokeCert_Call struct {
*mock.Call
}
// RevokeCert is a helper method to define mock.On call
// - ctx context.Context
// - certID string
// - domainID string
// - token string
func (_e *SDK_Expecter) RevokeCert(ctx interface{}, certID interface{}, domainID interface{}, token interface{}) *SDK_RevokeCert_Call {
return &SDK_RevokeCert_Call{Call: _e.mock.On("RevokeCert", ctx, certID, domainID, token)}
}
func (_c *SDK_RevokeCert_Call) Run(run func(ctx context.Context, certID string, domainID string, token string)) *SDK_RevokeCert_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 context.Context
if args[0] != nil {
arg0 = args[0].(context.Context)
}
var arg1 string
if args[1] != nil {
arg1 = args[1].(string)
}
var arg2 string
if args[2] != nil {
arg2 = args[2].(string)
}
var arg3 string
if args[3] != nil {
arg3 = args[3].(string)
}
run(
arg0,
arg1,
arg2,
arg3,
)
})
return _c
}
func (_c *SDK_RevokeCert_Call) Return(time1 time.Time, sDKError errors.SDKError) *SDK_RevokeCert_Call {
_c.Call.Return(time1, sDKError)
return _c
}
func (_c *SDK_RevokeCert_Call) RunAndReturn(run func(ctx context.Context, certID string, domainID string, token string) (time.Time, errors.SDKError)) *SDK_RevokeCert_Call {
_c.Call.Return(run)
return _c
}
// SearchUsers provides a mock function for the type SDK
func (_mock *SDK) SearchUsers(ctx context.Context, pm sdk0.PageMetadata, token string) (sdk0.UsersPage, errors.SDKError) {
ret := _mock.Called(ctx, pm, token)
@@ -11110,166 +10863,6 @@ func (_c *SDK_ViewBootstrap_Call) RunAndReturn(run func(ctx context.Context, id
return _c
}
// ViewCert provides a mock function for the type SDK
func (_mock *SDK) ViewCert(ctx context.Context, certID string, domainID string, token string) (sdk0.Cert, errors.SDKError) {
ret := _mock.Called(ctx, certID, domainID, token)
if len(ret) == 0 {
panic("no return value specified for ViewCert")
}
var r0 sdk0.Cert
var r1 errors.SDKError
if returnFunc, ok := ret.Get(0).(func(context.Context, string, string, string) (sdk0.Cert, errors.SDKError)); ok {
return returnFunc(ctx, certID, domainID, token)
}
if returnFunc, ok := ret.Get(0).(func(context.Context, string, string, string) sdk0.Cert); ok {
r0 = returnFunc(ctx, certID, domainID, token)
} else {
r0 = ret.Get(0).(sdk0.Cert)
}
if returnFunc, ok := ret.Get(1).(func(context.Context, string, string, string) errors.SDKError); ok {
r1 = returnFunc(ctx, certID, domainID, token)
} else {
if ret.Get(1) != nil {
r1 = ret.Get(1).(errors.SDKError)
}
}
return r0, r1
}
// SDK_ViewCert_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ViewCert'
type SDK_ViewCert_Call struct {
*mock.Call
}
// ViewCert is a helper method to define mock.On call
// - ctx context.Context
// - certID string
// - domainID string
// - token string
func (_e *SDK_Expecter) ViewCert(ctx interface{}, certID interface{}, domainID interface{}, token interface{}) *SDK_ViewCert_Call {
return &SDK_ViewCert_Call{Call: _e.mock.On("ViewCert", ctx, certID, domainID, token)}
}
func (_c *SDK_ViewCert_Call) Run(run func(ctx context.Context, certID string, domainID string, token string)) *SDK_ViewCert_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 context.Context
if args[0] != nil {
arg0 = args[0].(context.Context)
}
var arg1 string
if args[1] != nil {
arg1 = args[1].(string)
}
var arg2 string
if args[2] != nil {
arg2 = args[2].(string)
}
var arg3 string
if args[3] != nil {
arg3 = args[3].(string)
}
run(
arg0,
arg1,
arg2,
arg3,
)
})
return _c
}
func (_c *SDK_ViewCert_Call) Return(cert sdk0.Cert, sDKError errors.SDKError) *SDK_ViewCert_Call {
_c.Call.Return(cert, sDKError)
return _c
}
func (_c *SDK_ViewCert_Call) RunAndReturn(run func(ctx context.Context, certID string, domainID string, token string) (sdk0.Cert, errors.SDKError)) *SDK_ViewCert_Call {
_c.Call.Return(run)
return _c
}
// ViewCertByClient provides a mock function for the type SDK
func (_mock *SDK) ViewCertByClient(ctx context.Context, clientID string, domainID string, token string) (sdk0.CertSerials, errors.SDKError) {
ret := _mock.Called(ctx, clientID, domainID, token)
if len(ret) == 0 {
panic("no return value specified for ViewCertByClient")
}
var r0 sdk0.CertSerials
var r1 errors.SDKError
if returnFunc, ok := ret.Get(0).(func(context.Context, string, string, string) (sdk0.CertSerials, errors.SDKError)); ok {
return returnFunc(ctx, clientID, domainID, token)
}
if returnFunc, ok := ret.Get(0).(func(context.Context, string, string, string) sdk0.CertSerials); ok {
r0 = returnFunc(ctx, clientID, domainID, token)
} else {
r0 = ret.Get(0).(sdk0.CertSerials)
}
if returnFunc, ok := ret.Get(1).(func(context.Context, string, string, string) errors.SDKError); ok {
r1 = returnFunc(ctx, clientID, domainID, token)
} else {
if ret.Get(1) != nil {
r1 = ret.Get(1).(errors.SDKError)
}
}
return r0, r1
}
// SDK_ViewCertByClient_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ViewCertByClient'
type SDK_ViewCertByClient_Call struct {
*mock.Call
}
// ViewCertByClient is a helper method to define mock.On call
// - ctx context.Context
// - clientID string
// - domainID string
// - token string
func (_e *SDK_Expecter) ViewCertByClient(ctx interface{}, clientID interface{}, domainID interface{}, token interface{}) *SDK_ViewCertByClient_Call {
return &SDK_ViewCertByClient_Call{Call: _e.mock.On("ViewCertByClient", ctx, clientID, domainID, token)}
}
func (_c *SDK_ViewCertByClient_Call) Run(run func(ctx context.Context, clientID string, domainID string, token string)) *SDK_ViewCertByClient_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 context.Context
if args[0] != nil {
arg0 = args[0].(context.Context)
}
var arg1 string
if args[1] != nil {
arg1 = args[1].(string)
}
var arg2 string
if args[2] != nil {
arg2 = args[2].(string)
}
var arg3 string
if args[3] != nil {
arg3 = args[3].(string)
}
run(
arg0,
arg1,
arg2,
arg3,
)
})
return _c
}
func (_c *SDK_ViewCertByClient_Call) Return(certSerials sdk0.CertSerials, sDKError errors.SDKError) *SDK_ViewCertByClient_Call {
_c.Call.Return(certSerials, sDKError)
return _c
}
func (_c *SDK_ViewCertByClient_Call) RunAndReturn(run func(ctx context.Context, clientID string, domainID string, token string) (sdk0.CertSerials, errors.SDKError)) *SDK_ViewCertByClient_Call {
_c.Call.Return(run)
return _c
}
// ViewSubscription provides a mock function for the type SDK
func (_mock *SDK) ViewSubscription(ctx context.Context, id string, token string) (sdk.Subscription, errors.SDKError) {
ret := _mock.Called(ctx, id, token)
+16 -15
View File
@@ -17,21 +17,22 @@ var errFailedToReadConfig = errors.New("failed to read config file")
// ServiceConf represents service config.
type ServiceConf struct {
Port string `toml:"port" env:"SMQ_PROVISION_HTTP_PORT" envDefault:"9016"`
LogLevel string `toml:"log_level" env:"SMQ_PROVISION_LOG_LEVEL" envDefault:"info"`
TLS bool `toml:"tls" env:"SMQ_PROVISION_ENV_CLIENTS_TLS" envDefault:"false"`
ServerCert string `toml:"server_cert" env:"SMQ_PROVISION_SERVER_CERT" envDefault:""`
ServerKey string `toml:"server_key" env:"SMQ_PROVISION_SERVER_KEY" envDefault:""`
ClientsURL string `toml:"clients_url" env:"SMQ_PROVISION_CLIENTS_LOCATION" envDefault:"http://localhost"`
UsersURL string `toml:"users_url" env:"SMQ_PROVISION_USERS_LOCATION" envDefault:"http://localhost"`
HTTPPort string `toml:"http_port" env:"SMQ_PROVISION_HTTP_PORT" envDefault:"9016"`
MgEmail string `toml:"smq_email" env:"SMQ_PROVISION_EMAIL" envDefault:"test@example.com"`
MgUsername string `toml:"smq_username" env:"SMQ_PROVISION_USERNAME" envDefault:"user"`
MgPass string `toml:"smq_pass" env:"SMQ_PROVISION_PASS" envDefault:"test"`
MgDomainID string `toml:"smq_domain_id" env:"SMQ_PROVISION_DOMAIN_ID" envDefault:""`
MgAPIKey string `toml:"smq_api_key" env:"SMQ_PROVISION_API_KEY" envDefault:""`
MgBSURL string `toml:"smq_bs_url" env:"SMQ_PROVISION_BS_SVC_URL" envDefault:"http://localhost:9000"`
MgCertsURL string `toml:"smq_certs_url" env:"SMQ_PROVISION_CERTS_SVC_URL" envDefault:"http://localhost:9019"`
Port string `toml:"port" env:"SMQ_PROVISION_HTTP_PORT" envDefault:"9016"`
LogLevel string `toml:"log_level" env:"SMQ_PROVISION_LOG_LEVEL" envDefault:"info"`
TLS bool `toml:"tls" env:"SMQ_PROVISION_ENV_CLIENTS_TLS" envDefault:"false"`
ServerCert string `toml:"server_cert" env:"SMQ_PROVISION_SERVER_CERT" envDefault:""`
ServerKey string `toml:"server_key" env:"SMQ_PROVISION_SERVER_KEY" envDefault:""`
ClientsURL string `toml:"clients_url" env:"SMQ_PROVISION_CLIENTS_LOCATION" envDefault:"http://localhost"`
UsersURL string `toml:"users_url" env:"SMQ_PROVISION_USERS_LOCATION" envDefault:"http://localhost"`
CertsURL string `toml:"certs_url" env:"SMQ_PROVISION_CERTS_LOCATION" envDefault:"http://localhost"`
HTTPPort string `toml:"http_port" env:"SMQ_PROVISION_HTTP_PORT" envDefault:"9016"`
MgEmail string `toml:"smq_email" env:"SMQ_PROVISION_EMAIL" envDefault:"test@example.com"`
MgUsername string `toml:"smq_username" env:"SMQ_PROVISION_USERNAME" envDefault:"user"`
MgPass string `toml:"smq_pass" env:"SMQ_PROVISION_PASS" envDefault:"test"`
MgDomainID string `toml:"smq_domain_id" env:"SMQ_PROVISION_DOMAIN_ID" envDefault:""`
MgAPIKey string `toml:"smq_api_key" env:"SMQ_PROVISION_API_KEY" envDefault:""`
MgBSURL string `toml:"smq_bs_url" env:"SMQ_PROVISION_BS_SVC_URL" envDefault:"http://localhost:9000"`
MgCertsURL string `toml:"smq_certs_url" env:"SMQ_PROVISION_CERTS_SVC_URL" envDefault:"http://localhost:9019"`
}
// Bootstrap represetns the Bootstrap config.
+28 -24
View File
@@ -9,6 +9,8 @@ import (
"fmt"
"log/slog"
certs "github.com/absmach/certs"
csdk "github.com/absmach/certs/sdk"
"github.com/absmach/magistrala/pkg/sdk"
"github.com/absmach/supermq/pkg/errors"
smqSDK "github.com/absmach/supermq/pkg/sdk"
@@ -73,6 +75,7 @@ type Service interface {
type provisionService struct {
logger *slog.Logger
sdk sdk.SDK
csdk csdk.SDK
conf Config
}
@@ -88,9 +91,10 @@ type Result struct {
}
// New returns new provision service.
func New(cfg Config, mgsdk sdk.SDK, logger *slog.Logger) Service {
func New(cfg Config, mgsdk sdk.SDK, certsSdk csdk.SDK, logger *slog.Logger) Service {
return &provisionService{
logger: logger,
csdk: certsSdk,
conf: cfg,
sdk: mgsdk,
}
@@ -182,7 +186,7 @@ func (ps *provisionService) Provision(ctx context.Context, domainID, token, name
ClientKey: map[string]string{},
}
var cert smqSDK.Cert
var cert certs.Certificate
var bsConfig sdk.BootstrapConfig
for _, c := range clients {
var chanIDs []string
@@ -202,8 +206,8 @@ func (ps *provisionService) Provision(ctx context.Context, domainID, token, name
ExternalKey: externalKey,
Channels: chanIDs,
CACert: res.CACert,
ClientCert: cert.Certificate,
ClientKey: cert.Key,
ClientCert: string(cert.Certificate),
ClientKey: string(cert.Key),
Content: string(content),
}
bsid, err := ps.sdk.AddBootstrap(ctx, bsReq, domainID, token)
@@ -218,14 +222,14 @@ func (ps *provisionService) Provision(ctx context.Context, domainID, token, name
}
if ps.conf.Bootstrap.X509Provision {
var cert smqSDK.Cert
var cert csdk.Certificate
cert, err = ps.sdk.IssueCert(ctx, c.ID, ps.conf.Cert.TTL, domainID, token)
cert, err = ps.csdk.IssueCert(ctx, c.ID, ps.conf.Cert.TTL, nil, csdk.Options{}, domainID, token)
if err != nil {
e := errors.Wrap(err, fmt.Errorf("client id: %s", c.ID))
return res, errors.Wrap(ErrFailedCertCreation, e)
}
cert, err := ps.sdk.ViewCert(ctx, cert.SerialNumber, domainID, token)
cert, err := ps.csdk.ViewCert(ctx, cert.SerialNumber, domainID, token)
if err != nil {
return res, errors.Wrap(ErrFailedCertView, err)
}
@@ -262,15 +266,15 @@ func (ps *provisionService) Cert(ctx context.Context, domainID, token, clientID,
return "", "", errors.Wrap(ErrFailedToCreateToken, err)
}
th, err := ps.sdk.Client(ctx, clientID, domainID, token)
c, err := ps.sdk.Client(ctx, clientID, domainID, token)
if err != nil {
return "", "", errors.Wrap(ErrUnauthorized, err)
}
cert, err := ps.sdk.IssueCert(ctx, th.ID, ps.conf.Cert.TTL, domainID, token)
cert, err := ps.csdk.IssueCert(ctx, c.ID, ps.conf.Cert.TTL, []string{}, csdk.Options{}, domainID, token)
if err != nil {
return "", "", errors.Wrap(ErrFailedCertCreation, err)
}
cert, err = ps.sdk.ViewCert(ctx, cert.SerialNumber, domainID, token)
cert, err = ps.csdk.ViewCert(ctx, cert.SerialNumber, domainID, token)
if err != nil {
return "", "", errors.Wrap(ErrFailedCertView, err)
}
@@ -377,9 +381,9 @@ func (ps *provisionService) recover(ctx context.Context, e *error, ths *[]smqSDK
if errors.Contains(err, ErrFailedBootstrapValidate) || errors.Contains(err, ErrFailedCertCreation) {
clean(ctx, ps, clients, channels, domainID, token)
for _, th := range clients {
if needsBootstrap(th) {
ps.errLog(ps.sdk.RemoveBootstrap(ctx, th.ID, domainID, token))
for _, c := range clients {
if needsBootstrap(c) {
ps.errLog(ps.sdk.RemoveBootstrap(ctx, c.ID, domainID, token))
}
}
return
@@ -387,9 +391,9 @@ func (ps *provisionService) recover(ctx context.Context, e *error, ths *[]smqSDK
if errors.Contains(err, ErrFailedBootstrapValidate) || errors.Contains(err, ErrFailedCertCreation) {
clean(ctx, ps, clients, channels, domainID, token)
for _, th := range clients {
if needsBootstrap(th) {
bs, err := ps.sdk.ViewBootstrap(ctx, th.ID, domainID, token)
for _, c := range clients {
if needsBootstrap(c) {
bs, err := ps.sdk.ViewBootstrap(ctx, c.ID, domainID, token)
ps.errLog(errors.Wrap(ErrFailedBootstrapRetrieval, err))
ps.errLog(ps.sdk.RemoveBootstrap(ctx, bs.ClientID, domainID, token))
}
@@ -398,13 +402,13 @@ func (ps *provisionService) recover(ctx context.Context, e *error, ths *[]smqSDK
if errors.Contains(err, ErrClientUpdate) || errors.Contains(err, ErrGatewayUpdate) {
clean(ctx, ps, clients, channels, domainID, token)
for _, th := range clients {
if ps.conf.Bootstrap.X509Provision && needsBootstrap(th) {
_, err := ps.sdk.RevokeCert(ctx, th.ID, domainID, token)
for _, c := range clients {
if ps.conf.Bootstrap.X509Provision && needsBootstrap(c) {
err := ps.csdk.RevokeCert(ctx, c.ID, domainID, token)
ps.errLog(err)
}
if needsBootstrap(th) {
bs, err := ps.sdk.ViewBootstrap(ctx, th.ID, domainID, token)
if needsBootstrap(c) {
bs, err := ps.sdk.ViewBootstrap(ctx, c.ID, domainID, token)
ps.errLog(errors.Wrap(ErrFailedBootstrapRetrieval, err))
ps.errLog(ps.sdk.RemoveBootstrap(ctx, bs.ClientID, domainID, token))
}
@@ -413,12 +417,12 @@ func (ps *provisionService) recover(ctx context.Context, e *error, ths *[]smqSDK
}
}
func needsBootstrap(th smqSDK.Client) bool {
if th.Metadata == nil {
func needsBootstrap(c smqSDK.Client) bool {
if c.Metadata == nil {
return false
}
if _, ok := th.Metadata[externalIDKey]; ok {
if _, ok := c.Metadata[externalIDKey]; ok {
return true
}
return false
+58 -41
View File
@@ -8,6 +8,8 @@ import (
"fmt"
"testing"
csdk "github.com/absmach/certs/sdk"
csdkmocks "github.com/absmach/certs/sdk/mocks"
"github.com/absmach/magistrala/internal/testsutil"
sdkmocks "github.com/absmach/magistrala/pkg/sdk/mocks"
"github.com/absmach/magistrala/provision"
@@ -24,7 +26,8 @@ var validToken = "valid"
func TestMapping(t *testing.T) {
mgsdk := new(sdkmocks.SDK)
svc := provision.New(validConfig, mgsdk, smqlog.NewMock())
certs := new(csdkmocks.SDK)
svc := provision.New(validConfig, mgsdk, certs, smqlog.NewMock())
cases := []struct {
desc string
@@ -63,19 +66,20 @@ func TestMapping(t *testing.T) {
func TestCert(t *testing.T) {
cases := []struct {
desc string
config provision.Config
domainID string
token string
clientID string
ttl string
serial string
cert string
key string
sdkClientErr error
sdkCertErr error
sdkTokenErr error
err error
desc string
config provision.Config
domainID string
token string
returnedToken string
clientID string
ttl string
serial string
cert string
key string
sdkClientErr error
sdkCertErr error
sdkTokenErr error
err error
}{
{
desc: "valid",
@@ -97,16 +101,17 @@ func TestCert(t *testing.T) {
Server: provision.ServiceConf{MgAPIKey: "key"},
Cert: provision.Cert{TTL: "1h"},
},
domainID: testsutil.GenerateUUID(t),
token: "",
clientID: testsutil.GenerateUUID(t),
ttl: "1h",
cert: "cert",
key: "key",
sdkClientErr: nil,
sdkCertErr: nil,
sdkTokenErr: nil,
err: nil,
domainID: testsutil.GenerateUUID(t),
token: "",
returnedToken: "key",
clientID: testsutil.GenerateUUID(t),
ttl: "1h",
cert: "cert",
key: "key",
sdkClientErr: nil,
sdkCertErr: nil,
sdkTokenErr: nil,
err: nil,
},
{
desc: "empty token with username and password",
@@ -118,16 +123,17 @@ func TestCert(t *testing.T) {
},
Cert: provision.Cert{TTL: "1h"},
},
domainID: testsutil.GenerateUUID(t),
token: "",
clientID: testsutil.GenerateUUID(t),
ttl: "1h",
cert: "cert",
key: "key",
sdkClientErr: nil,
sdkCertErr: nil,
sdkTokenErr: nil,
err: nil,
domainID: testsutil.GenerateUUID(t),
token: "",
returnedToken: validToken,
clientID: testsutil.GenerateUUID(t),
ttl: "1h",
cert: "cert",
key: "key",
sdkClientErr: nil,
sdkCertErr: nil,
sdkTokenErr: nil,
err: nil,
},
{
desc: "empty token with username and invalid password",
@@ -210,24 +216,35 @@ func TestCert(t *testing.T) {
err: repoerr.ErrCreateEntity,
},
}
mgsdk := new(sdkmocks.SDK)
certs := new(csdkmocks.SDK)
for _, c := range cases {
t.Run(c.desc, func(t *testing.T) {
mgsdk := new(sdkmocks.SDK)
svc := provision.New(c.config, mgsdk, smqlog.NewMock())
svc := provision.New(c.config, mgsdk, certs, smqlog.NewMock())
call1 := mgsdk.On("Client", mock.Anything, c.clientID, c.domainID, mock.Anything).Return(smqSDK.Client{ID: c.clientID}, c.sdkClientErr)
var call2 *mock.Call
switch c.token {
case "":
call2 = certs.On("IssueCert", context.Background(), c.clientID, c.config.Cert.TTL, []string{}, csdk.Options{}, c.domainID, c.returnedToken).Return(csdk.Certificate{SerialNumber: c.serial}, c.sdkCertErr)
default:
call2 = certs.On("IssueCert", context.Background(), c.clientID, c.config.Cert.TTL, []string{}, csdk.Options{}, c.domainID, c.token).Return(csdk.Certificate{SerialNumber: c.serial}, c.sdkCertErr)
}
call3 := certs.On("ViewCert", mock.Anything, c.serial, mock.Anything, mock.Anything).Return(csdk.Certificate{Certificate: c.cert, Key: c.key}, c.sdkCertErr)
mgsdk.On("Client", mock.Anything, c.clientID, c.domainID, mock.Anything).Return(smqSDK.Client{ID: c.clientID}, c.sdkClientErr)
mgsdk.On("IssueCert", mock.Anything, c.clientID, c.config.Cert.TTL, c.domainID, mock.Anything).Return(smqSDK.Cert{SerialNumber: c.serial}, c.sdkCertErr)
mgsdk.On("ViewCert", mock.Anything, c.serial, mock.Anything, mock.Anything).Return(smqSDK.Cert{Certificate: c.cert, Key: c.key}, c.sdkCertErr)
login := smqSDK.Login{
Username: c.config.Server.MgUsername,
Password: c.config.Server.MgPass,
}
mgsdk.On("CreateToken", mock.Anything, login).Return(smqSDK.Token{AccessToken: validToken}, c.sdkTokenErr)
call4 := mgsdk.On("CreateToken", mock.Anything, login).Return(smqSDK.Token{AccessToken: validToken}, c.sdkTokenErr)
cert, key, err := svc.Cert(context.Background(), c.domainID, c.token, c.clientID, c.ttl)
assert.Equal(t, c.cert, cert)
assert.Equal(t, c.key, key)
assert.True(t, errors.Contains(err, c.err), fmt.Sprintf("expected error %v, got %v", c.err, err))
call1.Unset()
call2.Unset()
call3.Unset()
call4.Unset()
})
}
}
+10 -10
View File
@@ -5,7 +5,6 @@ package middleware
import (
"context"
"maps"
"time"
"github.com/absmach/magistrala/re"
@@ -278,17 +277,18 @@ func (am *authorizationMiddleware) authorize(ctx context.Context, pr smqauthz.Po
}
func (am *authorizationMiddleware) callOut(ctx context.Context, session authn.Session, op string, params map[string]any) error {
pl := map[string]any{
"entity_type": entityType,
"subject_type": policies.UserType,
"subject_id": session.UserID,
"domain": session.DomainID,
"time": time.Now().UTC(),
req := callout.Request{
BaseRequest: callout.BaseRequest{
EntityType: entityType,
CallerID: session.UserID,
CallerType: policies.UserType,
DomainID: session.DomainID,
Time: time.Now().UTC(),
Operation: op,
},
}
maps.Copy(params, pl)
if err := am.callout.Callout(ctx, op, params); err != nil {
if err := am.callout.Callout(ctx, req); err != nil {
return err
}