| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- package errorhelpers
- import (
- "fmt"
- "errors"
- "git.mmnx.de/Moe/templatehelpers"
- "github.com/kataras/iris"
- )
- const (
- // Error levels
- ERR_NO_ERR = -1
- ERR_LVL_INFORMATION = 0
- ERR_LVL_WARNING = 1
- ERR_LVL_ERROR = 2
- ERR_LVL_FATAL = 3
- // User errors
- ERR_USER_NOT_FOUND = "ERR_USER_NOT_FOUND"
- ERR_PASSWORD_MISMATCH = "ERR_PASSWORD_MISMATCH"
- ERR_SESSION_TIMED_OUT = "ERR_SESSION_TIMED_OUT"
- ERR_INVALID_TOKEN = "ERR_INVALID_TOKEN"
- ERR_USERNAME_TAKEN = "ERR_USERNAME_TAKEN"
- ERR_INVALID_PARAM = "ERR_INVALID_PARAM"
- ERR_NO_CHANGES = "ERR_NO_CHANGES"
- SUCCESS_LOGIN = "SUCCESS_LOGIN"
- SUCCESS_LOGOUT = "SUCCESS_LOGOUT"
- SUCCESS_UPDATE = "SUCCESS_UPDATE"
- SUCCESS_REGISTER = "SUCCESS_REGISTER"
- SUCCESS_TOKENS_GENERATED = "SUCCESS_TOKENS_GENERATED"
- )
- type Error struct {
- err error
- errLvl int
- }
- func(err Error) getErrLvl() int {
- return err.errLvl
- }
- func(err Error) getError() error {
- return err.err
- }
- func MakeError(e interface{}) Error {
- if e == nil { // check if it's an error
- return Error{nil, ERR_NO_ERR}
- }
- var err error
- var logLvl int
- // test for input type
- if v, isError := e.(error); isError {
- err = v
- } else if v, isString := e.(string); isString {
- err = errors.New(v)
- } else {
- fmt.Printf("Error Type not implemented: %T", e)
- DebugVar(e)
- DebugVar(&e)
- }
- switch err.Error() { // TODO: starts with ?
- case SUCCESS_LOGIN, SUCCESS_LOGOUT, SUCCESS_TOKENS_GENERATED, SUCCESS_UPDATE, SUCCESS_REGISTER:
- logLvl = ERR_LVL_INFORMATION
- default:
- logLvl = ERR_LVL_ERROR
- }
- return Error{err, logLvl}
- }
- func DebugVar(v interface{}) {
- fmt.Printf("%#v\n", v)
- }
- func HandleError(e interface{}, ctx *iris.Context) {
- err := MakeError(e)
- params := ctx.Get("params").(map[string]string)
- if err.getError() == nil { // if no error ..., TODO clean this up
- if len(params["notification"]) < 1 { // if we got one, show a notification
- ctx.Next() // ... execute next middleware
- return
- } else {
- err = MakeError(params["notification"]) // copy so that we dont get a nil pointer later
- }
- }
- params["notification"] = err.getError().Error() // TODO human readable
- params["notificationType"] = fmt.Sprintf("%d", err.getErrLvl())
- /** Some errors need to be 'redirected' **/
- switch err.getError().Error() {
- case SUCCESS_LOGIN: // open home after login
- params["reqDir"] = "home"
- case SUCCESS_LOGOUT, ERR_SESSION_TIMED_OUT, ERR_INVALID_TOKEN:
- params["reqDir"] = "login"
- }
- ctx.Set("params", params)
- switch err.getErrLvl() {
- case ERR_LVL_INFORMATION:
- templatehelpers.ShowNotification(ctx) // TODO: information custom color
- case ERR_LVL_WARNING:
- templatehelpers.ShowError(ctx)
- case ERR_LVL_ERROR:
- templatehelpers.ShowError(ctx)
- default:
- fmt.Print("Not implemented yet: ")
- DebugVar(err)
- }
- }
|