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

* 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>
229 lines
5.2 KiB
Go
229 lines
5.2 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"
|
|
)
|
|
|
|
const (
|
|
users = "users"
|
|
things = "things"
|
|
)
|
|
|
|
var cmdPolicies = []cobra.Command{
|
|
{
|
|
Use: "create [ users | things ] <subject_id> <object_id> <actions> <user_auth_token>",
|
|
Short: "Create policy",
|
|
Long: "Create a new policy\n" +
|
|
"Usage:\n" +
|
|
"\tmainflux-cli policies create users <user_id> <group_id> '[\"c_list\"]' $USERTOKEN\n" +
|
|
"\tmainflux-cli policies create things <thing_id> <channel_id> '[\"m_write\"]' $USERTOKEN\n",
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
if len(args) != 5 {
|
|
logUsage(cmd.Use)
|
|
return
|
|
}
|
|
|
|
var actions []string
|
|
if err := json.Unmarshal([]byte(args[3]), &actions); err != nil {
|
|
logError(err)
|
|
return
|
|
}
|
|
|
|
var policy = mfxsdk.Policy{
|
|
Subject: args[1],
|
|
Object: args[2],
|
|
Actions: actions,
|
|
}
|
|
|
|
switch args[0] {
|
|
case things:
|
|
if err := sdk.CreateThingPolicy(policy, args[4]); err != nil {
|
|
logError(err)
|
|
return
|
|
}
|
|
case users:
|
|
if err := sdk.CreateUserPolicy(policy, args[4]); err != nil {
|
|
logError(err)
|
|
return
|
|
}
|
|
default:
|
|
logUsage(cmd.Use)
|
|
}
|
|
},
|
|
},
|
|
{
|
|
Use: "update [ users | things ] <subject_id> <object_id> <actions> <user_auth_token>",
|
|
Short: "Update policy",
|
|
Long: "Update policy\n" +
|
|
"Usage:\n" +
|
|
"\tmainflux-cli policies update users <user_id> <group_id> '[\"c_list\"]' $USERTOKEN\n" +
|
|
"\tmainflux-cli policies update things <thing_id> <channel_id> '[\"m_write\"]' $USERTOKEN\n",
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
if len(args) != 5 {
|
|
logUsage(cmd.Use)
|
|
return
|
|
}
|
|
|
|
var actions []string
|
|
if err := json.Unmarshal([]byte(args[3]), &actions); err != nil {
|
|
logError(err)
|
|
return
|
|
}
|
|
|
|
var policy = mfxsdk.Policy{
|
|
Subject: args[1],
|
|
Object: args[2],
|
|
Actions: actions,
|
|
}
|
|
|
|
switch args[0] {
|
|
case things:
|
|
if err := sdk.UpdateThingPolicy(policy, args[4]); err != nil {
|
|
logError(err)
|
|
return
|
|
}
|
|
case users:
|
|
if err := sdk.UpdateUserPolicy(policy, args[4]); err != nil {
|
|
logError(err)
|
|
return
|
|
}
|
|
default:
|
|
logUsage(cmd.Use)
|
|
}
|
|
},
|
|
},
|
|
{
|
|
Use: "list [ users | things ] <user_auth_token>",
|
|
Short: "List policies",
|
|
Long: "List policies\n" +
|
|
"Usage:\n" +
|
|
"\tmainflux-cli policies list users $USERTOKEN\n" +
|
|
"\tmainflux-cli policies list things $USERTOKEN\n",
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
if len(args) != 2 {
|
|
logUsage(cmd.Use)
|
|
return
|
|
}
|
|
pm := mfxsdk.PageMetadata{
|
|
Offset: Offset,
|
|
Limit: Limit,
|
|
}
|
|
switch args[0] {
|
|
case things:
|
|
policies, err := sdk.ListThingPolicies(pm, args[1])
|
|
if err != nil {
|
|
logError(err)
|
|
return
|
|
}
|
|
logJSON(policies)
|
|
return
|
|
case users:
|
|
policies, err := sdk.ListUserPolicies(pm, args[1])
|
|
if err != nil {
|
|
logError(err)
|
|
return
|
|
}
|
|
|
|
logJSON(policies)
|
|
return
|
|
default:
|
|
logUsage(cmd.Use)
|
|
}
|
|
},
|
|
},
|
|
{
|
|
Use: "remove [ users | things ] <subject_id> <object_id> <user_auth_token>",
|
|
Short: "Remove policy",
|
|
Long: "Removes a policy with the provided object and subject\n" +
|
|
"Usage:\n" +
|
|
"\tmainflux-cli policies remove users <user_id> <group_id> $USERTOKEN\n" +
|
|
"\tmainflux-cli policies remove things <thing_id> <channel_id> $USERTOKEN\n",
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
if len(args) != 4 {
|
|
logUsage(cmd.Use)
|
|
return
|
|
}
|
|
|
|
var policy = mfxsdk.Policy{
|
|
Subject: args[1],
|
|
Object: args[2],
|
|
}
|
|
switch args[0] {
|
|
case things:
|
|
if err := sdk.DeleteThingPolicy(policy, args[3]); err != nil {
|
|
logError(err)
|
|
return
|
|
}
|
|
case users:
|
|
if err := sdk.DeleteUserPolicy(policy, args[3]); err != nil {
|
|
logError(err)
|
|
return
|
|
}
|
|
default:
|
|
logUsage(cmd.Use)
|
|
}
|
|
},
|
|
},
|
|
{
|
|
Use: "authorize [ users | things ] <subject_id> <object_id> <action> <entity_type> <user_auth_token>",
|
|
Short: "Authorize access request",
|
|
Long: "Authorize subject over object with provided actions\n" +
|
|
"Usage:\n" +
|
|
"\tmainflux-cli policies authorize users <user_id> <group_id> \"c_list\" <entity_type> $USERTOKEN\n" +
|
|
"\tmainflux-cli policies authorize things <thing_id> <channel_id> \"m_read\" <entity_type> $USERTOKEN\n",
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
if len(args) != 6 {
|
|
logUsage(cmd.Use)
|
|
return
|
|
}
|
|
|
|
var areq = mfxsdk.AccessRequest{
|
|
Subject: args[1],
|
|
Object: args[2],
|
|
Action: args[3],
|
|
EntityType: args[4],
|
|
}
|
|
|
|
switch args[0] {
|
|
case users:
|
|
ok, err := sdk.AuthorizeUser(areq, args[5])
|
|
if err != nil {
|
|
logError(err)
|
|
return
|
|
}
|
|
logJSON(ok)
|
|
case things:
|
|
ok, _, err := sdk.AuthorizeThing(areq, args[5])
|
|
if err != nil {
|
|
logError(err)
|
|
return
|
|
}
|
|
logJSON(ok)
|
|
default:
|
|
logUsage(cmd.Use)
|
|
}
|
|
},
|
|
},
|
|
}
|
|
|
|
// NewPolicyCmd returns policies command.
|
|
func NewPolicyCmd() *cobra.Command {
|
|
cmd := cobra.Command{
|
|
Use: "policies [create | update | list | remove | authorize ]",
|
|
Short: "Policies management",
|
|
Long: `Policies management: create or update or list or delete or check policies`,
|
|
}
|
|
|
|
for i := range cmdPolicies {
|
|
cmd.AddCommand(&cmdPolicies[i])
|
|
}
|
|
|
|
return &cmd
|
|
}
|