Upcoming changes constitute breaking public API changes to both the client and types modules, therefore this bumps the version numbers of both modules and adds local replacements to go.mod files such that the new versions can be used before they are publicly tagged.
63 lines
1.8 KiB
Go
63 lines
1.8 KiB
Go
// Copyright (c) 2020-2024 The Decred developers
|
|
// Use of this source code is governed by an ISC
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package webapi
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/decred/vspd/database"
|
|
"github.com/decred/vspd/types/v3"
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/gin-gonic/gin/binding"
|
|
)
|
|
|
|
// ticketStatus is the handler for "POST /api/v3/ticketstatus".
|
|
func (w *WebAPI) ticketStatus(c *gin.Context) {
|
|
const funcName = "ticketStatus"
|
|
|
|
// Get values which have been added to context by middleware.
|
|
ticket := c.MustGet(ticketKey).(database.Ticket)
|
|
knownTicket := c.MustGet(knownTicketKey).(bool)
|
|
reqBytes := c.MustGet(requestBytesKey).([]byte)
|
|
|
|
if !knownTicket {
|
|
w.log.Warnf("%s: Unknown ticket (clientIP=%s)", funcName, c.ClientIP())
|
|
w.sendError(types.ErrUnknownTicket, c)
|
|
return
|
|
}
|
|
|
|
var request types.TicketStatusRequest
|
|
if err := binding.JSON.BindBody(reqBytes, &request); err != nil {
|
|
w.log.Warnf("%s: Bad request (clientIP=%s): %v", funcName, c.ClientIP(), err)
|
|
w.sendErrorWithMsg(err.Error(), types.ErrBadRequest, c)
|
|
return
|
|
}
|
|
|
|
// Get altSignAddress from database
|
|
altSignAddrData, err := w.db.AltSignAddrData(ticket.Hash)
|
|
if err != nil {
|
|
w.log.Errorf("%s: db.AltSignAddrData error (ticketHash=%s): %v", funcName, ticket.Hash, err)
|
|
w.sendError(types.ErrInternalError, c)
|
|
return
|
|
}
|
|
|
|
altSignAddr := ""
|
|
if altSignAddrData != nil {
|
|
altSignAddr = altSignAddrData.AltSignAddr
|
|
}
|
|
|
|
w.sendJSONResponse(types.TicketStatusResponse{
|
|
Timestamp: time.Now().Unix(),
|
|
Request: reqBytes,
|
|
TicketConfirmed: ticket.Confirmed,
|
|
FeeTxStatus: string(ticket.FeeTxStatus),
|
|
FeeTxHash: ticket.FeeTxHash,
|
|
AltSignAddress: altSignAddr,
|
|
VoteChoices: ticket.VoteChoices,
|
|
TreasuryPolicy: ticket.TreasuryPolicy,
|
|
TSpendPolicy: ticket.TSpendPolicy,
|
|
}, c)
|
|
}
|