1
0
mirror of https://github.com/mainflux/mainflux.git synced 2025-04-24 13:48:49 +08:00

NOISSUE-Add resetPassword to the SDK (#1872)

* Add resetPassword to the SDK

Signed-off-by: ianmuchyri <ianmuchiri8@gmail.com>

* add space to sdk comments

Signed-off-by: ianmuchyri <ianmuchiri8@gmail.com>

* add tab space to comments

Signed-off-by: ianmuchyri <ianmuchiri8@gmail.com>

* update .env file

Signed-off-by: ianmuchyri <ianmuchiri8@gmail.com>

* add referer header to sdk request

Signed-off-by: ianmuchyri <ianmuchiri8@gmail.com>

* update .env file

Signed-off-by: ianmuchyri <ianmuchiri8@gmail.com>

* update adding headers to processRequest

Signed-off-by: ianmuchyri <ianmuchiri8@gmail.com>

* remove code repetition

Signed-off-by: ianmuchyri <ianmuchiri8@gmail.com>

* add comment to content-Type

Signed-off-by: ianmuchyri <ianmuchiri8@gmail.com>

* update header initialization

Signed-off-by: ianmuchyri <ianmuchiri8@gmail.com>

* update docker-compose file

Signed-off-by: ianmuchyri <ianmuchiri8@gmail.com>

* add cli functionality

Signed-off-by: ianmuchyri <ianmuchiri8@gmail.com>

* add host as a tag

Signed-off-by: ianmuchyri <ianmuchiri8@gmail.com>

* update hostURL flag

Signed-off-by: ianmuchyri <ianmuchiri8@gmail.com>

* update comments

Signed-off-by: ianmuchyri <ianmuchiri8@gmail.com>

* remove hostURL duplication

Signed-off-by: ianmuchyri <ianmuchiri8@gmail.com>

* update inline

Signed-off-by: ianmuchyri <ianmuchiri8@gmail.com>

* add space in comments

Signed-off-by: ianmuchyri <ianmuchiri8@gmail.com>

* add space in comment

Signed-off-by: ianmuchyri <ianmuchiri8@gmail.com>

* update description of reset password request

Signed-off-by: ianmuchyri <ianmuchiri8@gmail.com>

---------

Signed-off-by: ianmuchyri <ianmuchiri8@gmail.com>
Co-authored-by: Drasko DRASKOVIC <drasko.draskovic@gmail.com>
This commit is contained in:
Ian Ngethe Muchiri 2023-08-01 18:03:18 +03:00 committed by GitHub
parent 38992085bd
commit c8710efce0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 229 additions and 85 deletions

View File

@ -232,6 +232,46 @@ var cmdUsers = []cobra.Command{
logJSON(user)
},
},
{
Use: "resetpasswordrequest <email>",
Short: "Send reset password request",
Long: "Send reset password request\n" +
"Usage:\n" +
"\tmainflux-cli users resetpasswordrequest example@mail.com\n",
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 1 {
logUsage(cmd.Use)
return
}
if err := sdk.ResetPasswordRequest(args[0]); err != nil {
logError(err)
return
}
logOK()
},
},
{
Use: "resetpassword <password> <confpass> <password_request_token>",
Short: "Reset password",
Long: "Reset password\n" +
"Usage:\n" +
"\tmainflux-cli users resetpassword 12345678 12345678 $REQUESTTOKEN\n",
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 3 {
logUsage(cmd.Use)
return
}
if err := sdk.ResetPassword(args[0], args[1], args[2]); err != nil {
logError(err)
return
}
logOK()
},
},
{
Use: "password <old_password> <password> <user_auth_token>",
Short: "Update password",

View File

@ -32,6 +32,7 @@ func main() {
CertsURL: defCertsURL,
MsgContentType: sdk.ContentType(msgContentType),
TLSVerification: false,
HostURL: defURL,
}
// Root
@ -123,6 +124,14 @@ func main() {
"Reader URL",
)
rootCmd.PersistentFlags().StringVarP(
&sdkConf.HostURL,
"host-url",
"H",
sdkConf.HostURL,
"Host URL",
)
rootCmd.PersistentFlags().StringVarP(
&msgContentType,
"content-type",

View File

@ -80,7 +80,7 @@ MF_EMAIL_USERNAME=18bf7f70705139
MF_EMAIL_PASSWORD=2b0d302e775b1e
MF_EMAIL_FROM_ADDRESS=from@example.com
MF_EMAIL_FROM_NAME=Example
MF_EMAIL_TEMPLATE=smtp-notifier.tmpl
MF_EMAIL_TEMPLATE=email.tmpl
### Things
MF_THINGS_LOG_LEVEL=debug

View File

@ -53,7 +53,7 @@ services:
networks:
- mainflux-base-net
ports:
- 4222:4222
- 4222:4222
things-db:
image: postgres:13.3-alpine
@ -113,7 +113,7 @@ services:
MF_THINGS_DB_SSL_KEY: ${MF_THINGS_DB_SSL_KEY}
MF_THINGS_DB_SSL_ROOT_CERT: ${MF_THINGS_DB_SSL_ROOT_CERT}
MF_AUTH_GRPC_URL: ${MF_USERS_GRPC_URL}
MF_AUTH_GRPC_TIMEOUT : ${MF_USERS_GRPC_TIMEOUT}
MF_AUTH_GRPC_TIMEOUT: ${MF_USERS_GRPC_TIMEOUT}
MF_AUTH_GRPC_CLIENT_TLS: ${MF_USERS_GRPC_CLIENT_TLS}
MF_AUTH_GRPC_CA_CERT: ${MF_USERS_GRPC_CA_CERT}
MF_JAEGER_URL: ${MF_JAEGER_URL}
@ -175,7 +175,7 @@ services:
MF_EMAIL_PASSWORD: ${MF_EMAIL_PASSWORD}
MF_EMAIL_FROM_ADDRESS: ${MF_EMAIL_FROM_ADDRESS}
MF_EMAIL_FROM_NAME: ${MF_EMAIL_FROM_NAME}
MF_EMAIL_TEMPLATE: ${MF_USERS_RESET_PWD_TEMPLATE}
MF_EMAIL_TEMPLATE: ${MF_EMAIL_TEMPLATE}
MF_JAEGER_URL: ${MF_JAEGER_URL}
MF_SEND_TELEMETRY: ${MF_SEND_TELEMETRY}
ports:
@ -184,8 +184,8 @@ services:
networks:
- mainflux-base-net
volumes:
- ./templates/${MF_USERS_RESET_PWD_TEMPLATE}:/email.tmpl
- ./templates/${MF_USERS_RESET_PWD_TEMPLATE}:/email.tmpl
jaeger:
image: jaegertracing/all-in-one:1.38.0
container_name: mainflux-jaeger

View File

@ -97,7 +97,7 @@ func (sdk mfSDK) AddBootstrap(cfg BootstrapConfig, token string) (string, errors
url := fmt.Sprintf("%s/%s", sdk.bootstrapURL, configsEndpoint)
headers, _, sdkerr := sdk.processRequest(http.MethodPost, url, token, string(CTJSON), data, http.StatusOK, http.StatusCreated)
headers, _, sdkerr := sdk.processRequest(http.MethodPost, url, token, data, nil, http.StatusOK, http.StatusCreated)
if sdkerr != nil {
return "", sdkerr
}
@ -113,7 +113,7 @@ func (sdk mfSDK) Bootstraps(pm PageMetadata, token string) (BootstrapPage, error
return BootstrapPage{}, errors.NewSDKError(err)
}
_, body, sdkerr := sdk.processRequest(http.MethodGet, url, token, string(CTJSON), nil, http.StatusOK)
_, body, sdkerr := sdk.processRequest(http.MethodGet, url, token, nil, nil, http.StatusOK)
if sdkerr != nil {
return BootstrapPage{}, sdkerr
}
@ -138,14 +138,15 @@ func (sdk mfSDK) Whitelist(cfg BootstrapConfig, token string) errors.SDKError {
url := fmt.Sprintf("%s/%s/%s", sdk.bootstrapURL, whitelistEndpoint, cfg.ThingID)
_, _, sdkerr := sdk.processRequest(http.MethodPut, url, token, string(CTJSON), data, http.StatusCreated, http.StatusOK)
_, _, sdkerr := sdk.processRequest(http.MethodPut, url, token, data, nil, http.StatusCreated, http.StatusOK)
return sdkerr
}
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)
_, body, err := sdk.processRequest(http.MethodGet, url, token, nil, nil, http.StatusOK)
if err != nil {
return BootstrapConfig{}, err
}
@ -165,7 +166,8 @@ func (sdk mfSDK) UpdateBootstrap(cfg BootstrapConfig, token string) errors.SDKEr
}
url := fmt.Sprintf("%s/%s/%s", sdk.bootstrapURL, configsEndpoint, cfg.ThingID)
_, _, sdkerr := sdk.processRequest(http.MethodPut, url, token, string(CTJSON), data, http.StatusOK)
_, _, sdkerr := sdk.processRequest(http.MethodPut, url, token, data, nil, http.StatusOK)
return sdkerr
}
@ -183,7 +185,7 @@ func (sdk mfSDK) UpdateBootstrapCerts(id, clientCert, clientKey, ca, token strin
return BootstrapConfig{}, errors.NewSDKError(err)
}
_, body, sdkerr := sdk.processRequest(http.MethodPatch, url, token, string(CTJSON), data, http.StatusOK)
_, body, sdkerr := sdk.processRequest(http.MethodPatch, url, token, data, nil, http.StatusOK)
var bc BootstrapConfig
if err := json.Unmarshal(body, &bc); err != nil {
@ -203,19 +205,21 @@ func (sdk mfSDK) UpdateBootstrapConnection(id string, channels []string, token s
return errors.NewSDKError(err)
}
_, _, sdkerr := sdk.processRequest(http.MethodPut, url, token, string(CTJSON), data, http.StatusOK)
_, _, sdkerr := sdk.processRequest(http.MethodPut, url, token, data, nil, http.StatusOK)
return sdkerr
}
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)
_, _, err := sdk.processRequest(http.MethodDelete, url, token, nil, nil, http.StatusNoContent)
return err
}
func (sdk mfSDK) Bootstrap(externalID, externalKey string) (BootstrapConfig, errors.SDKError) {
url := fmt.Sprintf("%s/%s/%s", sdk.bootstrapURL, bootstrapEndpoint, externalID)
_, body, err := sdk.processRequest(http.MethodGet, url, ThingPrefix+externalKey, string(CTJSON), nil, http.StatusOK)
_, body, err := sdk.processRequest(http.MethodGet, url, ThingPrefix+externalKey, nil, nil, http.StatusOK)
if err != nil {
return BootstrapConfig{}, err
}
@ -230,7 +234,8 @@ func (sdk mfSDK) Bootstrap(externalID, externalKey string) (BootstrapConfig, err
func (sdk mfSDK) BootstrapSecure(externalID, externalKey string) (BootstrapConfig, errors.SDKError) {
url := fmt.Sprintf("%s/%s/%s/%s", sdk.bootstrapURL, bootstrapEndpoint, secureEndpoint, externalID)
_, body, err := sdk.processRequest(http.MethodGet, url, ThingPrefix+externalKey, string(CTJSON), nil, http.StatusOK)
_, body, err := sdk.processRequest(http.MethodGet, url, ThingPrefix+externalKey, nil, nil, http.StatusOK)
if err != nil {
return BootstrapConfig{}, err
}

View File

@ -37,7 +37,8 @@ func (sdk mfSDK) IssueCert(thingID, valid, token string) (Cert, errors.SDKError)
}
url := fmt.Sprintf("%s/%s", sdk.certsURL, certsEndpoint)
_, body, sdkerr := sdk.processRequest(http.MethodPost, url, token, string(CTJSON), d, http.StatusCreated)
_, body, sdkerr := sdk.processRequest(http.MethodPost, url, token, d, nil, http.StatusCreated)
if sdkerr != nil {
return Cert{}, sdkerr
}
@ -52,7 +53,8 @@ func (sdk mfSDK) IssueCert(thingID, valid, token string) (Cert, errors.SDKError)
func (sdk mfSDK) ViewCert(id, token string) (Cert, errors.SDKError) {
url := fmt.Sprintf("%s/%s/%s", sdk.certsURL, certsEndpoint, id)
_, body, err := sdk.processRequest(http.MethodGet, url, token, string(CTJSON), nil, http.StatusOK)
_, body, err := sdk.processRequest(http.MethodGet, url, token, nil, nil, http.StatusOK)
if err != nil {
return Cert{}, err
}
@ -67,7 +69,8 @@ func (sdk mfSDK) ViewCert(id, token string) (Cert, errors.SDKError) {
func (sdk mfSDK) ViewCertByThing(thingID, token string) (CertSerials, errors.SDKError) {
url := fmt.Sprintf("%s/%s/%s", sdk.certsURL, serialsEndpoint, thingID)
_, body, err := sdk.processRequest(http.MethodGet, url, token, string(CTJSON), nil, http.StatusOK)
_, body, err := sdk.processRequest(http.MethodGet, url, token, nil, nil, http.StatusOK)
if err != nil {
return CertSerials{}, err
}
@ -82,7 +85,8 @@ func (sdk mfSDK) ViewCertByThing(thingID, token string) (CertSerials, errors.SDK
func (sdk mfSDK) RevokeCert(id, token string) (time.Time, errors.SDKError) {
url := fmt.Sprintf("%s/%s/%s", sdk.certsURL, certsEndpoint, id)
_, body, err := sdk.processRequest(http.MethodDelete, url, token, string(CTJSON), nil, http.StatusOK)
_, body, err := sdk.processRequest(http.MethodDelete, url, token, nil, nil, http.StatusOK)
if err != nil {
return time.Time{}, err
}

View File

@ -37,7 +37,7 @@ func (sdk mfSDK) CreateChannel(c Channel, token string) (Channel, errors.SDKErro
}
url := fmt.Sprintf("%s/%s", sdk.thingsURL, channelsEndpoint)
_, body, sdkerr := sdk.processRequest(http.MethodPost, url, token, string(CTJSON), data, http.StatusCreated)
_, body, sdkerr := sdk.processRequest(http.MethodPost, url, token, data, nil, http.StatusCreated)
if sdkerr != nil {
return Channel{}, sdkerr
}
@ -58,7 +58,7 @@ func (sdk mfSDK) CreateChannels(chs []Channel, token string) ([]Channel, errors.
url := fmt.Sprintf("%s/%s/%s", sdk.thingsURL, channelsEndpoint, "bulk")
_, body, sdkerr := sdk.processRequest(http.MethodPost, url, token, string(CTJSON), data, http.StatusOK)
_, body, sdkerr := sdk.processRequest(http.MethodPost, url, token, data, nil, http.StatusOK)
if sdkerr != nil {
return []Channel{}, sdkerr
}
@ -77,7 +77,7 @@ func (sdk mfSDK) Channels(pm PageMetadata, token string) (ChannelsPage, errors.S
return ChannelsPage{}, errors.NewSDKError(err)
}
_, body, sdkerr := sdk.processRequest(http.MethodGet, url, token, string(CTJSON), nil, http.StatusOK)
_, body, sdkerr := sdk.processRequest(http.MethodGet, url, token, nil, nil, http.StatusOK)
if sdkerr != nil {
return ChannelsPage{}, sdkerr
}
@ -95,7 +95,8 @@ func (sdk mfSDK) ChannelsByThing(thingID string, pm PageMetadata, token string)
if err != nil {
return ChannelsPage{}, errors.NewSDKError(err)
}
_, body, sdkerr := sdk.processRequest(http.MethodGet, url, token, string(CTJSON), nil, http.StatusOK)
_, body, sdkerr := sdk.processRequest(http.MethodGet, url, token, nil, nil, http.StatusOK)
if sdkerr != nil {
return ChannelsPage{}, sdkerr
}
@ -111,7 +112,7 @@ func (sdk mfSDK) ChannelsByThing(thingID string, pm PageMetadata, token string)
func (sdk mfSDK) Channel(id, token string) (Channel, errors.SDKError) {
url := fmt.Sprintf("%s/%s/%s", sdk.thingsURL, channelsEndpoint, id)
_, body, err := sdk.processRequest(http.MethodGet, url, token, string(CTJSON), nil, http.StatusOK)
_, body, err := sdk.processRequest(http.MethodGet, url, token, nil, nil, http.StatusOK)
if err != nil {
return Channel{}, err
}
@ -132,7 +133,7 @@ func (sdk mfSDK) UpdateChannel(c Channel, token string) (Channel, errors.SDKErro
url := fmt.Sprintf("%s/%s/%s", sdk.thingsURL, channelsEndpoint, c.ID)
_, body, sdkerr := sdk.processRequest(http.MethodPut, url, token, string(CTJSON), data, http.StatusOK)
_, body, sdkerr := sdk.processRequest(http.MethodPut, url, token, data, nil, http.StatusOK)
if sdkerr != nil {
return Channel{}, sdkerr
}
@ -156,7 +157,7 @@ func (sdk mfSDK) DisableChannel(id, token string) (Channel, errors.SDKError) {
func (sdk mfSDK) changeChannelStatus(id, status, token string) (Channel, errors.SDKError) {
url := fmt.Sprintf("%s/%s/%s/%s", sdk.thingsURL, channelsEndpoint, id, status)
_, body, err := sdk.processRequest(http.MethodPost, url, token, string(CTJSON), nil, http.StatusOK)
_, body, err := sdk.processRequest(http.MethodPost, url, token, nil, nil, http.StatusOK)
if err != nil {
return Channel{}, err
}

View File

@ -34,7 +34,8 @@ func (sdk mfSDK) CreateSubscription(topic, contact, token string) (string, error
}
url := fmt.Sprintf("%s/%s", sdk.usersURL, subscriptionEndpoint)
headers, _, sdkerr := sdk.processRequest(http.MethodPost, url, token, string(CTJSON), data, http.StatusCreated)
headers, _, sdkerr := sdk.processRequest(http.MethodPost, url, token, data, nil, http.StatusCreated)
if sdkerr != nil {
return "", sdkerr
}
@ -49,7 +50,8 @@ func (sdk mfSDK) ListSubscriptions(pm PageMetadata, token string) (SubscriptionP
if err != nil {
return SubscriptionPage{}, errors.NewSDKError(err)
}
_, body, err := sdk.processRequest(http.MethodGet, url, token, string(CTJSON), nil, http.StatusOK)
_, body, err := sdk.processRequest(http.MethodGet, url, token, nil, nil, http.StatusOK)
if err != nil {
return SubscriptionPage{}, errors.NewSDKError(err)
}
@ -64,7 +66,8 @@ func (sdk mfSDK) ListSubscriptions(pm PageMetadata, token string) (SubscriptionP
func (sdk mfSDK) ViewSubscription(id, token string) (Subscription, errors.SDKError) {
url := fmt.Sprintf("%s/%s/%s", sdk.usersURL, subscriptionEndpoint, id)
_, body, err := sdk.processRequest(http.MethodGet, url, token, string(CTJSON), nil, http.StatusOK)
_, body, err := sdk.processRequest(http.MethodGet, url, token, nil, nil, http.StatusOK)
if err != nil {
return Subscription{}, err
}
@ -80,7 +83,7 @@ func (sdk mfSDK) ViewSubscription(id, token string) (Subscription, errors.SDKErr
func (sdk mfSDK) DeleteSubscription(id, token string) errors.SDKError {
url := fmt.Sprintf("%s/%s/%s", sdk.usersURL, subscriptionEndpoint, id)
_, _, err := sdk.processRequest(http.MethodDelete, url, token, string(CTJSON), nil, http.StatusNoContent)
_, _, err := sdk.processRequest(http.MethodDelete, url, token, nil, nil, http.StatusNoContent)
return err
}

View File

@ -44,7 +44,7 @@ func (sdk mfSDK) CreateGroup(g Group, token string) (Group, errors.SDKError) {
}
url := fmt.Sprintf("%s/%s", sdk.usersURL, groupsEndpoint)
_, body, sdkerr := sdk.processRequest(http.MethodPost, url, token, string(CTJSON), data, http.StatusCreated)
_, body, sdkerr := sdk.processRequest(http.MethodPost, url, token, data, nil, http.StatusCreated)
if sdkerr != nil {
return Group{}, sdkerr
}
@ -63,7 +63,7 @@ func (sdk mfSDK) Memberships(clientID string, pm PageMetadata, token string) (Me
return MembershipsPage{}, errors.NewSDKError(err)
}
_, body, sdkerr := sdk.processRequest(http.MethodGet, url, token, string(CTJSON), nil, http.StatusOK)
_, body, sdkerr := sdk.processRequest(http.MethodGet, url, token, nil, nil, http.StatusOK)
if sdkerr != nil {
return MembershipsPage{}, sdkerr
}
@ -106,7 +106,8 @@ func (sdk mfSDK) Children(id string, pm PageMetadata, token string) (GroupsPage,
}
func (sdk mfSDK) getGroups(url, token string) (GroupsPage, errors.SDKError) {
_, body, err := sdk.processRequest(http.MethodGet, url, token, string(CTJSON), nil, http.StatusOK)
_, body, err := sdk.processRequest(http.MethodGet, url, token, nil, nil, http.StatusOK)
if err != nil {
return GroupsPage{}, err
}
@ -121,7 +122,8 @@ func (sdk mfSDK) getGroups(url, token string) (GroupsPage, errors.SDKError) {
func (sdk mfSDK) Group(id, token string) (Group, errors.SDKError) {
url := fmt.Sprintf("%s/%s/%s", sdk.usersURL, groupsEndpoint, id)
_, body, err := sdk.processRequest(http.MethodGet, url, token, string(CTJSON), nil, http.StatusOK)
_, body, err := sdk.processRequest(http.MethodGet, url, token, nil, nil, http.StatusOK)
if err != nil {
return Group{}, err
}
@ -141,7 +143,8 @@ func (sdk mfSDK) UpdateGroup(g Group, token string) (Group, errors.SDKError) {
}
url := fmt.Sprintf("%s/%s/%s", sdk.usersURL, groupsEndpoint, g.ID)
_, body, sdkerr := sdk.processRequest(http.MethodPut, url, token, string(CTJSON), data, http.StatusOK)
_, body, sdkerr := sdk.processRequest(http.MethodPut, url, token, data, nil, http.StatusOK)
if sdkerr != nil {
return Group{}, sdkerr
}
@ -164,7 +167,8 @@ func (sdk mfSDK) DisableGroup(id, token string) (Group, errors.SDKError) {
func (sdk mfSDK) changeGroupStatus(id, status, token string) (Group, errors.SDKError) {
url := fmt.Sprintf("%s/%s/%s/%s", sdk.usersURL, groupsEndpoint, id, status)
_, body, err := sdk.processRequest(http.MethodPost, url, token, string(CTJSON), nil, http.StatusOK)
_, body, err := sdk.processRequest(http.MethodPost, url, token, nil, nil, http.StatusOK)
if err != nil {
return Group{}, err
}

View File

@ -24,7 +24,7 @@ func (sdk mfSDK) SendMessage(chanName, msg, key string) errors.SDKError {
url := fmt.Sprintf("%s/channels/%s/messages%s", sdk.httpAdapterURL, chanID, subtopicPart)
_, _, err := sdk.processRequest(http.MethodPost, url, ThingPrefix+key, string(CTJSON), []byte(msg), http.StatusAccepted)
_, _, err := sdk.processRequest(http.MethodPost, url, ThingPrefix+key, []byte(msg), nil, http.StatusAccepted)
return err
}
@ -39,7 +39,10 @@ func (sdk mfSDK) ReadMessages(chanName, token string) (MessagesPage, errors.SDKE
url := fmt.Sprintf("%s/channels/%s/messages%s", sdk.readerURL, chanID, subtopicPart)
_, body, err := sdk.processRequest(http.MethodGet, url, token, string(sdk.msgContentType), nil, http.StatusOK)
var header = make(map[string]string)
header["Content-Type"] = string(sdk.msgContentType)
_, body, err := sdk.processRequest(http.MethodGet, url, token, nil, header, http.StatusOK)
if err != nil {
return MessagesPage{}, err
}

View File

@ -39,7 +39,8 @@ func (sdk mfSDK) AuthorizeUser(accessReq AccessRequest, token string) (bool, err
}
url := fmt.Sprintf("%s/%s", sdk.usersURL, authorizeEndpoint)
_, _, sdkerr := sdk.processRequest(http.MethodPost, url, token, string(CTJSON), data, http.StatusOK)
_, _, sdkerr := sdk.processRequest(http.MethodPost, url, token, data, nil, http.StatusOK)
if sdkerr != nil {
return false, sdkerr
}
@ -54,7 +55,8 @@ func (sdk mfSDK) CreateUserPolicy(p Policy, token string) errors.SDKError {
}
url := fmt.Sprintf("%s/%s", sdk.usersURL, policyEndpoint)
_, _, sdkerr := sdk.processRequest(http.MethodPost, url, token, string(CTJSON), data, http.StatusCreated)
_, _, sdkerr := sdk.processRequest(http.MethodPost, url, token, data, nil, http.StatusCreated)
if sdkerr != nil {
return sdkerr
}
@ -70,7 +72,7 @@ func (sdk mfSDK) UpdateUserPolicy(p Policy, token string) errors.SDKError {
url := fmt.Sprintf("%s/%s", sdk.usersURL, policyEndpoint)
_, _, sdkerr := sdk.processRequest(http.MethodPut, url, token, string(CTJSON), data, http.StatusNoContent)
_, _, sdkerr := sdk.processRequest(http.MethodPut, url, token, data, nil, http.StatusNoContent)
if sdkerr != nil {
return sdkerr
}
@ -84,7 +86,7 @@ func (sdk mfSDK) ListUserPolicies(pm PageMetadata, token string) (PolicyPage, er
return PolicyPage{}, errors.NewSDKError(err)
}
_, body, sdkerr := sdk.processRequest(http.MethodGet, url, token, string(CTJSON), nil, http.StatusOK)
_, body, sdkerr := sdk.processRequest(http.MethodGet, url, token, nil, nil, http.StatusOK)
if sdkerr != nil {
return PolicyPage{}, sdkerr
}
@ -99,7 +101,8 @@ func (sdk mfSDK) ListUserPolicies(pm PageMetadata, token string) (PolicyPage, er
func (sdk mfSDK) DeleteUserPolicy(p Policy, token string) errors.SDKError {
url := fmt.Sprintf("%s/%s/%s/%s", sdk.usersURL, policyEndpoint, p.Subject, p.Object)
_, _, sdkerr := sdk.processRequest(http.MethodDelete, url, token, string(CTJSON), nil, http.StatusNoContent)
_, _, sdkerr := sdk.processRequest(http.MethodDelete, url, token, nil, nil, http.StatusNoContent)
return sdkerr
}
@ -111,7 +114,8 @@ func (sdk mfSDK) CreateThingPolicy(p Policy, token string) errors.SDKError {
}
url := fmt.Sprintf("%s/%s", sdk.thingsURL, policyEndpoint)
_, _, sdkerr := sdk.processRequest(http.MethodPost, url, token, string(CTJSON), data, http.StatusCreated)
_, _, sdkerr := sdk.processRequest(http.MethodPost, url, token, data, nil, http.StatusCreated)
if sdkerr != nil {
return sdkerr
}
@ -127,7 +131,7 @@ func (sdk mfSDK) UpdateThingPolicy(p Policy, token string) errors.SDKError {
url := fmt.Sprintf("%s/%s", sdk.thingsURL, policyEndpoint)
_, _, sdkerr := sdk.processRequest(http.MethodPut, url, token, string(CTJSON), data, http.StatusNoContent)
_, _, sdkerr := sdk.processRequest(http.MethodPut, url, token, data, nil, http.StatusNoContent)
if sdkerr != nil {
return sdkerr
}
@ -141,7 +145,7 @@ func (sdk mfSDK) ListThingPolicies(pm PageMetadata, token string) (PolicyPage, e
return PolicyPage{}, errors.NewSDKError(err)
}
_, body, sdkerr := sdk.processRequest(http.MethodGet, url, token, string(CTJSON), nil, http.StatusOK)
_, body, sdkerr := sdk.processRequest(http.MethodGet, url, token, nil, nil, http.StatusOK)
if sdkerr != nil {
return PolicyPage{}, sdkerr
}
@ -156,7 +160,8 @@ func (sdk mfSDK) ListThingPolicies(pm PageMetadata, token string) (PolicyPage, e
func (sdk mfSDK) DeleteThingPolicy(p Policy, token string) errors.SDKError {
url := fmt.Sprintf("%s/%s/%s/%s", sdk.thingsURL, policyEndpoint, p.Subject, p.Object)
_, _, sdkerr := sdk.processRequest(http.MethodDelete, url, token, string(CTJSON), nil, http.StatusNoContent)
_, _, sdkerr := sdk.processRequest(http.MethodDelete, url, token, nil, nil, http.StatusNoContent)
return sdkerr
}
@ -187,7 +192,7 @@ func (sdk mfSDK) Connect(connIDs ConnectionIDs, token string) errors.SDKError {
url := fmt.Sprintf("%s/%s", sdk.thingsURL, connectEndpoint)
_, _, sdkerr := sdk.processRequest(http.MethodPost, url, token, string(CTJSON), data, http.StatusOK)
_, _, sdkerr := sdk.processRequest(http.MethodPost, url, token, data, nil, http.StatusOK)
return sdkerr
}
@ -199,7 +204,8 @@ func (sdk mfSDK) Disconnect(connIDs ConnectionIDs, token string) errors.SDKError
}
url := fmt.Sprintf("%s/%s", sdk.thingsURL, disconnectEndpoint)
_, _, sdkerr := sdk.processRequest(http.MethodPost, url, token, string(CTJSON), data, http.StatusNoContent)
_, _, sdkerr := sdk.processRequest(http.MethodPost, url, token, data, nil, http.StatusNoContent)
return sdkerr
}
@ -229,7 +235,8 @@ func (sdk mfSDK) AuthorizeThing(accessReq AccessRequest, token string) (bool, st
}
url := fmt.Sprintf("%s/%s/%s/%s", sdk.thingsURL, channelsEndpoint, accessReq.Object, accessEndpoint)
_, body, sdkerr := sdk.processRequest(http.MethodPost, url, token, string(CTJSON), data, http.StatusOK)
_, body, sdkerr := sdk.processRequest(http.MethodPost, url, token, data, nil, http.StatusOK)
if sdkerr != nil {
return false, "", sdkerr
}

View File

@ -9,6 +9,17 @@ type updateClientSecretReq struct {
NewSecret string `json:"new_secret,omitempty"`
}
type resetPasswordRequestreq struct {
Email string `json:"email"`
Host string `json:"host"`
}
type resetPasswordReq struct {
Token string `json:"token"`
Password string `json:"password"`
ConfPass string `json:"confirm_password"`
}
type updateThingSecretReq struct {
Secret string `json:"secret,omitempty"`
}

View File

@ -200,6 +200,20 @@ type SDK interface {
// fmt.Println(user)
UpdateUserOwner(user User, token string) (User, errors.SDKError)
// ResetPasswordRequest sends a password request email to a user.
//
// example:
// err := sdk.ResetPasswordRequest("example@email.com")
// fmt.Println(err)
ResetPasswordRequest(email string) errors.SDKError
// ResetPassword changes a user's password to the one passed in the argument.
//
// example:
// err := sdk.ResetPassword("password","password","token")
// fmt.Println(err)
ResetPassword(password, confPass, token string) errors.SDKError
// UpdatePassword updates user password.
//
// example:
@ -960,6 +974,7 @@ type mfSDK struct {
readerURL string
thingsURL string
usersURL string
HostURL string
msgContentType ContentType
client *http.Client
@ -973,6 +988,7 @@ type Config struct {
ReaderURL string
ThingsURL string
UsersURL string
HostURL string
MsgContentType ContentType
TLSVerification bool
@ -987,6 +1003,7 @@ func NewSDK(conf Config) SDK {
readerURL: conf.ReaderURL,
thingsURL: conf.ThingsURL,
usersURL: conf.UsersURL,
HostURL: conf.HostURL,
msgContentType: conf.MsgContentType,
client: &http.Client{
@ -1001,21 +1018,26 @@ func NewSDK(conf Config) SDK {
// processRequest creates and send a new HTTP request, and checks for errors in the HTTP response.
// It then returns the response headers, the response body, and the associated error(s) (if any).
func (sdk mfSDK) processRequest(method, url, token, contentType string, data []byte, expectedRespCodes ...int) (http.Header, []byte, errors.SDKError) {
func (sdk mfSDK) processRequest(method, url, token string, data []byte, headers map[string]string, expectedRespCodes ...int) (http.Header, []byte, errors.SDKError) {
req, err := http.NewRequest(method, url, bytes.NewReader(data))
if err != nil {
return make(http.Header), []byte{}, errors.NewSDKError(err)
}
// Sets a default value for the Content-Type.
// Overridden if Content-Type is passed in the headers arguments.
req.Header.Add("Content-Type", string(CTJSON))
for key, value := range headers {
req.Header.Add(key, value)
}
if token != "" {
if !strings.Contains(token, ThingPrefix) {
token = BearerPrefix + token
}
req.Header.Set("Authorization", token)
}
if contentType != "" {
req.Header.Add("Content-Type", contentType)
}
resp, err := sdk.client.Do(req)
if err != nil {

View File

@ -37,7 +37,7 @@ func (sdk mfSDK) CreateThing(thing Thing, token string) (Thing, errors.SDKError)
url := fmt.Sprintf("%s/%s", sdk.thingsURL, thingsEndpoint)
_, body, sdkerr := sdk.processRequest(http.MethodPost, url, token, string(CTJSON), data, http.StatusCreated)
_, body, sdkerr := sdk.processRequest(http.MethodPost, url, token, data, nil, http.StatusCreated)
if sdkerr != nil {
return Thing{}, sdkerr
}
@ -58,7 +58,7 @@ func (sdk mfSDK) CreateThings(things []Thing, token string) ([]Thing, errors.SDK
url := fmt.Sprintf("%s/%s/%s", sdk.thingsURL, thingsEndpoint, "bulk")
_, body, sdkerr := sdk.processRequest(http.MethodPost, url, token, string(CTJSON), data, http.StatusOK)
_, body, sdkerr := sdk.processRequest(http.MethodPost, url, token, data, nil, http.StatusOK)
if sdkerr != nil {
return []Thing{}, sdkerr
}
@ -77,7 +77,7 @@ func (sdk mfSDK) Things(pm PageMetadata, token string) (ThingsPage, errors.SDKEr
return ThingsPage{}, errors.NewSDKError(err)
}
_, body, sdkerr := sdk.processRequest(http.MethodGet, url, token, string(CTJSON), nil, http.StatusOK)
_, body, sdkerr := sdk.processRequest(http.MethodGet, url, token, nil, nil, http.StatusOK)
if sdkerr != nil {
return ThingsPage{}, sdkerr
}
@ -96,7 +96,7 @@ func (sdk mfSDK) ThingsByChannel(chanID string, pm PageMetadata, token string) (
return ThingsPage{}, errors.NewSDKError(err)
}
_, body, sdkerr := sdk.processRequest(http.MethodGet, url, token, string(CTJSON), nil, http.StatusOK)
_, body, sdkerr := sdk.processRequest(http.MethodGet, url, token, nil, nil, http.StatusOK)
if sdkerr != nil {
return ThingsPage{}, sdkerr
}
@ -112,7 +112,7 @@ func (sdk mfSDK) ThingsByChannel(chanID string, pm PageMetadata, token string) (
func (sdk mfSDK) Thing(id, token string) (Thing, errors.SDKError) {
url := fmt.Sprintf("%s/%s/%s", sdk.thingsURL, thingsEndpoint, id)
_, body, sdkerr := sdk.processRequest(http.MethodGet, url, token, string(CTJSON), nil, http.StatusOK)
_, body, sdkerr := sdk.processRequest(http.MethodGet, url, token, nil, nil, http.StatusOK)
if sdkerr != nil {
return Thing{}, sdkerr
}
@ -133,7 +133,7 @@ func (sdk mfSDK) UpdateThing(t Thing, token string) (Thing, errors.SDKError) {
url := fmt.Sprintf("%s/%s/%s", sdk.thingsURL, thingsEndpoint, t.ID)
_, body, sdkerr := sdk.processRequest(http.MethodPatch, url, token, string(CTJSON), data, http.StatusOK)
_, body, sdkerr := sdk.processRequest(http.MethodPatch, url, token, data, nil, http.StatusOK)
if sdkerr != nil {
return Thing{}, sdkerr
}
@ -154,7 +154,7 @@ func (sdk mfSDK) UpdateThingTags(t Thing, token string) (Thing, errors.SDKError)
url := fmt.Sprintf("%s/%s/%s/tags", sdk.thingsURL, thingsEndpoint, t.ID)
_, body, sdkerr := sdk.processRequest(http.MethodPatch, url, token, string(CTJSON), data, http.StatusOK)
_, body, sdkerr := sdk.processRequest(http.MethodPatch, url, token, data, nil, http.StatusOK)
if sdkerr != nil {
return Thing{}, sdkerr
}
@ -177,7 +177,7 @@ func (sdk mfSDK) UpdateThingSecret(id, secret, token string) (Thing, errors.SDKE
url := fmt.Sprintf("%s/%s/%s/secret", sdk.thingsURL, thingsEndpoint, id)
_, body, sdkerr := sdk.processRequest(http.MethodPatch, url, token, string(CTJSON), data, http.StatusOK)
_, body, sdkerr := sdk.processRequest(http.MethodPatch, url, token, data, nil, http.StatusOK)
if sdkerr != nil {
return Thing{}, sdkerr
}
@ -198,7 +198,7 @@ func (sdk mfSDK) UpdateThingOwner(t Thing, token string) (Thing, errors.SDKError
url := fmt.Sprintf("%s/%s/%s/owner", sdk.thingsURL, thingsEndpoint, t.ID)
_, body, sdkerr := sdk.processRequest(http.MethodPatch, url, token, string(CTJSON), data, http.StatusOK)
_, body, sdkerr := sdk.processRequest(http.MethodPatch, url, token, data, nil, http.StatusOK)
if sdkerr != nil {
return Thing{}, sdkerr
}
@ -221,7 +221,8 @@ func (sdk mfSDK) DisableThing(id, token string) (Thing, errors.SDKError) {
func (sdk mfSDK) changeThingStatus(id, status, token string) (Thing, errors.SDKError) {
url := fmt.Sprintf("%s/%s/%s/%s", sdk.thingsURL, thingsEndpoint, id, status)
_, body, sdkerr := sdk.processRequest(http.MethodPost, url, token, string(CTJSON), nil, http.StatusOK)
_, body, sdkerr := sdk.processRequest(http.MethodPost, url, token, nil, nil, http.StatusOK)
if sdkerr != nil {
return Thing{}, sdkerr
}
@ -236,7 +237,8 @@ func (sdk mfSDK) changeThingStatus(id, status, token string) (Thing, errors.SDKE
func (sdk mfSDK) IdentifyThing(key string) (string, errors.SDKError) {
url := fmt.Sprintf("%s/%s", sdk.thingsURL, identifyEndpoint)
_, body, sdkerr := sdk.processRequest(http.MethodPost, url, ThingPrefix+key, string(CTJSON), nil, http.StatusOK)
_, body, sdkerr := sdk.processRequest(http.MethodPost, url, ThingPrefix+key, nil, nil, http.StatusOK)
if sdkerr != nil {
return "", sdkerr
}

View File

@ -28,7 +28,7 @@ func (sdk mfSDK) CreateToken(user User) (Token, errors.SDKError) {
url := fmt.Sprintf("%s/%s/%s", sdk.usersURL, usersEndpoint, issueTokenEndpoint)
_, body, sdkerr := sdk.processRequest(http.MethodPost, url, "", string(CTJSON), data, http.StatusCreated)
_, body, sdkerr := sdk.processRequest(http.MethodPost, url, "", data, nil, http.StatusCreated)
if sdkerr != nil {
return Token{}, sdkerr
}
@ -43,7 +43,7 @@ func (sdk mfSDK) CreateToken(user User) (Token, errors.SDKError) {
func (sdk mfSDK) RefreshToken(token string) (Token, errors.SDKError) {
url := fmt.Sprintf("%s/%s/%s", sdk.usersURL, usersEndpoint, refreshTokenEndpoint)
_, body, sdkerr := sdk.processRequest(http.MethodPost, url, token, string(CTJSON), []byte{}, http.StatusCreated)
_, body, sdkerr := sdk.processRequest(http.MethodPost, url, token, []byte{}, nil, http.StatusCreated)
if sdkerr != nil {
return Token{}, sdkerr
}

View File

@ -10,12 +10,13 @@ import (
)
const (
usersEndpoint = "users"
enableEndpoint = "enable"
disableEndpoint = "disable"
issueTokenEndpoint = "tokens/issue"
refreshTokenEndpoint = "tokens/refresh"
membersEndpoint = "members"
usersEndpoint = "users"
enableEndpoint = "enable"
disableEndpoint = "disable"
issueTokenEndpoint = "tokens/issue"
refreshTokenEndpoint = "tokens/refresh"
membersEndpoint = "members"
PasswordResetEndpoint = "password"
)
// User represents mainflux user its credentials.
@ -40,7 +41,7 @@ func (sdk mfSDK) CreateUser(user User, token string) (User, errors.SDKError) {
url := fmt.Sprintf("%s/%s", sdk.usersURL, usersEndpoint)
_, body, sdkerr := sdk.processRequest(http.MethodPost, url, token, string(CTJSON), data, http.StatusCreated)
_, body, sdkerr := sdk.processRequest(http.MethodPost, url, token, data, nil, http.StatusCreated)
if sdkerr != nil {
return User{}, sdkerr
}
@ -59,7 +60,7 @@ func (sdk mfSDK) Users(pm PageMetadata, token string) (UsersPage, errors.SDKErro
return UsersPage{}, errors.NewSDKError(err)
}
_, body, sdkerr := sdk.processRequest(http.MethodGet, url, token, string(CTJSON), nil, http.StatusOK)
_, body, sdkerr := sdk.processRequest(http.MethodGet, url, token, nil, nil, http.StatusOK)
if sdkerr != nil {
return UsersPage{}, sdkerr
}
@ -78,7 +79,7 @@ func (sdk mfSDK) Members(groupID string, meta PageMetadata, token string) (Membe
return MembersPage{}, errors.NewSDKError(err)
}
_, body, sdkerr := sdk.processRequest(http.MethodGet, url, token, string(CTJSON), nil, http.StatusOK)
_, body, sdkerr := sdk.processRequest(http.MethodGet, url, token, nil, nil, http.StatusOK)
if sdkerr != nil {
return MembersPage{}, sdkerr
}
@ -94,7 +95,7 @@ func (sdk mfSDK) Members(groupID string, meta PageMetadata, token string) (Membe
func (sdk mfSDK) User(id, token string) (User, errors.SDKError) {
url := fmt.Sprintf("%s/%s/%s", sdk.usersURL, usersEndpoint, id)
_, body, sdkerr := sdk.processRequest(http.MethodGet, url, token, string(CTJSON), nil, http.StatusOK)
_, body, sdkerr := sdk.processRequest(http.MethodGet, url, token, nil, nil, http.StatusOK)
if sdkerr != nil {
return User{}, sdkerr
}
@ -110,7 +111,7 @@ func (sdk mfSDK) User(id, token string) (User, errors.SDKError) {
func (sdk mfSDK) UserProfile(token string) (User, errors.SDKError) {
url := fmt.Sprintf("%s/%s/profile", sdk.usersURL, usersEndpoint)
_, body, sdkerr := sdk.processRequest(http.MethodGet, url, token, string(CTJSON), nil, http.StatusOK)
_, body, sdkerr := sdk.processRequest(http.MethodGet, url, token, nil, nil, http.StatusOK)
if sdkerr != nil {
return User{}, sdkerr
}
@ -131,7 +132,7 @@ func (sdk mfSDK) UpdateUser(user User, token string) (User, errors.SDKError) {
url := fmt.Sprintf("%s/%s/%s", sdk.usersURL, usersEndpoint, user.ID)
_, body, sdkerr := sdk.processRequest(http.MethodPatch, url, token, string(CTJSON), data, http.StatusOK)
_, body, sdkerr := sdk.processRequest(http.MethodPatch, url, token, data, nil, http.StatusOK)
if sdkerr != nil {
return User{}, sdkerr
}
@ -152,7 +153,7 @@ func (sdk mfSDK) UpdateUserTags(user User, token string) (User, errors.SDKError)
url := fmt.Sprintf("%s/%s/%s/tags", sdk.usersURL, usersEndpoint, user.ID)
_, body, sdkerr := sdk.processRequest(http.MethodPatch, url, token, string(CTJSON), data, http.StatusOK)
_, body, sdkerr := sdk.processRequest(http.MethodPatch, url, token, data, nil, http.StatusOK)
if sdkerr != nil {
return User{}, sdkerr
}
@ -175,7 +176,7 @@ func (sdk mfSDK) UpdateUserIdentity(user User, token string) (User, errors.SDKEr
url := fmt.Sprintf("%s/%s/%s/identity", sdk.usersURL, usersEndpoint, user.ID)
_, body, sdkerr := sdk.processRequest(http.MethodPatch, url, token, string(CTJSON), data, http.StatusOK)
_, body, sdkerr := sdk.processRequest(http.MethodPatch, url, token, data, nil, http.StatusOK)
if sdkerr != nil {
return User{}, sdkerr
}
@ -188,6 +189,37 @@ func (sdk mfSDK) UpdateUserIdentity(user User, token string) (User, errors.SDKEr
return user, nil
}
func (sdk mfSDK) ResetPasswordRequest(email string) errors.SDKError {
var rpr = resetPasswordRequestreq{Email: email}
data, err := json.Marshal(rpr)
if err != nil {
return errors.NewSDKError(err)
}
url := fmt.Sprintf("%s/%s/reset-request", sdk.usersURL, PasswordResetEndpoint)
var header = make(map[string]string)
header["Referer"] = sdk.HostURL
_, _, sdkerr := sdk.processRequest(http.MethodPost, url, "", data, header, http.StatusCreated)
return sdkerr
}
func (sdk mfSDK) ResetPassword(password, confPass, token string) errors.SDKError {
var rpr = resetPasswordReq{Token: token, Password: password, ConfPass: confPass}
data, err := json.Marshal(rpr)
if err != nil {
return errors.NewSDKError(err)
}
url := fmt.Sprintf("%s/%s/reset", sdk.usersURL, PasswordResetEndpoint)
_, _, sdkerr := sdk.processRequest(http.MethodPut, url, "", data, nil, http.StatusCreated)
return sdkerr
}
func (sdk mfSDK) UpdatePassword(oldPass, newPass, token string) (User, errors.SDKError) {
var ucsr = updateClientSecretReq{OldSecret: oldPass, NewSecret: newPass}
@ -198,7 +230,7 @@ func (sdk mfSDK) UpdatePassword(oldPass, newPass, token string) (User, errors.SD
url := fmt.Sprintf("%s/%s/secret", sdk.usersURL, usersEndpoint)
_, body, sdkerr := sdk.processRequest(http.MethodPatch, url, token, string(CTJSON), data, http.StatusOK)
_, body, sdkerr := sdk.processRequest(http.MethodPatch, url, token, data, nil, http.StatusOK)
if sdkerr != nil {
return User{}, sdkerr
}
@ -219,7 +251,7 @@ func (sdk mfSDK) UpdateUserOwner(user User, token string) (User, errors.SDKError
url := fmt.Sprintf("%s/%s/%s/owner", sdk.usersURL, usersEndpoint, user.ID)
_, body, sdkerr := sdk.processRequest(http.MethodPatch, url, token, string(CTJSON), data, http.StatusOK)
_, body, sdkerr := sdk.processRequest(http.MethodPatch, url, token, data, nil, http.StatusOK)
if sdkerr != nil {
return User{}, sdkerr
}
@ -242,7 +274,8 @@ func (sdk mfSDK) DisableUser(id, token string) (User, errors.SDKError) {
func (sdk mfSDK) changeClientStatus(token, id, status string) (User, errors.SDKError) {
url := fmt.Sprintf("%s/%s/%s/%s", sdk.usersURL, usersEndpoint, id, status)
_, body, sdkerr := sdk.processRequest(http.MethodPost, url, token, string(CTJSON), nil, http.StatusOK)
_, body, sdkerr := sdk.processRequest(http.MethodPost, url, token, nil, nil, http.StatusOK)
if sdkerr != nil {
return User{}, sdkerr
}