Also: - General code refactoring - Allow banned/restricted users to see their scores etc - common.MethodData now contains UserPrivileges - UserPrivileges have now their own type - Implement md.HasQuery, to know if there's a GET querystring parameter or not
50 lines
1.2 KiB
Go
50 lines
1.2 KiB
Go
package common
|
|
|
|
import (
|
|
"encoding/json"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/jmoiron/sqlx"
|
|
)
|
|
|
|
// MethodData is a struct containing the data passed over to an API method.
|
|
type MethodData struct {
|
|
User Token
|
|
DB *sqlx.DB
|
|
RequestData RequestData
|
|
C *gin.Context
|
|
}
|
|
|
|
// Err logs an error into gin.
|
|
func (md MethodData) Err(err error) {
|
|
md.C.Error(err)
|
|
}
|
|
|
|
// ID retrieves the Token's owner user ID.
|
|
func (md MethodData) ID() int {
|
|
return md.User.UserID
|
|
}
|
|
|
|
// Query is shorthand for md.C.Query.
|
|
func (md MethodData) Query(q string) string {
|
|
return md.C.Query(q)
|
|
}
|
|
|
|
// HasQuery returns true if the parameter is encountered in the querystring.
|
|
// It returns true even if the parameter is "" (the case of ?param&etc=etc)
|
|
func (md MethodData) HasQuery(q string) bool {
|
|
_, has := md.C.GetQuery(q)
|
|
return has
|
|
}
|
|
|
|
// RequestData is the body of a request. It is wrapped into this type
|
|
// to implement the Unmarshal function, which is just a shorthand to
|
|
// json.Unmarshal.
|
|
type RequestData []byte
|
|
|
|
// Unmarshal json-decodes Requestdata into a value. Basically a
|
|
// shorthand to json.Unmarshal.
|
|
func (r RequestData) Unmarshal(into interface{}) error {
|
|
return json.Unmarshal([]byte(r), into)
|
|
}
|