surrealpatch/web/err.go
2016-09-14 22:33:09 +01:00

143 lines
4.3 KiB
Go

// Copyright © 2016 Abcum Ltd
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package web
import (
"github.com/abcum/fibre"
"github.com/abcum/surreal/kvs"
"github.com/abcum/surreal/sql"
)
func errors(err error, c *fibre.Context) {
var code int
var text string
var info map[string]interface{}
switch e := err.(type) {
default:
code = 400
case *kvs.DBError:
code, text = 503, e.Error()
case *kvs.TXError:
code, text = 500, e.Error()
case *kvs.KVError:
code, text = 409, e.Error()
case *kvs.CKError:
code, text = 403, e.Error()
case *sql.ParseError:
code, text = 400, e.Error()
case *fibre.HTTPError:
code = e.Code()
}
if _, ok := errs[code]; !ok {
code = 500
}
info = errs[code]
if text != "" {
info["information"] = text
}
c.Send(code, info)
}
var errs = map[int]map[string]interface{}{
200: map[string]interface{}{
"code": 200,
"details": "Information",
"documentation": "https://docs.surreal.io/",
"information": "Visit the documentation for details on accessing the api.",
},
400: map[string]interface{}{
"code": 400,
"details": "Request problems detected",
"documentation": "https://docs.surreal.io/",
"information": "There is a problem with your request. Ensure that the request is valid.",
},
401: map[string]interface{}{
"code": 401,
"details": "Authentication failed",
"documentation": "https://docs.surreal.io/",
"information": "Your authentication details are invalid. Reauthenticate using a valid token.",
},
403: map[string]interface{}{
"code": 403,
"details": "Request resource forbidden",
"documentation": "https://docs.surreal.io/",
"information": "Your request was forbidden. Perhaps you don't have the necessary permissions to access this resource.",
},
404: map[string]interface{}{
"code": 404,
"details": "Request resource not found",
"documentation": "https://docs.surreal.io/",
"information": "The requested resource does not exist. Check that you have entered the url correctly.",
},
405: map[string]interface{}{
"code": 405,
"details": "This method is not allowed",
"documentation": "https://docs.surreal.io/",
"information": "The requested http method is not allowed for this resource. Refer to the documentation for allowed methods.",
},
409: map[string]interface{}{
"code": 409,
"details": "Request conflict detected",
"documentation": "https://docs.surreal.io/",
"information": "The request could not be processed because of a conflict in the request.",
},
413: map[string]interface{}{
"code": 413,
"details": "Request content length too large",
"documentation": "https://docs.surreal.io/",
"information": "All requests to the database must not exceed the predefined content length.",
},
415: map[string]interface{}{
"code": 415,
"details": "Unsupported content type requested",
"documentation": "https://docs.surreal.io/",
"information": "The request needs to adhere to certain constraints. Check your request settings and try again.",
},
422: map[string]interface{}{
"code": 422,
"details": "Request problems detected",
"documentation": "https://docs.surreal.io/",
"information": "There is a problem with your request. The request appears to contain invalid data.",
},
426: map[string]interface{}{
"code": 426,
"details": "Upgrade required",
"documentation": "https://docs.surreal.io/",
"information": "There is a problem with your request. The request is expected to upgrade to a websocket connection.",
},
500: map[string]interface{}{
"code": 500,
"details": "There was a problem with our servers, and we have been notified",
"documentation": "https://docs.surreal.io/",
},
}