1
0
mirror of https://github.com/mainflux/mainflux.git synced 2025-04-26 13:48:53 +08:00
Mainflux.mainflux/cli/bootstrap.go
Washington Kigani Kamadi 0f0d761a1b
MF-1340 - Add CLI config TOML file (#1858)
* Add config

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Change key names

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Add config file path

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Add config file path

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Configure TOML parsing

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Add cli config command

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Remove debug log

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Use snake case

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Change from interactive command

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* use map for keys

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Add cli logger level

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Use mainflux logger

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Fix cli

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Remove unnecessary comments

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Fix cli error handling

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Remove fmt

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Update config

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Fix cli

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Fix cli

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Fix cli

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Fix cli

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Modify CLI

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Fix errors

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Fix cli

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Fix errors

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Remove user token

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Remove unused variables

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Add empty line

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Add url parsing

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* TEsts

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Make config path configurable

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Fix ci

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Remove empty toml

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Change url key identification

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Remove url parsing functions

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Handle parse error

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Handle url error

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Add marshal

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Update config

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Fix cli

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Handle file error

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Handle file error

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Modify url parsing

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Add usertoken

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Fix user token

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Fix errors

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Fix errors

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Remove string init

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Fix error

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Fix errors

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Remove config.toml from root

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Add empty line to config.toml

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Add empty line to config.toml

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Inline error handling

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Remove unnecessary type conversion

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Fix error handling

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Fix error handling

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

* Remove dynamic filters

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>

---------

Signed-off-by: WashingtonKK <washingtonkigan@gmail.com>
2023-08-08 12:01:59 +02:00

218 lines
5.0 KiB
Go

// Copyright (c) Mainflux
// SPDX-License-Identifier: Apache-2.0
package cli
import (
"encoding/json"
mfxsdk "github.com/mainflux/mainflux/pkg/sdk/go"
"github.com/spf13/cobra"
)
var cmdBootstrap = []cobra.Command{
{
Use: "create <JSON_config> <user_auth_token>",
Short: "Create config",
Long: `Create new Thing Bootstrap Config to the user identified by the provided key`,
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 2 {
logUsage(cmd.Use)
return
}
var cfg mfxsdk.BootstrapConfig
if err := json.Unmarshal([]byte(args[0]), &cfg); err != nil {
logError(err)
return
}
id, err := sdk.AddBootstrap(cfg, args[1])
if err != nil {
logError(err)
return
}
logCreated(id)
},
},
{
Use: "get [all | <thing_id>] <user_auth_token>",
Short: "Get config",
Long: `Get Thing Config with given ID belonging to the user identified by the given key.
all - lists all config
<thing_id> - view config of <thing_id>`,
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 2 {
logUsage(cmd.Use)
return
}
pageMetadata := mfxsdk.PageMetadata{
Offset: Offset,
Limit: Limit,
State: State,
Name: Name,
}
if args[0] == "all" {
l, err := sdk.Bootstraps(pageMetadata, args[1])
if err != nil {
logError(err)
return
}
logJSON(l)
return
}
c, err := sdk.ViewBootstrap(args[0], args[1])
if err != nil {
logError(err)
return
}
logJSON(c)
},
},
{
Use: "update [config <JSON_config> | connection <id> <channel_ids> | certs <id> <client_cert> <client_key> <ca> ] <user_auth_token>",
Short: "Update config",
Long: `Updates editable fields of the provided Config.
config <JSON_config> - Updates editable fields of the provided Config.
connection <id> <channel_ids> - Updates connections performs update of the channel list corresponding Thing is connected to.
channel_ids - '["channel_id1", ...]'
certs <id> <client_cert> <client_key> <ca> - Update boostrap config certificates.`,
Run: func(cmd *cobra.Command, args []string) {
if len(args) < 3 {
logUsage(cmd.Use)
return
}
if args[0] == "config" {
var cfg mfxsdk.BootstrapConfig
if err := json.Unmarshal([]byte(args[0]), &cfg); err != nil {
logError(err)
return
}
if err := sdk.UpdateBootstrap(cfg, args[1]); err != nil {
logError(err)
return
}
logOK()
return
}
if args[0] == "connection" {
var ids []string
if err := json.Unmarshal([]byte(args[1]), &ids); err != nil {
logError(err)
return
}
if err := sdk.UpdateBootstrapConnection(args[0], ids, args[2]); err != nil {
logError(err)
return
}
logOK()
return
}
if args[0] == "certs" {
cfg, err := sdk.UpdateBootstrapCerts(args[0], args[1], args[2], args[3], args[4])
if err != nil {
logError(err)
return
}
logJSON(cfg)
return
}
logUsage(cmd.Use)
},
},
{
Use: "remove <thing_id> <user_auth_token>",
Short: "Remove config",
Long: `Removes Config with specified key that belongs to the user identified by the given key`,
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 2 {
logUsage(cmd.Use)
return
}
if err := sdk.RemoveBootstrap(args[0], args[1]); err != nil {
logError(err)
return
}
logOK()
},
},
{
Use: "bootstrap [<external_id> <external_key> | secure <external_id> <external_key> ]",
Short: "Bootstrap config",
Long: `Returns Config to the Thing with provided external ID using external key.
secure - Retrieves a configuration with given external ID and encrypted external key.`,
Run: func(cmd *cobra.Command, args []string) {
if len(args) < 2 {
logUsage(cmd.Use)
return
}
if args[0] == "secure" {
c, err := sdk.BootstrapSecure(args[1], args[2])
if err != nil {
logError(err)
return
}
logJSON(c)
return
}
c, err := sdk.Bootstrap(args[0], args[1])
if err != nil {
logError(err)
return
}
logJSON(c)
},
},
{
Use: "whitelist <JSON_config> <user_auth_token>",
Short: "Whitelist config",
Long: `Whitelist updates thing state config with given id from the authenticated user`,
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 2 {
logUsage(cmd.Use)
return
}
var cfg mfxsdk.BootstrapConfig
if err := json.Unmarshal([]byte(args[0]), &cfg); err != nil {
logError(err)
return
}
if err := sdk.Whitelist(cfg, args[1]); err != nil {
logError(err)
return
}
logOK()
},
},
}
// NewBootstrapCmd returns bootstrap command.
func NewBootstrapCmd() *cobra.Command {
cmd := cobra.Command{
Use: "bootstrap [create | get | update | remove | bootstrap | whitelist]",
Short: "Bootstrap management",
Long: `Bootstrap management: create, get, update, delete or whitelist Bootstrap config`,
}
for i := range cmdBootstrap {
cmd.AddCommand(&cmdBootstrap[i])
}
return &cmd
}