2019-10-07 08:14:47 -06:00
// Copyright (c) Mainflux
2018-08-26 13:15:48 +02:00
// SPDX-License-Identifier: Apache-2.0
2018-08-16 13:41:27 +02:00
package cli
2018-07-11 13:53:37 +02:00
import (
2018-10-24 11:21:03 +02:00
"encoding/json"
2020-06-03 15:16:19 +02:00
mfxsdk "github.com/mainflux/mainflux/pkg/sdk/go"
2018-07-11 13:53:37 +02:00
"github.com/spf13/cobra"
)
var cmdThings = [ ] cobra . Command {
2022-02-11 13:22:57 +01:00
{
Use : "create <JSON_thing> <user_auth_token>" ,
Short : "Create thing" ,
2018-07-11 13:53:37 +02:00
Long : ` Create new thing, generate his UUID and store it ` ,
Run : func ( cmd * cobra . Command , args [ ] string ) {
2021-01-28 11:29:32 +01:00
if len ( args ) != 2 {
2022-02-11 13:22:57 +01:00
logUsage ( cmd . Use )
2018-10-14 16:44:21 +02:00
return
}
2018-10-24 11:21:03 +02:00
var thing mfxsdk . Thing
if err := json . Unmarshal ( [ ] byte ( args [ 0 ] ) , & thing ) ; err != nil {
logError ( err )
return
}
2021-01-28 11:29:32 +01:00
id , err := sdk . CreateThing ( thing , args [ 1 ] )
2018-10-14 16:44:21 +02:00
if err != nil {
logError ( err )
2018-07-11 13:53:37 +02:00
return
}
2018-10-24 11:21:03 +02:00
2018-12-16 20:01:37 +01:00
logCreated ( id )
2018-07-11 13:53:37 +02:00
} ,
} ,
2022-02-11 13:22:57 +01:00
{
Use : "get [all | <thing_id>] <user_auth_token>" ,
Short : "Get things" ,
2022-06-17 18:32:23 +03:00
Long : ` Get all things or get thing by id . Things can be filtered by name or metadata
all - lists all things
< thing_id > - shows thing with provided < thing_id > ` ,
2018-07-11 13:53:37 +02:00
Run : func ( cmd * cobra . Command , args [ ] string ) {
if len ( args ) != 2 {
2022-02-11 13:22:57 +01:00
logUsage ( cmd . Use )
2018-07-11 13:53:37 +02:00
return
}
2022-06-17 18:32:23 +03:00
metadata , err := convertMetadata ( Metadata )
if err != nil {
logError ( err )
return
}
pageMetadata := mfxsdk . PageMetadata {
Name : "" ,
Offset : uint64 ( Offset ) ,
Limit : uint64 ( Limit ) ,
Metadata : metadata ,
}
MF-1718 - Use static code analysis in CI (#1729)
* things, twins, and logger lint fixed
Signed-off-by: aryan <aryangodara03@gmail.com>
* all services updated, auth jwt not working, ineffectual assignment issue
Signed-off-by: aryan <aryangodara03@gmail.com>
* handle error from grpc server in endpointtest
Signed-off-by: aryan <aryangodara03@gmail.com>
* temp commit, auth/jwt needs to be resolved
Signed-off-by: aryan <aryangodara03@gmail.com>
* revert back to jwt v4 temporarily
Signed-off-by: aryan <aryangodara03@gmail.com>
* updated jwt tokenizer
Signed-off-by: aryan <aryangodara03@gmail.com>
* resolve EOF error for httptest requests
Signed-off-by: aryan <aryangodara03@gmail.com>
* fix auth jwt, update to registeredclaims
Signed-off-by: aryan <aryangodara03@gmail.com>
* fix ineffective assignment, auth/api/grpc endpoint failing
Signed-off-by: aryan <aryangodara03@gmail.com>
* temp commit, remove later
Signed-off-by: aryan <aryangodara03@gmail.com>
* fix grpc server setup
Signed-off-by: aryan <aryangodara03@gmail.com>
* resolve golangci tests, remove debug statements
Signed-off-by: aryan <aryangodara03@gmail.com>
* update golangci version and modify linters used
Signed-off-by: aryan <aryangodara03@gmail.com>
* fix failing tests
Signed-off-by: aryan <aryangodara03@gmail.com>
* fix grpc server for setup tests
Signed-off-by: aryan <aryangodara03@gmail.com>
* fix logging and errors inlined
Signed-off-by: aryan <aryangodara03@gmail.com>
* fix remarks, update grpc setup_test
Signed-off-by: aryan <aryangodara03@gmail.com>
* fix setup_test
Signed-off-by: aryan <aryangodara03@gmail.com>
* update setup_test grpc
Signed-off-by: aryan <aryangodara03@gmail.com>
* fix data race
Signed-off-by: aryan <aryangodara03@gmail.com>
* update setup_test grpc
Signed-off-by: aryan <aryangodara03@gmail.com>
* fix grpc setup down to single simple function
Signed-off-by: aryan <aryangodara03@gmail.com>
* fix linting issues
Signed-off-by: aryan <aryangodara03@gmail.com>
* resolve pr comments
Signed-off-by: aryan <aryangodara03@gmail.com>
* fix tests, handle returned errors, go mod tidy vendor
Signed-off-by: aryan <aryangodara03@gmail.com>
* fix errors from new linters
Signed-off-by: aryan <aryangodara03@gmail.com>
---------
Signed-off-by: aryan <aryangodara03@gmail.com>
2023-04-22 08:14:35 -07:00
if args [ 0 ] == all {
2023-01-05 19:20:05 +03:00
l , err := sdk . Things ( pageMetadata , args [ 1 ] )
2018-10-14 16:44:21 +02:00
if err != nil {
logError ( err )
return
}
2018-12-16 20:01:37 +01:00
logJSON ( l )
2018-07-11 13:53:37 +02:00
return
}
2018-10-14 16:44:21 +02:00
t , err := sdk . Thing ( args [ 0 ] , args [ 1 ] )
if err != nil {
logError ( err )
return
}
2018-10-24 11:21:03 +02:00
2018-12-16 20:01:37 +01:00
logJSON ( t )
2018-07-11 13:53:37 +02:00
} ,
} ,
2022-02-11 13:22:57 +01:00
{
Use : "delete <thing_id> <user_auth_token>" ,
Short : "Delete thing" ,
2018-07-11 13:53:37 +02:00
Long : ` Removes thing from database ` ,
Run : func ( cmd * cobra . Command , args [ ] string ) {
if len ( args ) != 2 {
2022-02-11 13:22:57 +01:00
logUsage ( cmd . Use )
2018-10-14 16:44:21 +02:00
return
}
2018-10-24 11:21:03 +02:00
2018-10-14 16:44:21 +02:00
if err := sdk . DeleteThing ( args [ 0 ] , args [ 1 ] ) ; err != nil {
logError ( err )
2018-07-11 13:53:37 +02:00
return
}
2018-10-24 11:21:03 +02:00
2018-10-14 16:44:21 +02:00
logOK ( )
2018-07-11 13:53:37 +02:00
} ,
} ,
2022-06-24 17:31:12 +03:00
{
Use : "identify <thing_key>" ,
Short : "Identify thing" ,
Long : "Validates thing's key and returns its ID" ,
Run : func ( cmd * cobra . Command , args [ ] string ) {
if len ( args ) != 1 {
logUsage ( cmd . Use )
return
}
i , err := sdk . IdentifyThing ( args [ 0 ] )
if err != nil {
logError ( err )
return
}
logJSON ( i )
} ,
} ,
2022-02-11 13:22:57 +01:00
{
2023-05-25 06:02:46 +08:00
Use : "update [<JSON_string> | key <thing_id> <thing_key>] <user_auth_token>" ,
2022-02-11 13:22:57 +01:00
Short : "Update thing" ,
2018-07-11 13:53:37 +02:00
Long : ` Update thing record ` ,
Run : func ( cmd * cobra . Command , args [ ] string ) {
2023-05-25 06:02:46 +08:00
if len ( args ) < 2 {
2022-02-11 13:22:57 +01:00
logUsage ( cmd . Use )
2018-07-11 13:53:37 +02:00
return
}
2023-05-25 06:02:46 +08:00
if args [ 0 ] == "key" {
if err := sdk . UpdateThingKey ( args [ 1 ] , args [ 2 ] , args [ 3 ] ) ; err != nil {
logError ( err )
return
}
2018-10-24 11:21:03 +02:00
2023-05-25 06:02:46 +08:00
logOK ( )
return
}
2018-10-24 11:21:03 +02:00
var thing mfxsdk . Thing
if err := json . Unmarshal ( [ ] byte ( args [ 0 ] ) , & thing ) ; err != nil {
logError ( err )
return
}
if err := sdk . UpdateThing ( thing , args [ 1 ] ) ; err != nil {
2018-10-14 16:44:21 +02:00
logError ( err )
return
}
2018-10-24 11:21:03 +02:00
2018-10-14 16:44:21 +02:00
logOK ( )
2018-07-11 13:53:37 +02:00
} ,
} ,
2023-05-25 06:02:46 +08:00
{
Use : "share <thing_id> <user_id> <policies> <user_auth_token>" ,
Short : "share thing" ,
Long : ` Shares a thing with user identified .
policies - ' [ "policy1" , ... ] ' ` ,
Run : func ( cmd * cobra . Command , args [ ] string ) {
if len ( args ) != 4 {
logUsage ( cmd . Use )
return
}
var policies [ ] string
if err := json . Unmarshal ( [ ] byte ( args [ 2 ] ) , & policies ) ; err != nil {
logError ( err )
return
}
if err := sdk . ShareThing ( args [ 0 ] , args [ 1 ] , policies , args [ 2 ] ) ; err != nil {
logError ( err )
return
}
logOK ( )
} ,
} ,
2022-02-11 13:22:57 +01:00
{
Use : "connect <thing_id> <channel_id> <user_auth_token>" ,
Short : "Connect thing" ,
2018-07-11 13:53:37 +02:00
Long : ` Connect thing to the channel ` ,
Run : func ( cmd * cobra . Command , args [ ] string ) {
if len ( args ) != 3 {
2022-02-11 13:22:57 +01:00
logUsage ( cmd . Use )
2018-10-14 16:44:21 +02:00
return
}
2018-10-24 11:21:03 +02:00
2019-11-21 04:29:37 -07:00
connIDs := mfxsdk . ConnectionIDs {
2020-03-03 10:58:30 +01:00
ChannelIDs : [ ] string { args [ 1 ] } ,
ThingIDs : [ ] string { args [ 0 ] } ,
2019-11-21 04:29:37 -07:00
}
if err := sdk . Connect ( connIDs , args [ 2 ] ) ; err != nil {
2018-10-14 16:44:21 +02:00
logError ( err )
2018-07-11 13:53:37 +02:00
return
}
2018-10-24 11:21:03 +02:00
2018-10-14 16:44:21 +02:00
logOK ( )
2018-07-11 13:53:37 +02:00
} ,
} ,
2022-02-11 13:22:57 +01:00
{
Use : "disconnect <thing_id> <channel_id> <user_auth_token>" ,
Short : "Disconnect thing" ,
2018-07-11 13:53:37 +02:00
Long : ` Disconnect thing to the channel ` ,
Run : func ( cmd * cobra . Command , args [ ] string ) {
if len ( args ) != 3 {
2022-02-11 13:22:57 +01:00
logUsage ( cmd . Use )
2018-07-11 13:53:37 +02:00
return
}
2018-10-24 11:21:03 +02:00
2018-10-14 16:44:21 +02:00
if err := sdk . DisconnectThing ( args [ 0 ] , args [ 1 ] , args [ 2 ] ) ; err != nil {
logError ( err )
return
}
2018-10-24 11:21:03 +02:00
2018-10-14 16:44:21 +02:00
logOK ( )
2018-07-11 13:53:37 +02:00
} ,
} ,
2022-02-11 13:22:57 +01:00
{
Use : "connections <thing_id> <user_auth_token>" ,
Short : "Connected list" ,
2019-01-10 21:42:31 +01:00
Long : ` List of Channels connected to Thing ` ,
Run : func ( cmd * cobra . Command , args [ ] string ) {
if len ( args ) != 2 {
2022-02-11 13:22:57 +01:00
logUsage ( cmd . Use )
2019-01-10 21:42:31 +01:00
return
}
2023-01-05 19:20:05 +03:00
pm := mfxsdk . PageMetadata {
Offset : uint64 ( Offset ) ,
Limit : uint64 ( Limit ) ,
2023-01-11 19:11:36 +03:00
Disconnected : false ,
2023-01-05 19:20:05 +03:00
}
cl , err := sdk . ChannelsByThing ( args [ 0 ] , pm , args [ 1 ] )
2020-07-26 22:47:15 +02:00
if err != nil {
logError ( err )
return
}
logJSON ( cl )
} ,
} ,
2022-02-11 13:22:57 +01:00
{
Use : "not-connected <thing_id> <user_auth_token>" ,
Short : "Not-connected list" ,
2020-07-26 22:47:15 +02:00
Long : ` List of Channels not connected to a Thing ` ,
Run : func ( cmd * cobra . Command , args [ ] string ) {
if len ( args ) != 2 {
2022-02-11 13:22:57 +01:00
logUsage ( cmd . Use )
2020-07-26 22:47:15 +02:00
return
}
2023-01-05 19:20:05 +03:00
pm := mfxsdk . PageMetadata {
Offset : uint64 ( Offset ) ,
Limit : uint64 ( Limit ) ,
2023-01-11 19:11:36 +03:00
Disconnected : true ,
2023-01-05 19:20:05 +03:00
}
cl , err := sdk . ChannelsByThing ( args [ 0 ] , pm , args [ 1 ] )
2019-01-10 21:42:31 +01:00
if err != nil {
logError ( err )
return
}
logJSON ( cl )
} ,
} ,
2018-07-11 13:53:37 +02:00
}
2018-10-24 11:21:03 +02:00
// NewThingsCmd returns things command.
2018-07-11 13:53:37 +02:00
func NewThingsCmd ( ) * cobra . Command {
cmd := cobra . Command {
2023-01-05 19:20:05 +03:00
Use : "things [create | get | update | delete | connect | disconnect | connections | not-connected]" ,
2019-02-01 23:17:09 +01:00
Short : "Things management" ,
2023-01-05 19:20:05 +03:00
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 ` ,
2018-07-11 13:53:37 +02:00
}
2018-10-14 16:44:21 +02:00
for i := range cmdThings {
2018-07-11 13:53:37 +02:00
cmd . AddCommand ( & cmdThings [ i ] )
}
return & cmd
}