|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"encoding/json"
|
|
|
|
"net/http"
|
|
|
|
|
|
|
|
"github.com/bvinc/go-sqlite-lite/sqlite3"
|
|
|
|
"git.sporestack.com/SporeStack/settlers"
|
|
|
|
)
|
|
|
|
|
|
|
|
func subtract(token string, amount uint64, db *sqlite3.Conn) (userErr, err error) {
|
|
|
|
if userErr = settlers.ValidateToken(token); userErr != nil {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
// Check if account is enabled.
|
|
|
|
_, userErr, err = balance(token, db)
|
|
|
|
if userErr != nil || err != nil {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
// sqlite3 only supports signed integers
|
|
|
|
var signedAmount int64
|
|
|
|
signedAmount = int64(amount)
|
|
|
|
userErr = db.Exec("UPDATE balances SET balance = balance - ? WHERE combined_token = ?", signedAmount, token)
|
|
|
|
if userErr != nil {
|
|
|
|
userErr = settlers.ErrorInsufficientBalance
|
|
|
|
}
|
|
|
|
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
func httpSubtract(w http.ResponseWriter, r *http.Request, db *sqlite3.Conn) {
|
|
|
|
defer r.Body.Close()
|
|
|
|
|
|
|
|
var request settlers.SubtractRequest
|
|
|
|
decoder := json.NewDecoder(r.Body)
|
|
|
|
decoder.DisallowUnknownFields()
|
|
|
|
userErr := decoder.Decode(&request)
|
|
|
|
if userErr != nil {
|
|
|
|
httpHandle400(w, userErr)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
userErr, err := subtract(request.CombinedToken, request.Amount, db)
|
|
|
|
if userErr != nil {
|
|
|
|
httpHandle400(w, userErr)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
if err != nil {
|
|
|
|
httpHandle500(w, err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
return
|
|
|
|
}
|