diff --git a/webapi/admin.go b/webapi/admin.go index 0e43989..1e14b34 100644 --- a/webapi/admin.go +++ b/webapi/admin.go @@ -47,11 +47,11 @@ type searchResult struct { } func dcrdStatus(c *gin.Context) DcrdStatus { - hostname := c.MustGet("DcrdHostname").(string) + hostname := c.MustGet(dcrdHostKey).(string) status := DcrdStatus{Host: hostname} - dcrdClient := c.MustGet("DcrdClient").(*rpc.DcrdRPC) - dcrdErr := c.MustGet("DcrdClientErr") + dcrdClient := c.MustGet(dcrdKey).(*rpc.DcrdRPC) + dcrdErr := c.MustGet(dcrdErrorKey) if dcrdErr != nil { log.Errorf("could not get dcrd client: %v", dcrdErr.(error)) return status @@ -72,8 +72,8 @@ func dcrdStatus(c *gin.Context) DcrdStatus { } func walletStatus(c *gin.Context) map[string]WalletStatus { - walletClients := c.MustGet("WalletClients").([]*rpc.WalletRPC) - failedWalletClients := c.MustGet("FailedWalletClients").([]string) + walletClients := c.MustGet(walletsKey).([]*rpc.WalletRPC) + failedWalletClients := c.MustGet(failedWalletsKey).([]string) walletStatus := make(map[string]WalletStatus) for _, v := range walletClients { @@ -236,7 +236,7 @@ func downloadDatabaseBackup(c *gin.Context) { // setAdminStatus stores the authentication status of the current session and // redirects the client to GET /admin. func setAdminStatus(admin interface{}, c *gin.Context) { - session := c.MustGet("session").(*sessions.Session) + session := c.MustGet(sessionKey).(*sessions.Session) session.Values["admin"] = admin err := session.Save(c.Request, c.Writer) if err != nil { diff --git a/webapi/getfeeaddress.go b/webapi/getfeeaddress.go index af17703..45e8395 100644 --- a/webapi/getfeeaddress.go +++ b/webapi/getfeeaddress.go @@ -72,17 +72,17 @@ func feeAddress(c *gin.Context) { const funcName = "feeAddress" // Get values which have been added to context by middleware. - ticket := c.MustGet("Ticket").(database.Ticket) - knownTicket := c.MustGet("KnownTicket").(bool) - commitmentAddress := c.MustGet("CommitmentAddress").(string) - dcrdClient := c.MustGet("DcrdClient").(*rpc.DcrdRPC) - dcrdErr := c.MustGet("DcrdClientErr") + ticket := c.MustGet(ticketKey).(database.Ticket) + knownTicket := c.MustGet(knownTicketKey).(bool) + commitmentAddress := c.MustGet(commitmentAddressKey).(string) + dcrdClient := c.MustGet(dcrdKey).(*rpc.DcrdRPC) + dcrdErr := c.MustGet(dcrdErrorKey) if dcrdErr != nil { log.Errorf("%s: could not get dcrd client: %v", funcName, dcrdErr.(error)) sendError(errInternalError, c) return } - reqBytes := c.MustGet("RequestBytes").([]byte) + reqBytes := c.MustGet(requestBytesKey).([]byte) if cfg.VspClosed { sendError(errVspClosed, c) diff --git a/webapi/middleware.go b/webapi/middleware.go index 70af66b..a860788 100644 --- a/webapi/middleware.go +++ b/webapi/middleware.go @@ -49,7 +49,7 @@ func withSession(store *sessions.CookieStore) gin.HandlerFunc { } } - c.Set("session", session) + c.Set(sessionKey, session) } } @@ -57,7 +57,7 @@ func withSession(store *sessions.CookieStore) gin.HandlerFunc { // authenticated as an admin, otherwise it will render the login template. func requireAdmin() gin.HandlerFunc { return func(c *gin.Context) { - session := c.MustGet("session").(*sessions.Session) + session := c.MustGet(sessionKey).(*sessions.Session) admin := session.Values["admin"] if admin == nil { @@ -78,9 +78,9 @@ func withDcrdClient(dcrd rpc.DcrdConnect) gin.HandlerFunc { client, hostname, err := dcrd.Client(c, cfg.NetParams) // Don't handle the error here, add it to the context and let downstream // handlers decide what to do with it. - c.Set("DcrdClient", client) - c.Set("DcrdHostname", hostname) - c.Set("DcrdClientErr", err) + c.Set(dcrdKey, client) + c.Set(dcrdHostKey, hostname) + c.Set(dcrdErrorKey, err) } } @@ -96,8 +96,8 @@ func withWalletClients(wallets rpc.WalletConnect) gin.HandlerFunc { log.Errorf("Failed to connect to %d wallet(s), proceeding with only %d", len(failedConnections), len(clients)) } - c.Set("WalletClients", clients) - c.Set("FailedWalletClients", failedConnections) + c.Set(walletsKey, clients) + c.Set(failedWalletsKey, failedConnections) } } @@ -176,8 +176,8 @@ func broadcastTicket() gin.HandlerFunc { parentHash := parentTx.TxHash() // Check if local dcrd already knows the parent tx. - dcrdClient := c.MustGet("DcrdClient").(*rpc.DcrdRPC) - dcrdErr := c.MustGet("DcrdClientErr") + dcrdClient := c.MustGet(dcrdKey).(*rpc.DcrdRPC) + dcrdErr := c.MustGet(dcrdErrorKey) if dcrdErr != nil { log.Errorf("%s: could not get dcrd client: %v", funcName, dcrdErr.(error)) sendError(errInternalError, c) @@ -273,7 +273,7 @@ func vspAuth() gin.HandlerFunc { // Add request bytes to request context for downstream handlers to reuse. // Necessary because the request body reader can only be used once. - c.Set("RequestBytes", reqBytes) + c.Set(requestBytesKey, reqBytes) // Parse request and ensure there is a ticket hash included. var request struct { @@ -316,8 +316,8 @@ func vspAuth() gin.HandlerFunc { if ticketFound { commitmentAddress = ticket.CommitmentAddress } else { - dcrdClient := c.MustGet("DcrdClient").(*rpc.DcrdRPC) - dcrdErr := c.MustGet("DcrdClientErr") + dcrdClient := c.MustGet(dcrdKey).(*rpc.DcrdRPC) + dcrdErr := c.MustGet(dcrdErrorKey) if dcrdErr != nil { log.Errorf("%s: could not get dcrd client: %v", funcName, dcrdErr.(error)) sendError(errInternalError, c) @@ -378,9 +378,9 @@ func vspAuth() gin.HandlerFunc { // Add ticket information to context so downstream handlers don't need // to access the db for it. - c.Set("Ticket", ticket) - c.Set("KnownTicket", ticketFound) - c.Set("CommitmentAddress", commitmentAddress) + c.Set(ticketKey, ticket) + c.Set(knownTicketKey, ticketFound) + c.Set(commitmentAddressKey, commitmentAddress) } } diff --git a/webapi/payfee.go b/webapi/payfee.go index 8acf90c..68d1b16 100644 --- a/webapi/payfee.go +++ b/webapi/payfee.go @@ -24,16 +24,16 @@ func payFee(c *gin.Context) { const funcName = "payFee" // Get values which have been added to context by middleware. - ticket := c.MustGet("Ticket").(database.Ticket) - knownTicket := c.MustGet("KnownTicket").(bool) - dcrdClient := c.MustGet("DcrdClient").(*rpc.DcrdRPC) - dcrdErr := c.MustGet("DcrdClientErr") + ticket := c.MustGet(ticketKey).(database.Ticket) + knownTicket := c.MustGet(knownTicketKey).(bool) + dcrdClient := c.MustGet(dcrdKey).(*rpc.DcrdRPC) + dcrdErr := c.MustGet(dcrdErrorKey) if dcrdErr != nil { log.Errorf("%s: could not get dcrd client: %v", funcName, dcrdErr.(error)) sendError(errInternalError, c) return } - reqBytes := c.MustGet("RequestBytes").([]byte) + reqBytes := c.MustGet(requestBytesKey).([]byte) if cfg.VspClosed { sendError(errVspClosed, c) diff --git a/webapi/setaltsig.go b/webapi/setaltsig.go index 36b3af0..cd9a6b5 100644 --- a/webapi/setaltsig.go +++ b/webapi/setaltsig.go @@ -31,14 +31,14 @@ func setAltSig(c *gin.Context) { const funcName = "setAltSig" // Get values which have been added to context by middleware. - dcrdClient := c.MustGet("DcrdClient").(Node) - dcrdErr := c.MustGet("DcrdClientErr") + dcrdClient := c.MustGet(dcrdKey).(Node) + dcrdErr := c.MustGet(dcrdErrorKey) if dcrdErr != nil { log.Errorf("%s: could not get dcrd client: %v", funcName, dcrdErr.(error)) sendError(errInternalError, c) return } - reqBytes := c.MustGet("RequestBytes").([]byte) + reqBytes := c.MustGet(requestBytesKey).([]byte) if cfg.VspClosed { sendError(errVspClosed, c) diff --git a/webapi/setaltsig_test.go b/webapi/setaltsig_test.go index 591315e..83bffa3 100644 --- a/webapi/setaltsig_test.go +++ b/webapi/setaltsig_test.go @@ -220,9 +220,9 @@ func TestSetAltSig(t *testing.T) { } handle := func(c *gin.Context) { - c.Set("DcrdClient", tNode) - c.Set("DcrdClientErr", dcrdErr) - c.Set("RequestBytes", b[test.deformReq:]) + c.Set(dcrdKey, tNode) + c.Set(dcrdErrorKey, dcrdErr) + c.Set(requestBytesKey, b[test.deformReq:]) setAltSig(c) } diff --git a/webapi/setvotechoices.go b/webapi/setvotechoices.go index 20d42a8..1e78aa8 100644 --- a/webapi/setvotechoices.go +++ b/webapi/setvotechoices.go @@ -20,10 +20,10 @@ func setVoteChoices(c *gin.Context) { const funcName = "setVoteChoices" // Get values which have been added to context by middleware. - ticket := c.MustGet("Ticket").(database.Ticket) - knownTicket := c.MustGet("KnownTicket").(bool) - walletClients := c.MustGet("WalletClients").([]*rpc.WalletRPC) - reqBytes := c.MustGet("RequestBytes").([]byte) + ticket := c.MustGet(ticketKey).(database.Ticket) + knownTicket := c.MustGet(knownTicketKey).(bool) + walletClients := c.MustGet(walletsKey).([]*rpc.WalletRPC) + reqBytes := c.MustGet(requestBytesKey).([]byte) // If we cannot set the vote choices on at least one voting wallet right // now, don't update the database, just return an error. diff --git a/webapi/ticketstatus.go b/webapi/ticketstatus.go index 7840a2c..d96f0ff 100644 --- a/webapi/ticketstatus.go +++ b/webapi/ticketstatus.go @@ -17,9 +17,9 @@ func ticketStatus(c *gin.Context) { const funcName = "ticketStatus" // Get values which have been added to context by middleware. - ticket := c.MustGet("Ticket").(database.Ticket) - knownTicket := c.MustGet("KnownTicket").(bool) - reqBytes := c.MustGet("RequestBytes").([]byte) + ticket := c.MustGet(ticketKey).(database.Ticket) + knownTicket := c.MustGet(knownTicketKey).(bool) + reqBytes := c.MustGet(requestBytesKey).([]byte) if !knownTicket { log.Warnf("%s: Unknown ticket (clientIP=%s)", funcName, c.ClientIP()) diff --git a/webapi/webapi.go b/webapi/webapi.go index c2780cc..6d25af0 100644 --- a/webapi/webapi.go +++ b/webapi/webapi.go @@ -49,6 +49,20 @@ const ( feeAddressExpiration = 1 * time.Hour ) +// Hard-coded keys used for storing values in the web context. +const ( + sessionKey = "Session" + dcrdKey = "DcrdClient" + dcrdHostKey = "DcrdHostname" + dcrdErrorKey = "DcrdClientErr" + walletsKey = "WalletClients" + failedWalletsKey = "FailedWalletClients" + requestBytesKey = "RequestBytes" + ticketKey = "Ticket" + knownTicketKey = "KnownTicket" + commitmentAddressKey = "CommitmentAddress" +) + var cfg Config var db *database.VspDatabase var addrGen *addressGenerator