Files

183 lines
4.2 KiB
Go

package common
import (
"fmt"
"net/http"
)
func NewError(message string, status int) AppError {
if status == 0 {
status = 500
}
return AppError{message, status}
}
var (
ErrNotFound = NewError("Not Found", 404)
ErrNotAllowed = NewError("Not Allowed", 403)
ErrPermissionDenied = NewError("Permission Denied", 403)
ErrNotValid = NewError("Not Valid", 405)
ErrConflict = NewError("Already exist", 409)
ErrNotReachable = NewError("Cannot establish a connection", 502)
ErrInvalidPassword = NewError("Invalid Password", 403)
ErrNotImplemented = NewError("Not Implemented", 501)
ErrNotSupported = NewError("Not supported", 501)
ErrFilesystemError = NewError("Can't use filesystem", 503)
ErrMissingDependency = NewError("Missing dependency", 424)
ErrNotAuthorized = NewError("Not authorised", 401)
ErrAuthenticationFailed = NewError("Invalid account", 400)
ErrCongestion = NewError("Traffic congestion, try again later", 500)
ErrTimeout = NewError("Timeout", 500)
ErrInternal = NewError("Internal Error", 500)
)
func IsATranslatedError(err error) bool {
if err == ErrNotFound || err == ErrNotAllowed || err == ErrPermissionDenied ||
err == ErrNotValid || err == ErrInvalidPassword || err == ErrNotImplemented ||
err == ErrNotSupported || err == ErrFilesystemError || err == ErrMissingDependency ||
err == ErrNotAuthorized || err == ErrAuthenticationFailed || err == ErrCongestion ||
err == ErrTimeout || err == ErrInternal {
return true
}
return false
}
type AppError struct {
message string
status int
}
func (e AppError) Error() string {
return fmt.Sprintf("%s", e.message)
}
func (e AppError) Status() int {
return e.status
}
func HTTPError(err error) AppError {
switch err.Error() {
case "Not Found":
return ErrNotFound
case "Not Allowed":
return ErrNotAllowed
case "Permission Denied":
return ErrPermissionDenied
case "Not Valid":
return ErrNotValid
case "Already exist":
return ErrConflict
case "Cannot establish a connection":
return ErrNotReachable
case "Invalid Password":
return ErrInvalidPassword
case "Not Implemented":
return ErrNotImplemented
case "Not supported":
return ErrNotSupported
case "Can't use filesystem":
return ErrFilesystemError
case "Missing dependency":
return ErrMissingDependency
case "Not authorised":
return ErrNotAuthorized
case "Invalid account":
return ErrAuthenticationFailed
case "Traffic congestion, try again later":
return ErrCongestion
case "Timeout":
return ErrTimeout
case "Internal Error":
return ErrInternal
default:
return NewError(err.Error(), http.StatusBadRequest)
}
}
func HTTPFriendlyStatus(n int) string {
if n < 400 && n > 600 {
return "Humm"
}
switch n {
case 400:
return "Bad Request"
case 401:
return "Unauthorized"
case 402:
return "Payment Required"
case 403:
return "Forbidden"
case 404:
return "Not Found"
case 405:
return "Not Allowed"
case 406:
return "Not Acceptable"
case 407:
return "Authentication Required"
case 408:
return "Timeout"
case 409:
return "Conflict"
case 410:
return "Gone"
case 411:
return "Length Required"
case 412:
return "Failed"
case 413:
return "Too Large"
case 414:
return "URI Too Long"
case 415:
return "Unsupported Media"
case 416:
return "Not Like This"
case 417:
return "Unexpected"
case 418:
return "I'm a teapot"
case 421:
return "Redirection Problem"
case 422:
return "Unprocessable"
case 423:
return "Locked"
case 424:
return "Failed Dependency"
case 426:
return "Upgrade Required"
case 428:
return "Need Something"
case 429:
return "Too Many Requests"
case 431:
return "Request Too Large"
case 451:
return "Not Available"
case 500:
return "Internal Server Error"
case 501:
return "Not Implemented"
case 502:
return "Bad Gateway"
case 503:
return "Service Unavailable"
case 504:
return "Gateway Timeout"
case 505:
return "Unsupported HTTP Version"
case 506:
return "Need To Negotiate"
case 507:
return "Insufficient Storage"
case 508:
return "Loop Detected"
case 510:
return "Not Extended"
case 511:
return "Authentication Required"
default:
return "Oops"
}
}