X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=api%2Fapi.go;h=f9213018a5970052c1885afdf43ac4b4df9623ac;hb=4495b984d3e60874281f37cdb2dbe2cf1c3874ab;hp=7b7be49257a2949796b5435ccaddc6abd63893bf;hpb=7a9e5112eaaea58d55f181d3e5296e4ff839921c;p=perso%2FImmae%2FProjets%2FCryptomonnaies%2FCryptoportfolio%2FFront.git diff --git a/api/api.go b/api/api.go index 7b7be49..f921301 100644 --- a/api/api.go +++ b/api/api.go @@ -5,14 +5,69 @@ import ( "unicode" "github.com/gin-gonic/gin" + "github.com/jloup/utils" ) +var CONFIG Config +var MAIL_CONFIG MailConfig + +type MailConfig struct { + IsEnabled bool + SmtpAddress string `toml:"smtp_address"` + AddressFrom string `toml:"address_from"` + Login string `toml:"login"` + Password string `toml:"password"` +} + +type Config struct { + Domain string `toml:"domain"` + JwtSecret string `toml:"jwt_secret"` + PasswordResetSecret string `toml:"password_reset_secret"` + FreeSMSUser string `toml:"free_sms_user"` + FreeSMSPass string `toml:"free_sms_pass"` +} + +func SetConfig(config Config) { + CONFIG = config + + JWT_SECRET = []byte(config.JwtSecret) + PASSWORD_RESET_SECRET = []byte(config.PasswordResetSecret) +} + +func SetMailConfig(config MailConfig) { + MAIL_CONFIG = config + + if config.Login != "" && config.AddressFrom != "" && config.Password != "" && config.SmtpAddress != "" { + MAIL_CONFIG.IsEnabled = true + ConfigureMailTemplateEngine() + } +} + type Error struct { - Code ErrorCode + Code utils.Flag UserMessage string err error } +func (e Error) FlagString() string { + return e.Code.String() +} + +func (e Error) Flag() utils.Flag { + return e.Code +} + +func (e Error) Msg() string { + return e.UserMessage +} + +func (e Error) ErrorWithCode(f utils.Flag) utils.ErrorFlagged { + if utils.Intersect(e.Code, f) { + return e + } + + return nil +} func (e Error) Err() error { if e.err != nil { return e @@ -29,7 +84,22 @@ func (e Error) Error() string { return "" } +func ErrorIs(err error, code utils.Flag) bool { + if err == nil { + return false + } + + if apiError, ok := err.(*Error); !ok { + return false + } else { + return utils.Intersect(apiError.Code, code) && apiError.Code.String() == code.String() + } +} + func NewInternalError(err error) *Error { + if apiError, ok := err.(*Error); ok { + return apiError + } return &Error{InternalError, "internal error", err} } @@ -49,8 +119,8 @@ func ToSnake(in string) string { } type Response struct { - StatusCode Status `json:"-"` - ErrorCode ErrorCode `json:"-"` + StatusCode Status `json:"-"` + ErrorCode utils.Flag `json:"-"` Status string `json:"status"` Code string `json:"code,omitempty"` @@ -60,15 +130,12 @@ type Response struct { func (r Response) populateStatus() Response { r.Status = ToSnake(r.StatusCode.String()) - - if r.ErrorCode != 0 { - r.Code = ToSnake(r.ErrorCode.String()) - } + r.Code = ToSnake(r.ErrorCode.String()) return r } -func ErrorResponse(code ErrorCode, message string) Response { +func ErrorResponse(code utils.Flag, message string) Response { return Response{ StatusCode: NOK, ErrorCode: code, @@ -100,7 +167,7 @@ func M(handler Middleware) gin.HandlerFunc { err := handler(c) if err != nil { - WriteJsonResponse(ErrorResponse(err.Code, err.UserMessage), c) + WriteJsonResponse(ErrorResponse(err.Flag(), err.UserMessage), c) c.Error(err) c.Abort() } else { @@ -116,13 +183,13 @@ type Query interface { func RunQuery(query Query, c *gin.Context) { if err := query.ValidateParams(); err != nil { - WriteJsonResponse(ErrorResponse(err.Code, err.UserMessage), c) + WriteJsonResponse(ErrorResponse(err.Flag(), err.UserMessage), c) c.Error(err) return } if out, err := query.Run(); err != nil { - WriteJsonResponse(ErrorResponse(err.Code, err.UserMessage), c) + WriteJsonResponse(ErrorResponse(err.Flag(), err.UserMessage), c) c.Error(err) } else { WriteJsonResponse(SuccessResponse(out), c)