-
Notifications
You must be signed in to change notification settings - Fork 1
/
profile.go
114 lines (94 loc) · 3.01 KB
/
profile.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package tx
import (
"github.com/spf13/cobra"
flag "github.com/spf13/pflag"
"github.com/spf13/viper"
bcmd "github.com/tendermint/basecoin/cmd/basecli/commands"
txcmd "github.com/tendermint/light-client/commands/txs"
btypes "github.com/tendermint/basecoin/types"
trcmn "github.com/tendermint/trackomatron/cmd/trackocli/common"
"github.com/tendermint/trackomatron/plugins/invoicer"
"github.com/tendermint/trackomatron/types"
)
//nolint
var (
ProfileOpenCmd = &cobra.Command{
Use: "profile-open [name]",
Short: "Open a profile for sending/receiving invoices",
RunE: profileOpenCmd,
}
ProfileEditCmd = &cobra.Command{
Use: "profile-edit",
Short: "Edit an existing profile",
RunE: profileEditCmd,
}
ProfileDeactivateCmd = &cobra.Command{
Use: "profile-deactivate",
Short: "Deactivate and existing profile",
RunE: profileDeactivateCmd,
}
)
func init() {
fsTxProfile := flag.NewFlagSet("", flag.ContinueOnError)
//add the default flags
bcmd.AddAppTxFlags(fsTxProfile)
bcmd.AddAppTxFlags(ProfileDeactivateCmd.Flags())
fsTxProfile.String(trcmn.FlagTo, "", "Who you're invoicing")
fsTxProfile.String(trcmn.FlagCur, "BTC", "Payment curreny accepted")
fsTxProfile.String(trcmn.FlagDepositInfo, "", "Default deposit information to be provided")
fsTxProfile.Int(trcmn.FlagDueDurationDays, 14,
"Default number of days until invoice is due from invoice submission")
ProfileOpenCmd.Flags().AddFlagSet(fsTxProfile)
ProfileEditCmd.Flags().AddFlagSet(fsTxProfile)
}
func profileOpenCmd(cmd *cobra.Command, args []string) error {
return profileCmd(cmd, args, invoicer.TBTxProfileOpen)
}
func profileEditCmd(cmd *cobra.Command, args []string) error {
return profileCmd(cmd, args, invoicer.TBTxProfileEdit)
}
func profileDeactivateCmd(cmd *cobra.Command, args []string) error {
return profileCmd(cmd, args, invoicer.TBTxProfileDeactivate)
}
func profileCmd(cmd *cobra.Command, args []string, TBTx byte) error {
// Read the standard app-tx flags
gas, fee, txInput, err := bcmd.ReadAppTxFlags()
if err != nil {
return err
}
// Retrieve the app-specific flags/args
var name string
if TBTx == invoicer.TBTxProfileOpen {
if len(args) != 1 {
return trcmn.ErrCmdReqArg("name")
}
name = args[0]
}
//TODO get the address here from txInput once changed in basecoin
data := profileTx(TBTx, txcmd.GetSigner().Address(), name)
// Create AppTx and broadcast
tx := &btypes.AppTx{
Gas: gas,
Fee: fee,
Name: invoicer.Name,
Input: txInput,
Data: data,
}
res, err := bcmd.BroadcastAppTx(tx)
if err != nil {
return err
}
// Output result
return txcmd.OutputTx(res)
}
// profileTx Generates the tendermint TX used by the light and heavy client
func profileTx(TBTx byte, address []byte, name string) []byte {
tx := types.TxProfile{
Address: address,
Name: name,
AcceptedCur: viper.GetString(trcmn.FlagCur),
DepositInfo: viper.GetString(trcmn.FlagDepositInfo),
DueDurationDays: viper.GetInt(trcmn.FlagDueDurationDays),
}
return invoicer.MarshalWithTB(tx, TBTx)
}