From ad32c63c62fa28746d2b7f19fc5030839db6d65e Mon Sep 17 00:00:00 2001 From: Shekhar Gaur <65169767+shekhar2807@users.noreply.github.com> Date: Mon, 26 Sep 2022 13:06:00 +0530 Subject: [PATCH] Added password flag (#946) * added password flag * README updated --- README.md | 18 +++++++++++++++++- cmd/addStake.go | 4 +++- cmd/addStake_test.go | 2 +- cmd/claimBounty.go | 4 +++- cmd/claimBounty_test.go | 2 +- cmd/claimCommission.go | 6 ++++-- cmd/claimCommission_test.go | 2 +- cmd/create.go | 8 +++++++- cmd/createCollection.go | 4 +++- cmd/createCollection_test.go | 2 +- cmd/createJob.go | 4 +++- cmd/createJob_test.go | 2 +- cmd/create_test.go | 2 +- cmd/delegate.go | 4 +++- cmd/delegate_test.go | 2 +- cmd/initiateWithdraw.go | 4 +++- cmd/initiateWithdraw_test.go | 2 +- cmd/interface.go | 2 +- cmd/mocks/utils_cmd_interface.go | 8 ++++---- cmd/mocks/utils_interface.go | 10 +++++----- cmd/modifyCollectionStatus.go | 4 +++- cmd/modifyCollectionStatus_test.go | 2 +- cmd/resetUnstakeLock.go | 4 +++- cmd/resetUnstakeLock_test.go | 2 +- cmd/setDelegation.go | 4 +++- cmd/setDelegation_test.go | 2 +- cmd/struct-utils.go | 4 ++-- cmd/transfer.go | 4 +++- cmd/transfer_test.go | 2 +- cmd/unlockWithdraw.go | 4 +++- cmd/unlockWithdraw_test.go | 2 +- cmd/unstake.go | 4 +++- cmd/unstake_test.go | 2 +- cmd/updateCollection.go | 4 +++- cmd/updateCollection_test.go | 2 +- cmd/updateCommission.go | 4 +++- cmd/updateCommission_test.go | 2 +- cmd/updateJob.go | 4 +++- cmd/updateJob_test.go | 2 +- cmd/vote.go | 4 +++- cmd/vote_test.go | 2 +- password.txt | 0 utils/password.go | 29 ++++++++++++++++++++++++++++- 43 files changed, 134 insertions(+), 51 deletions(-) create mode 100644 password.txt diff --git a/README.md b/README.md index 7c5094ee..406c3091 100644 --- a/README.md +++ b/README.md @@ -353,8 +353,9 @@ docker exec -it razor-go razor vote --address
run vote command in background ``` -docker exec -it -d razor-go razor vote --address
+docker exec -it -d razor-go razor vote --address
--password /root/.razor/ ``` +>**_NOTE:_** To run command with password flag with the help of docker, password file should present in $HOME/.razor/ directory Example: @@ -678,6 +679,8 @@ docker docker exec -it razor-go razor collectionList ``` +Note : _All the commands have an additional --password flag that you can provide with the file path from which password must be picked._ + ### Expose Metrics Expose Prometheus-based metrics for monitoring @@ -929,6 +932,13 @@ $ ./razor contractAddresses ```bash #Provide password through CLI docker-compose run razor-go /usr/local/bin/razor addStake --address
--value 50000 + + #Provide password through File + + #Create file and put password string + vi ~/.razor/pass + #Start Staking + docker-compose run razor-go /usr/local/bin/razor addStake --address
--value 50000 --password /root/.razor/pass ``` 9. To Start **Voting**, @@ -938,6 +948,9 @@ $ ./razor contractAddresses ```bash # Run process in foreground and provide password through cli docker-compose run razor-go /usr/local/bin/razor vote --address
+ + # Run process in background and provide password through file + docker-compose run -d razor-go /usr/local/bin/razor vote --address
--password /root/.razor/pass ``` ```bash @@ -949,6 +962,9 @@ $ ./razor contractAddresses ```bash #Provide password with cli docker-compose run razor-go /usr/local/bin/razor setDelegation --address
--status true --commission 10 + + #provide password through file + docker-compose run razor-go /usr/local/bin/razor setDelegation --address
--status true --commission 10 --password /root/.razor/pass ``` ### Contribute to razor-go diff --git a/cmd/addStake.go b/cmd/addStake.go index 5069bde6..f5c2469b 100644 --- a/cmd/addStake.go +++ b/cmd/addStake.go @@ -40,7 +40,7 @@ func (*UtilsStruct) ExecuteStake(flagSet *pflag.FlagSet) { config, err := cmdUtils.GetConfigData() utils.CheckError("Error in getting config: ", err) - password := razorUtils.AssignPassword() + password := razorUtils.AssignPassword(flagSet) client := razorUtils.ConnectToClient(config.Provider) balance, err := razorUtils.FetchBalance(client, address) utils.CheckError("Error in fetching razor balance for account: "+address, err) @@ -111,11 +111,13 @@ func init() { var ( Amount string Address string + Password string WeiRazor bool ) stakeCmd.Flags().StringVarP(&Amount, "value", "v", "0", "amount of Razors to stake") stakeCmd.Flags().StringVarP(&Address, "address", "a", "", "address of the staker") + stakeCmd.Flags().StringVarP(&Password, "password", "", "", "password path of staker to protect the keystore") stakeCmd.Flags().BoolVarP(&WeiRazor, "weiRazor", "", false, "value can be passed in wei") amountErr := stakeCmd.MarkFlagRequired("value") diff --git a/cmd/addStake_test.go b/cmd/addStake_test.go index fe90e5db..f2cd062f 100644 --- a/cmd/addStake_test.go +++ b/cmd/addStake_test.go @@ -314,7 +314,7 @@ func TestExecuteStake(t *testing.T) { utilsMock.On("AssignLogFile", mock.AnythingOfType("*pflag.FlagSet")) cmdUtilsMock.On("GetConfigData").Return(tt.args.config, tt.args.configErr) - utilsMock.On("AssignPassword").Return(tt.args.password) + utilsMock.On("AssignPassword", mock.AnythingOfType("*pflag.FlagSet")).Return(tt.args.password) flagSetUtilsMock.On("GetStringAddress", mock.AnythingOfType("*pflag.FlagSet")).Return(tt.args.address, tt.args.addressErr) utilsMock.On("ConnectToClient", mock.AnythingOfType("string")).Return(client) utilsMock.On("WaitForBlockCompletion", mock.AnythingOfType("*ethclient.Client"), mock.AnythingOfType("string")).Return(nil) diff --git a/cmd/claimBounty.go b/cmd/claimBounty.go index 474fc7eb..0541ed71 100644 --- a/cmd/claimBounty.go +++ b/cmd/claimBounty.go @@ -43,7 +43,7 @@ func (*UtilsStruct) ExecuteClaimBounty(flagSet *pflag.FlagSet) { config, err := cmdUtils.GetConfigData() utils.CheckError("Error in getting config: ", err) - password := razorUtils.AssignPassword() + password := razorUtils.AssignPassword(flagSet) client := razorUtils.ConnectToClient(config.Provider) @@ -183,10 +183,12 @@ func init() { rootCmd.AddCommand(claimBountyCmd) var ( Address string + Password string BountyId uint32 ) claimBountyCmd.Flags().StringVarP(&Address, "address", "a", "", "address of the staker") + claimBountyCmd.Flags().StringVarP(&Password, "password", "", "", "password path of staker to protect the keystore") claimBountyCmd.Flags().Uint32VarP(&BountyId, "bountyId", "", 0, "bountyId of the bounty hunter") addrErr := claimBountyCmd.MarkFlagRequired("address") diff --git a/cmd/claimBounty_test.go b/cmd/claimBounty_test.go index 3d2490cc..05f23f8f 100644 --- a/cmd/claimBounty_test.go +++ b/cmd/claimBounty_test.go @@ -136,7 +136,7 @@ func TestExecuteClaimBounty(t *testing.T) { utilsMock.On("AssignLogFile", mock.AnythingOfType("*pflag.FlagSet")) cmdUtilsMock.On("GetConfigData").Return(tt.args.config, tt.args.configErr) - utilsMock.On("AssignPassword").Return(tt.args.password) + utilsMock.On("AssignPassword", mock.AnythingOfType("*pflag.FlagSet")).Return(tt.args.password) flagSetUtilsMock.On("GetStringAddress", mock.AnythingOfType("*pflag.FlagSet")).Return(tt.args.address, tt.args.addressErr) flagSetUtilsMock.On("GetUint32BountyId", mock.AnythingOfType("*pflag.FlagSet")).Return(tt.args.bountyId, tt.args.bountyIdErr) utilsMock.On("ConnectToClient", mock.AnythingOfType("string")).Return(client) diff --git a/cmd/claimCommission.go b/cmd/claimCommission.go index bc40db58..cdf2d9e2 100644 --- a/cmd/claimCommission.go +++ b/cmd/claimCommission.go @@ -34,7 +34,7 @@ func (*UtilsStruct) ClaimCommission(flagSet *pflag.FlagSet) { config, err := cmdUtils.GetConfigData() utils.CheckError("Error in getting config: ", err) - password := razorUtils.AssignPassword() + password := razorUtils.AssignPassword(flagSet) client := razorUtils.ConnectToClient(config.Provider) razorUtils.CheckEthBalanceIsZero(client, address) @@ -76,10 +76,12 @@ func init() { rootCmd.AddCommand(claimCommissionCmd) var ( - Address string + Address string + Password string ) claimCommissionCmd.Flags().StringVarP(&Address, "address", "a", "", "address of the staker") + claimCommissionCmd.Flags().StringVarP(&Password, "password", "", "", "password path of staker to protect the keystore") addrErr := claimCommissionCmd.MarkFlagRequired("address") utils.CheckError("Address error: ", addrErr) diff --git a/cmd/claimCommission_test.go b/cmd/claimCommission_test.go index 0f4fdedb..1db00526 100644 --- a/cmd/claimCommission_test.go +++ b/cmd/claimCommission_test.go @@ -218,7 +218,7 @@ func TestUtilsStruct_ClaimCommission(t *testing.T) { utilsMock.On("AssignLogFile", mock.AnythingOfType("*pflag.FlagSet")) utilsMock.On("GetStakerId", mock.AnythingOfType("*ethclient.Client"), mock.AnythingOfType("string")).Return(tt.args.stakerId, tt.args.stakerIdErr) utilsMock.On("GetOptions").Return(callOpts) - utilsMock.On("AssignPassword").Return(tt.args.password) + utilsMock.On("AssignPassword", mock.AnythingOfType("*pflag.FlagSet")).Return(tt.args.password) utilsMock.On("ConnectToClient", mock.AnythingOfType("string")).Return(client) utilsMock.On("CheckEthBalanceIsZero", mock.AnythingOfType("*ethclient.Client"), mock.AnythingOfType("string")).Return() utilsMock.On("GetTxnOpts", mock.AnythingOfType("types.TransactionOptions")).Return(txnOpts) diff --git a/cmd/create.go b/cmd/create.go index f7efa29a..999fe1f2 100644 --- a/cmd/create.go +++ b/cmd/create.go @@ -30,7 +30,7 @@ func initialiseCreate(cmd *cobra.Command, args []string) { func (*UtilsStruct) ExecuteCreate(flagSet *pflag.FlagSet) { razorUtils.AssignLogFile(flagSet) log.Info("The password should be of minimum 8 characters containing least 1 uppercase, lowercase, digit and special character.") - password := razorUtils.AssignPassword() + password := razorUtils.AssignPassword(flagSet) account, err := cmdUtils.Create(password) utils.CheckError("Create error: ", err) log.Info("Account address: ", account.Address) @@ -51,4 +51,10 @@ func (*UtilsStruct) Create(password string) (accounts.Account, error) { func init() { rootCmd.AddCommand(createCmd) + + var ( + Password string + ) + + createCmd.Flags().StringVarP(&Password, "password", "", "", "password file path to protect the keystore") } diff --git a/cmd/createCollection.go b/cmd/createCollection.go index 43fb1752..35175e5d 100644 --- a/cmd/createCollection.go +++ b/cmd/createCollection.go @@ -43,7 +43,7 @@ func (*UtilsStruct) ExecuteCreateCollection(flagSet *pflag.FlagSet) { config, err := cmdUtils.GetConfigData() utils.CheckError("Error in getting config: ", err) - password := razorUtils.AssignPassword() + password := razorUtils.AssignPassword(flagSet) name, err := flagSetUtils.GetStringName(flagSet) utils.CheckError("Error in getting name: ", err) @@ -114,6 +114,7 @@ func init() { Account string JobIds []uint AggregationMethod uint32 + Password string Power int8 Tolerance uint32 ) @@ -124,6 +125,7 @@ func init() { createCollectionCmd.Flags().Uint32VarP(&AggregationMethod, "aggregation", "", 1, "aggregation method to be used") createCollectionCmd.Flags().Uint32VarP(&Tolerance, "tolerance", "", 0, "tolerance") createCollectionCmd.Flags().Int8VarP(&Power, "power", "", 0, "multiplier for the collection") + createCollectionCmd.Flags().StringVarP(&Password, "password", "", "", "password path of job creator to protect the keystore") nameErr := createCollectionCmd.MarkFlagRequired("name") utils.CheckError("Name error: ", nameErr) diff --git a/cmd/createCollection_test.go b/cmd/createCollection_test.go index 4e3ab38b..27206fbb 100644 --- a/cmd/createCollection_test.go +++ b/cmd/createCollection_test.go @@ -302,7 +302,7 @@ func TestExecuteCreateCollection(t *testing.T) { utilsMock.On("AssignLogFile", mock.AnythingOfType("*pflag.FlagSet")) cmdUtilsMock.On("GetConfigData").Return(tt.args.config, tt.args.configErr) - utilsMock.On("AssignPassword").Return(tt.args.password) + utilsMock.On("AssignPassword", flagSet).Return(tt.args.password) flagsetUtilsMock.On("GetStringAddress", flagSet).Return(tt.args.address, tt.args.addressErr) flagsetUtilsMock.On("GetStringName", flagSet).Return(tt.args.name, tt.args.nameErr) flagsetUtilsMock.On("GetUintSliceJobIds", flagSet).Return(tt.args.jobId, tt.args.jobIdErr) diff --git a/cmd/createJob.go b/cmd/createJob.go index 25f4cd74..b66ddbfa 100644 --- a/cmd/createJob.go +++ b/cmd/createJob.go @@ -44,7 +44,7 @@ func (*UtilsStruct) ExecuteCreateJob(flagSet *pflag.FlagSet) { config, err := cmdUtils.GetConfigData() utils.CheckError("Error in getting config: ", err) - password := razorUtils.AssignPassword() + password := razorUtils.AssignPassword(flagSet) name, err := flagSetUtils.GetStringName(flagSet) utils.CheckError("Error in getting name: ", err) @@ -117,6 +117,7 @@ func init() { Name string Power int8 Account string + Password string Weight uint8 ) @@ -127,6 +128,7 @@ func init() { createJobCmd.Flags().Int8VarP(&Power, "power", "", 0, "power") createJobCmd.Flags().Uint8VarP(&Weight, "weight", "", 0, "weight assigned to the job") createJobCmd.Flags().StringVarP(&Account, "address", "a", "", "address of the job creator") + createJobCmd.Flags().StringVarP(&Password, "password", "", "", "password path of job creator to protect the keystore") urlErr := createJobCmd.MarkFlagRequired("url") utils.CheckError("URL error: ", urlErr) diff --git a/cmd/createJob_test.go b/cmd/createJob_test.go index 5bb77b54..14baa81f 100644 --- a/cmd/createJob_test.go +++ b/cmd/createJob_test.go @@ -320,7 +320,7 @@ func TestExecuteCreateJob(t *testing.T) { utilsMock.On("AssignLogFile", mock.AnythingOfType("*pflag.FlagSet")) cmdUtilsMock.On("GetConfigData").Return(tt.args.config, tt.args.configErr) - utilsMock.On("AssignPassword").Return(tt.args.password) + utilsMock.On("AssignPassword", flagSet).Return(tt.args.password) flagsetUtilsMock.On("GetStringAddress", flagSet).Return(tt.args.address, tt.args.addressErr) flagsetUtilsMock.On("GetStringName", flagSet).Return(tt.args.name, tt.args.nameErr) flagsetUtilsMock.On("GetStringUrl", flagSet).Return(tt.args.url, tt.args.urlErr) diff --git a/cmd/create_test.go b/cmd/create_test.go index 0c8d40d7..0df1acd2 100644 --- a/cmd/create_test.go +++ b/cmd/create_test.go @@ -144,7 +144,7 @@ func TestExecuteCreate(t *testing.T) { cmdUtils = cmdUtilsMock utilsMock.On("AssignLogFile", mock.AnythingOfType("*pflag.FlagSet")) - utilsMock.On("AssignPassword").Return(tt.args.password) + utilsMock.On("AssignPassword", mock.AnythingOfType("*pflag.FlagSet")).Return(tt.args.password) cmdUtilsMock.On("Create", mock.AnythingOfType("string")).Return(tt.args.account, tt.args.accountErr) utils := &UtilsStruct{} diff --git a/cmd/delegate.go b/cmd/delegate.go index 9d2fd838..de55cf40 100644 --- a/cmd/delegate.go +++ b/cmd/delegate.go @@ -41,7 +41,7 @@ func (*UtilsStruct) ExecuteDelegate(flagSet *pflag.FlagSet) { config, err := cmdUtils.GetConfigData() utils.CheckError("Error in getting config: ", err) - password := razorUtils.AssignPassword() + password := razorUtils.AssignPassword(flagSet) stakerId, err := flagSetUtils.GetUint32StakerId(flagSet) utils.CheckError("Error in getting stakerId: ", err) @@ -104,12 +104,14 @@ func init() { Amount string Address string StakerId uint32 + Password string WeiRazor bool ) delegateCmd.Flags().StringVarP(&Amount, "value", "v", "0", "amount to stake (in Wei)") delegateCmd.Flags().StringVarP(&Address, "address", "a", "", "your account address") delegateCmd.Flags().Uint32VarP(&StakerId, "stakerId", "", 0, "staker id") + delegateCmd.Flags().StringVarP(&Password, "password", "", "", "password path to protect the keystore") delegateCmd.Flags().BoolVarP(&WeiRazor, "weiRazor", "", false, "value can be passed in wei") valueErr := delegateCmd.MarkFlagRequired("value") diff --git a/cmd/delegate_test.go b/cmd/delegate_test.go index db2b43ef..8973b06a 100644 --- a/cmd/delegate_test.go +++ b/cmd/delegate_test.go @@ -265,7 +265,7 @@ func TestExecuteDelegate(t *testing.T) { utilsMock.On("AssignLogFile", mock.AnythingOfType("*pflag.FlagSet")) cmdUtilsMock.On("GetConfigData").Return(tt.args.config, tt.args.configErr) - utilsMock.On("AssignPassword").Return(tt.args.password) + utilsMock.On("AssignPassword", flagSet).Return(tt.args.password) flagSetUtilsMock.On("GetStringAddress", mock.AnythingOfType("*pflag.FlagSet")).Return(tt.args.address, tt.args.addressErr) flagSetUtilsMock.On("GetUint32StakerId", flagSet).Return(tt.args.stakerId, tt.args.stakerIdErr) utilsMock.On("ConnectToClient", mock.AnythingOfType("string")).Return(client) diff --git a/cmd/initiateWithdraw.go b/cmd/initiateWithdraw.go index d998306e..5bb9580d 100644 --- a/cmd/initiateWithdraw.go +++ b/cmd/initiateWithdraw.go @@ -40,7 +40,7 @@ func (*UtilsStruct) ExecuteInitiateWithdraw(flagSet *pflag.FlagSet) { config, err := cmdUtils.GetConfigData() utils.CheckError("Error in getting config: ", err) - password := razorUtils.AssignPassword() + password := razorUtils.AssignPassword(flagSet) client := razorUtils.ConnectToClient(config.Provider) @@ -149,10 +149,12 @@ func init() { var ( Address string + Password string StakerId uint32 ) initiateWithdrawCmd.Flags().StringVarP(&Address, "address", "a", "", "address of the user") + initiateWithdrawCmd.Flags().StringVarP(&Password, "password", "", "", "password path of user to protect the keystore") initiateWithdrawCmd.Flags().Uint32VarP(&StakerId, "stakerId", "", 0, "password path of user to protect the keystore") addrErr := initiateWithdrawCmd.MarkFlagRequired("address") diff --git a/cmd/initiateWithdraw_test.go b/cmd/initiateWithdraw_test.go index 087f9494..fe2472f8 100644 --- a/cmd/initiateWithdraw_test.go +++ b/cmd/initiateWithdraw_test.go @@ -423,7 +423,7 @@ func TestExecuteWithdraw(t *testing.T) { utilsMock.On("AssignLogFile", mock.AnythingOfType("*pflag.FlagSet")) cmdUtilsMock.On("GetConfigData").Return(tt.args.config, tt.args.configErr) - utilsMock.On("AssignPassword").Return(tt.args.password) + utilsMock.On("AssignPassword", flagSet).Return(tt.args.password) flagSetUtilsMock.On("GetStringAddress", flagSet).Return(tt.args.address, tt.args.addressErr) utilsMock.On("CheckEthBalanceIsZero", mock.AnythingOfType("*ethclient.Client"), mock.AnythingOfType("string")).Return() utilsMock.On("AssignStakerId", flagSet, mock.AnythingOfType("*ethclient.Client"), mock.Anything).Return(tt.args.stakerId, tt.args.stakerIdErr) diff --git a/cmd/interface.go b/cmd/interface.go index 3f1fa501..539045d6 100644 --- a/cmd/interface.go +++ b/cmd/interface.go @@ -60,7 +60,7 @@ type UtilsInterface interface { GetOptions() bind.CallOpts CalculateBlockTime(client *ethclient.Client) int64 GetTxnOpts(transactionData types.TransactionOptions) *bind.TransactOpts - AssignPassword() string + AssignPassword(flagSet *pflag.FlagSet) string GetStringAddress(flagSet *pflag.FlagSet) (string, error) GetUint32BountyId(flagSet *pflag.FlagSet) (uint32, error) ConnectToClient(provider string) *ethclient.Client diff --git a/cmd/mocks/utils_cmd_interface.go b/cmd/mocks/utils_cmd_interface.go index 7c0c3a81..d30f7d1e 100644 --- a/cmd/mocks/utils_cmd_interface.go +++ b/cmd/mocks/utils_cmd_interface.go @@ -904,13 +904,13 @@ func (_m *UtilsCmdInterface) GetWaitTime() (int32, error) { return r0, r1 } -// GiveSorted provides a mock function with given fields: client, blockManager, txnOpts, epoch, assetId, sortedStakers -func (_m *UtilsCmdInterface) GiveSorted(client *ethclient.Client, blockManager *bindings.BlockManager, txnOpts *bind.TransactOpts, epoch uint32, assetId uint16, sortedStakers []*big.Int) error { - ret := _m.Called(client, blockManager, txnOpts, epoch, assetId, sortedStakers) +// GiveSorted provides a mock function with given fields: client, blockManager, txnArgs, epoch, assetId, sortedStakers +func (_m *UtilsCmdInterface) GiveSorted(client *ethclient.Client, blockManager *bindings.BlockManager, txnArgs *bind.TransactOpts, epoch uint32, assetId uint16, sortedStakers []*big.Int) error { + ret := _m.Called(client, blockManager, txnArgs, epoch, assetId, sortedStakers) var r0 error if rf, ok := ret.Get(0).(func(*ethclient.Client, *bindings.BlockManager, *bind.TransactOpts, uint32, uint16, []*big.Int) error); ok { - r0 = rf(client, blockManager, txnOpts, epoch, assetId, sortedStakers) + r0 = rf(client, blockManager, txnArgs, epoch, assetId, sortedStakers) } else { r0 = ret.Error(0) } diff --git a/cmd/mocks/utils_interface.go b/cmd/mocks/utils_interface.go index 510153f5..babe15ad 100644 --- a/cmd/mocks/utils_interface.go +++ b/cmd/mocks/utils_interface.go @@ -57,13 +57,13 @@ func (_m *UtilsInterface) AssignLogFile(flagSet *pflag.FlagSet) { _m.Called(flagSet) } -// AssignPassword provides a mock function with given fields: -func (_m *UtilsInterface) AssignPassword() string { - ret := _m.Called() +// AssignPassword provides a mock function with given fields: flagSet +func (_m *UtilsInterface) AssignPassword(flagSet *pflag.FlagSet) string { + ret := _m.Called(flagSet) var r0 string - if rf, ok := ret.Get(0).(func() string); ok { - r0 = rf() + if rf, ok := ret.Get(0).(func(*pflag.FlagSet) string); ok { + r0 = rf(flagSet) } else { r0 = ret.Get(0).(string) } diff --git a/cmd/modifyCollectionStatus.go b/cmd/modifyCollectionStatus.go index 188b8f75..f6bdedac 100644 --- a/cmd/modifyCollectionStatus.go +++ b/cmd/modifyCollectionStatus.go @@ -48,7 +48,7 @@ func (*UtilsStruct) ExecuteModifyCollectionStatus(flagSet *pflag.FlagSet) { status, err := stringUtils.ParseBool(statusString) utils.CheckError("Error in parsing status: ", err) - password := razorUtils.AssignPassword() + password := razorUtils.AssignPassword(flagSet) client := razorUtils.ConnectToClient(config.Provider) @@ -117,11 +117,13 @@ func init() { Address string CollectionId uint16 Status string + Password string ) modifyCollectionStatusCmd.Flags().StringVarP(&Address, "address", "a", "", "address of the user") modifyCollectionStatusCmd.Flags().Uint16VarP(&CollectionId, "collectionId", "", 0, "collectionId of the collection") modifyCollectionStatusCmd.Flags().StringVarP(&Status, "status", "", "true", "active status of the collection") + modifyCollectionStatusCmd.Flags().StringVarP(&Password, "password", "", "", "password path of user to protect the keystore") addressErr := modifyCollectionStatusCmd.MarkFlagRequired("address") utils.CheckError("Address error: ", addressErr) diff --git a/cmd/modifyCollectionStatus_test.go b/cmd/modifyCollectionStatus_test.go index 7e2a253e..bf473e9f 100644 --- a/cmd/modifyCollectionStatus_test.go +++ b/cmd/modifyCollectionStatus_test.go @@ -357,7 +357,7 @@ func TestExecuteModifyAssetStatus(t *testing.T) { flagsetUtilsMock.On("GetStringAddress", flagSet).Return(tt.args.address, tt.args.addressErr) flagsetUtilsMock.On("GetUint16CollectionId", flagSet).Return(tt.args.collectionId, tt.args.collectionIdErr) flagsetUtilsMock.On("GetStringStatus", flagSet).Return(tt.args.status, tt.args.statusErr) - utilsMock.On("AssignPassword").Return(tt.args.password) + utilsMock.On("AssignPassword", flagSet).Return(tt.args.password) stringMock.On("ParseBool", mock.AnythingOfType("string")).Return(tt.args.parseStatus, tt.args.parseStatusErr) utilsMock.On("ConnectToClient", mock.AnythingOfType("string")).Return(client) cmdUtilsMock.On("ModifyCollectionStatus", mock.Anything, mock.Anything, mock.Anything).Return(tt.args.ModifyCollectionStatusHash, tt.args.ModifyCollectionStatusErr) diff --git a/cmd/resetUnstakeLock.go b/cmd/resetUnstakeLock.go index 198389b8..07b54d11 100644 --- a/cmd/resetUnstakeLock.go +++ b/cmd/resetUnstakeLock.go @@ -42,7 +42,7 @@ func (*UtilsStruct) ExecuteExtendLock(flagSet *pflag.FlagSet) { config, err := cmdUtils.GetConfigData() utils.CheckError("Error in getting config data: ", err) - password := razorUtils.AssignPassword() + password := razorUtils.AssignPassword(flagSet) client := razorUtils.ConnectToClient(config.Provider) @@ -88,10 +88,12 @@ func init() { var ( Address string + Password string StakerId uint32 ) extendUnstakeLockCmd.Flags().StringVarP(&Address, "address", "a", "", "address of the user") + extendUnstakeLockCmd.Flags().StringVarP(&Password, "password", "", "", "password path of the user to protect the keystore") extendUnstakeLockCmd.Flags().Uint32VarP(&StakerId, "stakerId", "", 0, "staker id") addrErr := extendUnstakeLockCmd.MarkFlagRequired("address") diff --git a/cmd/resetUnstakeLock_test.go b/cmd/resetUnstakeLock_test.go index f6790b6f..55b1f4fa 100644 --- a/cmd/resetUnstakeLock_test.go +++ b/cmd/resetUnstakeLock_test.go @@ -196,7 +196,7 @@ func TestExecuteExtendLock(t *testing.T) { utilsMock.On("AssignLogFile", mock.AnythingOfType("*pflag.FlagSet")) cmdUtilsMock.On("GetConfigData").Return(tt.args.config, tt.args.configErr) - utilsMock.On("AssignPassword").Return(tt.args.password) + utilsMock.On("AssignPassword", flagSet).Return(tt.args.password) flagSetUtilsMock.On("GetStringAddress", mock.AnythingOfType("*pflag.FlagSet")).Return(tt.args.address, tt.args.addressErr) utilsMock.On("AssignStakerId", flagSet, mock.AnythingOfType("*ethclient.Client"), mock.Anything).Return(tt.args.stakerId, tt.args.stakerIdErr) utilsMock.On("ConnectToClient", mock.AnythingOfType("string")).Return(client) diff --git a/cmd/setDelegation.go b/cmd/setDelegation.go index fca629e6..eb9c9580 100644 --- a/cmd/setDelegation.go +++ b/cmd/setDelegation.go @@ -42,7 +42,7 @@ func (*UtilsStruct) ExecuteSetDelegation(flagSet *pflag.FlagSet) { config, err := cmdUtils.GetConfigData() utils.CheckError("Error in getting config: ", err) - password := razorUtils.AssignPassword() + password := razorUtils.AssignPassword(flagSet) statusString, err := flagSetUtils.GetStringStatus(flagSet) utils.CheckError("Error in getting status: ", err) @@ -127,11 +127,13 @@ func init() { var ( Status string Address string + Password string Commission uint8 ) setDelegationCmd.Flags().StringVarP(&Status, "status", "s", "true", "true for accepting delegation and false for not accepting") setDelegationCmd.Flags().StringVarP(&Address, "address", "a", "", "your account address") + setDelegationCmd.Flags().StringVarP(&Password, "password", "", "", "password path to protect the keystore") setDelegationCmd.Flags().Uint8VarP(&Commission, "commission", "c", 0, "commission") addrErr := setDelegationCmd.MarkFlagRequired("address") diff --git a/cmd/setDelegation_test.go b/cmd/setDelegation_test.go index 1c3208e7..9e7bf53c 100644 --- a/cmd/setDelegation_test.go +++ b/cmd/setDelegation_test.go @@ -414,7 +414,7 @@ func TestExecuteSetDelegation(t *testing.T) { utilsMock.On("AssignLogFile", mock.AnythingOfType("*pflag.FlagSet")) cmdUtilsMock.On("GetConfigData").Return(tt.args.config, tt.args.configErr) - utilsMock.On("AssignPassword").Return(tt.args.password) + utilsMock.On("AssignPassword", flagSet).Return(tt.args.password) flagSetUtilsMock.On("GetStringAddress", flagSet).Return(tt.args.address, tt.args.addressErr) flagSetUtilsMock.On("GetStringStatus", flagSet).Return(tt.args.status, tt.args.statusErr) flagSetUtilsMock.On("GetUint8Commission", flagSet).Return(tt.args.commission, tt.args.commissionErr) diff --git a/cmd/struct-utils.go b/cmd/struct-utils.go index 52b9b0f9..aa5bed41 100644 --- a/cmd/struct-utils.go +++ b/cmd/struct-utils.go @@ -87,8 +87,8 @@ func (u Utils) GetConfigData() (types.Configurations, error) { } //This function assigns the password -func (u Utils) AssignPassword() string { - return utils.AssignPassword() +func (u Utils) AssignPassword(flagSet *pflag.FlagSet) string { + return utils.AssignPassword(flagSet) } //This function returns the string address diff --git a/cmd/transfer.go b/cmd/transfer.go index 11f11bef..ca383640 100644 --- a/cmd/transfer.go +++ b/cmd/transfer.go @@ -40,7 +40,7 @@ func (*UtilsStruct) ExecuteTransfer(flagSet *pflag.FlagSet) { config, err := cmdUtils.GetConfigData() utils.CheckError("Error in getting config: ", err) - password := razorUtils.AssignPassword() + password := razorUtils.AssignPassword(flagSet) toAddress, err := flagSetUtils.GetStringTo(flagSet) utils.CheckError("Error in getting toAddress: ", err) @@ -101,12 +101,14 @@ func init() { Amount string From string To string + Password string WeiRazor bool ) transferCmd.Flags().StringVarP(&Amount, "value", "v", "0", "value to transfer") transferCmd.Flags().StringVarP(&From, "from", "", "", "transfer from") transferCmd.Flags().StringVarP(&To, "to", "", "", "transfer to") + transferCmd.Flags().StringVarP(&Password, "password", "", "", "password path to protect the keystore") transferCmd.Flags().BoolVarP(&WeiRazor, "weiRazor", "", false, "value can be passed in wei") amountErr := transferCmd.MarkFlagRequired("value") diff --git a/cmd/transfer_test.go b/cmd/transfer_test.go index b6f00c9d..968b3896 100644 --- a/cmd/transfer_test.go +++ b/cmd/transfer_test.go @@ -267,7 +267,7 @@ func TestExecuteTransfer(t *testing.T) { utilsMock.On("AssignLogFile", mock.AnythingOfType("*pflag.FlagSet")) cmdUtilsMock.On("GetConfigData").Return(tt.args.config, tt.args.configErr) - utilsMock.On("AssignPassword").Return(tt.args.password) + utilsMock.On("AssignPassword", flagSet).Return(tt.args.password) flagsetUtilsMock.On("GetStringFrom", flagSet).Return(tt.args.from, tt.args.fromErr) flagsetUtilsMock.On("GetStringTo", flagSet).Return(tt.args.to, tt.args.toErr) cmdUtilsMock.On("AssignAmountInWei", flagSet).Return(tt.args.amount, tt.args.amountErr) diff --git a/cmd/unlockWithdraw.go b/cmd/unlockWithdraw.go index 94a6821e..05f66c1c 100644 --- a/cmd/unlockWithdraw.go +++ b/cmd/unlockWithdraw.go @@ -40,7 +40,7 @@ func (*UtilsStruct) ExecuteUnlockWithdraw(flagSet *pflag.FlagSet) { config, err := cmdUtils.GetConfigData() utils.CheckError("Error in getting config: ", err) - password := razorUtils.AssignPassword() + password := razorUtils.AssignPassword(flagSet) client := razorUtils.ConnectToClient(config.Provider) @@ -116,10 +116,12 @@ func init() { rootCmd.AddCommand(unlockWithdrawCmd) var ( Address string + Password string StakerId uint32 ) unlockWithdrawCmd.Flags().StringVarP(&Address, "address", "a", "", "address of the user") + unlockWithdrawCmd.Flags().StringVarP(&Password, "password", "", "", "password path of user to protect the keystore") unlockWithdrawCmd.Flags().Uint32VarP(&StakerId, "stakerId", "", 0, "password path of user to protect the keystore") addrErr := unlockWithdrawCmd.MarkFlagRequired("address") diff --git a/cmd/unlockWithdraw_test.go b/cmd/unlockWithdraw_test.go index 87b6c36a..3d45424f 100644 --- a/cmd/unlockWithdraw_test.go +++ b/cmd/unlockWithdraw_test.go @@ -109,7 +109,7 @@ func TestExecuteUnlockWithdraw(t *testing.T) { utilsMock.On("AssignLogFile", mock.AnythingOfType("*pflag.FlagSet")) flagSetUtilsMock.On("GetStringAddress", mock.AnythingOfType("*pflag.FlagSet")).Return(tt.args.address, tt.args.addressErr) cmdUtilsMock.On("GetConfigData").Return(tt.args.config, tt.args.configErr) - utilsMock.On("AssignPassword").Return(tt.args.password) + utilsMock.On("AssignPassword", flagSet).Return(tt.args.password) utilsMock.On("ConnectToClient", mock.AnythingOfType("string")).Return(client) utilsMock.On("CheckEthBalanceIsZero", mock.AnythingOfType("*ethclient.Client"), mock.AnythingOfType("string")).Return() utilsMock.On("AssignStakerId", mock.Anything, mock.Anything, mock.Anything).Return(tt.args.stakerId, tt.args.stakerIdErr) diff --git a/cmd/unstake.go b/cmd/unstake.go index 271a1b79..312f1ea7 100644 --- a/cmd/unstake.go +++ b/cmd/unstake.go @@ -44,7 +44,7 @@ func (*UtilsStruct) ExecuteUnstake(flagSet *pflag.FlagSet) { config, err := cmdUtils.GetConfigData() utils.CheckError("Error in getting config: ", err) - password := razorUtils.AssignPassword() + password := razorUtils.AssignPassword(flagSet) client := razorUtils.ConnectToClient(config.Provider) @@ -148,12 +148,14 @@ func init() { var ( Address string AmountToUnStake string + Password string WeiRazor bool StakerId uint32 ) unstakeCmd.Flags().StringVarP(&Address, "address", "a", "", "user's address") unstakeCmd.Flags().StringVarP(&AmountToUnStake, "value", "v", "0", "value of sRazors to un-stake") + unstakeCmd.Flags().StringVarP(&Password, "password", "", "", "password path to protect the keystore") unstakeCmd.Flags().BoolVarP(&WeiRazor, "weiRazor", "", false, "value can be passed in wei") unstakeCmd.Flags().Uint32VarP(&StakerId, "stakerId", "", 0, "staker id") diff --git a/cmd/unstake_test.go b/cmd/unstake_test.go index 053db6db..c594cc62 100644 --- a/cmd/unstake_test.go +++ b/cmd/unstake_test.go @@ -317,7 +317,7 @@ func TestExecuteUnstake(t *testing.T) { utilsMock.On("AssignLogFile", mock.AnythingOfType("*pflag.FlagSet")) cmdUtilsMock.On("GetConfigData").Return(tt.args.config, tt.args.configErr) - utilsMock.On("AssignPassword").Return(tt.args.password) + utilsMock.On("AssignPassword", flagSet).Return(tt.args.password) flagSetUtilsMock.On("GetStringAddress", flagSet).Return(tt.args.address, tt.args.addressErr) utilsMock.On("ConnectToClient", mock.AnythingOfType("string")).Return(client) cmdUtilsMock.On("AssignAmountInWei", flagSet).Return(tt.args.value, tt.args.valueErr) diff --git a/cmd/updateCollection.go b/cmd/updateCollection.go index 28b1b8d0..b5bb61f8 100644 --- a/cmd/updateCollection.go +++ b/cmd/updateCollection.go @@ -43,7 +43,7 @@ func (*UtilsStruct) ExecuteUpdateCollection(flagSet *pflag.FlagSet) { config, err := cmdUtils.GetConfigData() utils.CheckError("Error in getting config: ", err) - password := razorUtils.AssignPassword() + password := razorUtils.AssignPassword(flagSet) collectionId, err := flagSetUtils.GetUint16CollectionId(flagSet) utils.CheckError("Error in getting collectionID: ", err) @@ -112,6 +112,7 @@ func init() { Account string CollectionId uint16 AggregationMethod uint32 + Password string Power int8 JobIds []uint Tolerance uint16 @@ -121,6 +122,7 @@ func init() { updateCollectionCmd.Flags().Uint16VarP(&CollectionId, "collectionId", "", 0, "collection id to be modified") updateCollectionCmd.Flags().Uint32VarP(&AggregationMethod, "aggregation", "", 1, "aggregation method to be used") updateCollectionCmd.Flags().Int8VarP(&Power, "power", "", 0, "multiplier for the collection") + updateCollectionCmd.Flags().StringVarP(&Password, "password", "", "", "password path of job creator to protect the keystore") updateCollectionCmd.Flags().UintSliceVarP(&JobIds, "jobIds", "", []uint{}, "job ids for the collection") updateCollectionCmd.Flags().Uint16VarP(&Tolerance, "tolerance", "", 0, "tolerance") diff --git a/cmd/updateCollection_test.go b/cmd/updateCollection_test.go index 31a420fb..a3d0b724 100644 --- a/cmd/updateCollection_test.go +++ b/cmd/updateCollection_test.go @@ -302,7 +302,7 @@ func TestExecuteUpdateCollection(t *testing.T) { utilsMock.On("AssignLogFile", mock.AnythingOfType("*pflag.FlagSet")) cmdUtilsMock.On("GetConfigData").Return(tt.args.config, tt.args.configErr) - utilsMock.On("AssignPassword").Return(tt.args.password) + utilsMock.On("AssignPassword", flagSet).Return(tt.args.password) flagsetUtilsMock.On("GetStringAddress", flagSet).Return(tt.args.address, tt.args.addressErr) flagsetUtilsMock.On("GetUint16CollectionId", flagSet).Return(tt.args.collectionId, tt.args.collectionIdErr) flagsetUtilsMock.On("GetUintSliceJobIds", flagSet).Return(tt.args.jobId, tt.args.jobIdErr) diff --git a/cmd/updateCommission.go b/cmd/updateCommission.go index 2c6fdf6a..f835be7a 100644 --- a/cmd/updateCommission.go +++ b/cmd/updateCommission.go @@ -41,7 +41,7 @@ func (*UtilsStruct) ExecuteUpdateCommission(flagSet *pflag.FlagSet) { utils.CheckError("Error in getting config", err) client := razorUtils.ConnectToClient(config.Provider) - password := razorUtils.AssignPassword() + password := razorUtils.AssignPassword(flagSet) commission, err := flagSetUtils.GetUint8Commission(flagSet) utils.CheckError("Error in getting commission", err) @@ -128,12 +128,14 @@ func init() { var ( Address string Commission uint8 + Password string ) rootCmd.AddCommand(updateCommissionCmd) updateCommissionCmd.Flags().StringVarP(&Address, "address", "a", "", "your account address") updateCommissionCmd.Flags().Uint8VarP(&Commission, "commission", "c", 0, "commission") + updateCommissionCmd.Flags().StringVarP(&Password, "password", "", "", "password path to protect the keystore") addrErr := updateCommissionCmd.MarkFlagRequired("address") utils.CheckError("Address error: ", addrErr) diff --git a/cmd/updateCommission_test.go b/cmd/updateCommission_test.go index 2f126ed8..c9095feb 100644 --- a/cmd/updateCommission_test.go +++ b/cmd/updateCommission_test.go @@ -356,7 +356,7 @@ func TestExecuteUpdateCommission(t *testing.T) { utilsMock.On("AssignLogFile", mock.AnythingOfType("*pflag.FlagSet")) cmdUtilsMock.On("GetConfigData").Return(tt.args.config, tt.args.configErr) flagsetUtilsMock.On("GetStringAddress", flagSet).Return(tt.args.address, tt.args.addressErr) - utilsMock.On("AssignPassword").Return(tt.args.password) + utilsMock.On("AssignPassword", flagSet).Return(tt.args.password) flagsetUtilsMock.On("GetUint8Commission", flagSet).Return(tt.args.commission, tt.args.commissionErr) utilsMock.On("GetStakerId", mock.AnythingOfType("*ethclient.Client"), mock.AnythingOfType("string")).Return(tt.args.stakerId, tt.args.stakerIdErr) utilsMock.On("ConnectToClient", mock.AnythingOfType("string")).Return(client) diff --git a/cmd/updateJob.go b/cmd/updateJob.go index cb63a264..3a0f7603 100644 --- a/cmd/updateJob.go +++ b/cmd/updateJob.go @@ -43,7 +43,7 @@ func (*UtilsStruct) ExecuteUpdateJob(flagSet *pflag.FlagSet) { config, err := cmdUtils.GetConfigData() utils.CheckError("Error in getting config: ", err) - password := razorUtils.AssignPassword() + password := razorUtils.AssignPassword(flagSet) jobId, err := flagSetUtils.GetUint16JobId(flagSet) utils.CheckError("Error in getting jobId: ", err) @@ -118,6 +118,7 @@ func init() { Power int8 Weight uint8 Account string + Password string ) updateJobCmd.Flags().Uint16VarP(&JobId, "jobId", "", 0, "job id") @@ -127,6 +128,7 @@ func init() { updateJobCmd.Flags().Int8VarP(&Power, "power", "", 0, "power") updateJobCmd.Flags().Uint8VarP(&Weight, "weight", "", 0, "weight") updateJobCmd.Flags().StringVarP(&Account, "address", "a", "", "address of the job creator") + updateJobCmd.Flags().StringVarP(&Password, "password", "", "", "password path of job creator to protect the keystore") jobIdErr := updateJobCmd.MarkFlagRequired("jobId") utils.CheckError("Job Id error: ", jobIdErr) diff --git a/cmd/updateJob_test.go b/cmd/updateJob_test.go index df6c7332..7292bcae 100644 --- a/cmd/updateJob_test.go +++ b/cmd/updateJob_test.go @@ -348,7 +348,7 @@ func TestExecuteUpdateJob(t *testing.T) { utilsMock.On("AssignLogFile", mock.AnythingOfType("*pflag.FlagSet")) cmdUtilsMock.On("GetConfigData").Return(tt.args.config, tt.args.configErr) - utilsMock.On("AssignPassword").Return(tt.args.password) + utilsMock.On("AssignPassword", flagSet).Return(tt.args.password) flagsetUtilsMock.On("GetStringAddress", flagSet).Return(tt.args.address, tt.args.addressErr) flagsetUtilsMock.On("GetStringUrl", flagSet).Return(tt.args.url, tt.args.urlErr) flagsetUtilsMock.On("GetStringSelector", flagSet).Return(tt.args.selector, tt.args.selectorErr) diff --git a/cmd/vote.go b/cmd/vote.go index b5bdeeab..31895f14 100644 --- a/cmd/vote.go +++ b/cmd/vote.go @@ -53,7 +53,7 @@ func (*UtilsStruct) ExecuteVote(flagSet *pflag.FlagSet) { config, err := cmdUtils.GetConfigData() utils.CheckError("Error in fetching config details: ", err) - password := razorUtils.AssignPassword() + password := razorUtils.AssignPassword(flagSet) isRogue, err := flagSetUtils.GetBoolRogue(flagSet) utils.CheckError("Error in getting rogue status: ", err) @@ -549,12 +549,14 @@ func init() { Address string Rogue bool RogueMode []string + Password string AutoClaimBounty bool ) voteCmd.Flags().StringVarP(&Address, "address", "a", "", "address of the staker") voteCmd.Flags().BoolVarP(&Rogue, "rogue", "r", false, "enable rogue mode to report wrong values") voteCmd.Flags().StringSliceVarP(&RogueMode, "rogueMode", "", []string{}, "type of rogue mode") + voteCmd.Flags().StringVarP(&Password, "password", "", "", "password path of the staker to protect the keystore") voteCmd.Flags().BoolVarP(&AutoClaimBounty, "autoClaimBounty", "", false, "auto claim bounty") addrErr := voteCmd.MarkFlagRequired("address") diff --git a/cmd/vote_test.go b/cmd/vote_test.go index e8c27fdb..42b38813 100644 --- a/cmd/vote_test.go +++ b/cmd/vote_test.go @@ -136,7 +136,7 @@ func TestExecuteVote(t *testing.T) { utilsMock.On("AssignLogFile", mock.AnythingOfType("*pflag.FlagSet")) cmdUtilsMock.On("GetConfigData").Return(tt.args.config, tt.args.configErr) - utilsMock.On("AssignPassword").Return(tt.args.password) + utilsMock.On("AssignPassword", flagSet).Return(tt.args.password) flagSetUtilsMock.On("GetStringAddress", mock.AnythingOfType("*pflag.FlagSet")).Return(tt.args.address, tt.args.addressErr) utilsMock.On("ConnectToClient", mock.AnythingOfType("string")).Return(client) flagSetUtilsMock.On("GetBoolRogue", mock.AnythingOfType("*pflag.FlagSet")).Return(tt.args.rogueStatus, tt.args.rogueErr) diff --git a/password.txt b/password.txt new file mode 100644 index 00000000..e69de29b diff --git a/utils/password.go b/utils/password.go index 5d1979a8..cade81b7 100644 --- a/utils/password.go +++ b/utils/password.go @@ -1,8 +1,11 @@ package utils import ( + "bufio" "errors" "github.com/manifoldco/promptui" + "github.com/spf13/pflag" + "os" "unicode" ) @@ -46,7 +49,31 @@ func validatePrivateKey(input string) error { return nil } -func AssignPassword() string { +func GetPasswordFromFile(path string) string { + file, err := os.Open(path) + if err != nil { + log.Fatal(err) + } + log.Info("Getting password from the first line of file at described location") + defer file.Close() + + scanner := bufio.NewScanner(file) + for scanner.Scan() { + return scanner.Text() + } + if err := scanner.Err(); err != nil { + log.Fatal(err) + } + return "" +} + +func AssignPassword(flagSet *pflag.FlagSet) string { + if UtilsInterface.IsFlagPassed("password") { + log.Warn("Password flag is passed") + log.Warn("This is a unsecure way to use razor-go") + passwordPath, _ := flagSet.GetString("password") + return GetPasswordFromFile(passwordPath) + } return PasswordPrompt() }