github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/slashing/client/rest/tx.go (about) 1 package rest 2 3 import ( 4 "bytes" 5 "net/http" 6 7 "github.com/gorilla/mux" 8 9 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/client/context" 10 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 11 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types/rest" 12 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/auth/client/utils" 13 "github.com/fibonacci-chain/fbc/x/slashing/internal/types" 14 ) 15 16 func registerTxRoutes(cliCtx context.CLIContext, r *mux.Router) { 17 r.HandleFunc( 18 "/slashing/validators/{validatorAddr}/unjail", 19 unjailRequestHandlerFn(cliCtx), 20 ).Methods("POST") 21 } 22 23 // Unjail TX body 24 type UnjailReq struct { 25 BaseReq rest.BaseReq `json:"base_req" yaml:"base_req"` 26 } 27 28 func unjailRequestHandlerFn(cliCtx context.CLIContext) http.HandlerFunc { 29 return func(w http.ResponseWriter, r *http.Request) { 30 vars := mux.Vars(r) 31 32 bech32validator := vars["validatorAddr"] 33 34 var req UnjailReq 35 if !rest.ReadRESTReq(w, r, cliCtx.Codec, &req) { 36 return 37 } 38 39 req.BaseReq = req.BaseReq.Sanitize() 40 if !req.BaseReq.ValidateBasic(w) { 41 return 42 } 43 44 valAddr, err := sdk.ValAddressFromBech32(bech32validator) 45 if err != nil { 46 rest.WriteErrorResponse(w, http.StatusInternalServerError, err.Error()) 47 return 48 } 49 50 fromAddr, err := sdk.AccAddressFromBech32(req.BaseReq.From) 51 if err != nil { 52 rest.WriteErrorResponse(w, http.StatusBadRequest, err.Error()) 53 return 54 } 55 56 if !bytes.Equal(fromAddr, valAddr) { 57 rest.WriteErrorResponse(w, http.StatusUnauthorized, "must use own validator address") 58 return 59 } 60 61 msg := types.NewMsgUnjail(valAddr) 62 err = msg.ValidateBasic() 63 if err != nil { 64 rest.WriteErrorResponse(w, http.StatusBadRequest, err.Error()) 65 return 66 } 67 68 utils.WriteGenerateStdTxResponse(w, cliCtx, req.BaseReq, []sdk.Msg{msg}) 69 } 70 }