mirror of
https://github.com/mainflux/mainflux.git
synced 2025-04-24 13:48:49 +08:00
NOISSUE - Combining Query Parameters (#1631)
* Initial commit Signed-off-by: b1ackd0t <blackd0t@protonmail.com> * Initial commit Signed-off-by: b1ackd0t <blackd0t@protonmail.com> * Fix CI Signed-off-by: b1ackd0t <blackd0t@protonmail.com> * fix tests: add enabled status key Signed-off-by: rodneyosodo <socials@rodneyosodo.com> * start with token Signed-off-by: rodneyosodo <socials@rodneyosodo.com> Signed-off-by: b1ackd0t <blackd0t@protonmail.com> Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> Signed-off-by: rodneyosodo <socials@rodneyosodo.com> Co-authored-by: rodneyosodo <socials@rodneyosodo.com>
This commit is contained in:
parent
302d71e8cb
commit
48e368b59a
@ -27,7 +27,7 @@ var cmdBootstrap = []cobra.Command{
|
||||
return
|
||||
}
|
||||
|
||||
id, err := sdk.AddBootstrap(args[1], cfg)
|
||||
id, err := sdk.AddBootstrap(cfg, args[1])
|
||||
if err != nil {
|
||||
logError(err)
|
||||
return
|
||||
@ -46,7 +46,7 @@ var cmdBootstrap = []cobra.Command{
|
||||
return
|
||||
}
|
||||
|
||||
c, err := sdk.ViewBootstrap(args[1], args[0])
|
||||
c, err := sdk.ViewBootstrap(args[0], args[1])
|
||||
if err != nil {
|
||||
logError(err)
|
||||
return
|
||||
@ -71,7 +71,7 @@ var cmdBootstrap = []cobra.Command{
|
||||
return
|
||||
}
|
||||
|
||||
if err := sdk.UpdateBootstrap(args[1], cfg); err != nil {
|
||||
if err := sdk.UpdateBootstrap(cfg, args[1]); err != nil {
|
||||
logError(err)
|
||||
return
|
||||
}
|
||||
@ -89,7 +89,7 @@ var cmdBootstrap = []cobra.Command{
|
||||
return
|
||||
}
|
||||
|
||||
if err := sdk.RemoveBootstrap(args[1], args[0]); err != nil {
|
||||
if err := sdk.RemoveBootstrap(args[0], args[1]); err != nil {
|
||||
logError(err)
|
||||
return
|
||||
}
|
||||
@ -107,7 +107,7 @@ var cmdBootstrap = []cobra.Command{
|
||||
return
|
||||
}
|
||||
|
||||
c, err := sdk.Bootstrap(args[1], args[0])
|
||||
c, err := sdk.Bootstrap(args[0], args[1])
|
||||
if err != nil {
|
||||
logError(err)
|
||||
return
|
||||
|
@ -61,7 +61,7 @@ var cmdChannels = []cobra.Command{
|
||||
}
|
||||
|
||||
if args[0] == "all" {
|
||||
l, err := sdk.Channels(args[1], pageMetadata)
|
||||
l, err := sdk.Channels(pageMetadata, args[1])
|
||||
if err != nil {
|
||||
logError(err)
|
||||
return
|
||||
@ -130,8 +130,12 @@ var cmdChannels = []cobra.Command{
|
||||
logUsage(cmd.Use)
|
||||
return
|
||||
}
|
||||
|
||||
cl, err := sdk.ThingsByChannel(args[1], args[0], uint64(Offset), uint64(Limit), false)
|
||||
pm := mfxsdk.PageMetadata{
|
||||
Offset: uint64(Offset),
|
||||
Limit: uint64(Limit),
|
||||
Disconnected: false,
|
||||
}
|
||||
cl, err := sdk.ThingsByChannel(args[0], pm, args[1])
|
||||
if err != nil {
|
||||
logError(err)
|
||||
return
|
||||
@ -149,8 +153,12 @@ var cmdChannels = []cobra.Command{
|
||||
logUsage(cmd.Use)
|
||||
return
|
||||
}
|
||||
|
||||
cl, err := sdk.ThingsByChannel(args[1], args[0], uint64(Offset), uint64(Limit), false)
|
||||
pm := mfxsdk.PageMetadata{
|
||||
Offset: uint64(Offset),
|
||||
Limit: uint64(Limit),
|
||||
Disconnected: false,
|
||||
}
|
||||
cl, err := sdk.ThingsByChannel(args[0], pm, args[1])
|
||||
if err != nil {
|
||||
logError(err)
|
||||
return
|
||||
|
@ -59,11 +59,11 @@ var cmdGroups = []cobra.Command{
|
||||
logUsage(cmd.Use)
|
||||
return
|
||||
}
|
||||
meta := mfxsdk.PageMetadata{
|
||||
pm := mfxsdk.PageMetadata{
|
||||
Offset: uint64(Offset),
|
||||
Limit: uint64(Limit),
|
||||
}
|
||||
l, err := sdk.Groups(meta, args[1])
|
||||
l, err := sdk.Groups(pm, args[1])
|
||||
if err != nil {
|
||||
logError(err)
|
||||
return
|
||||
@ -76,7 +76,11 @@ var cmdGroups = []cobra.Command{
|
||||
logUsage(cmd.Use)
|
||||
return
|
||||
}
|
||||
l, err := sdk.Children(args[1], uint64(Offset), uint64(Limit), args[2])
|
||||
pm := mfxsdk.PageMetadata{
|
||||
Offset: uint64(Offset),
|
||||
Limit: uint64(Limit),
|
||||
}
|
||||
l, err := sdk.Children(args[1], pm, args[2])
|
||||
if err != nil {
|
||||
logError(err)
|
||||
return
|
||||
@ -89,7 +93,11 @@ var cmdGroups = []cobra.Command{
|
||||
logUsage(cmd.Use)
|
||||
return
|
||||
}
|
||||
l, err := sdk.Parents(args[1], uint64(Offset), uint64(Limit), args[2])
|
||||
pm := mfxsdk.PageMetadata{
|
||||
Offset: uint64(Offset),
|
||||
Limit: uint64(Limit),
|
||||
}
|
||||
l, err := sdk.Parents(args[1], pm, args[2])
|
||||
if err != nil {
|
||||
logError(err)
|
||||
return
|
||||
@ -146,7 +154,7 @@ var cmdGroups = []cobra.Command{
|
||||
logError(err)
|
||||
return
|
||||
}
|
||||
if err := sdk.Unassign(args[2], args[1], ids...); err != nil {
|
||||
if err := sdk.Unassign(args[1], ids, args[2]); err != nil {
|
||||
logError(err)
|
||||
return
|
||||
}
|
||||
@ -178,7 +186,11 @@ var cmdGroups = []cobra.Command{
|
||||
logUsage(cmd.Use)
|
||||
return
|
||||
}
|
||||
up, err := sdk.Members(args[0], args[1], uint64(Offset), uint64(Limit))
|
||||
pm := mfxsdk.PageMetadata{
|
||||
Offset: uint64(Offset),
|
||||
Limit: uint64(Limit),
|
||||
}
|
||||
up, err := sdk.Members(args[0], pm, args[1])
|
||||
if err != nil {
|
||||
logError(err)
|
||||
return
|
||||
@ -195,7 +207,11 @@ var cmdGroups = []cobra.Command{
|
||||
logUsage(cmd.Use)
|
||||
return
|
||||
}
|
||||
up, err := sdk.Memberships(args[0], args[1], uint64(Offset), uint64(Limit))
|
||||
pm := mfxsdk.PageMetadata{
|
||||
Offset: uint64(Offset),
|
||||
Limit: uint64(Limit),
|
||||
}
|
||||
up, err := sdk.Memberships(args[0], pm, args[1])
|
||||
if err != nil {
|
||||
logError(err)
|
||||
return
|
||||
|
@ -26,7 +26,7 @@ var cmdAPIKeys = []cobra.Command{
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := sdk.Issue(args[1], d)
|
||||
resp, err := sdk.Issue(d, args[1])
|
||||
if err != nil {
|
||||
logError(err)
|
||||
return
|
||||
|
@ -125,7 +125,7 @@ var cmdProvision = []cobra.Command{
|
||||
Email: un,
|
||||
Password: "12345678",
|
||||
}
|
||||
if _, err := sdk.CreateUser("", user); err != nil {
|
||||
if _, err := sdk.CreateUser(user, ""); err != nil {
|
||||
logError(err)
|
||||
return
|
||||
}
|
||||
|
@ -59,7 +59,7 @@ var cmdThings = []cobra.Command{
|
||||
Metadata: metadata,
|
||||
}
|
||||
if args[0] == "all" {
|
||||
l, err := sdk.Things(args[1], pageMetadata)
|
||||
l, err := sdk.Things(pageMetadata, args[1])
|
||||
if err != nil {
|
||||
logError(err)
|
||||
return
|
||||
@ -186,8 +186,12 @@ var cmdThings = []cobra.Command{
|
||||
logUsage(cmd.Use)
|
||||
return
|
||||
}
|
||||
|
||||
cl, err := sdk.ChannelsByThing(args[1], args[0], uint64(Offset), uint64(Limit), true)
|
||||
pm := mfxsdk.PageMetadata{
|
||||
Offset: uint64(Offset),
|
||||
Limit: uint64(Limit),
|
||||
Disconnected: true,
|
||||
}
|
||||
cl, err := sdk.ChannelsByThing(args[0], pm, args[1])
|
||||
if err != nil {
|
||||
logError(err)
|
||||
return
|
||||
@ -205,8 +209,12 @@ var cmdThings = []cobra.Command{
|
||||
logUsage(cmd.Use)
|
||||
return
|
||||
}
|
||||
|
||||
cl, err := sdk.ChannelsByThing(args[1], args[0], uint64(Offset), uint64(Limit), false)
|
||||
pm := mfxsdk.PageMetadata{
|
||||
Offset: uint64(Offset),
|
||||
Limit: uint64(Limit),
|
||||
Disconnected: false,
|
||||
}
|
||||
cl, err := sdk.ChannelsByThing(args[0], pm, args[1])
|
||||
if err != nil {
|
||||
logError(err)
|
||||
return
|
||||
@ -220,9 +228,9 @@ var cmdThings = []cobra.Command{
|
||||
// NewThingsCmd returns things command.
|
||||
func NewThingsCmd() *cobra.Command {
|
||||
cmd := cobra.Command{
|
||||
Use: "things [create | get | update | delete | identify | connect | disconnect | connections | not-connected]",
|
||||
Use: "things [create | get | update | delete | connect | disconnect | connections | not-connected]",
|
||||
Short: "Things management",
|
||||
Long: `Things management: create, get, update, identify or delete Thing, connect or disconnect Thing from Channel and get the list of Channels connected or disconnected from a Thing`,
|
||||
Long: `Things management: create, get, update or delete Thing, connect or disconnect Thing from Channel and get the list of Channels connected or disconnected from a Thing`,
|
||||
}
|
||||
|
||||
for i := range cmdThings {
|
||||
|
@ -28,7 +28,7 @@ var cmdUsers = []cobra.Command{
|
||||
Email: args[0],
|
||||
Password: args[1],
|
||||
}
|
||||
id, err := sdk.CreateUser(args[2], user)
|
||||
id, err := sdk.CreateUser(user, args[2])
|
||||
if err != nil {
|
||||
logError(err)
|
||||
return
|
||||
@ -61,7 +61,7 @@ var cmdUsers = []cobra.Command{
|
||||
Status: Status,
|
||||
}
|
||||
if args[0] == "all" {
|
||||
l, err := sdk.Users(args[1], pageMetadata)
|
||||
l, err := sdk.Users(pageMetadata, args[1])
|
||||
if err != nil {
|
||||
logError(err)
|
||||
return
|
||||
|
@ -44,7 +44,7 @@ type ConfigUpdateCertReq struct {
|
||||
CACert string `json:"ca_cert"`
|
||||
}
|
||||
|
||||
func (sdk mfSDK) AddBootstrap(token string, cfg BootstrapConfig) (string, errors.SDKError) {
|
||||
func (sdk mfSDK) AddBootstrap(cfg BootstrapConfig, token string) (string, errors.SDKError) {
|
||||
data, err := json.Marshal(cfg)
|
||||
if err != nil {
|
||||
return "", errors.NewSDKError(err)
|
||||
@ -61,7 +61,7 @@ func (sdk mfSDK) AddBootstrap(token string, cfg BootstrapConfig) (string, errors
|
||||
return id, nil
|
||||
}
|
||||
|
||||
func (sdk mfSDK) Whitelist(token string, cfg BootstrapConfig) errors.SDKError {
|
||||
func (sdk mfSDK) Whitelist(cfg BootstrapConfig, token string) errors.SDKError {
|
||||
data, err := json.Marshal(BootstrapConfig{State: cfg.State})
|
||||
if err != nil {
|
||||
return errors.NewSDKError(err)
|
||||
@ -77,7 +77,7 @@ func (sdk mfSDK) Whitelist(token string, cfg BootstrapConfig) errors.SDKError {
|
||||
return sdkerr
|
||||
}
|
||||
|
||||
func (sdk mfSDK) ViewBootstrap(token, id string) (BootstrapConfig, errors.SDKError) {
|
||||
func (sdk mfSDK) ViewBootstrap(id, token string) (BootstrapConfig, errors.SDKError) {
|
||||
url := fmt.Sprintf("%s/%s/%s", sdk.bootstrapURL, configsEndpoint, id)
|
||||
_, body, err := sdk.processRequest(http.MethodGet, url, token, string(CTJSON), nil, http.StatusOK)
|
||||
if err != nil {
|
||||
@ -92,7 +92,7 @@ func (sdk mfSDK) ViewBootstrap(token, id string) (BootstrapConfig, errors.SDKErr
|
||||
return bc, nil
|
||||
}
|
||||
|
||||
func (sdk mfSDK) UpdateBootstrap(token string, cfg BootstrapConfig) errors.SDKError {
|
||||
func (sdk mfSDK) UpdateBootstrap(cfg BootstrapConfig, token string) errors.SDKError {
|
||||
data, err := json.Marshal(cfg)
|
||||
if err != nil {
|
||||
return errors.NewSDKError(err)
|
||||
@ -102,7 +102,7 @@ func (sdk mfSDK) UpdateBootstrap(token string, cfg BootstrapConfig) errors.SDKEr
|
||||
_, _, sdkerr := sdk.processRequest(http.MethodPut, url, token, string(CTJSON), data, http.StatusOK)
|
||||
return sdkerr
|
||||
}
|
||||
func (sdk mfSDK) UpdateBootstrapCerts(token, id, clientCert, clientKey, ca string) errors.SDKError {
|
||||
func (sdk mfSDK) UpdateBootstrapCerts(id, clientCert, clientKey, ca, token string) errors.SDKError {
|
||||
url := fmt.Sprintf("%s/%s/%s", sdk.bootstrapURL, bootstrapCertsEndpoint, id)
|
||||
request := ConfigUpdateCertReq{
|
||||
ClientCert: clientCert,
|
||||
@ -119,7 +119,7 @@ func (sdk mfSDK) UpdateBootstrapCerts(token, id, clientCert, clientKey, ca strin
|
||||
return sdkerr
|
||||
}
|
||||
|
||||
func (sdk mfSDK) RemoveBootstrap(token, id string) errors.SDKError {
|
||||
func (sdk mfSDK) RemoveBootstrap(id, token string) errors.SDKError {
|
||||
url := fmt.Sprintf("%s/%s/%s", sdk.bootstrapURL, configsEndpoint, id)
|
||||
_, _, err := sdk.processRequest(http.MethodDelete, url, token, string(CTJSON), nil, http.StatusNoContent)
|
||||
return err
|
||||
|
@ -67,7 +67,7 @@ func (sdk mfSDK) RemoveCert(id, token string) errors.SDKError {
|
||||
}
|
||||
}
|
||||
|
||||
func (sdk mfSDK) RevokeCert(thingID, certID string, token string) errors.SDKError {
|
||||
func (sdk mfSDK) RevokeCert(thingID, certID, token string) errors.SDKError {
|
||||
panic("not implemented")
|
||||
}
|
||||
|
||||
|
@ -51,7 +51,7 @@ func (sdk mfSDK) CreateChannels(chs []Channel, token string) ([]Channel, errors.
|
||||
return ccr.Channels, nil
|
||||
}
|
||||
|
||||
func (sdk mfSDK) Channels(token string, pm PageMetadata) (ChannelsPage, errors.SDKError) {
|
||||
func (sdk mfSDK) Channels(pm PageMetadata, token string) (ChannelsPage, errors.SDKError) {
|
||||
var url string
|
||||
var err error
|
||||
|
||||
@ -72,12 +72,14 @@ func (sdk mfSDK) Channels(token string, pm PageMetadata) (ChannelsPage, errors.S
|
||||
return cp, nil
|
||||
}
|
||||
|
||||
func (sdk mfSDK) ChannelsByThing(token, thingID string, offset, limit uint64, disconn bool) (ChannelsPage, errors.SDKError) {
|
||||
url := fmt.Sprintf("%s/things/%s/channels?offset=%d&limit=%d&disconnected=%t", sdk.thingsURL, thingID, offset, limit, disconn)
|
||||
|
||||
_, body, err := sdk.processRequest(http.MethodGet, url, token, string(CTJSON), nil, http.StatusOK)
|
||||
func (sdk mfSDK) ChannelsByThing(thingID string, pm PageMetadata, token string) (ChannelsPage, errors.SDKError) {
|
||||
url, err := sdk.withQueryParams(fmt.Sprintf("%s/things/%s", sdk.thingsURL, thingID), channelsEndpoint, pm)
|
||||
if err != nil {
|
||||
return ChannelsPage{}, err
|
||||
return ChannelsPage{}, errors.NewSDKError(err)
|
||||
}
|
||||
_, body, sdkerr := sdk.processRequest(http.MethodGet, url, token, string(CTJSON), nil, http.StatusOK)
|
||||
if sdkerr != nil {
|
||||
return ChannelsPage{}, sdkerr
|
||||
}
|
||||
|
||||
var cp ChannelsPage
|
||||
|
@ -307,7 +307,7 @@ func TestChannels(t *testing.T) {
|
||||
Metadata: tc.metadata,
|
||||
}
|
||||
|
||||
page, err := mainfluxSDK.Channels(tc.token, filter)
|
||||
page, err := mainfluxSDK.Channels(filter, tc.token)
|
||||
assert.Equal(t, tc.err, err, fmt.Sprintf("%s: expected error %s, got %s", tc.desc, tc.err, err))
|
||||
assert.Equal(t, tc.response, page.Channels, fmt.Sprintf("%s: expected response channel %s, got %s", tc.desc, tc.response, page.Channels))
|
||||
}
|
||||
@ -439,7 +439,12 @@ func TestChannelsByThing(t *testing.T) {
|
||||
}
|
||||
|
||||
for _, tc := range cases {
|
||||
page, err := mainfluxSDK.ChannelsByThing(tc.token, tc.thing, tc.offset, tc.limit, tc.disconnected)
|
||||
pm := sdk.PageMetadata{
|
||||
Offset: tc.offset,
|
||||
Limit: tc.limit,
|
||||
Disconnected: tc.disconnected,
|
||||
}
|
||||
page, err := mainfluxSDK.ChannelsByThing(tc.thing, pm, tc.token)
|
||||
assert.Equal(t, tc.err, err, fmt.Sprintf("%s: expected error %s, got %s", tc.desc, tc.err, err))
|
||||
assert.Equal(t, tc.response, page.Channels, fmt.Sprintf("%s: expected response channel %s, got %s", tc.desc, tc.response, page.Channels))
|
||||
}
|
||||
|
@ -7,8 +7,6 @@ import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/mainflux/mainflux/pkg/errors"
|
||||
@ -42,7 +40,7 @@ func (sdk mfSDK) DeleteGroup(id, token string) errors.SDKError {
|
||||
return err
|
||||
}
|
||||
|
||||
func (sdk mfSDK) Assign(memberIDs []string, memberType, groupID string, token string) errors.SDKError {
|
||||
func (sdk mfSDK) Assign(memberIDs []string, memberType, groupID, token string) errors.SDKError {
|
||||
var ids []string
|
||||
url := fmt.Sprintf("%s/%s/%s/members", sdk.authURL, groupsEndpoint, groupID)
|
||||
ids = append(ids, memberIDs...)
|
||||
@ -60,7 +58,7 @@ func (sdk mfSDK) Assign(memberIDs []string, memberType, groupID string, token st
|
||||
return sdkerr
|
||||
}
|
||||
|
||||
func (sdk mfSDK) Unassign(token, groupID string, memberIDs ...string) errors.SDKError {
|
||||
func (sdk mfSDK) Unassign(groupID string, memberIDs []string, token string) errors.SDKError {
|
||||
var ids []string
|
||||
url := fmt.Sprintf("%s/%s/%s/members", sdk.authURL, groupsEndpoint, groupID)
|
||||
ids = append(ids, memberIDs...)
|
||||
@ -77,12 +75,14 @@ func (sdk mfSDK) Unassign(token, groupID string, memberIDs ...string) errors.SDK
|
||||
return sdkerr
|
||||
}
|
||||
|
||||
func (sdk mfSDK) Members(groupID, token string, offset, limit uint64) (MembersPage, errors.SDKError) {
|
||||
url := fmt.Sprintf("%s/%s/%s/members?offset=%d&limit=%d&", sdk.authURL, groupsEndpoint, groupID, offset, limit)
|
||||
|
||||
_, body, err := sdk.processRequest(http.MethodGet, url, token, string(CTJSON), nil, http.StatusOK)
|
||||
func (sdk mfSDK) Members(groupID string, pm PageMetadata, token string) (MembersPage, errors.SDKError) {
|
||||
url, err := sdk.withQueryParams(fmt.Sprintf("%s/%s/%s", sdk.authURL, groupsEndpoint, groupID), "members", pm)
|
||||
if err != nil {
|
||||
return MembersPage{}, err
|
||||
return MembersPage{}, errors.NewSDKError(err)
|
||||
}
|
||||
_, body, sdkerr := sdk.processRequest(http.MethodGet, url, token, string(CTJSON), nil, http.StatusOK)
|
||||
if sdkerr != nil {
|
||||
return MembersPage{}, sdkerr
|
||||
}
|
||||
|
||||
var tp MembersPage
|
||||
@ -93,41 +93,33 @@ func (sdk mfSDK) Members(groupID, token string, offset, limit uint64) (MembersPa
|
||||
return tp, nil
|
||||
}
|
||||
|
||||
func (sdk mfSDK) Groups(meta PageMetadata, token string) (GroupsPage, errors.SDKError) {
|
||||
u, err := url.Parse(sdk.authURL)
|
||||
func (sdk mfSDK) Groups(pm PageMetadata, token string) (GroupsPage, errors.SDKError) {
|
||||
url, err := sdk.withQueryParams(sdk.authURL, groupsEndpoint, pm)
|
||||
if err != nil {
|
||||
return GroupsPage{}, errors.NewSDKError(err)
|
||||
}
|
||||
u.Path = groupsEndpoint
|
||||
q := u.Query()
|
||||
q.Add("offset", strconv.FormatUint(meta.Offset, 10))
|
||||
if meta.Limit != 0 {
|
||||
q.Add("limit", strconv.FormatUint(meta.Limit, 10))
|
||||
}
|
||||
if meta.Level != 0 {
|
||||
q.Add("level", strconv.FormatUint(meta.Level, 10))
|
||||
}
|
||||
if meta.Name != "" {
|
||||
q.Add("name", meta.Name)
|
||||
}
|
||||
if meta.Type != "" {
|
||||
q.Add("type", meta.Type)
|
||||
}
|
||||
u.RawQuery = q.Encode()
|
||||
return sdk.getGroups(token, u.String())
|
||||
return sdk.getGroups(url, token)
|
||||
}
|
||||
|
||||
func (sdk mfSDK) Parents(id string, offset, limit uint64, token string) (GroupsPage, errors.SDKError) {
|
||||
url := fmt.Sprintf("%s/%s/%s/parents?offset=%d&limit=%d&tree=false&level=%d", sdk.authURL, groupsEndpoint, id, offset, limit, MaxLevel)
|
||||
return sdk.getGroups(token, url)
|
||||
func (sdk mfSDK) Parents(id string, pm PageMetadata, token string) (GroupsPage, errors.SDKError) {
|
||||
pm.Level = MaxLevel
|
||||
url, err := sdk.withQueryParams(fmt.Sprintf("%s/%s/%s", sdk.authURL, groupsEndpoint, id), "parents", pm)
|
||||
if err != nil {
|
||||
return GroupsPage{}, errors.NewSDKError(err)
|
||||
}
|
||||
return sdk.getGroups(url, token)
|
||||
}
|
||||
|
||||
func (sdk mfSDK) Children(id string, offset, limit uint64, token string) (GroupsPage, errors.SDKError) {
|
||||
url := fmt.Sprintf("%s/%s/%s/children?offset=%d&limit=%d&tree=false&level=%d", sdk.authURL, groupsEndpoint, id, offset, limit, MaxLevel)
|
||||
return sdk.getGroups(token, url)
|
||||
func (sdk mfSDK) Children(id string, pm PageMetadata, token string) (GroupsPage, errors.SDKError) {
|
||||
pm.Level = MaxLevel
|
||||
url, err := sdk.withQueryParams(fmt.Sprintf("%s/%s/%s", sdk.authURL, groupsEndpoint, id), "children", pm)
|
||||
if err != nil {
|
||||
return GroupsPage{}, errors.NewSDKError(err)
|
||||
}
|
||||
return sdk.getGroups(url, token)
|
||||
}
|
||||
|
||||
func (sdk mfSDK) getGroups(token, url string) (GroupsPage, errors.SDKError) {
|
||||
func (sdk mfSDK) getGroups(url, token string) (GroupsPage, errors.SDKError) {
|
||||
_, body, err := sdk.processRequest(http.MethodGet, url, token, string(CTJSON), nil, http.StatusOK)
|
||||
if err != nil {
|
||||
return GroupsPage{}, err
|
||||
@ -167,11 +159,14 @@ func (sdk mfSDK) UpdateGroup(t Group, token string) errors.SDKError {
|
||||
return sdkerr
|
||||
}
|
||||
|
||||
func (sdk mfSDK) Memberships(memberID, token string, offset, limit uint64) (GroupsPage, errors.SDKError) {
|
||||
url := fmt.Sprintf("%s/%s/%s/groups?offset=%d&limit=%d&", sdk.authURL, membersEndpoint, memberID, offset, limit)
|
||||
_, body, err := sdk.processRequest(http.MethodGet, url, token, string(CTJSON), nil, http.StatusOK)
|
||||
func (sdk mfSDK) Memberships(memberID string, pm PageMetadata, token string) (GroupsPage, errors.SDKError) {
|
||||
url, err := sdk.withQueryParams(fmt.Sprintf("%s/%s/%s", sdk.authURL, membersEndpoint, memberID), groupsEndpoint, pm)
|
||||
if err != nil {
|
||||
return GroupsPage{}, err
|
||||
return GroupsPage{}, errors.NewSDKError(err)
|
||||
}
|
||||
_, body, sdkerr := sdk.processRequest(http.MethodGet, url, token, string(CTJSON), nil, http.StatusOK)
|
||||
if sdkerr != nil {
|
||||
return GroupsPage{}, sdkerr
|
||||
}
|
||||
|
||||
var tp GroupsPage
|
||||
|
@ -28,7 +28,7 @@ const (
|
||||
APIKey
|
||||
)
|
||||
|
||||
func (sdk mfSDK) Issue(token string, d time.Duration) (KeyRes, errors.SDKError) {
|
||||
func (sdk mfSDK) Issue(d time.Duration, token string) (KeyRes, errors.SDKError) {
|
||||
datareq := keyReq{Type: APIKey, Duration: d}
|
||||
data, err := json.Marshal(datareq)
|
||||
if err != nil {
|
||||
|
@ -45,15 +45,16 @@ type User struct {
|
||||
Metadata map[string]interface{} `json:"metadata,omitempty"`
|
||||
}
|
||||
type PageMetadata struct {
|
||||
Total uint64 `json:"total"`
|
||||
Offset uint64 `json:"offset"`
|
||||
Limit uint64 `json:"limit"`
|
||||
Level uint64 `json:"level,omitempty"`
|
||||
Email string `json:"email,omitempty"`
|
||||
Name string `json:"name,omitempty"`
|
||||
Type string `json:"type,omitempty"`
|
||||
Metadata map[string]interface{} `json:"metadata,omitempty"`
|
||||
Status string `json:"status,omitempty"`
|
||||
Total uint64 `json:"total"`
|
||||
Offset uint64 `json:"offset"`
|
||||
Limit uint64 `json:"limit"`
|
||||
Level uint64 `json:"level,omitempty"`
|
||||
Email string `json:"email,omitempty"`
|
||||
Name string `json:"name,omitempty"`
|
||||
Type string `json:"type,omitempty"`
|
||||
Disconnected bool `json:"disconnected,omitempty"`
|
||||
Metadata map[string]interface{} `json:"metadata,omitempty"`
|
||||
Status string `json:"status,omitempty"`
|
||||
}
|
||||
|
||||
// Group represents mainflux users group.
|
||||
@ -92,13 +93,13 @@ type Key struct {
|
||||
// SDK contains Mainflux API.
|
||||
type SDK interface {
|
||||
// CreateUser registers mainflux user.
|
||||
CreateUser(token string, user User) (string, errors.SDKError)
|
||||
CreateUser(user User, token string) (string, errors.SDKError)
|
||||
|
||||
// User returns user object by id.
|
||||
User(token, id string) (User, errors.SDKError)
|
||||
User(id, token string) (User, errors.SDKError)
|
||||
|
||||
// Users returns list of users.
|
||||
Users(token string, pm PageMetadata) (UsersPage, errors.SDKError)
|
||||
Users(pm PageMetadata, token string) (UsersPage, errors.SDKError)
|
||||
|
||||
// CreateToken receives credentials and returns user token.
|
||||
CreateToken(user User) (string, errors.SDKError)
|
||||
@ -122,11 +123,11 @@ type SDK interface {
|
||||
CreateThings(things []Thing, token string) ([]Thing, errors.SDKError)
|
||||
|
||||
// Things returns page of things.
|
||||
Things(token string, pm PageMetadata) (ThingsPage, errors.SDKError)
|
||||
Things(pm PageMetadata, token string) (ThingsPage, errors.SDKError)
|
||||
|
||||
// ThingsByChannel returns page of things that are connected or not connected
|
||||
// to specified channel.
|
||||
ThingsByChannel(token, chanID string, offset, limit uint64, disconnected bool) (ThingsPage, errors.SDKError)
|
||||
ThingsByChannel(chanID string, pm PageMetadata, token string) (ThingsPage, errors.SDKError)
|
||||
|
||||
// Thing returns thing object by id.
|
||||
Thing(id, token string) (Thing, errors.SDKError)
|
||||
@ -147,28 +148,28 @@ type SDK interface {
|
||||
DeleteGroup(id, token string) errors.SDKError
|
||||
|
||||
// Groups returns page of groups.
|
||||
Groups(meta PageMetadata, token string) (GroupsPage, errors.SDKError)
|
||||
Groups(pm PageMetadata, token string) (GroupsPage, errors.SDKError)
|
||||
|
||||
// Parents returns page of users groups.
|
||||
Parents(id string, offset, limit uint64, token string) (GroupsPage, errors.SDKError)
|
||||
Parents(id string, pm PageMetadata, token string) (GroupsPage, errors.SDKError)
|
||||
|
||||
// Children returns page of users groups.
|
||||
Children(id string, offset, limit uint64, token string) (GroupsPage, errors.SDKError)
|
||||
Children(id string, pm PageMetadata, token string) (GroupsPage, errors.SDKError)
|
||||
|
||||
// Group returns users group object by id.
|
||||
Group(id, token string) (Group, errors.SDKError)
|
||||
|
||||
// Assign assigns member of member type (thing or user) to a group.
|
||||
Assign(memberIDs []string, memberType, groupID string, token string) errors.SDKError
|
||||
Assign(memberIDs []string, memberType, groupID, token string) errors.SDKError
|
||||
|
||||
// Unassign removes member from a group.
|
||||
Unassign(token, groupID string, memberIDs ...string) errors.SDKError
|
||||
Unassign(groupID string, memberIDs []string, token string) errors.SDKError
|
||||
|
||||
// Members lists members of a group.
|
||||
Members(groupID, token string, offset, limit uint64) (MembersPage, errors.SDKError)
|
||||
Members(groupID string, pm PageMetadata, token string) (MembersPage, errors.SDKError)
|
||||
|
||||
// Memberships lists groups for user.
|
||||
Memberships(userID, token string, offset, limit uint64) (GroupsPage, errors.SDKError)
|
||||
Memberships(userID string, pm PageMetadata, token string) (GroupsPage, errors.SDKError)
|
||||
|
||||
// UpdateGroup updates existing group.
|
||||
UpdateGroup(group Group, token string) errors.SDKError
|
||||
@ -186,11 +187,11 @@ type SDK interface {
|
||||
CreateChannels(channels []Channel, token string) ([]Channel, errors.SDKError)
|
||||
|
||||
// Channels returns page of channels.
|
||||
Channels(token string, pm PageMetadata) (ChannelsPage, errors.SDKError)
|
||||
Channels(pm PageMetadata, token string) (ChannelsPage, errors.SDKError)
|
||||
|
||||
// ChannelsByThing returns page of channels that are connected or not connected
|
||||
// to specified thing.
|
||||
ChannelsByThing(token, thingID string, offset, limit uint64, connected bool) (ChannelsPage, errors.SDKError)
|
||||
ChannelsByThing(thingID string, pm PageMetadata, token string) (ChannelsPage, errors.SDKError)
|
||||
|
||||
// Channel returns channel data by id.
|
||||
Channel(id, token string) (Channel, errors.SDKError)
|
||||
@ -202,7 +203,7 @@ type SDK interface {
|
||||
DeleteChannel(id, token string) errors.SDKError
|
||||
|
||||
// SendMessage send message to specified channel.
|
||||
SendMessage(chanID, msg, token string) errors.SDKError
|
||||
SendMessage(chanID, msg, key string) errors.SDKError
|
||||
|
||||
// ReadMessages read messages of specified channel.
|
||||
ReadMessages(chanID, token string) (MessagesPage, errors.SDKError)
|
||||
@ -214,25 +215,25 @@ type SDK interface {
|
||||
Health() (mainflux.HealthInfo, errors.SDKError)
|
||||
|
||||
// AddBootstrap add bootstrap configuration
|
||||
AddBootstrap(token string, cfg BootstrapConfig) (string, errors.SDKError)
|
||||
AddBootstrap(cfg BootstrapConfig, token string) (string, errors.SDKError)
|
||||
|
||||
// View returns Thing Config with given ID belonging to the user identified by the given token.
|
||||
ViewBootstrap(token, id string) (BootstrapConfig, errors.SDKError)
|
||||
ViewBootstrap(id, token string) (BootstrapConfig, errors.SDKError)
|
||||
|
||||
// Update updates editable fields of the provided Config.
|
||||
UpdateBootstrap(token string, cfg BootstrapConfig) errors.SDKError
|
||||
UpdateBootstrap(cfg BootstrapConfig, token string) errors.SDKError
|
||||
|
||||
// Update boostrap config certificates
|
||||
UpdateBootstrapCerts(token string, id string, clientCert, clientKey, ca string) errors.SDKError
|
||||
UpdateBootstrapCerts(id string, clientCert, clientKey, ca string, token string) errors.SDKError
|
||||
|
||||
// Remove removes Config with specified token that belongs to the user identified by the given token.
|
||||
RemoveBootstrap(token, id string) errors.SDKError
|
||||
RemoveBootstrap(id, token string) errors.SDKError
|
||||
|
||||
// Bootstrap returns Config to the Thing with provided external ID using external key.
|
||||
Bootstrap(externalKey, externalID string) (BootstrapConfig, errors.SDKError)
|
||||
|
||||
// Whitelist updates Thing state Config with given ID belonging to the user identified by the given token.
|
||||
Whitelist(token string, cfg BootstrapConfig) errors.SDKError
|
||||
Whitelist(cfg BootstrapConfig, token string) errors.SDKError
|
||||
|
||||
// IssueCert issues a certificate for a thing required for mtls.
|
||||
IssueCert(thingID string, keyBits int, keyType, valid, token string) (Cert, errors.SDKError)
|
||||
@ -244,13 +245,13 @@ type SDK interface {
|
||||
RevokeCert(thingID, certID, token string) errors.SDKError
|
||||
|
||||
// Issue issues a new key, returning its token value alongside.
|
||||
Issue(token string, duration time.Duration) (KeyRes, errors.SDKError)
|
||||
Issue(duration time.Duration, token string) (KeyRes, errors.SDKError)
|
||||
|
||||
// Revoke removes the key with the provided ID that is issued by the user identified by the provided key.
|
||||
Revoke(token, id string) errors.SDKError
|
||||
Revoke(id, token string) errors.SDKError
|
||||
|
||||
// RetrieveKey retrieves data for the key identified by the provided ID, that is issued by the user identified by the provided key.
|
||||
RetrieveKey(token, id string) (retrieveKeyRes, errors.SDKError)
|
||||
RetrieveKey(id, token string) (retrieveKeyRes, errors.SDKError)
|
||||
}
|
||||
|
||||
type mfSDK struct {
|
||||
@ -352,6 +353,7 @@ func (pm PageMetadata) query() (string, error) {
|
||||
q.Add("total", strconv.FormatUint(pm.Total, 10))
|
||||
q.Add("offset", strconv.FormatUint(pm.Offset, 10))
|
||||
q.Add("limit", strconv.FormatUint(pm.Limit, 10))
|
||||
q.Add("disconnected", strconv.FormatBool(pm.Disconnected))
|
||||
if pm.Level != 0 {
|
||||
q.Add("level", strconv.FormatUint(pm.Level, 10))
|
||||
}
|
||||
|
@ -63,9 +63,8 @@ func (sdk mfSDK) CreateThings(things []Thing, token string) ([]Thing, errors.SDK
|
||||
return ctr.Things, nil
|
||||
}
|
||||
|
||||
func (sdk mfSDK) Things(token string, pm PageMetadata) (ThingsPage, errors.SDKError) {
|
||||
func (sdk mfSDK) Things(pm PageMetadata, token string) (ThingsPage, errors.SDKError) {
|
||||
url, err := sdk.withQueryParams(sdk.thingsURL, thingsEndpoint, pm)
|
||||
|
||||
if err != nil {
|
||||
return ThingsPage{}, errors.NewSDKError(err)
|
||||
}
|
||||
@ -83,12 +82,14 @@ func (sdk mfSDK) Things(token string, pm PageMetadata) (ThingsPage, errors.SDKEr
|
||||
return tp, nil
|
||||
}
|
||||
|
||||
func (sdk mfSDK) ThingsByChannel(token, chanID string, offset, limit uint64, disconn bool) (ThingsPage, errors.SDKError) {
|
||||
url := fmt.Sprintf("%s/channels/%s/things?offset=%d&limit=%d&disconnected=%t", sdk.thingsURL, chanID, offset, limit, disconn)
|
||||
|
||||
_, body, err := sdk.processRequest(http.MethodGet, url, token, string(CTJSON), nil, http.StatusOK)
|
||||
func (sdk mfSDK) ThingsByChannel(chanID string, pm PageMetadata, token string) (ThingsPage, errors.SDKError) {
|
||||
url, err := sdk.withQueryParams(fmt.Sprintf("%s/channels/%s", sdk.thingsURL, chanID), thingsEndpoint, pm)
|
||||
if err != nil {
|
||||
return ThingsPage{}, err
|
||||
return ThingsPage{}, errors.NewSDKError(err)
|
||||
}
|
||||
_, body, sdkerr := sdk.processRequest(http.MethodGet, url, token, string(CTJSON), nil, http.StatusOK)
|
||||
if sdkerr != nil {
|
||||
return ThingsPage{}, sdkerr
|
||||
}
|
||||
|
||||
var tp ThingsPage
|
||||
|
@ -360,7 +360,7 @@ func TestThings(t *testing.T) {
|
||||
Limit: uint64(tc.limit),
|
||||
Metadata: tc.metadata,
|
||||
}
|
||||
page, err := mainfluxSDK.Things(tc.token, filter)
|
||||
page, err := mainfluxSDK.Things(filter, tc.token)
|
||||
assert.Equal(t, tc.err, err, fmt.Sprintf("%s: expected error %s, got %s", tc.desc, tc.err, err))
|
||||
assert.Equal(t, tc.response, page.Things, fmt.Sprintf("%s: expected response channel %s, got %s", tc.desc, tc.response, page.Things))
|
||||
}
|
||||
@ -498,7 +498,12 @@ func TestThingsByChannel(t *testing.T) {
|
||||
},
|
||||
}
|
||||
for _, tc := range cases {
|
||||
page, err := mainfluxSDK.ThingsByChannel(tc.token, tc.channel, tc.offset, tc.limit, tc.disconnected)
|
||||
pm := sdk.PageMetadata{
|
||||
Offset: tc.offset,
|
||||
Limit: tc.limit,
|
||||
Disconnected: tc.disconnected,
|
||||
}
|
||||
page, err := mainfluxSDK.ThingsByChannel(tc.channel, pm, tc.token)
|
||||
assert.Equal(t, tc.err, err, fmt.Sprintf("%s: expected error %s, got %s", tc.desc, tc.err, err))
|
||||
assert.Equal(t, tc.response, page.Things, fmt.Sprintf("%s: expected response channel %s, got %s", tc.desc, tc.response, page.Things))
|
||||
}
|
||||
|
@ -19,7 +19,7 @@ const (
|
||||
membersEndpoint = "members"
|
||||
)
|
||||
|
||||
func (sdk mfSDK) CreateUser(token string, u User) (string, errors.SDKError) {
|
||||
func (sdk mfSDK) CreateUser(u User, token string) (string, errors.SDKError) {
|
||||
data, err := json.Marshal(u)
|
||||
if err != nil {
|
||||
return "", errors.NewSDKError(err)
|
||||
@ -51,7 +51,7 @@ func (sdk mfSDK) User(userID, token string) (User, errors.SDKError) {
|
||||
return u, nil
|
||||
}
|
||||
|
||||
func (sdk mfSDK) Users(token string, pm PageMetadata) (UsersPage, errors.SDKError) {
|
||||
func (sdk mfSDK) Users(pm PageMetadata, token string) (UsersPage, errors.SDKError) {
|
||||
var url string
|
||||
var err error
|
||||
|
||||
|
@ -129,7 +129,7 @@ func TestCreateUser(t *testing.T) {
|
||||
}
|
||||
|
||||
for _, tc := range cases {
|
||||
_, err := mainfluxSDK.CreateUser(tc.token, tc.user)
|
||||
_, err := mainfluxSDK.CreateUser(tc.user, tc.token)
|
||||
assert.Equal(t, tc.err, err, fmt.Sprintf("%s: unexpected error %s", tc.desc, err))
|
||||
}
|
||||
}
|
||||
@ -153,7 +153,7 @@ func TestUser(t *testing.T) {
|
||||
|
||||
tkn, _ := auth.Issue(context.Background(), &mainflux.IssueReq{Id: user.ID, Email: user.Email, Type: mfauth.APIKey})
|
||||
token := tkn.GetValue()
|
||||
userID, err := mainfluxSDK.CreateUser(token, user)
|
||||
userID, err := mainfluxSDK.CreateUser(user, token)
|
||||
require.Nil(t, err, fmt.Sprintf("unexpected error: %s", err))
|
||||
usertoken, err := mainfluxSDK.CreateToken(user)
|
||||
require.Nil(t, err, fmt.Sprintf("unexpected error: %s", err))
|
||||
@ -224,7 +224,7 @@ func TestUsers(t *testing.T) {
|
||||
password := fmt.Sprintf("password%d", i)
|
||||
metadata := map[string]interface{}{"name": fmt.Sprintf("user%d", i)}
|
||||
us := sdk.User{Email: email, Password: password, Metadata: metadata}
|
||||
userID, err := mainfluxSDK.CreateUser(token, us)
|
||||
userID, err := mainfluxSDK.CreateUser(us, token)
|
||||
require.Nil(t, err, fmt.Sprintf("unexpected error: %s", err))
|
||||
us.ID = userID
|
||||
us.Password = ""
|
||||
@ -317,7 +317,7 @@ func TestUsers(t *testing.T) {
|
||||
Limit: uint64(tc.limit),
|
||||
Metadata: tc.metadata,
|
||||
}
|
||||
page, err := mainfluxSDK.Users(tc.token, filter)
|
||||
page, err := mainfluxSDK.Users(filter, tc.token)
|
||||
assert.Equal(t, tc.err, err, fmt.Sprintf("%s: expected error %s, got %s", tc.desc, tc.err, err))
|
||||
assert.Equal(t, tc.response, page.Users, fmt.Sprintf("%s: expected response user %s, got %s", tc.desc, tc.response, page.Users))
|
||||
}
|
||||
@ -342,7 +342,7 @@ func TestCreateToken(t *testing.T) {
|
||||
|
||||
tkn, _ := auth.Issue(context.Background(), &mainflux.IssueReq{Id: user.ID, Email: user.Email, Type: mfauth.APIKey})
|
||||
token := tkn.GetValue()
|
||||
_, err := mainfluxSDK.CreateUser(token, user)
|
||||
_, err := mainfluxSDK.CreateUser(user, token)
|
||||
require.Nil(t, err, fmt.Sprintf("unexpected error: %s", err))
|
||||
|
||||
cases := []struct {
|
||||
@ -396,7 +396,7 @@ func TestUpdateUser(t *testing.T) {
|
||||
|
||||
tkn, _ := auth.Issue(context.Background(), &mainflux.IssueReq{Id: user.ID, Email: user.Email, Type: mfauth.APIKey})
|
||||
token := tkn.GetValue()
|
||||
userID, err := mainfluxSDK.CreateUser(token, user)
|
||||
userID, err := mainfluxSDK.CreateUser(user, token)
|
||||
require.Nil(t, err, fmt.Sprintf("unexpected error: %s", err))
|
||||
usertoken, err := mainfluxSDK.CreateToken(user)
|
||||
require.Nil(t, err, fmt.Sprintf("unexpected error: %s", err))
|
||||
@ -457,7 +457,7 @@ func TestUpdatePassword(t *testing.T) {
|
||||
|
||||
tkn, _ := auth.Issue(context.Background(), &mainflux.IssueReq{Id: user.ID, Email: user.Email, Type: mfauth.APIKey})
|
||||
token := tkn.GetValue()
|
||||
_, err := mainfluxSDK.CreateUser(token, user)
|
||||
_, err := mainfluxSDK.CreateUser(user, token)
|
||||
require.Nil(t, err, fmt.Sprintf("unexpected error: %s", err))
|
||||
usertoken, err := mainfluxSDK.CreateToken(user)
|
||||
require.Nil(t, err, fmt.Sprintf("unexpected error: %s", err))
|
||||
|
@ -100,7 +100,7 @@ func (ps *provisionService) Mapping(token string) (map[string]interface{}, error
|
||||
Metadata: make(map[string]interface{}),
|
||||
}
|
||||
|
||||
if _, err := ps.sdk.Users(token, userFilter); err != nil {
|
||||
if _, err := ps.sdk.Users(userFilter, token); err != nil {
|
||||
return map[string]interface{}{}, errors.Wrap(ErrUnauthorized, err)
|
||||
}
|
||||
return ps.conf.Bootstrap.Content, nil
|
||||
@ -202,12 +202,12 @@ func (ps *provisionService) Provision(token, name, externalID, externalKey strin
|
||||
ClientKey: cert.ClientKey,
|
||||
Content: string(content),
|
||||
}
|
||||
bsid, err := ps.sdk.AddBootstrap(token, bsReq)
|
||||
bsid, err := ps.sdk.AddBootstrap(bsReq, token)
|
||||
if err != nil {
|
||||
return Result{}, errors.Wrap(ErrFailedBootstrap, err)
|
||||
}
|
||||
|
||||
bsConfig, err = ps.sdk.ViewBootstrap(token, bsid)
|
||||
bsConfig, err = ps.sdk.ViewBootstrap(bsid, token)
|
||||
if err != nil {
|
||||
return Result{}, errors.Wrap(ErrFailedBootstrapValidate, err)
|
||||
}
|
||||
@ -227,7 +227,7 @@ func (ps *provisionService) Provision(token, name, externalID, externalKey strin
|
||||
res.CACert = cert.CACert
|
||||
|
||||
if needsBootstrap(thing) {
|
||||
if err = ps.sdk.UpdateBootstrapCerts(token, bsConfig.MFThing, cert.ClientCert, cert.ClientKey, cert.CACert); err != nil {
|
||||
if err = ps.sdk.UpdateBootstrapCerts(bsConfig.MFThing, cert.ClientCert, cert.ClientKey, cert.CACert, token); err != nil {
|
||||
return Result{}, errors.Wrap(ErrFailedCertCreation, err)
|
||||
}
|
||||
}
|
||||
@ -238,7 +238,7 @@ func (ps *provisionService) Provision(token, name, externalID, externalKey strin
|
||||
MFThing: thing.ID,
|
||||
State: Active,
|
||||
}
|
||||
if err := ps.sdk.Whitelist(token, wlReq); err != nil {
|
||||
if err := ps.sdk.Whitelist(wlReq, token); err != nil {
|
||||
res.Error = err.Error()
|
||||
return res, ErrThingUpdate
|
||||
}
|
||||
@ -366,7 +366,7 @@ func (ps *provisionService) recover(e *error, ths *[]SDK.Thing, chs *[]SDK.Chann
|
||||
clean(ps, things, channels, token)
|
||||
for _, th := range things {
|
||||
if needsBootstrap(th) {
|
||||
ps.errLog(ps.sdk.RemoveBootstrap(token, th.ID))
|
||||
ps.errLog(ps.sdk.RemoveBootstrap(th.ID, token))
|
||||
}
|
||||
|
||||
}
|
||||
@ -377,9 +377,9 @@ func (ps *provisionService) recover(e *error, ths *[]SDK.Thing, chs *[]SDK.Chann
|
||||
clean(ps, things, channels, token)
|
||||
for _, th := range things {
|
||||
if needsBootstrap(th) {
|
||||
bs, err := ps.sdk.ViewBootstrap(token, th.ID)
|
||||
bs, err := ps.sdk.ViewBootstrap(th.ID, token)
|
||||
ps.errLog(errors.Wrap(ErrFailedBootstrapRetrieval, err))
|
||||
ps.errLog(ps.sdk.RemoveBootstrap(token, bs.MFThing))
|
||||
ps.errLog(ps.sdk.RemoveBootstrap(bs.MFThing, token))
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -391,9 +391,9 @@ func (ps *provisionService) recover(e *error, ths *[]SDK.Thing, chs *[]SDK.Chann
|
||||
ps.errLog(ps.sdk.RemoveCert(th.ID, token))
|
||||
}
|
||||
if needsBootstrap(th) {
|
||||
bs, err := ps.sdk.ViewBootstrap(token, th.ID)
|
||||
bs, err := ps.sdk.ViewBootstrap(th.ID, token)
|
||||
ps.errLog(errors.Wrap(ErrFailedBootstrapRetrieval, err))
|
||||
ps.errLog(ps.sdk.RemoveBootstrap(token, bs.MFThing))
|
||||
ps.errLog(ps.sdk.RemoveBootstrap(bs.MFThing, token))
|
||||
}
|
||||
}
|
||||
return
|
||||
|
@ -83,7 +83,7 @@ func Provision(conf Config) {
|
||||
}
|
||||
|
||||
// Create new user
|
||||
if _, err := s.CreateUser("", user); err != nil {
|
||||
if _, err := s.CreateUser(user, ""); err != nil {
|
||||
log.Fatalf("Unable to create new user: %s", err.Error())
|
||||
return
|
||||
|
||||
|
@ -91,48 +91,48 @@ func (urm *userRepositoryMock) RetrieveByID(ctx context.Context, id string) (use
|
||||
return val, nil
|
||||
}
|
||||
|
||||
func (urm *userRepositoryMock) RetrieveAll(ctx context.Context, status string, offset, limit uint64, ids []string, email string, um users.Metadata) (users.UserPage, error) {
|
||||
func (urm *userRepositoryMock) RetrieveAll(ctx context.Context, ids []string, pm users.PageMetadata) (users.UserPage, error) {
|
||||
urm.mu.Lock()
|
||||
defer urm.mu.Unlock()
|
||||
|
||||
up := users.UserPage{}
|
||||
i := uint64(0)
|
||||
|
||||
if email != "" {
|
||||
val, ok := urm.users[email]
|
||||
if pm.Email != "" {
|
||||
val, ok := urm.users[pm.Email]
|
||||
if !ok {
|
||||
return users.UserPage{}, errors.ErrNotFound
|
||||
}
|
||||
up.Offset = offset
|
||||
up.Limit = limit
|
||||
up.Offset = pm.Offset
|
||||
up.Limit = pm.Limit
|
||||
up.Total = uint64(i)
|
||||
up.Users = []users.User{val}
|
||||
return up, nil
|
||||
}
|
||||
|
||||
if status == users.EnabledStatusKey || status == users.DisabledStatusKey {
|
||||
if pm.Status == users.EnabledStatusKey || pm.Status == users.DisabledStatusKey {
|
||||
for _, u := range sortUsers(urm.users) {
|
||||
if i >= offset && i < (limit+offset) {
|
||||
if status == u.Status {
|
||||
if i >= pm.Offset && i < (pm.Limit+pm.Offset) {
|
||||
if pm.Status == u.Status {
|
||||
up.Users = append(up.Users, u)
|
||||
}
|
||||
}
|
||||
i++
|
||||
}
|
||||
up.Offset = offset
|
||||
up.Limit = limit
|
||||
up.Offset = pm.Offset
|
||||
up.Limit = pm.Limit
|
||||
up.Total = uint64(i)
|
||||
return up, nil
|
||||
}
|
||||
for _, u := range sortUsers(urm.users) {
|
||||
if i >= offset && i < (limit+offset) {
|
||||
if i >= pm.Offset && i < (pm.Limit+pm.Offset) {
|
||||
up.Users = append(up.Users, u)
|
||||
}
|
||||
i++
|
||||
}
|
||||
|
||||
up.Offset = offset
|
||||
up.Limit = limit
|
||||
up.Offset = pm.Offset
|
||||
up.Limit = pm.Limit
|
||||
up.Total = uint64(i)
|
||||
|
||||
return up, nil
|
||||
|
@ -132,18 +132,18 @@ func (ur userRepository) RetrieveByID(ctx context.Context, id string) (users.Use
|
||||
return toUser(dbu)
|
||||
}
|
||||
|
||||
func (ur userRepository) RetrieveAll(ctx context.Context, status string, offset, limit uint64, userIDs []string, email string, um users.Metadata) (users.UserPage, error) {
|
||||
eq, ep, err := createEmailQuery("", email)
|
||||
func (ur userRepository) RetrieveAll(ctx context.Context, userIDs []string, pm users.PageMetadata) (users.UserPage, error) {
|
||||
eq, ep, err := createEmailQuery("", pm.Email)
|
||||
if err != nil {
|
||||
return users.UserPage{}, errors.Wrap(errors.ErrViewEntity, err)
|
||||
}
|
||||
|
||||
mq, mp, err := createMetadataQuery("", um)
|
||||
mq, mp, err := createMetadataQuery("", pm.Metadata)
|
||||
if err != nil {
|
||||
return users.UserPage{}, errors.Wrap(errors.ErrViewEntity, err)
|
||||
}
|
||||
aq := fmt.Sprintf("status = '%s'", status)
|
||||
if status == users.AllStatusKey {
|
||||
aq := fmt.Sprintf("status = '%s'", pm.Status)
|
||||
if pm.Status == users.AllStatusKey {
|
||||
aq = ""
|
||||
}
|
||||
|
||||
@ -168,8 +168,8 @@ func (ur userRepository) RetrieveAll(ctx context.Context, status string, offset,
|
||||
|
||||
q := fmt.Sprintf(`SELECT id, email, metadata FROM users %s ORDER BY email LIMIT :limit OFFSET :offset;`, emq)
|
||||
params := map[string]interface{}{
|
||||
"limit": limit,
|
||||
"offset": offset,
|
||||
"limit": pm.Limit,
|
||||
"offset": pm.Offset,
|
||||
"email": ep,
|
||||
"metadata": mp,
|
||||
}
|
||||
@ -206,8 +206,8 @@ func (ur userRepository) RetrieveAll(ctx context.Context, status string, offset,
|
||||
Users: items,
|
||||
PageMetadata: users.PageMetadata{
|
||||
Total: total,
|
||||
Offset: offset,
|
||||
Limit: limit,
|
||||
Offset: pm.Offset,
|
||||
Limit: pm.Limit,
|
||||
},
|
||||
}
|
||||
|
||||
|
@ -232,7 +232,14 @@ func TestRetrieveAll(t *testing.T) {
|
||||
},
|
||||
}
|
||||
for desc, tc := range cases {
|
||||
page, err := userRepo.RetrieveAll(context.Background(), users.EnabledStatusKey, tc.offset, tc.limit, tc.ids, tc.email, tc.metadata)
|
||||
pm := users.PageMetadata{
|
||||
Offset: tc.offset,
|
||||
Limit: tc.limit,
|
||||
Email: tc.email,
|
||||
Metadata: tc.metadata,
|
||||
Status: users.EnabledStatusKey,
|
||||
}
|
||||
page, err := userRepo.RetrieveAll(context.Background(), tc.ids, pm)
|
||||
size := uint64(len(page.Users))
|
||||
assert.Equal(t, tc.size, size, fmt.Sprintf("%s: expected size %d got %d\n", desc, tc.size, size))
|
||||
assert.Nil(t, err, fmt.Sprintf("%s: expected no error got %d\n", desc, err))
|
||||
|
@ -254,7 +254,7 @@ func (svc usersService) ListUsers(ctx context.Context, token string, pm PageMeta
|
||||
if err := svc.authorize(ctx, id.id, "authorities", "member"); err != nil {
|
||||
return UserPage{}, err
|
||||
}
|
||||
return svc.users.RetrieveAll(ctx, pm.Status, pm.Offset, pm.Limit, nil, pm.Email, pm.Metadata)
|
||||
return svc.users.RetrieveAll(ctx, nil, pm)
|
||||
}
|
||||
|
||||
func (svc usersService) UpdateUser(ctx context.Context, token string, u User) error {
|
||||
@ -356,7 +356,7 @@ func (svc usersService) ListMembers(ctx context.Context, token, groupID string,
|
||||
}, nil
|
||||
}
|
||||
|
||||
return svc.users.RetrieveAll(ctx, pm.Status, pm.Offset, pm.Limit, userIDs, pm.Email, pm.Metadata)
|
||||
return svc.users.RetrieveAll(ctx, userIDs, pm)
|
||||
}
|
||||
|
||||
func (svc usersService) EnableUser(ctx context.Context, token, id string) error {
|
||||
|
@ -271,10 +271,11 @@ func TestListUsers(t *testing.T) {
|
||||
|
||||
for desc, tc := range cases {
|
||||
pm := users.PageMetadata{
|
||||
Offset: tc.offset,
|
||||
Limit: tc.limit,
|
||||
Email: tc.email,
|
||||
Status: "all",
|
||||
Offset: tc.offset,
|
||||
Limit: tc.limit,
|
||||
Email: tc.email,
|
||||
Metadata: nil,
|
||||
Status: "all",
|
||||
}
|
||||
page, err := svc.ListUsers(context.Background(), tc.token, pm)
|
||||
size := uint64(len(page.Users))
|
||||
|
@ -75,12 +75,12 @@ func (urm userRepositoryMiddleware) UpdatePassword(ctx context.Context, email, p
|
||||
return urm.repo.UpdatePassword(ctx, email, password)
|
||||
}
|
||||
|
||||
func (urm userRepositoryMiddleware) RetrieveAll(ctx context.Context, status string, offset, limit uint64, ids []string, email string, um users.Metadata) (users.UserPage, error) {
|
||||
func (urm userRepositoryMiddleware) RetrieveAll(ctx context.Context, ids []string, pm users.PageMetadata) (users.UserPage, error) {
|
||||
span := createSpan(ctx, urm.tracer, members)
|
||||
defer span.Finish()
|
||||
ctx = opentracing.ContextWithSpan(ctx, span)
|
||||
|
||||
return urm.repo.RetrieveAll(ctx, status, offset, limit, ids, email, um)
|
||||
return urm.repo.RetrieveAll(ctx, ids, pm)
|
||||
}
|
||||
|
||||
func (urm userRepositoryMiddleware) ChangeStatus(ctx context.Context, id, status string) error {
|
||||
|
@ -66,7 +66,7 @@ type UserRepository interface {
|
||||
RetrieveByID(ctx context.Context, id string) (User, error)
|
||||
|
||||
// RetrieveAll retrieves all users for given array of userIDs.
|
||||
RetrieveAll(ctx context.Context, status string, offset, limit uint64, userIDs []string, email string, m Metadata) (UserPage, error)
|
||||
RetrieveAll(ctx context.Context, userIDs []string, pm PageMetadata) (UserPage, error)
|
||||
|
||||
// UpdatePassword updates password for user with given email
|
||||
UpdatePassword(ctx context.Context, email, password string) error
|
||||
|
Loading…
x
Reference in New Issue
Block a user