notify.moe/arn/ClientErrorReportAPI.go

56 lines
1.2 KiB
Go

package arn
import (
"errors"
"github.com/aerogo/aero"
"github.com/aerogo/api"
)
// Force interface implementations
var (
_ api.Newable = (*ClientErrorReport)(nil)
)
// Create sets the data for a new report with data we received from the API request.
func (report *ClientErrorReport) Create(ctx aero.Context) error {
data, err := ctx.Request().Body().JSONObject()
if err != nil {
return err
}
// Get user
user := GetUserFromContext(ctx)
// Create report
report.ID = GenerateID("ClientErrorReport")
report.Message = data["message"].(string)
report.Stack = data["stack"].(string)
report.FileName = data["fileName"].(string)
report.LineNumber = int(data["lineNumber"].(float64))
report.ColumnNumber = int(data["columnNumber"].(float64))
report.Created = DateTimeUTC()
if user != nil {
report.CreatedBy = user.ID
}
report.Save()
return nil
}
// Save saves the client error report in the database.
func (report *ClientErrorReport) Save() {
DB.Set("ClientErrorReport", report.ID, report)
}
// Authorize returns an error if the given API request is not authorized.
func (report *ClientErrorReport) Authorize(ctx aero.Context, action string) error {
if action == "create" {
return nil
}
return errors.New("Action " + action + " not allowed")
}